// Copyright 2014 The Bazel Authors. All rights reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//    http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
//
// This file contains the protocol buffer representation of a build
// file or 'blaze query --output=proto' call.

// Code generated by protoc-gen-go. DO NOT EDIT.
// versions:
// 	protoc-gen-go v1.28.0
// 	protoc        v3.21.3
// source: src/main/protobuf/build.proto

package build

import (
	protoreflect "google.golang.org/protobuf/reflect/protoreflect"
	protoimpl "google.golang.org/protobuf/runtime/protoimpl"
	reflect "reflect"
	sync "sync"
)

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

// Indicates what to do when a source file is actually a symlink.
type FilesetEntry_SymlinkBehavior int32

const (
	FilesetEntry_COPY        FilesetEntry_SymlinkBehavior = 1
	FilesetEntry_DEREFERENCE FilesetEntry_SymlinkBehavior = 2
)

// Enum value maps for FilesetEntry_SymlinkBehavior.
var (
	FilesetEntry_SymlinkBehavior_name = map[int32]string{
		1: "COPY",
		2: "DEREFERENCE",
	}
	FilesetEntry_SymlinkBehavior_value = map[string]int32{
		"COPY":        1,
		"DEREFERENCE": 2,
	}
)

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

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

func (FilesetEntry_SymlinkBehavior) Descriptor() protoreflect.EnumDescriptor {
	return file_src_main_protobuf_build_proto_enumTypes[0].Descriptor()
}

func (FilesetEntry_SymlinkBehavior) Type() protoreflect.EnumType {
	return &file_src_main_protobuf_build_proto_enumTypes[0]
}

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

// Deprecated: Do not use.
func (x *FilesetEntry_SymlinkBehavior) UnmarshalJSON(b []byte) error {
	num, err := protoimpl.X.UnmarshalJSONEnum(x.Descriptor(), b)
	if err != nil {
		return err
	}
	*x = FilesetEntry_SymlinkBehavior(num)
	return nil
}

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

// Indicates the type of attribute.
type Attribute_Discriminator int32

const (
	Attribute_INTEGER                      Attribute_Discriminator = 1  // int_value
	Attribute_STRING                       Attribute_Discriminator = 2  // string_value
	Attribute_LABEL                        Attribute_Discriminator = 3  // string_value
	Attribute_OUTPUT                       Attribute_Discriminator = 4  // string_value
	Attribute_STRING_LIST                  Attribute_Discriminator = 5  // string_list_value
	Attribute_LABEL_LIST                   Attribute_Discriminator = 6  // string_list_value
	Attribute_OUTPUT_LIST                  Attribute_Discriminator = 7  // string_list_value
	Attribute_DISTRIBUTION_SET             Attribute_Discriminator = 8  // string_list_value - order is unimportant
	Attribute_LICENSE                      Attribute_Discriminator = 9  // license
	Attribute_STRING_DICT                  Attribute_Discriminator = 10 // string_dict_value
	Attribute_FILESET_ENTRY_LIST           Attribute_Discriminator = 11 // fileset_list_value
	Attribute_LABEL_LIST_DICT              Attribute_Discriminator = 12 // label_list_dict_value
	Attribute_STRING_LIST_DICT             Attribute_Discriminator = 13 // string_list_dict_value
	Attribute_BOOLEAN                      Attribute_Discriminator = 14 // int, bool and string value
	Attribute_TRISTATE                     Attribute_Discriminator = 15 // tristate, int and string value
	Attribute_INTEGER_LIST                 Attribute_Discriminator = 16 // int_list_value
	Attribute_UNKNOWN                      Attribute_Discriminator = 18 // unknown type, use only for build extensions
	Attribute_LABEL_DICT_UNARY             Attribute_Discriminator = 19 // label_dict_unary_value
	Attribute_SELECTOR_LIST                Attribute_Discriminator = 20 // selector_list
	Attribute_LABEL_KEYED_STRING_DICT      Attribute_Discriminator = 21 // label_keyed_string_dict
	Attribute_DEPRECATED_STRING_DICT_UNARY Attribute_Discriminator = 17
)

// Enum value maps for Attribute_Discriminator.
var (
	Attribute_Discriminator_name = map[int32]string{
		1:  "INTEGER",
		2:  "STRING",
		3:  "LABEL",
		4:  "OUTPUT",
		5:  "STRING_LIST",
		6:  "LABEL_LIST",
		7:  "OUTPUT_LIST",
		8:  "DISTRIBUTION_SET",
		9:  "LICENSE",
		10: "STRING_DICT",
		11: "FILESET_ENTRY_LIST",
		12: "LABEL_LIST_DICT",
		13: "STRING_LIST_DICT",
		14: "BOOLEAN",
		15: "TRISTATE",
		16: "INTEGER_LIST",
		18: "UNKNOWN",
		19: "LABEL_DICT_UNARY",
		20: "SELECTOR_LIST",
		21: "LABEL_KEYED_STRING_DICT",
		17: "DEPRECATED_STRING_DICT_UNARY",
	}
	Attribute_Discriminator_value = map[string]int32{
		"INTEGER":                      1,
		"STRING":                       2,
		"LABEL":                        3,
		"OUTPUT":                       4,
		"STRING_LIST":                  5,
		"LABEL_LIST":                   6,
		"OUTPUT_LIST":                  7,
		"DISTRIBUTION_SET":             8,
		"LICENSE":                      9,
		"STRING_DICT":                  10,
		"FILESET_ENTRY_LIST":           11,
		"LABEL_LIST_DICT":              12,
		"STRING_LIST_DICT":             13,
		"BOOLEAN":                      14,
		"TRISTATE":                     15,
		"INTEGER_LIST":                 16,
		"UNKNOWN":                      18,
		"LABEL_DICT_UNARY":             19,
		"SELECTOR_LIST":                20,
		"LABEL_KEYED_STRING_DICT":      21,
		"DEPRECATED_STRING_DICT_UNARY": 17,
	}
)

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

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

func (Attribute_Discriminator) Descriptor() protoreflect.EnumDescriptor {
	return file_src_main_protobuf_build_proto_enumTypes[1].Descriptor()
}

func (Attribute_Discriminator) Type() protoreflect.EnumType {
	return &file_src_main_protobuf_build_proto_enumTypes[1]
}

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

// Deprecated: Do not use.
func (x *Attribute_Discriminator) UnmarshalJSON(b []byte) error {
	num, err := protoimpl.X.UnmarshalJSONEnum(x.Descriptor(), b)
	if err != nil {
		return err
	}
	*x = Attribute_Discriminator(num)
	return nil
}

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

// Values for the TriState field type.
type Attribute_Tristate int32

const (
	Attribute_NO   Attribute_Tristate = 0
	Attribute_YES  Attribute_Tristate = 1
	Attribute_AUTO Attribute_Tristate = 2
)

// Enum value maps for Attribute_Tristate.
var (
	Attribute_Tristate_name = map[int32]string{
		0: "NO",
		1: "YES",
		2: "AUTO",
	}
	Attribute_Tristate_value = map[string]int32{
		"NO":   0,
		"YES":  1,
		"AUTO": 2,
	}
)

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

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

func (Attribute_Tristate) Descriptor() protoreflect.EnumDescriptor {
	return file_src_main_protobuf_build_proto_enumTypes[2].Descriptor()
}

func (Attribute_Tristate) Type() protoreflect.EnumType {
	return &file_src_main_protobuf_build_proto_enumTypes[2]
}

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

// Deprecated: Do not use.
func (x *Attribute_Tristate) UnmarshalJSON(b []byte) error {
	num, err := protoimpl.X.UnmarshalJSONEnum(x.Descriptor(), b)
	if err != nil {
		return err
	}
	*x = Attribute_Tristate(num)
	return nil
}

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

type Target_Discriminator int32

const (
	Target_RULE              Target_Discriminator = 1
	Target_SOURCE_FILE       Target_Discriminator = 2
	Target_GENERATED_FILE    Target_Discriminator = 3
	Target_PACKAGE_GROUP     Target_Discriminator = 4
	Target_ENVIRONMENT_GROUP Target_Discriminator = 5
)

// Enum value maps for Target_Discriminator.
var (
	Target_Discriminator_name = map[int32]string{
		1: "RULE",
		2: "SOURCE_FILE",
		3: "GENERATED_FILE",
		4: "PACKAGE_GROUP",
		5: "ENVIRONMENT_GROUP",
	}
	Target_Discriminator_value = map[string]int32{
		"RULE":              1,
		"SOURCE_FILE":       2,
		"GENERATED_FILE":    3,
		"PACKAGE_GROUP":     4,
		"ENVIRONMENT_GROUP": 5,
	}
)

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

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

func (Target_Discriminator) Descriptor() protoreflect.EnumDescriptor {
	return file_src_main_protobuf_build_proto_enumTypes[3].Descriptor()
}

func (Target_Discriminator) Type() protoreflect.EnumType {
	return &file_src_main_protobuf_build_proto_enumTypes[3]
}

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

// Deprecated: Do not use.
func (x *Target_Discriminator) UnmarshalJSON(b []byte) error {
	num, err := protoimpl.X.UnmarshalJSONEnum(x.Descriptor(), b)
	if err != nil {
		return err
	}
	*x = Target_Discriminator(num)
	return nil
}

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

type AllowedRuleClassInfo_AllowedRuleClasses int32

const (
	AllowedRuleClassInfo_ANY       AllowedRuleClassInfo_AllowedRuleClasses = 1 // Any rule is allowed to be in this attribute
	AllowedRuleClassInfo_SPECIFIED AllowedRuleClassInfo_AllowedRuleClasses = 2 // Only the explicitly listed rules are allowed
)

// Enum value maps for AllowedRuleClassInfo_AllowedRuleClasses.
var (
	AllowedRuleClassInfo_AllowedRuleClasses_name = map[int32]string{
		1: "ANY",
		2: "SPECIFIED",
	}
	AllowedRuleClassInfo_AllowedRuleClasses_value = map[string]int32{
		"ANY":       1,
		"SPECIFIED": 2,
	}
)

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

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

func (AllowedRuleClassInfo_AllowedRuleClasses) Descriptor() protoreflect.EnumDescriptor {
	return file_src_main_protobuf_build_proto_enumTypes[4].Descriptor()
}

func (AllowedRuleClassInfo_AllowedRuleClasses) Type() protoreflect.EnumType {
	return &file_src_main_protobuf_build_proto_enumTypes[4]
}

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

// Deprecated: Do not use.
func (x *AllowedRuleClassInfo_AllowedRuleClasses) UnmarshalJSON(b []byte) error {
	num, err := protoimpl.X.UnmarshalJSONEnum(x.Descriptor(), b)
	if err != nil {
		return err
	}
	*x = AllowedRuleClassInfo_AllowedRuleClasses(num)
	return nil
}

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

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

	LicenseType []string `protobuf:"bytes,1,rep,name=license_type,json=licenseType" json:"license_type,omitempty"`
	Exception   []string `protobuf:"bytes,2,rep,name=exception" json:"exception,omitempty"`
}

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

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

func (*License) ProtoMessage() {}

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

// Deprecated: Use License.ProtoReflect.Descriptor instead.
func (*License) Descriptor() ([]byte, []int) {
	return file_src_main_protobuf_build_proto_rawDescGZIP(), []int{0}
}

func (x *License) GetLicenseType() []string {
	if x != nil {
		return x.LicenseType
	}
	return nil
}

func (x *License) GetException() []string {
	if x != nil {
		return x.Exception
	}
	return nil
}

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

	Key   *string `protobuf:"bytes,1,req,name=key" json:"key,omitempty"`
	Value *string `protobuf:"bytes,2,req,name=value" json:"value,omitempty"`
}

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

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

func (*StringDictEntry) ProtoMessage() {}

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

// Deprecated: Use StringDictEntry.ProtoReflect.Descriptor instead.
func (*StringDictEntry) Descriptor() ([]byte, []int) {
	return file_src_main_protobuf_build_proto_rawDescGZIP(), []int{1}
}

func (x *StringDictEntry) GetKey() string {
	if x != nil && x.Key != nil {
		return *x.Key
	}
	return ""
}

func (x *StringDictEntry) GetValue() string {
	if x != nil && x.Value != nil {
		return *x.Value
	}
	return ""
}

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

	Key   *string `protobuf:"bytes,1,req,name=key" json:"key,omitempty"`
	Value *string `protobuf:"bytes,2,req,name=value" json:"value,omitempty"`
}

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

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

func (*LabelDictUnaryEntry) ProtoMessage() {}

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

// Deprecated: Use LabelDictUnaryEntry.ProtoReflect.Descriptor instead.
func (*LabelDictUnaryEntry) Descriptor() ([]byte, []int) {
	return file_src_main_protobuf_build_proto_rawDescGZIP(), []int{2}
}

func (x *LabelDictUnaryEntry) GetKey() string {
	if x != nil && x.Key != nil {
		return *x.Key
	}
	return ""
}

func (x *LabelDictUnaryEntry) GetValue() string {
	if x != nil && x.Value != nil {
		return *x.Value
	}
	return ""
}

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

	Key   *string  `protobuf:"bytes,1,req,name=key" json:"key,omitempty"`
	Value []string `protobuf:"bytes,2,rep,name=value" json:"value,omitempty"`
}

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

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

func (*LabelListDictEntry) ProtoMessage() {}

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

// Deprecated: Use LabelListDictEntry.ProtoReflect.Descriptor instead.
func (*LabelListDictEntry) Descriptor() ([]byte, []int) {
	return file_src_main_protobuf_build_proto_rawDescGZIP(), []int{3}
}

func (x *LabelListDictEntry) GetKey() string {
	if x != nil && x.Key != nil {
		return *x.Key
	}
	return ""
}

func (x *LabelListDictEntry) GetValue() []string {
	if x != nil {
		return x.Value
	}
	return nil
}

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

	Key   *string `protobuf:"bytes,1,req,name=key" json:"key,omitempty"`
	Value *string `protobuf:"bytes,2,req,name=value" json:"value,omitempty"`
}

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

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

func (*LabelKeyedStringDictEntry) ProtoMessage() {}

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

// Deprecated: Use LabelKeyedStringDictEntry.ProtoReflect.Descriptor instead.
func (*LabelKeyedStringDictEntry) Descriptor() ([]byte, []int) {
	return file_src_main_protobuf_build_proto_rawDescGZIP(), []int{4}
}

func (x *LabelKeyedStringDictEntry) GetKey() string {
	if x != nil && x.Key != nil {
		return *x.Key
	}
	return ""
}

func (x *LabelKeyedStringDictEntry) GetValue() string {
	if x != nil && x.Value != nil {
		return *x.Value
	}
	return ""
}

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

	Key   *string  `protobuf:"bytes,1,req,name=key" json:"key,omitempty"`
	Value []string `protobuf:"bytes,2,rep,name=value" json:"value,omitempty"`
}

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

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

func (*StringListDictEntry) ProtoMessage() {}

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

// Deprecated: Use StringListDictEntry.ProtoReflect.Descriptor instead.
func (*StringListDictEntry) Descriptor() ([]byte, []int) {
	return file_src_main_protobuf_build_proto_rawDescGZIP(), []int{5}
}

func (x *StringListDictEntry) GetKey() string {
	if x != nil && x.Key != nil {
		return *x.Key
	}
	return ""
}

func (x *StringListDictEntry) GetValue() []string {
	if x != nil {
		return x.Value
	}
	return nil
}

// Represents an entry attribute of a Fileset rule in a build file.
type FilesetEntry struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	// The label pointing to the source target where files are copied from.
	Source *string `protobuf:"bytes,1,req,name=source" json:"source,omitempty"`
	// The relative path within the fileset rule where files will be mapped.
	DestinationDirectory *string `protobuf:"bytes,2,req,name=destination_directory,json=destinationDirectory" json:"destination_directory,omitempty"`
	// Whether the files= attribute was specified. This is necessary because
	// no files= attribute and files=[] mean different things.
	FilesPresent *bool `protobuf:"varint,7,opt,name=files_present,json=filesPresent" json:"files_present,omitempty"`
	// A list of file labels to include from the source directory.
	File []string `protobuf:"bytes,3,rep,name=file" json:"file,omitempty"`
	// If this is a fileset entry representing files within the rule
	// package, this lists relative paths to files that should be excluded from
	// the set.  This cannot contain values if 'file' also has values.
	Exclude []string `protobuf:"bytes,4,rep,name=exclude" json:"exclude,omitempty"`
	// This field is optional because there will be some time when the new
	// PB is used by tools depending on blaze query, but the new blaze version
	// is not yet released.
	// TODO(bazel-team): Make this field required once a version of Blaze is
	// released that outputs this field.
	SymlinkBehavior *FilesetEntry_SymlinkBehavior `protobuf:"varint,5,opt,name=symlink_behavior,json=symlinkBehavior,enum=blaze_query.FilesetEntry_SymlinkBehavior,def=1" json:"symlink_behavior,omitempty"`
	// The prefix to strip from the path of the files in this FilesetEntry. Note
	// that no value and the empty string as the value mean different things here.
	StripPrefix *string `protobuf:"bytes,6,opt,name=strip_prefix,json=stripPrefix" json:"strip_prefix,omitempty"`
}

// Default values for FilesetEntry fields.
const (
	Default_FilesetEntry_SymlinkBehavior = FilesetEntry_COPY
)

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

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

func (*FilesetEntry) ProtoMessage() {}

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

// Deprecated: Use FilesetEntry.ProtoReflect.Descriptor instead.
func (*FilesetEntry) Descriptor() ([]byte, []int) {
	return file_src_main_protobuf_build_proto_rawDescGZIP(), []int{6}
}

func (x *FilesetEntry) GetSource() string {
	if x != nil && x.Source != nil {
		return *x.Source
	}
	return ""
}

func (x *FilesetEntry) GetDestinationDirectory() string {
	if x != nil && x.DestinationDirectory != nil {
		return *x.DestinationDirectory
	}
	return ""
}

func (x *FilesetEntry) GetFilesPresent() bool {
	if x != nil && x.FilesPresent != nil {
		return *x.FilesPresent
	}
	return false
}

func (x *FilesetEntry) GetFile() []string {
	if x != nil {
		return x.File
	}
	return nil
}

func (x *FilesetEntry) GetExclude() []string {
	if x != nil {
		return x.Exclude
	}
	return nil
}

func (x *FilesetEntry) GetSymlinkBehavior() FilesetEntry_SymlinkBehavior {
	if x != nil && x.SymlinkBehavior != nil {
		return *x.SymlinkBehavior
	}
	return Default_FilesetEntry_SymlinkBehavior
}

func (x *FilesetEntry) GetStripPrefix() string {
	if x != nil && x.StripPrefix != nil {
		return *x.StripPrefix
	}
	return ""
}

// A rule attribute. Each attribute must have a type and one of the various
// value fields populated - for the most part.
//
// Attributes of BOOLEAN and TRISTATE type may set all of the int, bool, and
// string values for backwards compatibility with clients that expect them to
// be set.
//
// Attributes of INTEGER, STRING, LABEL, LICENSE, BOOLEAN, and TRISTATE type
// may set *none* of the values. This can happen if the Attribute message is
// prepared for a client that doesn't support SELECTOR_LIST, but the rule has
// a selector list value for the attribute. (Selector lists for attributes of
// other types--the collection types--are handled differently when prepared
// for such a client. The possible collection values are gathered together
// and flattened.)
//
// By checking the type, the appropriate value can be extracted - see the
// comments on each type for the associated value.  The order of lists comes
// from the blaze parsing. If an attribute is of a list type, the associated
// list should never be empty.
type Attribute struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	// The name of the attribute
	Name *string `protobuf:"bytes,1,req,name=name" json:"name,omitempty"`
	// Whether the attribute was explicitly specified
	ExplicitlySpecified *bool `protobuf:"varint,13,opt,name=explicitly_specified,json=explicitlySpecified" json:"explicitly_specified,omitempty"`
	// If this attribute has a string value or a string list value, then this
	// may be set to indicate that the value may be treated as a label that
	// isn't a dependency of this attribute's rule.
	Nodep *bool `protobuf:"varint,20,opt,name=nodep" json:"nodep,omitempty"`
	// The type of attribute.  This message is used for all of the different
	// attribute types so the discriminator helps for figuring out what is
	// stored in the message.
	Type *Attribute_Discriminator `protobuf:"varint,2,req,name=type,enum=blaze_query.Attribute_Discriminator" json:"type,omitempty"`
	// If this attribute has an integer value this will be populated.
	// Boolean and TriState also use this field as [0,1] and [-1,0,1]
	// for [false, true] and [auto, no, yes] respectively.
	IntValue *int32 `protobuf:"varint,3,opt,name=int_value,json=intValue" json:"int_value,omitempty"`
	// If the attribute has a string value this will be populated.  Label and
	// path attributes use this field as the value even though the type may
	// be LABEL or something else other than STRING.
	StringValue *string `protobuf:"bytes,5,opt,name=string_value,json=stringValue" json:"string_value,omitempty"`
	// If the attribute has a boolean value this will be populated.
	BooleanValue *bool `protobuf:"varint,14,opt,name=boolean_value,json=booleanValue" json:"boolean_value,omitempty"`
	// If the attribute is a Tristate value, this will be populated.
	TristateValue *Attribute_Tristate `protobuf:"varint,15,opt,name=tristate_value,json=tristateValue,enum=blaze_query.Attribute_Tristate" json:"tristate_value,omitempty"`
	// The value of the attribute has a list of string values (label and path
	// note from STRING applies here as well).
	StringListValue []string `protobuf:"bytes,6,rep,name=string_list_value,json=stringListValue" json:"string_list_value,omitempty"`
	// If this is a license attribute, the license information is stored here.
	License *License `protobuf:"bytes,7,opt,name=license" json:"license,omitempty"`
	// If this is a string dict, each entry will be stored here.
	StringDictValue []*StringDictEntry `protobuf:"bytes,8,rep,name=string_dict_value,json=stringDictValue" json:"string_dict_value,omitempty"`
	// If the attribute is part of a Fileset, the fileset entries are stored in
	// this field.
	FilesetListValue []*FilesetEntry `protobuf:"bytes,9,rep,name=fileset_list_value,json=filesetListValue" json:"fileset_list_value,omitempty"`
	// If this is a label list dict, each entry will be stored here.
	LabelListDictValue []*LabelListDictEntry `protobuf:"bytes,10,rep,name=label_list_dict_value,json=labelListDictValue" json:"label_list_dict_value,omitempty"`
	// If this is a string list dict, each entry will be stored here.
	StringListDictValue []*StringListDictEntry `protobuf:"bytes,11,rep,name=string_list_dict_value,json=stringListDictValue" json:"string_list_dict_value,omitempty"`
	// The value of the attribute has a list of int32 values
	IntListValue []int32 `protobuf:"varint,17,rep,name=int_list_value,json=intListValue" json:"int_list_value,omitempty"`
	// If this is a label dict unary, each entry will be stored here.
	LabelDictUnaryValue []*LabelDictUnaryEntry `protobuf:"bytes,19,rep,name=label_dict_unary_value,json=labelDictUnaryValue" json:"label_dict_unary_value,omitempty"`
	// If this is a label-keyed string dict, each entry will be stored here.
	LabelKeyedStringDictValue []*LabelKeyedStringDictEntry `protobuf:"bytes,22,rep,name=label_keyed_string_dict_value,json=labelKeyedStringDictValue" json:"label_keyed_string_dict_value,omitempty"`
	// If this attribute's value is an expression containing one or more select
	// expressions, then its type is SELECTOR_LIST and a SelectorList will be
	// stored here.
	SelectorList                   *Attribute_SelectorList `protobuf:"bytes,21,opt,name=selector_list,json=selectorList" json:"selector_list,omitempty"`
	DEPRECATEDStringDictUnaryValue [][]byte                `protobuf:"bytes,18,rep,name=DEPRECATED_string_dict_unary_value,json=DEPRECATEDStringDictUnaryValue" json:"DEPRECATED_string_dict_unary_value,omitempty"`
}

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

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

func (*Attribute) ProtoMessage() {}

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

// Deprecated: Use Attribute.ProtoReflect.Descriptor instead.
func (*Attribute) Descriptor() ([]byte, []int) {
	return file_src_main_protobuf_build_proto_rawDescGZIP(), []int{7}
}

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

func (x *Attribute) GetExplicitlySpecified() bool {
	if x != nil && x.ExplicitlySpecified != nil {
		return *x.ExplicitlySpecified
	}
	return false
}

func (x *Attribute) GetNodep() bool {
	if x != nil && x.Nodep != nil {
		return *x.Nodep
	}
	return false
}

func (x *Attribute) GetType() Attribute_Discriminator {
	if x != nil && x.Type != nil {
		return *x.Type
	}
	return Attribute_INTEGER
}

func (x *Attribute) GetIntValue() int32 {
	if x != nil && x.IntValue != nil {
		return *x.IntValue
	}
	return 0
}

func (x *Attribute) GetStringValue() string {
	if x != nil && x.StringValue != nil {
		return *x.StringValue
	}
	return ""
}

func (x *Attribute) GetBooleanValue() bool {
	if x != nil && x.BooleanValue != nil {
		return *x.BooleanValue
	}
	return false
}

func (x *Attribute) GetTristateValue() Attribute_Tristate {
	if x != nil && x.TristateValue != nil {
		return *x.TristateValue
	}
	return Attribute_NO
}

func (x *Attribute) GetStringListValue() []string {
	if x != nil {
		return x.StringListValue
	}
	return nil
}

func (x *Attribute) GetLicense() *License {
	if x != nil {
		return x.License
	}
	return nil
}

func (x *Attribute) GetStringDictValue() []*StringDictEntry {
	if x != nil {
		return x.StringDictValue
	}
	return nil
}

func (x *Attribute) GetFilesetListValue() []*FilesetEntry {
	if x != nil {
		return x.FilesetListValue
	}
	return nil
}

func (x *Attribute) GetLabelListDictValue() []*LabelListDictEntry {
	if x != nil {
		return x.LabelListDictValue
	}
	return nil
}

func (x *Attribute) GetStringListDictValue() []*StringListDictEntry {
	if x != nil {
		return x.StringListDictValue
	}
	return nil
}

func (x *Attribute) GetIntListValue() []int32 {
	if x != nil {
		return x.IntListValue
	}
	return nil
}

func (x *Attribute) GetLabelDictUnaryValue() []*LabelDictUnaryEntry {
	if x != nil {
		return x.LabelDictUnaryValue
	}
	return nil
}

func (x *Attribute) GetLabelKeyedStringDictValue() []*LabelKeyedStringDictEntry {
	if x != nil {
		return x.LabelKeyedStringDictValue
	}
	return nil
}

func (x *Attribute) GetSelectorList() *Attribute_SelectorList {
	if x != nil {
		return x.SelectorList
	}
	return nil
}

func (x *Attribute) GetDEPRECATEDStringDictUnaryValue() [][]byte {
	if x != nil {
		return x.DEPRECATEDStringDictUnaryValue
	}
	return nil
}

// A rule instance (e.g., cc_library foo, java_binary bar).
type Rule struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	// The name of the rule (formatted as an absolute label, e.g. //foo/bar:baz).
	Name *string `protobuf:"bytes,1,req,name=name" json:"name,omitempty"`
	// The rule class (e.g., java_library)
	RuleClass *string `protobuf:"bytes,2,req,name=rule_class,json=ruleClass" json:"rule_class,omitempty"`
	// The BUILD file and line number of the location (formatted as
	// <absolute_path>:<line_number>:<column_number>) in the rule's package's
	// BUILD file where the rule instance was instantiated. The line number will
	// be that of a rule invocation or macro call (that in turn invoked a
	// rule). See
	// https://bazel.build/rules/macros#macro-creation
	Location *string `protobuf:"bytes,3,opt,name=location" json:"location,omitempty"`
	// All of the attributes that describe the rule.
	Attribute []*Attribute `protobuf:"bytes,4,rep,name=attribute" json:"attribute,omitempty"`
	// All of the inputs to the rule (formatted as absolute labels). These are
	// predecessors in the dependency graph.
	RuleInput           []string               `protobuf:"bytes,5,rep,name=rule_input,json=ruleInput" json:"rule_input,omitempty"`
	ConfiguredRuleInput []*ConfiguredRuleInput `protobuf:"bytes,15,rep,name=configured_rule_input,json=configuredRuleInput" json:"configured_rule_input,omitempty"`
	// All of the outputs of the rule (formatted as absolute labels). These are
	// successors in the dependency graph.
	RuleOutput []string `protobuf:"bytes,6,rep,name=rule_output,json=ruleOutput" json:"rule_output,omitempty"`
	// The set of all "features" inherited from the rule's package declaration.
	DefaultSetting []string `protobuf:"bytes,7,rep,name=default_setting,json=defaultSetting" json:"default_setting,omitempty"`
	// The rule's class's public by default value.
	DEPRECATEDPublicByDefault *bool `protobuf:"varint,9,opt,name=DEPRECATED_public_by_default,json=DEPRECATEDPublicByDefault" json:"DEPRECATED_public_by_default,omitempty"`
	DEPRECATEDIsSkylark       *bool `protobuf:"varint,10,opt,name=DEPRECATED_is_skylark,json=DEPRECATEDIsSkylark" json:"DEPRECATED_is_skylark,omitempty"`
	// Hash encapsulating the behavior of this Starlark rule. Any change to this
	// rule's definition that could change its behavior will be reflected here.
	SkylarkEnvironmentHashCode *string `protobuf:"bytes,12,opt,name=skylark_environment_hash_code,json=skylarkEnvironmentHashCode" json:"skylark_environment_hash_code,omitempty"`
	// The Starlark call stack at the moment the rule was instantiated.
	// Each entry has the form "file:line:col: function".
	// The outermost stack frame ("<toplevel>", the BUILD file) appears first;
	// the frame for the rule function itself is omitted.
	// The file name may be relative to package's source root directory.
	//
	// Requires --proto:instantiation_stack=true.
	InstantiationStack []string `protobuf:"bytes,13,rep,name=instantiation_stack,json=instantiationStack" json:"instantiation_stack,omitempty"`
	// The Starlark call stack for the definition of the rule class of this
	// particular rule instance. If empty, either populating the field was not
	// enabled on the command line with the --proto:definition_stack flag or the
	// rule is a native one.
	DefinitionStack []string `protobuf:"bytes,14,rep,name=definition_stack,json=definitionStack" json:"definition_stack,omitempty"`
}

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

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

func (*Rule) ProtoMessage() {}

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

// Deprecated: Use Rule.ProtoReflect.Descriptor instead.
func (*Rule) Descriptor() ([]byte, []int) {
	return file_src_main_protobuf_build_proto_rawDescGZIP(), []int{8}
}

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

func (x *Rule) GetRuleClass() string {
	if x != nil && x.RuleClass != nil {
		return *x.RuleClass
	}
	return ""
}

func (x *Rule) GetLocation() string {
	if x != nil && x.Location != nil {
		return *x.Location
	}
	return ""
}

func (x *Rule) GetAttribute() []*Attribute {
	if x != nil {
		return x.Attribute
	}
	return nil
}

func (x *Rule) GetRuleInput() []string {
	if x != nil {
		return x.RuleInput
	}
	return nil
}

func (x *Rule) GetConfiguredRuleInput() []*ConfiguredRuleInput {
	if x != nil {
		return x.ConfiguredRuleInput
	}
	return nil
}

func (x *Rule) GetRuleOutput() []string {
	if x != nil {
		return x.RuleOutput
	}
	return nil
}

func (x *Rule) GetDefaultSetting() []string {
	if x != nil {
		return x.DefaultSetting
	}
	return nil
}

func (x *Rule) GetDEPRECATEDPublicByDefault() bool {
	if x != nil && x.DEPRECATEDPublicByDefault != nil {
		return *x.DEPRECATEDPublicByDefault
	}
	return false
}

func (x *Rule) GetDEPRECATEDIsSkylark() bool {
	if x != nil && x.DEPRECATEDIsSkylark != nil {
		return *x.DEPRECATEDIsSkylark
	}
	return false
}

func (x *Rule) GetSkylarkEnvironmentHashCode() string {
	if x != nil && x.SkylarkEnvironmentHashCode != nil {
		return *x.SkylarkEnvironmentHashCode
	}
	return ""
}

func (x *Rule) GetInstantiationStack() []string {
	if x != nil {
		return x.InstantiationStack
	}
	return nil
}

func (x *Rule) GetDefinitionStack() []string {
	if x != nil {
		return x.DefinitionStack
	}
	return nil
}

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

	Label                 *string `protobuf:"bytes,1,opt,name=label" json:"label,omitempty"`
	ConfigurationChecksum *string `protobuf:"bytes,2,opt,name=configuration_checksum,json=configurationChecksum" json:"configuration_checksum,omitempty"`
	ConfigurationId       *uint32 `protobuf:"varint,3,opt,name=configuration_id,json=configurationId" json:"configuration_id,omitempty"`
}

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

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

func (*ConfiguredRuleInput) ProtoMessage() {}

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

// Deprecated: Use ConfiguredRuleInput.ProtoReflect.Descriptor instead.
func (*ConfiguredRuleInput) Descriptor() ([]byte, []int) {
	return file_src_main_protobuf_build_proto_rawDescGZIP(), []int{9}
}

func (x *ConfiguredRuleInput) GetLabel() string {
	if x != nil && x.Label != nil {
		return *x.Label
	}
	return ""
}

func (x *ConfiguredRuleInput) GetConfigurationChecksum() string {
	if x != nil && x.ConfigurationChecksum != nil {
		return *x.ConfigurationChecksum
	}
	return ""
}

func (x *ConfiguredRuleInput) GetConfigurationId() uint32 {
	if x != nil && x.ConfigurationId != nil {
		return *x.ConfigurationId
	}
	return 0
}

// Summary of all transitive dependencies of 'rule,' where each dependent
// rule is included only once in the 'dependency' field.  Gives complete
// information to analyze the single build target labeled rule.name,
// including optional location of target in BUILD file.
type RuleSummary struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	Rule       *Rule   `protobuf:"bytes,1,req,name=rule" json:"rule,omitempty"`
	Dependency []*Rule `protobuf:"bytes,2,rep,name=dependency" json:"dependency,omitempty"`
	Location   *string `protobuf:"bytes,3,opt,name=location" json:"location,omitempty"`
}

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

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

func (*RuleSummary) ProtoMessage() {}

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

// Deprecated: Use RuleSummary.ProtoReflect.Descriptor instead.
func (*RuleSummary) Descriptor() ([]byte, []int) {
	return file_src_main_protobuf_build_proto_rawDescGZIP(), []int{10}
}

func (x *RuleSummary) GetRule() *Rule {
	if x != nil {
		return x.Rule
	}
	return nil
}

func (x *RuleSummary) GetDependency() []*Rule {
	if x != nil {
		return x.Dependency
	}
	return nil
}

func (x *RuleSummary) GetLocation() string {
	if x != nil && x.Location != nil {
		return *x.Location
	}
	return ""
}

// A package group. Aside from the name, it contains the list of packages
// present in the group (as specified in the BUILD file).
type PackageGroup struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	// The name of the package group
	Name *string `protobuf:"bytes,1,req,name=name" json:"name,omitempty"`
	// The list of packages as specified in the BUILD file. Currently this is
	// only a list of packages, but some time in the future, there might be
	// some type of wildcard mechanism.
	ContainedPackage []string `protobuf:"bytes,2,rep,name=contained_package,json=containedPackage" json:"contained_package,omitempty"`
	// The list of sub package groups included in this one.
	IncludedPackageGroup []string `protobuf:"bytes,3,rep,name=included_package_group,json=includedPackageGroup" json:"included_package_group,omitempty"`
}

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

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

func (*PackageGroup) ProtoMessage() {}

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

// Deprecated: Use PackageGroup.ProtoReflect.Descriptor instead.
func (*PackageGroup) Descriptor() ([]byte, []int) {
	return file_src_main_protobuf_build_proto_rawDescGZIP(), []int{11}
}

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

func (x *PackageGroup) GetContainedPackage() []string {
	if x != nil {
		return x.ContainedPackage
	}
	return nil
}

func (x *PackageGroup) GetIncludedPackageGroup() []string {
	if x != nil {
		return x.IncludedPackageGroup
	}
	return nil
}

// An environment group.
type EnvironmentGroup struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	// The name of the environment group.
	Name *string `protobuf:"bytes,1,req,name=name" json:"name,omitempty"`
	// The environments that belong to this group (as labels).
	Environment []string `protobuf:"bytes,2,rep,name=environment" json:"environment,omitempty"`
	// The member environments that rules implicitly support if not otherwise
	// specified.
	Default []string `protobuf:"bytes,3,rep,name=default" json:"default,omitempty"`
}

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

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

func (*EnvironmentGroup) ProtoMessage() {}

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

// Deprecated: Use EnvironmentGroup.ProtoReflect.Descriptor instead.
func (*EnvironmentGroup) Descriptor() ([]byte, []int) {
	return file_src_main_protobuf_build_proto_rawDescGZIP(), []int{12}
}

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

func (x *EnvironmentGroup) GetEnvironment() []string {
	if x != nil {
		return x.Environment
	}
	return nil
}

func (x *EnvironmentGroup) GetDefault() []string {
	if x != nil {
		return x.Default
	}
	return nil
}

// A file that is an input into the build system.
// Next-Id: 10
type SourceFile struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	// The name of the source file (a label).
	Name *string `protobuf:"bytes,1,req,name=name" json:"name,omitempty"`
	// The location of the source file.  This is a path with a line number and a
	// column number not a label in the build system.
	Location *string `protobuf:"bytes,2,opt,name=location" json:"location,omitempty"`
	// Labels of .bzl (Starlark) files that are transitively loaded in this BUILD
	// file. This is present only when the SourceFile represents a BUILD file that
	// loaded .bzl files.
	// TODO(bazel-team): Rename this field.
	Subinclude []string `protobuf:"bytes,3,rep,name=subinclude" json:"subinclude,omitempty"`
	// Labels of package groups that are mentioned in the visibility declaration
	// for this source file.
	PackageGroup []string `protobuf:"bytes,4,rep,name=package_group,json=packageGroup" json:"package_group,omitempty"`
	// Labels mentioned in the visibility declaration (including :__pkg__ and
	// //visibility: ones)
	VisibilityLabel []string `protobuf:"bytes,5,rep,name=visibility_label,json=visibilityLabel" json:"visibility_label,omitempty"`
	// The package-level features enabled for this package. Only present if the
	// SourceFile represents a BUILD file.
	Feature []string `protobuf:"bytes,6,rep,name=feature" json:"feature,omitempty"`
	// License attribute for the file.
	License *License `protobuf:"bytes,8,opt,name=license" json:"license,omitempty"`
	// True if the package contains an error. Only present if the SourceFile
	// represents a BUILD file.
	PackageContainsErrors *bool `protobuf:"varint,9,opt,name=package_contains_errors,json=packageContainsErrors" json:"package_contains_errors,omitempty"`
}

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

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

func (*SourceFile) ProtoMessage() {}

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

// Deprecated: Use SourceFile.ProtoReflect.Descriptor instead.
func (*SourceFile) Descriptor() ([]byte, []int) {
	return file_src_main_protobuf_build_proto_rawDescGZIP(), []int{13}
}

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

func (x *SourceFile) GetLocation() string {
	if x != nil && x.Location != nil {
		return *x.Location
	}
	return ""
}

func (x *SourceFile) GetSubinclude() []string {
	if x != nil {
		return x.Subinclude
	}
	return nil
}

func (x *SourceFile) GetPackageGroup() []string {
	if x != nil {
		return x.PackageGroup
	}
	return nil
}

func (x *SourceFile) GetVisibilityLabel() []string {
	if x != nil {
		return x.VisibilityLabel
	}
	return nil
}

func (x *SourceFile) GetFeature() []string {
	if x != nil {
		return x.Feature
	}
	return nil
}

func (x *SourceFile) GetLicense() *License {
	if x != nil {
		return x.License
	}
	return nil
}

func (x *SourceFile) GetPackageContainsErrors() bool {
	if x != nil && x.PackageContainsErrors != nil {
		return *x.PackageContainsErrors
	}
	return false
}

// A file that is the output of a build rule.
type GeneratedFile struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	// The name of the generated file (a label).
	Name *string `protobuf:"bytes,1,req,name=name" json:"name,omitempty"`
	// The label of the target that generates the file.
	GeneratingRule *string `protobuf:"bytes,2,req,name=generating_rule,json=generatingRule" json:"generating_rule,omitempty"`
	// The path, line number, and column number of the output file (not a label).
	Location *string `protobuf:"bytes,3,opt,name=location" json:"location,omitempty"`
}

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

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

func (*GeneratedFile) ProtoMessage() {}

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

// Deprecated: Use GeneratedFile.ProtoReflect.Descriptor instead.
func (*GeneratedFile) Descriptor() ([]byte, []int) {
	return file_src_main_protobuf_build_proto_rawDescGZIP(), []int{14}
}

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

func (x *GeneratedFile) GetGeneratingRule() string {
	if x != nil && x.GeneratingRule != nil {
		return *x.GeneratingRule
	}
	return ""
}

func (x *GeneratedFile) GetLocation() string {
	if x != nil && x.Location != nil {
		return *x.Location
	}
	return ""
}

// A target from a blaze query execution.  Similar to the Attribute message,
// the Discriminator is used to determine which field contains information.
// For any given type, only one of these can be populated in a single Target.
type Target struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	// The type of target contained in the message.
	Type *Target_Discriminator `protobuf:"varint,1,req,name=type,enum=blaze_query.Target_Discriminator" json:"type,omitempty"`
	// If this target represents a rule, the rule is stored here.
	Rule *Rule `protobuf:"bytes,2,opt,name=rule" json:"rule,omitempty"`
	// A file that is not generated by the build system (version controlled
	// or created by the test harness).
	SourceFile *SourceFile `protobuf:"bytes,3,opt,name=source_file,json=sourceFile" json:"source_file,omitempty"`
	// A generated file that is the output of a rule.
	GeneratedFile *GeneratedFile `protobuf:"bytes,4,opt,name=generated_file,json=generatedFile" json:"generated_file,omitempty"`
	// A package group.
	PackageGroup *PackageGroup `protobuf:"bytes,5,opt,name=package_group,json=packageGroup" json:"package_group,omitempty"`
	// An environment group.
	EnvironmentGroup *EnvironmentGroup `protobuf:"bytes,6,opt,name=environment_group,json=environmentGroup" json:"environment_group,omitempty"`
}

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

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

func (*Target) ProtoMessage() {}

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

// Deprecated: Use Target.ProtoReflect.Descriptor instead.
func (*Target) Descriptor() ([]byte, []int) {
	return file_src_main_protobuf_build_proto_rawDescGZIP(), []int{15}
}

func (x *Target) GetType() Target_Discriminator {
	if x != nil && x.Type != nil {
		return *x.Type
	}
	return Target_RULE
}

func (x *Target) GetRule() *Rule {
	if x != nil {
		return x.Rule
	}
	return nil
}

func (x *Target) GetSourceFile() *SourceFile {
	if x != nil {
		return x.SourceFile
	}
	return nil
}

func (x *Target) GetGeneratedFile() *GeneratedFile {
	if x != nil {
		return x.GeneratedFile
	}
	return nil
}

func (x *Target) GetPackageGroup() *PackageGroup {
	if x != nil {
		return x.PackageGroup
	}
	return nil
}

func (x *Target) GetEnvironmentGroup() *EnvironmentGroup {
	if x != nil {
		return x.EnvironmentGroup
	}
	return nil
}

// Container for all of the blaze query results.
type QueryResult struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	// All of the targets returned by the blaze query.
	Target []*Target `protobuf:"bytes,1,rep,name=target" json:"target,omitempty"`
}

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

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

func (*QueryResult) ProtoMessage() {}

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

// Deprecated: Use QueryResult.ProtoReflect.Descriptor instead.
func (*QueryResult) Descriptor() ([]byte, []int) {
	return file_src_main_protobuf_build_proto_rawDescGZIP(), []int{16}
}

func (x *QueryResult) GetTarget() []*Target {
	if x != nil {
		return x.Target
	}
	return nil
}

// Information about allowed rule classes for a specific attribute of a rule.
type AllowedRuleClassInfo struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	Policy *AllowedRuleClassInfo_AllowedRuleClasses `protobuf:"varint,1,req,name=policy,enum=blaze_query.AllowedRuleClassInfo_AllowedRuleClasses" json:"policy,omitempty"`
	// Rule class names of rules allowed in this attribute, e.g "cc_library",
	// "py_binary". Only present if the allowed_rule_classes field is set to
	// SPECIFIED.
	AllowedRuleClass []string `protobuf:"bytes,2,rep,name=allowed_rule_class,json=allowedRuleClass" json:"allowed_rule_class,omitempty"`
}

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

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

func (*AllowedRuleClassInfo) ProtoMessage() {}

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

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

func (x *AllowedRuleClassInfo) GetPolicy() AllowedRuleClassInfo_AllowedRuleClasses {
	if x != nil && x.Policy != nil {
		return *x.Policy
	}
	return AllowedRuleClassInfo_ANY
}

func (x *AllowedRuleClassInfo) GetAllowedRuleClass() []string {
	if x != nil {
		return x.AllowedRuleClass
	}
	return nil
}

// This message represents a single attribute of a single rule.
// See https://bazel.build/rules/lib/attr.
type AttributeDefinition struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	Name               *string                  `protobuf:"bytes,1,req,name=name" json:"name,omitempty"` // e.g. "name", "srcs"
	Type               *Attribute_Discriminator `protobuf:"varint,2,req,name=type,enum=blaze_query.Attribute_Discriminator" json:"type,omitempty"`
	Mandatory          *bool                    `protobuf:"varint,3,opt,name=mandatory" json:"mandatory,omitempty"`
	AllowedRuleClasses *AllowedRuleClassInfo    `protobuf:"bytes,4,opt,name=allowed_rule_classes,json=allowedRuleClasses" json:"allowed_rule_classes,omitempty"` // type=label*
	Documentation      *string                  `protobuf:"bytes,5,opt,name=documentation" json:"documentation,omitempty"`
	AllowEmpty         *bool                    `protobuf:"varint,6,opt,name=allow_empty,json=allowEmpty" json:"allow_empty,omitempty"`                  // type=*_list|*_dict
	AllowSingleFile    *bool                    `protobuf:"varint,7,opt,name=allow_single_file,json=allowSingleFile" json:"allow_single_file,omitempty"` // type=label
	Default            *AttributeValue          `protobuf:"bytes,9,opt,name=default" json:"default,omitempty"`                                           // simple (not computed/late-bound) values only
	Executable         *bool                    `protobuf:"varint,10,opt,name=executable" json:"executable,omitempty"`                                   // type=label
	Configurable       *bool                    `protobuf:"varint,11,opt,name=configurable" json:"configurable,omitempty"`
	Nodep              *bool                    `protobuf:"varint,12,opt,name=nodep" json:"nodep,omitempty"`                            // label-valued edge does not establish a dependency
	CfgIsHost          *bool                    `protobuf:"varint,13,opt,name=cfg_is_host,json=cfgIsHost" json:"cfg_is_host,omitempty"` // edge entails a transition to "host" configuration
}

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

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

func (*AttributeDefinition) ProtoMessage() {}

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

// Deprecated: Use AttributeDefinition.ProtoReflect.Descriptor instead.
func (*AttributeDefinition) Descriptor() ([]byte, []int) {
	return file_src_main_protobuf_build_proto_rawDescGZIP(), []int{18}
}

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

func (x *AttributeDefinition) GetType() Attribute_Discriminator {
	if x != nil && x.Type != nil {
		return *x.Type
	}
	return Attribute_INTEGER
}

func (x *AttributeDefinition) GetMandatory() bool {
	if x != nil && x.Mandatory != nil {
		return *x.Mandatory
	}
	return false
}

func (x *AttributeDefinition) GetAllowedRuleClasses() *AllowedRuleClassInfo {
	if x != nil {
		return x.AllowedRuleClasses
	}
	return nil
}

func (x *AttributeDefinition) GetDocumentation() string {
	if x != nil && x.Documentation != nil {
		return *x.Documentation
	}
	return ""
}

func (x *AttributeDefinition) GetAllowEmpty() bool {
	if x != nil && x.AllowEmpty != nil {
		return *x.AllowEmpty
	}
	return false
}

func (x *AttributeDefinition) GetAllowSingleFile() bool {
	if x != nil && x.AllowSingleFile != nil {
		return *x.AllowSingleFile
	}
	return false
}

func (x *AttributeDefinition) GetDefault() *AttributeValue {
	if x != nil {
		return x.Default
	}
	return nil
}

func (x *AttributeDefinition) GetExecutable() bool {
	if x != nil && x.Executable != nil {
		return *x.Executable
	}
	return false
}

func (x *AttributeDefinition) GetConfigurable() bool {
	if x != nil && x.Configurable != nil {
		return *x.Configurable
	}
	return false
}

func (x *AttributeDefinition) GetNodep() bool {
	if x != nil && x.Nodep != nil {
		return *x.Nodep
	}
	return false
}

func (x *AttributeDefinition) GetCfgIsHost() bool {
	if x != nil && x.CfgIsHost != nil {
		return *x.CfgIsHost
	}
	return false
}

// An AttributeValue represents the value of an attribute.
// A single field, determined by the attribute type, is populated.
//
// It is used only for AttributeDefinition.default. Attribute and
// SelectorEntry do their own thing for unfortunate historical reasons.
type AttributeValue struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	Int     *int32                      `protobuf:"varint,1,opt,name=int" json:"int,omitempty"`      // type=int|tristate
	String_ *string                     `protobuf:"bytes,2,opt,name=string" json:"string,omitempty"` // type=string|label|output
	Bool    *bool                       `protobuf:"varint,3,opt,name=bool" json:"bool,omitempty"`    // type=bool
	List    []*AttributeValue           `protobuf:"bytes,4,rep,name=list" json:"list,omitempty"`     // type=*_list|distrib
	Dict    []*AttributeValue_DictEntry `protobuf:"bytes,5,rep,name=dict" json:"dict,omitempty"`     // type=*_dict
}

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

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

func (*AttributeValue) ProtoMessage() {}

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

// Deprecated: Use AttributeValue.ProtoReflect.Descriptor instead.
func (*AttributeValue) Descriptor() ([]byte, []int) {
	return file_src_main_protobuf_build_proto_rawDescGZIP(), []int{19}
}

func (x *AttributeValue) GetInt() int32 {
	if x != nil && x.Int != nil {
		return *x.Int
	}
	return 0
}

func (x *AttributeValue) GetString_() string {
	if x != nil && x.String_ != nil {
		return *x.String_
	}
	return ""
}

func (x *AttributeValue) GetBool() bool {
	if x != nil && x.Bool != nil {
		return *x.Bool
	}
	return false
}

func (x *AttributeValue) GetList() []*AttributeValue {
	if x != nil {
		return x.List
	}
	return nil
}

func (x *AttributeValue) GetDict() []*AttributeValue_DictEntry {
	if x != nil {
		return x.Dict
	}
	return nil
}

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

	Name *string `protobuf:"bytes,1,req,name=name" json:"name,omitempty"`
	// Only contains documented attributes
	Attribute     []*AttributeDefinition `protobuf:"bytes,2,rep,name=attribute" json:"attribute,omitempty"`
	Documentation *string                `protobuf:"bytes,3,opt,name=documentation" json:"documentation,omitempty"`
	// Only for build extensions: label to file that defines the extension
	Label *string `protobuf:"bytes,4,opt,name=label" json:"label,omitempty"`
}

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

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

func (*RuleDefinition) ProtoMessage() {}

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

// Deprecated: Use RuleDefinition.ProtoReflect.Descriptor instead.
func (*RuleDefinition) Descriptor() ([]byte, []int) {
	return file_src_main_protobuf_build_proto_rawDescGZIP(), []int{20}
}

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

func (x *RuleDefinition) GetAttribute() []*AttributeDefinition {
	if x != nil {
		return x.Attribute
	}
	return nil
}

func (x *RuleDefinition) GetDocumentation() string {
	if x != nil && x.Documentation != nil {
		return *x.Documentation
	}
	return ""
}

func (x *RuleDefinition) GetLabel() string {
	if x != nil && x.Label != nil {
		return *x.Label
	}
	return ""
}

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

	// Only contains documented rule definitions
	Rule []*RuleDefinition `protobuf:"bytes,1,rep,name=rule" json:"rule,omitempty"`
}

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

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

func (*BuildLanguage) ProtoMessage() {}

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

// Deprecated: Use BuildLanguage.ProtoReflect.Descriptor instead.
func (*BuildLanguage) Descriptor() ([]byte, []int) {
	return file_src_main_protobuf_build_proto_rawDescGZIP(), []int{21}
}

func (x *BuildLanguage) GetRule() []*RuleDefinition {
	if x != nil {
		return x.Rule
	}
	return nil
}

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

	// The key of the selector entry. At this time, this is the label of a
	// config_setting rule, or the pseudo-label "//conditions:default".
	Label *string `protobuf:"bytes,1,opt,name=label" json:"label,omitempty"`
	// True if the entry's value is the default value for the type as a
	// result of the condition value being specified as None (ie:
	// {"//condition": None}).
	IsDefaultValue *bool `protobuf:"varint,16,opt,name=is_default_value,json=isDefaultValue" json:"is_default_value,omitempty"`
	// Exactly one of the following fields (except for glob_criteria) must be
	// populated - note that the BOOLEAN and TRISTATE caveat in Attribute's
	// comment does not apply here. The type field in the SelectorList
	// containing this entry indicates which of these fields is populated,
	// in accordance with the comments on Discriminator enum values above.
	// (To be explicit: BOOLEAN populates the boolean_value field and TRISTATE
	// populates the tristate_value field.)
	IntValue                       *int32                       `protobuf:"varint,2,opt,name=int_value,json=intValue" json:"int_value,omitempty"`
	StringValue                    *string                      `protobuf:"bytes,3,opt,name=string_value,json=stringValue" json:"string_value,omitempty"`
	BooleanValue                   *bool                        `protobuf:"varint,4,opt,name=boolean_value,json=booleanValue" json:"boolean_value,omitempty"`
	TristateValue                  *Attribute_Tristate          `protobuf:"varint,5,opt,name=tristate_value,json=tristateValue,enum=blaze_query.Attribute_Tristate" json:"tristate_value,omitempty"`
	StringListValue                []string                     `protobuf:"bytes,6,rep,name=string_list_value,json=stringListValue" json:"string_list_value,omitempty"`
	License                        *License                     `protobuf:"bytes,7,opt,name=license" json:"license,omitempty"`
	StringDictValue                []*StringDictEntry           `protobuf:"bytes,8,rep,name=string_dict_value,json=stringDictValue" json:"string_dict_value,omitempty"`
	FilesetListValue               []*FilesetEntry              `protobuf:"bytes,9,rep,name=fileset_list_value,json=filesetListValue" json:"fileset_list_value,omitempty"`
	LabelListDictValue             []*LabelListDictEntry        `protobuf:"bytes,10,rep,name=label_list_dict_value,json=labelListDictValue" json:"label_list_dict_value,omitempty"`
	StringListDictValue            []*StringListDictEntry       `protobuf:"bytes,11,rep,name=string_list_dict_value,json=stringListDictValue" json:"string_list_dict_value,omitempty"`
	IntListValue                   []int32                      `protobuf:"varint,13,rep,name=int_list_value,json=intListValue" json:"int_list_value,omitempty"`
	LabelDictUnaryValue            []*LabelDictUnaryEntry       `protobuf:"bytes,15,rep,name=label_dict_unary_value,json=labelDictUnaryValue" json:"label_dict_unary_value,omitempty"`
	LabelKeyedStringDictValue      []*LabelKeyedStringDictEntry `protobuf:"bytes,17,rep,name=label_keyed_string_dict_value,json=labelKeyedStringDictValue" json:"label_keyed_string_dict_value,omitempty"`
	DEPRECATEDStringDictUnaryValue [][]byte                     `protobuf:"bytes,14,rep,name=DEPRECATED_string_dict_unary_value,json=DEPRECATEDStringDictUnaryValue" json:"DEPRECATED_string_dict_unary_value,omitempty"`
}

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

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

func (*Attribute_SelectorEntry) ProtoMessage() {}

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

// Deprecated: Use Attribute_SelectorEntry.ProtoReflect.Descriptor instead.
func (*Attribute_SelectorEntry) Descriptor() ([]byte, []int) {
	return file_src_main_protobuf_build_proto_rawDescGZIP(), []int{7, 0}
}

func (x *Attribute_SelectorEntry) GetLabel() string {
	if x != nil && x.Label != nil {
		return *x.Label
	}
	return ""
}

func (x *Attribute_SelectorEntry) GetIsDefaultValue() bool {
	if x != nil && x.IsDefaultValue != nil {
		return *x.IsDefaultValue
	}
	return false
}

func (x *Attribute_SelectorEntry) GetIntValue() int32 {
	if x != nil && x.IntValue != nil {
		return *x.IntValue
	}
	return 0
}

func (x *Attribute_SelectorEntry) GetStringValue() string {
	if x != nil && x.StringValue != nil {
		return *x.StringValue
	}
	return ""
}

func (x *Attribute_SelectorEntry) GetBooleanValue() bool {
	if x != nil && x.BooleanValue != nil {
		return *x.BooleanValue
	}
	return false
}

func (x *Attribute_SelectorEntry) GetTristateValue() Attribute_Tristate {
	if x != nil && x.TristateValue != nil {
		return *x.TristateValue
	}
	return Attribute_NO
}

func (x *Attribute_SelectorEntry) GetStringListValue() []string {
	if x != nil {
		return x.StringListValue
	}
	return nil
}

func (x *Attribute_SelectorEntry) GetLicense() *License {
	if x != nil {
		return x.License
	}
	return nil
}

func (x *Attribute_SelectorEntry) GetStringDictValue() []*StringDictEntry {
	if x != nil {
		return x.StringDictValue
	}
	return nil
}

func (x *Attribute_SelectorEntry) GetFilesetListValue() []*FilesetEntry {
	if x != nil {
		return x.FilesetListValue
	}
	return nil
}

func (x *Attribute_SelectorEntry) GetLabelListDictValue() []*LabelListDictEntry {
	if x != nil {
		return x.LabelListDictValue
	}
	return nil
}

func (x *Attribute_SelectorEntry) GetStringListDictValue() []*StringListDictEntry {
	if x != nil {
		return x.StringListDictValue
	}
	return nil
}

func (x *Attribute_SelectorEntry) GetIntListValue() []int32 {
	if x != nil {
		return x.IntListValue
	}
	return nil
}

func (x *Attribute_SelectorEntry) GetLabelDictUnaryValue() []*LabelDictUnaryEntry {
	if x != nil {
		return x.LabelDictUnaryValue
	}
	return nil
}

func (x *Attribute_SelectorEntry) GetLabelKeyedStringDictValue() []*LabelKeyedStringDictEntry {
	if x != nil {
		return x.LabelKeyedStringDictValue
	}
	return nil
}

func (x *Attribute_SelectorEntry) GetDEPRECATEDStringDictUnaryValue() [][]byte {
	if x != nil {
		return x.DEPRECATEDStringDictUnaryValue
	}
	return nil
}

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

	// The list of (label, value) pairs in the map that defines the selector.
	// At this time, this cannot be empty, i.e. a selector has at least one
	// entry.
	Entries []*Attribute_SelectorEntry `protobuf:"bytes,1,rep,name=entries" json:"entries,omitempty"`
	// Whether or not this has any default values.
	HasDefaultValue *bool `protobuf:"varint,2,opt,name=has_default_value,json=hasDefaultValue" json:"has_default_value,omitempty"`
	// The error message when no condition matches.
	NoMatchError *string `protobuf:"bytes,3,opt,name=no_match_error,json=noMatchError" json:"no_match_error,omitempty"`
}

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

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

func (*Attribute_Selector) ProtoMessage() {}

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

// Deprecated: Use Attribute_Selector.ProtoReflect.Descriptor instead.
func (*Attribute_Selector) Descriptor() ([]byte, []int) {
	return file_src_main_protobuf_build_proto_rawDescGZIP(), []int{7, 1}
}

func (x *Attribute_Selector) GetEntries() []*Attribute_SelectorEntry {
	if x != nil {
		return x.Entries
	}
	return nil
}

func (x *Attribute_Selector) GetHasDefaultValue() bool {
	if x != nil && x.HasDefaultValue != nil {
		return *x.HasDefaultValue
	}
	return false
}

func (x *Attribute_Selector) GetNoMatchError() string {
	if x != nil && x.NoMatchError != nil {
		return *x.NoMatchError
	}
	return ""
}

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

	// The type that this selector list evaluates to, and the type that each
	// selector in the list evaluates to. At this time, this cannot be
	// SELECTOR_LIST, i.e. selector lists do not nest.
	Type *Attribute_Discriminator `protobuf:"varint,1,opt,name=type,enum=blaze_query.Attribute_Discriminator" json:"type,omitempty"`
	// The list of selector elements in this selector list. At this time, this
	// cannot be empty, i.e. a selector list is never empty.
	Elements []*Attribute_Selector `protobuf:"bytes,2,rep,name=elements" json:"elements,omitempty"`
}

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

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

func (*Attribute_SelectorList) ProtoMessage() {}

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

// Deprecated: Use Attribute_SelectorList.ProtoReflect.Descriptor instead.
func (*Attribute_SelectorList) Descriptor() ([]byte, []int) {
	return file_src_main_protobuf_build_proto_rawDescGZIP(), []int{7, 2}
}

func (x *Attribute_SelectorList) GetType() Attribute_Discriminator {
	if x != nil && x.Type != nil {
		return *x.Type
	}
	return Attribute_INTEGER
}

func (x *Attribute_SelectorList) GetElements() []*Attribute_Selector {
	if x != nil {
		return x.Elements
	}
	return nil
}

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

	Key   *string         `protobuf:"bytes,1,req,name=key" json:"key,omitempty"`
	Value *AttributeValue `protobuf:"bytes,2,req,name=value" json:"value,omitempty"`
}

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

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

func (*AttributeValue_DictEntry) ProtoMessage() {}

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

// Deprecated: Use AttributeValue_DictEntry.ProtoReflect.Descriptor instead.
func (*AttributeValue_DictEntry) Descriptor() ([]byte, []int) {
	return file_src_main_protobuf_build_proto_rawDescGZIP(), []int{19, 0}
}

func (x *AttributeValue_DictEntry) GetKey() string {
	if x != nil && x.Key != nil {
		return *x.Key
	}
	return ""
}

func (x *AttributeValue_DictEntry) GetValue() *AttributeValue {
	if x != nil {
		return x.Value
	}
	return nil
}

var File_src_main_protobuf_build_proto protoreflect.FileDescriptor

var file_src_main_protobuf_build_proto_rawDesc = []byte{
	0x0a, 0x1d, 0x73, 0x72, 0x63, 0x2f, 0x6d, 0x61, 0x69, 0x6e, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f,
	0x62, 0x75, 0x66, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12,
	0x0b, 0x62, 0x6c, 0x61, 0x7a, 0x65, 0x5f, 0x71, 0x75, 0x65, 0x72, 0x79, 0x22, 0x4a, 0x0a, 0x07,
	0x4c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x6c, 0x69, 0x63, 0x65, 0x6e,
	0x73, 0x65, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0b, 0x6c,
	0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x65, 0x78,
	0x63, 0x65, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x09, 0x65,
	0x78, 0x63, 0x65, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x39, 0x0a, 0x0f, 0x53, 0x74, 0x72, 0x69,
	0x6e, 0x67, 0x44, 0x69, 0x63, 0x74, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b,
	0x65, 0x79, 0x18, 0x01, 0x20, 0x02, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a,
	0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x02, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61,
	0x6c, 0x75, 0x65, 0x22, 0x3d, 0x0a, 0x13, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x44, 0x69, 0x63, 0x74,
	0x55, 0x6e, 0x61, 0x72, 0x79, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65,
	0x79, 0x18, 0x01, 0x20, 0x02, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05,
	0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x02, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c,
	0x75, 0x65, 0x22, 0x3c, 0x0a, 0x12, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x4c, 0x69, 0x73, 0x74, 0x44,
	0x69, 0x63, 0x74, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18,
	0x01, 0x20, 0x02, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61,
	0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65,
	0x22, 0x43, 0x0a, 0x19, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x4b, 0x65, 0x79, 0x65, 0x64, 0x53, 0x74,
	0x72, 0x69, 0x6e, 0x67, 0x44, 0x69, 0x63, 0x74, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a,
	0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x02, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12,
	0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x02, 0x28, 0x09, 0x52, 0x05,
	0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x3d, 0x0a, 0x13, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x4c,
	0x69, 0x73, 0x74, 0x44, 0x69, 0x63, 0x74, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03,
	0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x02, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14,
	0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x05, 0x76,
	0x61, 0x6c, 0x75, 0x65, 0x22, 0xdb, 0x02, 0x0a, 0x0c, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x65, 0x74,
	0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18,
	0x01, 0x20, 0x02, 0x28, 0x09, 0x52, 0x06, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x33, 0x0a,
	0x15, 0x64, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x64, 0x69, 0x72,
	0x65, 0x63, 0x74, 0x6f, 0x72, 0x79, 0x18, 0x02, 0x20, 0x02, 0x28, 0x09, 0x52, 0x14, 0x64, 0x65,
	0x73, 0x74, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x6f,
	0x72, 0x79, 0x12, 0x23, 0x0a, 0x0d, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x5f, 0x70, 0x72, 0x65, 0x73,
	0x65, 0x6e, 0x74, 0x18, 0x07, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, 0x66, 0x69, 0x6c, 0x65, 0x73,
	0x50, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x66, 0x69, 0x6c, 0x65, 0x18,
	0x03, 0x20, 0x03, 0x28, 0x09, 0x52, 0x04, 0x66, 0x69, 0x6c, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x65,
	0x78, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x18, 0x04, 0x20, 0x03, 0x28, 0x09, 0x52, 0x07, 0x65, 0x78,
	0x63, 0x6c, 0x75, 0x64, 0x65, 0x12, 0x5a, 0x0a, 0x10, 0x73, 0x79, 0x6d, 0x6c, 0x69, 0x6e, 0x6b,
	0x5f, 0x62, 0x65, 0x68, 0x61, 0x76, 0x69, 0x6f, 0x72, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0e, 0x32,
	0x29, 0x2e, 0x62, 0x6c, 0x61, 0x7a, 0x65, 0x5f, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x46, 0x69,
	0x6c, 0x65, 0x73, 0x65, 0x74, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x2e, 0x53, 0x79, 0x6d, 0x6c, 0x69,
	0x6e, 0x6b, 0x42, 0x65, 0x68, 0x61, 0x76, 0x69, 0x6f, 0x72, 0x3a, 0x04, 0x43, 0x4f, 0x50, 0x59,
	0x52, 0x0f, 0x73, 0x79, 0x6d, 0x6c, 0x69, 0x6e, 0x6b, 0x42, 0x65, 0x68, 0x61, 0x76, 0x69, 0x6f,
	0x72, 0x12, 0x21, 0x0a, 0x0c, 0x73, 0x74, 0x72, 0x69, 0x70, 0x5f, 0x70, 0x72, 0x65, 0x66, 0x69,
	0x78, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x73, 0x74, 0x72, 0x69, 0x70, 0x50, 0x72,
	0x65, 0x66, 0x69, 0x78, 0x22, 0x2c, 0x0a, 0x0f, 0x53, 0x79, 0x6d, 0x6c, 0x69, 0x6e, 0x6b, 0x42,
	0x65, 0x68, 0x61, 0x76, 0x69, 0x6f, 0x72, 0x12, 0x08, 0x0a, 0x04, 0x43, 0x4f, 0x50, 0x59, 0x10,
	0x01, 0x12, 0x0f, 0x0a, 0x0b, 0x44, 0x45, 0x52, 0x45, 0x46, 0x45, 0x52, 0x45, 0x4e, 0x43, 0x45,
	0x10, 0x02, 0x22, 0x9f, 0x16, 0x0a, 0x09, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65,
	0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x02, 0x28, 0x09, 0x52, 0x04,
	0x6e, 0x61, 0x6d, 0x65, 0x12, 0x31, 0x0a, 0x14, 0x65, 0x78, 0x70, 0x6c, 0x69, 0x63, 0x69, 0x74,
	0x6c, 0x79, 0x5f, 0x73, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x65, 0x64, 0x18, 0x0d, 0x20, 0x01,
	0x28, 0x08, 0x52, 0x13, 0x65, 0x78, 0x70, 0x6c, 0x69, 0x63, 0x69, 0x74, 0x6c, 0x79, 0x53, 0x70,
	0x65, 0x63, 0x69, 0x66, 0x69, 0x65, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x6e, 0x6f, 0x64, 0x65, 0x70,
	0x18, 0x14, 0x20, 0x01, 0x28, 0x08, 0x52, 0x05, 0x6e, 0x6f, 0x64, 0x65, 0x70, 0x12, 0x38, 0x0a,
	0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x02, 0x28, 0x0e, 0x32, 0x24, 0x2e, 0x62, 0x6c,
	0x61, 0x7a, 0x65, 0x5f, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62,
	0x75, 0x74, 0x65, 0x2e, 0x44, 0x69, 0x73, 0x63, 0x72, 0x69, 0x6d, 0x69, 0x6e, 0x61, 0x74, 0x6f,
	0x72, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x69, 0x6e, 0x74, 0x5f, 0x76,
	0x61, 0x6c, 0x75, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x69, 0x6e, 0x74, 0x56,
	0x61, 0x6c, 0x75, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x76,
	0x61, 0x6c, 0x75, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x73, 0x74, 0x72, 0x69,
	0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x23, 0x0a, 0x0d, 0x62, 0x6f, 0x6f, 0x6c, 0x65,
	0x61, 0x6e, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c,
	0x62, 0x6f, 0x6f, 0x6c, 0x65, 0x61, 0x6e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x46, 0x0a, 0x0e,
	0x74, 0x72, 0x69, 0x73, 0x74, 0x61, 0x74, 0x65, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x0f,
	0x20, 0x01, 0x28, 0x0e, 0x32, 0x1f, 0x2e, 0x62, 0x6c, 0x61, 0x7a, 0x65, 0x5f, 0x71, 0x75, 0x65,
	0x72, 0x79, 0x2e, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x2e, 0x54, 0x72, 0x69,
	0x73, 0x74, 0x61, 0x74, 0x65, 0x52, 0x0d, 0x74, 0x72, 0x69, 0x73, 0x74, 0x61, 0x74, 0x65, 0x56,
	0x61, 0x6c, 0x75, 0x65, 0x12, 0x2a, 0x0a, 0x11, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x6c,
	0x69, 0x73, 0x74, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x06, 0x20, 0x03, 0x28, 0x09, 0x52,
	0x0f, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x4c, 0x69, 0x73, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65,
	0x12, 0x2e, 0x0a, 0x07, 0x6c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28,
	0x0b, 0x32, 0x14, 0x2e, 0x62, 0x6c, 0x61, 0x7a, 0x65, 0x5f, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e,
	0x4c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x52, 0x07, 0x6c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65,
	0x12, 0x48, 0x0a, 0x11, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x64, 0x69, 0x63, 0x74, 0x5f,
	0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x08, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x62, 0x6c,
	0x61, 0x7a, 0x65, 0x5f, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67,
	0x44, 0x69, 0x63, 0x74, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0f, 0x73, 0x74, 0x72, 0x69, 0x6e,
	0x67, 0x44, 0x69, 0x63, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x47, 0x0a, 0x12, 0x66, 0x69,
	0x6c, 0x65, 0x73, 0x65, 0x74, 0x5f, 0x6c, 0x69, 0x73, 0x74, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65,
	0x18, 0x09, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x62, 0x6c, 0x61, 0x7a, 0x65, 0x5f, 0x71,
	0x75, 0x65, 0x72, 0x79, 0x2e, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x65, 0x74, 0x45, 0x6e, 0x74, 0x72,
	0x79, 0x52, 0x10, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x65, 0x74, 0x4c, 0x69, 0x73, 0x74, 0x56, 0x61,
	0x6c, 0x75, 0x65, 0x12, 0x52, 0x0a, 0x15, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x5f, 0x6c, 0x69, 0x73,
	0x74, 0x5f, 0x64, 0x69, 0x63, 0x74, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x0a, 0x20, 0x03,
	0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x62, 0x6c, 0x61, 0x7a, 0x65, 0x5f, 0x71, 0x75, 0x65, 0x72, 0x79,
	0x2e, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x4c, 0x69, 0x73, 0x74, 0x44, 0x69, 0x63, 0x74, 0x45, 0x6e,
	0x74, 0x72, 0x79, 0x52, 0x12, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x4c, 0x69, 0x73, 0x74, 0x44, 0x69,
	0x63, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x55, 0x0a, 0x16, 0x73, 0x74, 0x72, 0x69, 0x6e,
	0x67, 0x5f, 0x6c, 0x69, 0x73, 0x74, 0x5f, 0x64, 0x69, 0x63, 0x74, 0x5f, 0x76, 0x61, 0x6c, 0x75,
	0x65, 0x18, 0x0b, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x62, 0x6c, 0x61, 0x7a, 0x65, 0x5f,
	0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x4c, 0x69, 0x73, 0x74,
	0x44, 0x69, 0x63, 0x74, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x13, 0x73, 0x74, 0x72, 0x69, 0x6e,
	0x67, 0x4c, 0x69, 0x73, 0x74, 0x44, 0x69, 0x63, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x24,
	0x0a, 0x0e, 0x69, 0x6e, 0x74, 0x5f, 0x6c, 0x69, 0x73, 0x74, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65,
	0x18, 0x11, 0x20, 0x03, 0x28, 0x05, 0x52, 0x0c, 0x69, 0x6e, 0x74, 0x4c, 0x69, 0x73, 0x74, 0x56,
	0x61, 0x6c, 0x75, 0x65, 0x12, 0x55, 0x0a, 0x16, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x5f, 0x64, 0x69,
	0x63, 0x74, 0x5f, 0x75, 0x6e, 0x61, 0x72, 0x79, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x13,
	0x20, 0x03, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x62, 0x6c, 0x61, 0x7a, 0x65, 0x5f, 0x71, 0x75, 0x65,
	0x72, 0x79, 0x2e, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x44, 0x69, 0x63, 0x74, 0x55, 0x6e, 0x61, 0x72,
	0x79, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x13, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x44, 0x69, 0x63,
	0x74, 0x55, 0x6e, 0x61, 0x72, 0x79, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x68, 0x0a, 0x1d, 0x6c,
	0x61, 0x62, 0x65, 0x6c, 0x5f, 0x6b, 0x65, 0x79, 0x65, 0x64, 0x5f, 0x73, 0x74, 0x72, 0x69, 0x6e,
	0x67, 0x5f, 0x64, 0x69, 0x63, 0x74, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x16, 0x20, 0x03,
	0x28, 0x0b, 0x32, 0x26, 0x2e, 0x62, 0x6c, 0x61, 0x7a, 0x65, 0x5f, 0x71, 0x75, 0x65, 0x72, 0x79,
	0x2e, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x4b, 0x65, 0x79, 0x65, 0x64, 0x53, 0x74, 0x72, 0x69, 0x6e,
	0x67, 0x44, 0x69, 0x63, 0x74, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x19, 0x6c, 0x61, 0x62, 0x65,
	0x6c, 0x4b, 0x65, 0x79, 0x65, 0x64, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x44, 0x69, 0x63, 0x74,
	0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x48, 0x0a, 0x0d, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f,
	0x72, 0x5f, 0x6c, 0x69, 0x73, 0x74, 0x18, 0x15, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x62,
	0x6c, 0x61, 0x7a, 0x65, 0x5f, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x41, 0x74, 0x74, 0x72, 0x69,
	0x62, 0x75, 0x74, 0x65, 0x2e, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x4c, 0x69, 0x73,
	0x74, 0x52, 0x0c, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x4c, 0x69, 0x73, 0x74, 0x12,
	0x4a, 0x0a, 0x22, 0x44, 0x45, 0x50, 0x52, 0x45, 0x43, 0x41, 0x54, 0x45, 0x44, 0x5f, 0x73, 0x74,
	0x72, 0x69, 0x6e, 0x67, 0x5f, 0x64, 0x69, 0x63, 0x74, 0x5f, 0x75, 0x6e, 0x61, 0x72, 0x79, 0x5f,
	0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x12, 0x20, 0x03, 0x28, 0x0c, 0x52, 0x1e, 0x44, 0x45, 0x50,
	0x52, 0x45, 0x43, 0x41, 0x54, 0x45, 0x44, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x44, 0x69, 0x63,
	0x74, 0x55, 0x6e, 0x61, 0x72, 0x79, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x1a, 0xcf, 0x07, 0x0a, 0x0d,
	0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x14, 0x0a,
	0x05, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x6c, 0x61,
	0x62, 0x65, 0x6c, 0x12, 0x28, 0x0a, 0x10, 0x69, 0x73, 0x5f, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c,
	0x74, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x10, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0e, 0x69,
	0x73, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x1b, 0x0a,
	0x09, 0x69, 0x6e, 0x74, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05,
	0x52, 0x08, 0x69, 0x6e, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x73, 0x74,
	0x72, 0x69, 0x6e, 0x67, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09,
	0x52, 0x0b, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x23, 0x0a,
	0x0d, 0x62, 0x6f, 0x6f, 0x6c, 0x65, 0x61, 0x6e, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x04,
	0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, 0x62, 0x6f, 0x6f, 0x6c, 0x65, 0x61, 0x6e, 0x56, 0x61, 0x6c,
	0x75, 0x65, 0x12, 0x46, 0x0a, 0x0e, 0x74, 0x72, 0x69, 0x73, 0x74, 0x61, 0x74, 0x65, 0x5f, 0x76,
	0x61, 0x6c, 0x75, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1f, 0x2e, 0x62, 0x6c, 0x61,
	0x7a, 0x65, 0x5f, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75,
	0x74, 0x65, 0x2e, 0x54, 0x72, 0x69, 0x73, 0x74, 0x61, 0x74, 0x65, 0x52, 0x0d, 0x74, 0x72, 0x69,
	0x73, 0x74, 0x61, 0x74, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x2a, 0x0a, 0x11, 0x73, 0x74,
	0x72, 0x69, 0x6e, 0x67, 0x5f, 0x6c, 0x69, 0x73, 0x74, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18,
	0x06, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0f, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x4c, 0x69, 0x73,
	0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x2e, 0x0a, 0x07, 0x6c, 0x69, 0x63, 0x65, 0x6e, 0x73,
	0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x62, 0x6c, 0x61, 0x7a, 0x65, 0x5f,
	0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x4c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x52, 0x07, 0x6c,
	0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x12, 0x48, 0x0a, 0x11, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67,
	0x5f, 0x64, 0x69, 0x63, 0x74, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x08, 0x20, 0x03, 0x28,
	0x0b, 0x32, 0x1c, 0x2e, 0x62, 0x6c, 0x61, 0x7a, 0x65, 0x5f, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e,
	0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x44, 0x69, 0x63, 0x74, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52,
	0x0f, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x44, 0x69, 0x63, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65,
	0x12, 0x47, 0x0a, 0x12, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x65, 0x74, 0x5f, 0x6c, 0x69, 0x73, 0x74,
	0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x09, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x62,
	0x6c, 0x61, 0x7a, 0x65, 0x5f, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x46, 0x69, 0x6c, 0x65, 0x73,
	0x65, 0x74, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x10, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x65, 0x74,
	0x4c, 0x69, 0x73, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x52, 0x0a, 0x15, 0x6c, 0x61, 0x62,
	0x65, 0x6c, 0x5f, 0x6c, 0x69, 0x73, 0x74, 0x5f, 0x64, 0x69, 0x63, 0x74, 0x5f, 0x76, 0x61, 0x6c,
	0x75, 0x65, 0x18, 0x0a, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x62, 0x6c, 0x61, 0x7a, 0x65,
	0x5f, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x4c, 0x69, 0x73, 0x74,
	0x44, 0x69, 0x63, 0x74, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x12, 0x6c, 0x61, 0x62, 0x65, 0x6c,
	0x4c, 0x69, 0x73, 0x74, 0x44, 0x69, 0x63, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x55, 0x0a,
	0x16, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x6c, 0x69, 0x73, 0x74, 0x5f, 0x64, 0x69, 0x63,
	0x74, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x0b, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x20, 0x2e,
	0x62, 0x6c, 0x61, 0x7a, 0x65, 0x5f, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x53, 0x74, 0x72, 0x69,
	0x6e, 0x67, 0x4c, 0x69, 0x73, 0x74, 0x44, 0x69, 0x63, 0x74, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52,
	0x13, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x4c, 0x69, 0x73, 0x74, 0x44, 0x69, 0x63, 0x74, 0x56,
	0x61, 0x6c, 0x75, 0x65, 0x12, 0x24, 0x0a, 0x0e, 0x69, 0x6e, 0x74, 0x5f, 0x6c, 0x69, 0x73, 0x74,
	0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x0d, 0x20, 0x03, 0x28, 0x05, 0x52, 0x0c, 0x69, 0x6e,
	0x74, 0x4c, 0x69, 0x73, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x55, 0x0a, 0x16, 0x6c, 0x61,
	0x62, 0x65, 0x6c, 0x5f, 0x64, 0x69, 0x63, 0x74, 0x5f, 0x75, 0x6e, 0x61, 0x72, 0x79, 0x5f, 0x76,
	0x61, 0x6c, 0x75, 0x65, 0x18, 0x0f, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x62, 0x6c, 0x61,
	0x7a, 0x65, 0x5f, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x44, 0x69,
	0x63, 0x74, 0x55, 0x6e, 0x61, 0x72, 0x79, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x13, 0x6c, 0x61,
	0x62, 0x65, 0x6c, 0x44, 0x69, 0x63, 0x74, 0x55, 0x6e, 0x61, 0x72, 0x79, 0x56, 0x61, 0x6c, 0x75,
	0x65, 0x12, 0x68, 0x0a, 0x1d, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x5f, 0x6b, 0x65, 0x79, 0x65, 0x64,
	0x5f, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x64, 0x69, 0x63, 0x74, 0x5f, 0x76, 0x61, 0x6c,
	0x75, 0x65, 0x18, 0x11, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x62, 0x6c, 0x61, 0x7a, 0x65,
	0x5f, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x4b, 0x65, 0x79, 0x65,
	0x64, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x44, 0x69, 0x63, 0x74, 0x45, 0x6e, 0x74, 0x72, 0x79,
	0x52, 0x19, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x4b, 0x65, 0x79, 0x65, 0x64, 0x53, 0x74, 0x72, 0x69,
	0x6e, 0x67, 0x44, 0x69, 0x63, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x4a, 0x0a, 0x22, 0x44,
	0x45, 0x50, 0x52, 0x45, 0x43, 0x41, 0x54, 0x45, 0x44, 0x5f, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67,
	0x5f, 0x64, 0x69, 0x63, 0x74, 0x5f, 0x75, 0x6e, 0x61, 0x72, 0x79, 0x5f, 0x76, 0x61, 0x6c, 0x75,
	0x65, 0x18, 0x0e, 0x20, 0x03, 0x28, 0x0c, 0x52, 0x1e, 0x44, 0x45, 0x50, 0x52, 0x45, 0x43, 0x41,
	0x54, 0x45, 0x44, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x44, 0x69, 0x63, 0x74, 0x55, 0x6e, 0x61,
	0x72, 0x79, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x4a, 0x04, 0x08, 0x0c, 0x10, 0x0d, 0x1a, 0x9c, 0x01,
	0x0a, 0x08, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x12, 0x3e, 0x0a, 0x07, 0x65, 0x6e,
	0x74, 0x72, 0x69, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x62, 0x6c,
	0x61, 0x7a, 0x65, 0x5f, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62,
	0x75, 0x74, 0x65, 0x2e, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x45, 0x6e, 0x74, 0x72,
	0x79, 0x52, 0x07, 0x65, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x12, 0x2a, 0x0a, 0x11, 0x68, 0x61,
	0x73, 0x5f, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18,
	0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0f, 0x68, 0x61, 0x73, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c,
	0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x24, 0x0a, 0x0e, 0x6e, 0x6f, 0x5f, 0x6d, 0x61, 0x74,
	0x63, 0x68, 0x5f, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c,
	0x6e, 0x6f, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x1a, 0x85, 0x01, 0x0a,
	0x0c, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x38, 0x0a,
	0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x24, 0x2e, 0x62, 0x6c,
	0x61, 0x7a, 0x65, 0x5f, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62,
	0x75, 0x74, 0x65, 0x2e, 0x44, 0x69, 0x73, 0x63, 0x72, 0x69, 0x6d, 0x69, 0x6e, 0x61, 0x74, 0x6f,
	0x72, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x3b, 0x0a, 0x08, 0x65, 0x6c, 0x65, 0x6d, 0x65,
	0x6e, 0x74, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x62, 0x6c, 0x61, 0x7a,
	0x65, 0x5f, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74,
	0x65, 0x2e, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x52, 0x08, 0x65, 0x6c, 0x65, 0x6d,
	0x65, 0x6e, 0x74, 0x73, 0x22, 0x8a, 0x03, 0x0a, 0x0d, 0x44, 0x69, 0x73, 0x63, 0x72, 0x69, 0x6d,
	0x69, 0x6e, 0x61, 0x74, 0x6f, 0x72, 0x12, 0x0b, 0x0a, 0x07, 0x49, 0x4e, 0x54, 0x45, 0x47, 0x45,
	0x52, 0x10, 0x01, 0x12, 0x0a, 0x0a, 0x06, 0x53, 0x54, 0x52, 0x49, 0x4e, 0x47, 0x10, 0x02, 0x12,
	0x09, 0x0a, 0x05, 0x4c, 0x41, 0x42, 0x45, 0x4c, 0x10, 0x03, 0x12, 0x0a, 0x0a, 0x06, 0x4f, 0x55,
	0x54, 0x50, 0x55, 0x54, 0x10, 0x04, 0x12, 0x0f, 0x0a, 0x0b, 0x53, 0x54, 0x52, 0x49, 0x4e, 0x47,
	0x5f, 0x4c, 0x49, 0x53, 0x54, 0x10, 0x05, 0x12, 0x0e, 0x0a, 0x0a, 0x4c, 0x41, 0x42, 0x45, 0x4c,
	0x5f, 0x4c, 0x49, 0x53, 0x54, 0x10, 0x06, 0x12, 0x0f, 0x0a, 0x0b, 0x4f, 0x55, 0x54, 0x50, 0x55,
	0x54, 0x5f, 0x4c, 0x49, 0x53, 0x54, 0x10, 0x07, 0x12, 0x14, 0x0a, 0x10, 0x44, 0x49, 0x53, 0x54,
	0x52, 0x49, 0x42, 0x55, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x53, 0x45, 0x54, 0x10, 0x08, 0x12, 0x0b,
	0x0a, 0x07, 0x4c, 0x49, 0x43, 0x45, 0x4e, 0x53, 0x45, 0x10, 0x09, 0x12, 0x0f, 0x0a, 0x0b, 0x53,
	0x54, 0x52, 0x49, 0x4e, 0x47, 0x5f, 0x44, 0x49, 0x43, 0x54, 0x10, 0x0a, 0x12, 0x16, 0x0a, 0x12,
	0x46, 0x49, 0x4c, 0x45, 0x53, 0x45, 0x54, 0x5f, 0x45, 0x4e, 0x54, 0x52, 0x59, 0x5f, 0x4c, 0x49,
	0x53, 0x54, 0x10, 0x0b, 0x12, 0x13, 0x0a, 0x0f, 0x4c, 0x41, 0x42, 0x45, 0x4c, 0x5f, 0x4c, 0x49,
	0x53, 0x54, 0x5f, 0x44, 0x49, 0x43, 0x54, 0x10, 0x0c, 0x12, 0x14, 0x0a, 0x10, 0x53, 0x54, 0x52,
	0x49, 0x4e, 0x47, 0x5f, 0x4c, 0x49, 0x53, 0x54, 0x5f, 0x44, 0x49, 0x43, 0x54, 0x10, 0x0d, 0x12,
	0x0b, 0x0a, 0x07, 0x42, 0x4f, 0x4f, 0x4c, 0x45, 0x41, 0x4e, 0x10, 0x0e, 0x12, 0x0c, 0x0a, 0x08,
	0x54, 0x52, 0x49, 0x53, 0x54, 0x41, 0x54, 0x45, 0x10, 0x0f, 0x12, 0x10, 0x0a, 0x0c, 0x49, 0x4e,
	0x54, 0x45, 0x47, 0x45, 0x52, 0x5f, 0x4c, 0x49, 0x53, 0x54, 0x10, 0x10, 0x12, 0x0b, 0x0a, 0x07,
	0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x12, 0x12, 0x14, 0x0a, 0x10, 0x4c, 0x41, 0x42,
	0x45, 0x4c, 0x5f, 0x44, 0x49, 0x43, 0x54, 0x5f, 0x55, 0x4e, 0x41, 0x52, 0x59, 0x10, 0x13, 0x12,
	0x11, 0x0a, 0x0d, 0x53, 0x45, 0x4c, 0x45, 0x43, 0x54, 0x4f, 0x52, 0x5f, 0x4c, 0x49, 0x53, 0x54,
	0x10, 0x14, 0x12, 0x1b, 0x0a, 0x17, 0x4c, 0x41, 0x42, 0x45, 0x4c, 0x5f, 0x4b, 0x45, 0x59, 0x45,
	0x44, 0x5f, 0x53, 0x54, 0x52, 0x49, 0x4e, 0x47, 0x5f, 0x44, 0x49, 0x43, 0x54, 0x10, 0x15, 0x12,
	0x20, 0x0a, 0x1c, 0x44, 0x45, 0x50, 0x52, 0x45, 0x43, 0x41, 0x54, 0x45, 0x44, 0x5f, 0x53, 0x54,
	0x52, 0x49, 0x4e, 0x47, 0x5f, 0x44, 0x49, 0x43, 0x54, 0x5f, 0x55, 0x4e, 0x41, 0x52, 0x59, 0x10,
	0x11, 0x22, 0x25, 0x0a, 0x08, 0x54, 0x72, 0x69, 0x73, 0x74, 0x61, 0x74, 0x65, 0x12, 0x06, 0x0a,
	0x02, 0x4e, 0x4f, 0x10, 0x00, 0x12, 0x07, 0x0a, 0x03, 0x59, 0x45, 0x53, 0x10, 0x01, 0x12, 0x08,
	0x0a, 0x04, 0x41, 0x55, 0x54, 0x4f, 0x10, 0x02, 0x4a, 0x04, 0x08, 0x0c, 0x10, 0x0d, 0x4a, 0x04,
	0x08, 0x10, 0x10, 0x11, 0x22, 0xea, 0x04, 0x0a, 0x04, 0x52, 0x75, 0x6c, 0x65, 0x12, 0x12, 0x0a,
	0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x02, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d,
	0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x72, 0x75, 0x6c, 0x65, 0x5f, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x18,
	0x02, 0x20, 0x02, 0x28, 0x09, 0x52, 0x09, 0x72, 0x75, 0x6c, 0x65, 0x43, 0x6c, 0x61, 0x73, 0x73,
	0x12, 0x1a, 0x0a, 0x08, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01,
	0x28, 0x09, 0x52, 0x08, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x34, 0x0a, 0x09,
	0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32,
	0x16, 0x2e, 0x62, 0x6c, 0x61, 0x7a, 0x65, 0x5f, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x41, 0x74,
	0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x52, 0x09, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75,
	0x74, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x72, 0x75, 0x6c, 0x65, 0x5f, 0x69, 0x6e, 0x70, 0x75, 0x74,
	0x18, 0x05, 0x20, 0x03, 0x28, 0x09, 0x52, 0x09, 0x72, 0x75, 0x6c, 0x65, 0x49, 0x6e, 0x70, 0x75,
	0x74, 0x12, 0x54, 0x0a, 0x15, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x65, 0x64, 0x5f,
	0x72, 0x75, 0x6c, 0x65, 0x5f, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x18, 0x0f, 0x20, 0x03, 0x28, 0x0b,
	0x32, 0x20, 0x2e, 0x62, 0x6c, 0x61, 0x7a, 0x65, 0x5f, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x43,
	0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x65, 0x64, 0x52, 0x75, 0x6c, 0x65, 0x49, 0x6e, 0x70,
	0x75, 0x74, 0x52, 0x13, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x65, 0x64, 0x52, 0x75,
	0x6c, 0x65, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x12, 0x1f, 0x0a, 0x0b, 0x72, 0x75, 0x6c, 0x65, 0x5f,
	0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x18, 0x06, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0a, 0x72, 0x75,
	0x6c, 0x65, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x12, 0x27, 0x0a, 0x0f, 0x64, 0x65, 0x66, 0x61,
	0x75, 0x6c, 0x74, 0x5f, 0x73, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x18, 0x07, 0x20, 0x03, 0x28,
	0x09, 0x52, 0x0e, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e,
	0x67, 0x12, 0x3f, 0x0a, 0x1c, 0x44, 0x45, 0x50, 0x52, 0x45, 0x43, 0x41, 0x54, 0x45, 0x44, 0x5f,
	0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x5f, 0x62, 0x79, 0x5f, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c,
	0x74, 0x18, 0x09, 0x20, 0x01, 0x28, 0x08, 0x52, 0x19, 0x44, 0x45, 0x50, 0x52, 0x45, 0x43, 0x41,
	0x54, 0x45, 0x44, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x42, 0x79, 0x44, 0x65, 0x66, 0x61, 0x75,
	0x6c, 0x74, 0x12, 0x32, 0x0a, 0x15, 0x44, 0x45, 0x50, 0x52, 0x45, 0x43, 0x41, 0x54, 0x45, 0x44,
	0x5f, 0x69, 0x73, 0x5f, 0x73, 0x6b, 0x79, 0x6c, 0x61, 0x72, 0x6b, 0x18, 0x0a, 0x20, 0x01, 0x28,
	0x08, 0x52, 0x13, 0x44, 0x45, 0x50, 0x52, 0x45, 0x43, 0x41, 0x54, 0x45, 0x44, 0x49, 0x73, 0x53,
	0x6b, 0x79, 0x6c, 0x61, 0x72, 0x6b, 0x12, 0x41, 0x0a, 0x1d, 0x73, 0x6b, 0x79, 0x6c, 0x61, 0x72,
	0x6b, 0x5f, 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x68, 0x61,
	0x73, 0x68, 0x5f, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x09, 0x52, 0x1a, 0x73,
	0x6b, 0x79, 0x6c, 0x61, 0x72, 0x6b, 0x45, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e,
	0x74, 0x48, 0x61, 0x73, 0x68, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x2f, 0x0a, 0x13, 0x69, 0x6e, 0x73,
	0x74, 0x61, 0x6e, 0x74, 0x69, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x73, 0x74, 0x61, 0x63, 0x6b,
	0x18, 0x0d, 0x20, 0x03, 0x28, 0x09, 0x52, 0x12, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x74, 0x69,
	0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x63, 0x6b, 0x12, 0x29, 0x0a, 0x10, 0x64, 0x65,
	0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x73, 0x74, 0x61, 0x63, 0x6b, 0x18, 0x0e,
	0x20, 0x03, 0x28, 0x09, 0x52, 0x0f, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e,
	0x53, 0x74, 0x61, 0x63, 0x6b, 0x4a, 0x04, 0x08, 0x08, 0x10, 0x09, 0x4a, 0x04, 0x08, 0x0b, 0x10,
	0x0c, 0x22, 0x8d, 0x01, 0x0a, 0x13, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x65, 0x64,
	0x52, 0x75, 0x6c, 0x65, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x6c, 0x61, 0x62,
	0x65, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x12,
	0x35, 0x0a, 0x16, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e,
	0x5f, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x73, 0x75, 0x6d, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52,
	0x15, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x68,
	0x65, 0x63, 0x6b, 0x73, 0x75, 0x6d, 0x12, 0x29, 0x0a, 0x10, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67,
	0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d,
	0x52, 0x0f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49,
	0x64, 0x22, 0x83, 0x01, 0x0a, 0x0b, 0x52, 0x75, 0x6c, 0x65, 0x53, 0x75, 0x6d, 0x6d, 0x61, 0x72,
	0x79, 0x12, 0x25, 0x0a, 0x04, 0x72, 0x75, 0x6c, 0x65, 0x18, 0x01, 0x20, 0x02, 0x28, 0x0b, 0x32,
	0x11, 0x2e, 0x62, 0x6c, 0x61, 0x7a, 0x65, 0x5f, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x52, 0x75,
	0x6c, 0x65, 0x52, 0x04, 0x72, 0x75, 0x6c, 0x65, 0x12, 0x31, 0x0a, 0x0a, 0x64, 0x65, 0x70, 0x65,
	0x6e, 0x64, 0x65, 0x6e, 0x63, 0x79, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x62,
	0x6c, 0x61, 0x7a, 0x65, 0x5f, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x52, 0x75, 0x6c, 0x65, 0x52,
	0x0a, 0x64, 0x65, 0x70, 0x65, 0x6e, 0x64, 0x65, 0x6e, 0x63, 0x79, 0x12, 0x1a, 0x0a, 0x08, 0x6c,
	0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6c,
	0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x8b, 0x01, 0x0a, 0x0c, 0x50, 0x61, 0x63, 0x6b,
	0x61, 0x67, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65,
	0x18, 0x01, 0x20, 0x02, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x2b, 0x0a, 0x11,
	0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x64, 0x5f, 0x70, 0x61, 0x63, 0x6b, 0x61, 0x67,
	0x65, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x10, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e,
	0x65, 0x64, 0x50, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x12, 0x34, 0x0a, 0x16, 0x69, 0x6e, 0x63,
	0x6c, 0x75, 0x64, 0x65, 0x64, 0x5f, 0x70, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x5f, 0x67, 0x72,
	0x6f, 0x75, 0x70, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, 0x14, 0x69, 0x6e, 0x63, 0x6c, 0x75,
	0x64, 0x65, 0x64, 0x50, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x4a,
	0x04, 0x08, 0x04, 0x10, 0x05, 0x22, 0x62, 0x0a, 0x10, 0x45, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e,
	0x6d, 0x65, 0x6e, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d,
	0x65, 0x18, 0x01, 0x20, 0x02, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x20, 0x0a,
	0x0b, 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x03,
	0x28, 0x09, 0x52, 0x0b, 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x12,
	0x18, 0x0a, 0x07, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09,
	0x52, 0x07, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x22, 0xb4, 0x02, 0x0a, 0x0a, 0x53, 0x6f,
	0x75, 0x72, 0x63, 0x65, 0x46, 0x69, 0x6c, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65,
	0x18, 0x01, 0x20, 0x02, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x1a, 0x0a, 0x08,
	0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08,
	0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1e, 0x0a, 0x0a, 0x73, 0x75, 0x62, 0x69,
	0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0a, 0x73, 0x75,
	0x62, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x12, 0x23, 0x0a, 0x0d, 0x70, 0x61, 0x63, 0x6b,
	0x61, 0x67, 0x65, 0x5f, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x18, 0x04, 0x20, 0x03, 0x28, 0x09, 0x52,
	0x0c, 0x70, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x12, 0x29, 0x0a,
	0x10, 0x76, 0x69, 0x73, 0x69, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x5f, 0x6c, 0x61, 0x62, 0x65,
	0x6c, 0x18, 0x05, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0f, 0x76, 0x69, 0x73, 0x69, 0x62, 0x69, 0x6c,
	0x69, 0x74, 0x79, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x12, 0x18, 0x0a, 0x07, 0x66, 0x65, 0x61, 0x74,
	0x75, 0x72, 0x65, 0x18, 0x06, 0x20, 0x03, 0x28, 0x09, 0x52, 0x07, 0x66, 0x65, 0x61, 0x74, 0x75,
	0x72, 0x65, 0x12, 0x2e, 0x0a, 0x07, 0x6c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x18, 0x08, 0x20,
	0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x62, 0x6c, 0x61, 0x7a, 0x65, 0x5f, 0x71, 0x75, 0x65, 0x72,
	0x79, 0x2e, 0x4c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x52, 0x07, 0x6c, 0x69, 0x63, 0x65, 0x6e,
	0x73, 0x65, 0x12, 0x36, 0x0a, 0x17, 0x70, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x5f, 0x63, 0x6f,
	0x6e, 0x74, 0x61, 0x69, 0x6e, 0x73, 0x5f, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x73, 0x18, 0x09, 0x20,
	0x01, 0x28, 0x08, 0x52, 0x15, 0x70, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x43, 0x6f, 0x6e, 0x74,
	0x61, 0x69, 0x6e, 0x73, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x73, 0x4a, 0x04, 0x08, 0x07, 0x10, 0x08,
	0x22, 0x68, 0x0a, 0x0d, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x46, 0x69, 0x6c,
	0x65, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x02, 0x28, 0x09, 0x52,
	0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x27, 0x0a, 0x0f, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74,
	0x69, 0x6e, 0x67, 0x5f, 0x72, 0x75, 0x6c, 0x65, 0x18, 0x02, 0x20, 0x02, 0x28, 0x09, 0x52, 0x0e,
	0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6e, 0x67, 0x52, 0x75, 0x6c, 0x65, 0x12, 0x1a,
	0x0a, 0x08, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09,
	0x52, 0x08, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0xd9, 0x03, 0x0a, 0x06, 0x54,
	0x61, 0x72, 0x67, 0x65, 0x74, 0x12, 0x35, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20,
	0x02, 0x28, 0x0e, 0x32, 0x21, 0x2e, 0x62, 0x6c, 0x61, 0x7a, 0x65, 0x5f, 0x71, 0x75, 0x65, 0x72,
	0x79, 0x2e, 0x54, 0x61, 0x72, 0x67, 0x65, 0x74, 0x2e, 0x44, 0x69, 0x73, 0x63, 0x72, 0x69, 0x6d,
	0x69, 0x6e, 0x61, 0x74, 0x6f, 0x72, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x25, 0x0a, 0x04,
	0x72, 0x75, 0x6c, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x62, 0x6c, 0x61,
	0x7a, 0x65, 0x5f, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x52, 0x75, 0x6c, 0x65, 0x52, 0x04, 0x72,
	0x75, 0x6c, 0x65, 0x12, 0x38, 0x0a, 0x0b, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x66, 0x69,
	0x6c, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x62, 0x6c, 0x61, 0x7a, 0x65,
	0x5f, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x46, 0x69, 0x6c,
	0x65, 0x52, 0x0a, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x46, 0x69, 0x6c, 0x65, 0x12, 0x41, 0x0a,
	0x0e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x66, 0x69, 0x6c, 0x65, 0x18,
	0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x62, 0x6c, 0x61, 0x7a, 0x65, 0x5f, 0x71, 0x75,
	0x65, 0x72, 0x79, 0x2e, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x46, 0x69, 0x6c,
	0x65, 0x52, 0x0d, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x46, 0x69, 0x6c, 0x65,
	0x12, 0x3e, 0x0a, 0x0d, 0x70, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x5f, 0x67, 0x72, 0x6f, 0x75,
	0x70, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x62, 0x6c, 0x61, 0x7a, 0x65, 0x5f,
	0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x50, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x47, 0x72, 0x6f,
	0x75, 0x70, 0x52, 0x0c, 0x70, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70,
	0x12, 0x4a, 0x0a, 0x11, 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x5f,
	0x67, 0x72, 0x6f, 0x75, 0x70, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x62, 0x6c,
	0x61, 0x7a, 0x65, 0x5f, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x45, 0x6e, 0x76, 0x69, 0x72, 0x6f,
	0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x10, 0x65, 0x6e, 0x76, 0x69,
	0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x22, 0x68, 0x0a, 0x0d,
	0x44, 0x69, 0x73, 0x63, 0x72, 0x69, 0x6d, 0x69, 0x6e, 0x61, 0x74, 0x6f, 0x72, 0x12, 0x08, 0x0a,
	0x04, 0x52, 0x55, 0x4c, 0x45, 0x10, 0x01, 0x12, 0x0f, 0x0a, 0x0b, 0x53, 0x4f, 0x55, 0x52, 0x43,
	0x45, 0x5f, 0x46, 0x49, 0x4c, 0x45, 0x10, 0x02, 0x12, 0x12, 0x0a, 0x0e, 0x47, 0x45, 0x4e, 0x45,
	0x52, 0x41, 0x54, 0x45, 0x44, 0x5f, 0x46, 0x49, 0x4c, 0x45, 0x10, 0x03, 0x12, 0x11, 0x0a, 0x0d,
	0x50, 0x41, 0x43, 0x4b, 0x41, 0x47, 0x45, 0x5f, 0x47, 0x52, 0x4f, 0x55, 0x50, 0x10, 0x04, 0x12,
	0x15, 0x0a, 0x11, 0x45, 0x4e, 0x56, 0x49, 0x52, 0x4f, 0x4e, 0x4d, 0x45, 0x4e, 0x54, 0x5f, 0x47,
	0x52, 0x4f, 0x55, 0x50, 0x10, 0x05, 0x22, 0x3a, 0x0a, 0x0b, 0x51, 0x75, 0x65, 0x72, 0x79, 0x52,
	0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x2b, 0x0a, 0x06, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x18,
	0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x62, 0x6c, 0x61, 0x7a, 0x65, 0x5f, 0x71, 0x75,
	0x65, 0x72, 0x79, 0x2e, 0x54, 0x61, 0x72, 0x67, 0x65, 0x74, 0x52, 0x06, 0x74, 0x61, 0x72, 0x67,
	0x65, 0x74, 0x22, 0xc0, 0x01, 0x0a, 0x14, 0x41, 0x6c, 0x6c, 0x6f, 0x77, 0x65, 0x64, 0x52, 0x75,
	0x6c, 0x65, 0x43, 0x6c, 0x61, 0x73, 0x73, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x4c, 0x0a, 0x06, 0x70,
	0x6f, 0x6c, 0x69, 0x63, 0x79, 0x18, 0x01, 0x20, 0x02, 0x28, 0x0e, 0x32, 0x34, 0x2e, 0x62, 0x6c,
	0x61, 0x7a, 0x65, 0x5f, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x41, 0x6c, 0x6c, 0x6f, 0x77, 0x65,
	0x64, 0x52, 0x75, 0x6c, 0x65, 0x43, 0x6c, 0x61, 0x73, 0x73, 0x49, 0x6e, 0x66, 0x6f, 0x2e, 0x41,
	0x6c, 0x6c, 0x6f, 0x77, 0x65, 0x64, 0x52, 0x75, 0x6c, 0x65, 0x43, 0x6c, 0x61, 0x73, 0x73, 0x65,
	0x73, 0x52, 0x06, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x12, 0x2c, 0x0a, 0x12, 0x61, 0x6c, 0x6c,
	0x6f, 0x77, 0x65, 0x64, 0x5f, 0x72, 0x75, 0x6c, 0x65, 0x5f, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x18,
	0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x10, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x65, 0x64, 0x52, 0x75,
	0x6c, 0x65, 0x43, 0x6c, 0x61, 0x73, 0x73, 0x22, 0x2c, 0x0a, 0x12, 0x41, 0x6c, 0x6c, 0x6f, 0x77,
	0x65, 0x64, 0x52, 0x75, 0x6c, 0x65, 0x43, 0x6c, 0x61, 0x73, 0x73, 0x65, 0x73, 0x12, 0x07, 0x0a,
	0x03, 0x41, 0x4e, 0x59, 0x10, 0x01, 0x12, 0x0d, 0x0a, 0x09, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46,
	0x49, 0x45, 0x44, 0x10, 0x02, 0x22, 0xfa, 0x03, 0x0a, 0x13, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62,
	0x75, 0x74, 0x65, 0x44, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x12, 0x0a,
	0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x02, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d,
	0x65, 0x12, 0x38, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x02, 0x28, 0x0e, 0x32,
	0x24, 0x2e, 0x62, 0x6c, 0x61, 0x7a, 0x65, 0x5f, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x41, 0x74,
	0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x2e, 0x44, 0x69, 0x73, 0x63, 0x72, 0x69, 0x6d, 0x69,
	0x6e, 0x61, 0x74, 0x6f, 0x72, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x6d,
	0x61, 0x6e, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09,
	0x6d, 0x61, 0x6e, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x79, 0x12, 0x53, 0x0a, 0x14, 0x61, 0x6c, 0x6c,
	0x6f, 0x77, 0x65, 0x64, 0x5f, 0x72, 0x75, 0x6c, 0x65, 0x5f, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x65,
	0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x62, 0x6c, 0x61, 0x7a, 0x65, 0x5f,
	0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x41, 0x6c, 0x6c, 0x6f, 0x77, 0x65, 0x64, 0x52, 0x75, 0x6c,
	0x65, 0x43, 0x6c, 0x61, 0x73, 0x73, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x12, 0x61, 0x6c, 0x6c, 0x6f,
	0x77, 0x65, 0x64, 0x52, 0x75, 0x6c, 0x65, 0x43, 0x6c, 0x61, 0x73, 0x73, 0x65, 0x73, 0x12, 0x24,
	0x0a, 0x0d, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18,
	0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x61,
	0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1f, 0x0a, 0x0b, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x5f, 0x65, 0x6d,
	0x70, 0x74, 0x79, 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, 0x61, 0x6c, 0x6c, 0x6f, 0x77,
	0x45, 0x6d, 0x70, 0x74, 0x79, 0x12, 0x2a, 0x0a, 0x11, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x5f, 0x73,
	0x69, 0x6e, 0x67, 0x6c, 0x65, 0x5f, 0x66, 0x69, 0x6c, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x08,
	0x52, 0x0f, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x53, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x46, 0x69, 0x6c,
	0x65, 0x12, 0x35, 0x0a, 0x07, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x18, 0x09, 0x20, 0x01,
	0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x62, 0x6c, 0x61, 0x7a, 0x65, 0x5f, 0x71, 0x75, 0x65, 0x72, 0x79,
	0x2e, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52,
	0x07, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x12, 0x1e, 0x0a, 0x0a, 0x65, 0x78, 0x65, 0x63,
	0x75, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, 0x65, 0x78,
	0x65, 0x63, 0x75, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x12, 0x22, 0x0a, 0x0c, 0x63, 0x6f, 0x6e, 0x66,
	0x69, 0x67, 0x75, 0x72, 0x61, 0x62, 0x6c, 0x65, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c,
	0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x62, 0x6c, 0x65, 0x12, 0x14, 0x0a, 0x05,
	0x6e, 0x6f, 0x64, 0x65, 0x70, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x08, 0x52, 0x05, 0x6e, 0x6f, 0x64,
	0x65, 0x70, 0x12, 0x1e, 0x0a, 0x0b, 0x63, 0x66, 0x67, 0x5f, 0x69, 0x73, 0x5f, 0x68, 0x6f, 0x73,
	0x74, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x63, 0x66, 0x67, 0x49, 0x73, 0x48, 0x6f,
	0x73, 0x74, 0x22, 0x8c, 0x02, 0x0a, 0x0e, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65,
	0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x69, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01,
	0x28, 0x05, 0x52, 0x03, 0x69, 0x6e, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x72, 0x69, 0x6e,
	0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x12,
	0x12, 0x0a, 0x04, 0x62, 0x6f, 0x6f, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x04, 0x62,
	0x6f, 0x6f, 0x6c, 0x12, 0x2f, 0x0a, 0x04, 0x6c, 0x69, 0x73, 0x74, 0x18, 0x04, 0x20, 0x03, 0x28,
	0x0b, 0x32, 0x1b, 0x2e, 0x62, 0x6c, 0x61, 0x7a, 0x65, 0x5f, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e,
	0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x04,
	0x6c, 0x69, 0x73, 0x74, 0x12, 0x39, 0x0a, 0x04, 0x64, 0x69, 0x63, 0x74, 0x18, 0x05, 0x20, 0x03,
	0x28, 0x0b, 0x32, 0x25, 0x2e, 0x62, 0x6c, 0x61, 0x7a, 0x65, 0x5f, 0x71, 0x75, 0x65, 0x72, 0x79,
	0x2e, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x2e,
	0x44, 0x69, 0x63, 0x74, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x04, 0x64, 0x69, 0x63, 0x74, 0x1a,
	0x50, 0x0a, 0x09, 0x44, 0x69, 0x63, 0x74, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03,
	0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x02, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x31,
	0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x02, 0x28, 0x0b, 0x32, 0x1b, 0x2e,
	0x62, 0x6c, 0x61, 0x7a, 0x65, 0x5f, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x41, 0x74, 0x74, 0x72,
	0x69, 0x62, 0x75, 0x74, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75,
	0x65, 0x22, 0xa0, 0x01, 0x0a, 0x0e, 0x52, 0x75, 0x6c, 0x65, 0x44, 0x65, 0x66, 0x69, 0x6e, 0x69,
	0x74, 0x69, 0x6f, 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x02,
	0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x3e, 0x0a, 0x09, 0x61, 0x74, 0x74, 0x72,
	0x69, 0x62, 0x75, 0x74, 0x65, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x62, 0x6c,
	0x61, 0x7a, 0x65, 0x5f, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62,
	0x75, 0x74, 0x65, 0x44, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x09, 0x61,
	0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x12, 0x24, 0x0a, 0x0d, 0x64, 0x6f, 0x63, 0x75,
	0x6d, 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52,
	0x0d, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x14,
	0x0a, 0x05, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x6c,
	0x61, 0x62, 0x65, 0x6c, 0x22, 0x40, 0x0a, 0x0d, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x4c, 0x61, 0x6e,
	0x67, 0x75, 0x61, 0x67, 0x65, 0x12, 0x2f, 0x0a, 0x04, 0x72, 0x75, 0x6c, 0x65, 0x18, 0x01, 0x20,
	0x03, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x62, 0x6c, 0x61, 0x7a, 0x65, 0x5f, 0x71, 0x75, 0x65, 0x72,
	0x79, 0x2e, 0x52, 0x75, 0x6c, 0x65, 0x44, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e,
	0x52, 0x04, 0x72, 0x75, 0x6c, 0x65, 0x42, 0x36, 0x0a, 0x34, 0x63, 0x6f, 0x6d, 0x2e, 0x67, 0x6f,
	0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x64, 0x65, 0x76, 0x74, 0x6f, 0x6f, 0x6c, 0x73, 0x2e, 0x62, 0x75,
	0x69, 0x6c, 0x64, 0x2e, 0x6c, 0x69, 0x62, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x32, 0x2e, 0x70,
	0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x32, 0x61, 0x70, 0x69,
}

var (
	file_src_main_protobuf_build_proto_rawDescOnce sync.Once
	file_src_main_protobuf_build_proto_rawDescData = file_src_main_protobuf_build_proto_rawDesc
)

func file_src_main_protobuf_build_proto_rawDescGZIP() []byte {
	file_src_main_protobuf_build_proto_rawDescOnce.Do(func() {
		file_src_main_protobuf_build_proto_rawDescData = protoimpl.X.CompressGZIP(file_src_main_protobuf_build_proto_rawDescData)
	})
	return file_src_main_protobuf_build_proto_rawDescData
}

var file_src_main_protobuf_build_proto_enumTypes = make([]protoimpl.EnumInfo, 5)
var file_src_main_protobuf_build_proto_msgTypes = make([]protoimpl.MessageInfo, 26)
var file_src_main_protobuf_build_proto_goTypes = []interface{}{
	(FilesetEntry_SymlinkBehavior)(0),            // 0: blaze_query.FilesetEntry.SymlinkBehavior
	(Attribute_Discriminator)(0),                 // 1: blaze_query.Attribute.Discriminator
	(Attribute_Tristate)(0),                      // 2: blaze_query.Attribute.Tristate
	(Target_Discriminator)(0),                    // 3: blaze_query.Target.Discriminator
	(AllowedRuleClassInfo_AllowedRuleClasses)(0), // 4: blaze_query.AllowedRuleClassInfo.AllowedRuleClasses
	(*License)(nil),                              // 5: blaze_query.License
	(*StringDictEntry)(nil),                      // 6: blaze_query.StringDictEntry
	(*LabelDictUnaryEntry)(nil),                  // 7: blaze_query.LabelDictUnaryEntry
	(*LabelListDictEntry)(nil),                   // 8: blaze_query.LabelListDictEntry
	(*LabelKeyedStringDictEntry)(nil),            // 9: blaze_query.LabelKeyedStringDictEntry
	(*StringListDictEntry)(nil),                  // 10: blaze_query.StringListDictEntry
	(*FilesetEntry)(nil),                         // 11: blaze_query.FilesetEntry
	(*Attribute)(nil),                            // 12: blaze_query.Attribute
	(*Rule)(nil),                                 // 13: blaze_query.Rule
	(*ConfiguredRuleInput)(nil),                  // 14: blaze_query.ConfiguredRuleInput
	(*RuleSummary)(nil),                          // 15: blaze_query.RuleSummary
	(*PackageGroup)(nil),                         // 16: blaze_query.PackageGroup
	(*EnvironmentGroup)(nil),                     // 17: blaze_query.EnvironmentGroup
	(*SourceFile)(nil),                           // 18: blaze_query.SourceFile
	(*GeneratedFile)(nil),                        // 19: blaze_query.GeneratedFile
	(*Target)(nil),                               // 20: blaze_query.Target
	(*QueryResult)(nil),                          // 21: blaze_query.QueryResult
	(*AllowedRuleClassInfo)(nil),                 // 22: blaze_query.AllowedRuleClassInfo
	(*AttributeDefinition)(nil),                  // 23: blaze_query.AttributeDefinition
	(*AttributeValue)(nil),                       // 24: blaze_query.AttributeValue
	(*RuleDefinition)(nil),                       // 25: blaze_query.RuleDefinition
	(*BuildLanguage)(nil),                        // 26: blaze_query.BuildLanguage
	(*Attribute_SelectorEntry)(nil),              // 27: blaze_query.Attribute.SelectorEntry
	(*Attribute_Selector)(nil),                   // 28: blaze_query.Attribute.Selector
	(*Attribute_SelectorList)(nil),               // 29: blaze_query.Attribute.SelectorList
	(*AttributeValue_DictEntry)(nil),             // 30: blaze_query.AttributeValue.DictEntry
}
var file_src_main_protobuf_build_proto_depIdxs = []int32{
	0,  // 0: blaze_query.FilesetEntry.symlink_behavior:type_name -> blaze_query.FilesetEntry.SymlinkBehavior
	1,  // 1: blaze_query.Attribute.type:type_name -> blaze_query.Attribute.Discriminator
	2,  // 2: blaze_query.Attribute.tristate_value:type_name -> blaze_query.Attribute.Tristate
	5,  // 3: blaze_query.Attribute.license:type_name -> blaze_query.License
	6,  // 4: blaze_query.Attribute.string_dict_value:type_name -> blaze_query.StringDictEntry
	11, // 5: blaze_query.Attribute.fileset_list_value:type_name -> blaze_query.FilesetEntry
	8,  // 6: blaze_query.Attribute.label_list_dict_value:type_name -> blaze_query.LabelListDictEntry
	10, // 7: blaze_query.Attribute.string_list_dict_value:type_name -> blaze_query.StringListDictEntry
	7,  // 8: blaze_query.Attribute.label_dict_unary_value:type_name -> blaze_query.LabelDictUnaryEntry
	9,  // 9: blaze_query.Attribute.label_keyed_string_dict_value:type_name -> blaze_query.LabelKeyedStringDictEntry
	29, // 10: blaze_query.Attribute.selector_list:type_name -> blaze_query.Attribute.SelectorList
	12, // 11: blaze_query.Rule.attribute:type_name -> blaze_query.Attribute
	14, // 12: blaze_query.Rule.configured_rule_input:type_name -> blaze_query.ConfiguredRuleInput
	13, // 13: blaze_query.RuleSummary.rule:type_name -> blaze_query.Rule
	13, // 14: blaze_query.RuleSummary.dependency:type_name -> blaze_query.Rule
	5,  // 15: blaze_query.SourceFile.license:type_name -> blaze_query.License
	3,  // 16: blaze_query.Target.type:type_name -> blaze_query.Target.Discriminator
	13, // 17: blaze_query.Target.rule:type_name -> blaze_query.Rule
	18, // 18: blaze_query.Target.source_file:type_name -> blaze_query.SourceFile
	19, // 19: blaze_query.Target.generated_file:type_name -> blaze_query.GeneratedFile
	16, // 20: blaze_query.Target.package_group:type_name -> blaze_query.PackageGroup
	17, // 21: blaze_query.Target.environment_group:type_name -> blaze_query.EnvironmentGroup
	20, // 22: blaze_query.QueryResult.target:type_name -> blaze_query.Target
	4,  // 23: blaze_query.AllowedRuleClassInfo.policy:type_name -> blaze_query.AllowedRuleClassInfo.AllowedRuleClasses
	1,  // 24: blaze_query.AttributeDefinition.type:type_name -> blaze_query.Attribute.Discriminator
	22, // 25: blaze_query.AttributeDefinition.allowed_rule_classes:type_name -> blaze_query.AllowedRuleClassInfo
	24, // 26: blaze_query.AttributeDefinition.default:type_name -> blaze_query.AttributeValue
	24, // 27: blaze_query.AttributeValue.list:type_name -> blaze_query.AttributeValue
	30, // 28: blaze_query.AttributeValue.dict:type_name -> blaze_query.AttributeValue.DictEntry
	23, // 29: blaze_query.RuleDefinition.attribute:type_name -> blaze_query.AttributeDefinition
	25, // 30: blaze_query.BuildLanguage.rule:type_name -> blaze_query.RuleDefinition
	2,  // 31: blaze_query.Attribute.SelectorEntry.tristate_value:type_name -> blaze_query.Attribute.Tristate
	5,  // 32: blaze_query.Attribute.SelectorEntry.license:type_name -> blaze_query.License
	6,  // 33: blaze_query.Attribute.SelectorEntry.string_dict_value:type_name -> blaze_query.StringDictEntry
	11, // 34: blaze_query.Attribute.SelectorEntry.fileset_list_value:type_name -> blaze_query.FilesetEntry
	8,  // 35: blaze_query.Attribute.SelectorEntry.label_list_dict_value:type_name -> blaze_query.LabelListDictEntry
	10, // 36: blaze_query.Attribute.SelectorEntry.string_list_dict_value:type_name -> blaze_query.StringListDictEntry
	7,  // 37: blaze_query.Attribute.SelectorEntry.label_dict_unary_value:type_name -> blaze_query.LabelDictUnaryEntry
	9,  // 38: blaze_query.Attribute.SelectorEntry.label_keyed_string_dict_value:type_name -> blaze_query.LabelKeyedStringDictEntry
	27, // 39: blaze_query.Attribute.Selector.entries:type_name -> blaze_query.Attribute.SelectorEntry
	1,  // 40: blaze_query.Attribute.SelectorList.type:type_name -> blaze_query.Attribute.Discriminator
	28, // 41: blaze_query.Attribute.SelectorList.elements:type_name -> blaze_query.Attribute.Selector
	24, // 42: blaze_query.AttributeValue.DictEntry.value:type_name -> blaze_query.AttributeValue
	43, // [43:43] is the sub-list for method output_type
	43, // [43:43] is the sub-list for method input_type
	43, // [43:43] is the sub-list for extension type_name
	43, // [43:43] is the sub-list for extension extendee
	0,  // [0:43] is the sub-list for field type_name
}

func init() { file_src_main_protobuf_build_proto_init() }
func file_src_main_protobuf_build_proto_init() {
	if File_src_main_protobuf_build_proto != nil {
		return
	}
	if !protoimpl.UnsafeEnabled {
		file_src_main_protobuf_build_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*License); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_src_main_protobuf_build_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*StringDictEntry); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_src_main_protobuf_build_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*LabelDictUnaryEntry); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_src_main_protobuf_build_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*LabelListDictEntry); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_src_main_protobuf_build_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*LabelKeyedStringDictEntry); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_src_main_protobuf_build_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*StringListDictEntry); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_src_main_protobuf_build_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*FilesetEntry); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_src_main_protobuf_build_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*Attribute); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_src_main_protobuf_build_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*Rule); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_src_main_protobuf_build_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*ConfiguredRuleInput); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_src_main_protobuf_build_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*RuleSummary); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_src_main_protobuf_build_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*PackageGroup); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_src_main_protobuf_build_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*EnvironmentGroup); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_src_main_protobuf_build_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*SourceFile); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_src_main_protobuf_build_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*GeneratedFile); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_src_main_protobuf_build_proto_msgTypes[15].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*Target); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_src_main_protobuf_build_proto_msgTypes[16].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*QueryResult); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_src_main_protobuf_build_proto_msgTypes[17].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*AllowedRuleClassInfo); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_src_main_protobuf_build_proto_msgTypes[18].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*AttributeDefinition); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_src_main_protobuf_build_proto_msgTypes[19].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*AttributeValue); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_src_main_protobuf_build_proto_msgTypes[20].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*RuleDefinition); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_src_main_protobuf_build_proto_msgTypes[21].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*BuildLanguage); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_src_main_protobuf_build_proto_msgTypes[22].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*Attribute_SelectorEntry); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_src_main_protobuf_build_proto_msgTypes[23].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*Attribute_Selector); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_src_main_protobuf_build_proto_msgTypes[24].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*Attribute_SelectorList); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_src_main_protobuf_build_proto_msgTypes[25].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*AttributeValue_DictEntry); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
	}
	type x struct{}
	out := protoimpl.TypeBuilder{
		File: protoimpl.DescBuilder{
			GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
			RawDescriptor: file_src_main_protobuf_build_proto_rawDesc,
			NumEnums:      5,
			NumMessages:   26,
			NumExtensions: 0,
			NumServices:   0,
		},
		GoTypes:           file_src_main_protobuf_build_proto_goTypes,
		DependencyIndexes: file_src_main_protobuf_build_proto_depIdxs,
		EnumInfos:         file_src_main_protobuf_build_proto_enumTypes,
		MessageInfos:      file_src_main_protobuf_build_proto_msgTypes,
	}.Build()
	File_src_main_protobuf_build_proto = out.File
	file_src_main_protobuf_build_proto_rawDesc = nil
	file_src_main_protobuf_build_proto_goTypes = nil
	file_src_main_protobuf_build_proto_depIdxs = nil
}
