// Code generated by protoc-gen-go. DO NOT EDIT.
// versions:
// 	protoc-gen-go v1.25.0-devel
// 	protoc        v3.6.1
// source: chromite/api/packages.proto

package api

import (
	chromiumos "go.chromium.org/chromiumos/infra/proto/go/chromiumos"
	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)
)

// Reasons for needing Chrome source.
type NeedsChromeSourceResponse_Reason int32

const (
	NeedsChromeSourceResponse_UNSPECIFIED NeedsChromeSourceResponse_Reason = 0
	// There is no Chrome prebuilt available.
	NeedsChromeSourceResponse_NO_PREBUILT NeedsChromeSourceResponse_Reason = 1
	// The builder is compiling from source.
	NeedsChromeSourceResponse_COMPILE_SOURCE NeedsChromeSourceResponse_Reason = 2
	// There is a local uprev of Chrome.
	NeedsChromeSourceResponse_LOCAL_UPREV NeedsChromeSourceResponse_Reason = 3
	// A follower package lacks prebuilts.
	NeedsChromeSourceResponse_FOLLOWER_LACKS_PREBUILT NeedsChromeSourceResponse_Reason = 4
)

// Enum value maps for NeedsChromeSourceResponse_Reason.
var (
	NeedsChromeSourceResponse_Reason_name = map[int32]string{
		0: "UNSPECIFIED",
		1: "NO_PREBUILT",
		2: "COMPILE_SOURCE",
		3: "LOCAL_UPREV",
		4: "FOLLOWER_LACKS_PREBUILT",
	}
	NeedsChromeSourceResponse_Reason_value = map[string]int32{
		"UNSPECIFIED":             0,
		"NO_PREBUILT":             1,
		"COMPILE_SOURCE":          2,
		"LOCAL_UPREV":             3,
		"FOLLOWER_LACKS_PREBUILT": 4,
	}
)

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

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

func (NeedsChromeSourceResponse_Reason) Descriptor() protoreflect.EnumDescriptor {
	return file_chromite_api_packages_proto_enumTypes[0].Descriptor()
}

func (NeedsChromeSourceResponse_Reason) Type() protoreflect.EnumType {
	return &file_chromite_api_packages_proto_enumTypes[0]
}

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

// Deprecated: Use NeedsChromeSourceResponse_Reason.Descriptor instead.
func (NeedsChromeSourceResponse_Reason) EnumDescriptor() ([]byte, []int) {
	return file_chromite_api_packages_proto_rawDescGZIP(), []int{13, 0}
}

// This can easily be generalized to a Builds method if necessary, but
// currently we have no use case for anything but Chrome, and making this
// specifically for Chrome simplifies the calling code significantly.
type BuildsChromeRequest struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	// The chroot where the operations will be executed.
	// Required.
	Chroot *chromiumos.Chroot `protobuf:"bytes,1,opt,name=chroot,proto3" json:"chroot,omitempty"`
	// The build target we are checking for.
	BuildTarget *chromiumos.BuildTarget `protobuf:"bytes,2,opt,name=build_target,json=buildTarget,proto3" json:"build_target,omitempty"`
	// List of packages to be installed by the builder. If none are specified the
	// standard list of packages is used.  Added in R79.
	Packages []*chromiumos.PackageInfo `protobuf:"bytes,3,rep,name=packages,proto3" json:"packages,omitempty"`
}

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

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

func (*BuildsChromeRequest) ProtoMessage() {}

func (x *BuildsChromeRequest) ProtoReflect() protoreflect.Message {
	mi := &file_chromite_api_packages_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 BuildsChromeRequest.ProtoReflect.Descriptor instead.
func (*BuildsChromeRequest) Descriptor() ([]byte, []int) {
	return file_chromite_api_packages_proto_rawDescGZIP(), []int{0}
}

func (x *BuildsChromeRequest) GetChroot() *chromiumos.Chroot {
	if x != nil {
		return x.Chroot
	}
	return nil
}

func (x *BuildsChromeRequest) GetBuildTarget() *chromiumos.BuildTarget {
	if x != nil {
		return x.BuildTarget
	}
	return nil
}

func (x *BuildsChromeRequest) GetPackages() []*chromiumos.PackageInfo {
	if x != nil {
		return x.Packages
	}
	return nil
}

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

	// Whether or not it builds chrome.
	BuildsChrome bool `protobuf:"varint,1,opt,name=builds_chrome,json=buildsChrome,proto3" json:"builds_chrome,omitempty"`
}

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

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

func (*BuildsChromeResponse) ProtoMessage() {}

func (x *BuildsChromeResponse) ProtoReflect() protoreflect.Message {
	mi := &file_chromite_api_packages_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 BuildsChromeResponse.ProtoReflect.Descriptor instead.
func (*BuildsChromeResponse) Descriptor() ([]byte, []int) {
	return file_chromite_api_packages_proto_rawDescGZIP(), []int{1}
}

func (x *BuildsChromeResponse) GetBuildsChrome() bool {
	if x != nil {
		return x.BuildsChrome
	}
	return false
}

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

	// An atom to pass to portageq, e.g. 'chromeos-chrome'.
	Atom string `protobuf:"bytes,1,opt,name=atom,proto3" json:"atom,omitempty"`
	// The chroot path.  Added in R78.
	// Required if not in the default location.
	Chroot *chromiumos.Chroot `protobuf:"bytes,2,opt,name=chroot,proto3" json:"chroot,omitempty"`
	// The build target to examine. Checks the chroot when not provided.
	// Required when examining a build target.  Added in R78.
	BuildTarget *chromiumos.BuildTarget `protobuf:"bytes,3,opt,name=build_target,json=buildTarget,proto3" json:"build_target,omitempty"`
}

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

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

func (*GetBestVisibleRequest) ProtoMessage() {}

func (x *GetBestVisibleRequest) ProtoReflect() protoreflect.Message {
	mi := &file_chromite_api_packages_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 GetBestVisibleRequest.ProtoReflect.Descriptor instead.
func (*GetBestVisibleRequest) Descriptor() ([]byte, []int) {
	return file_chromite_api_packages_proto_rawDescGZIP(), []int{2}
}

func (x *GetBestVisibleRequest) GetAtom() string {
	if x != nil {
		return x.Atom
	}
	return ""
}

func (x *GetBestVisibleRequest) GetChroot() *chromiumos.Chroot {
	if x != nil {
		return x.Chroot
	}
	return nil
}

func (x *GetBestVisibleRequest) GetBuildTarget() *chromiumos.BuildTarget {
	if x != nil {
		return x.BuildTarget
	}
	return nil
}

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

	// TODO: is this sufficient? Needs tag too?
	PackageInfo *chromiumos.PackageInfo `protobuf:"bytes,1,opt,name=package_info,json=packageInfo,proto3" json:"package_info,omitempty"`
}

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

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

func (*GetBestVisibleResponse) ProtoMessage() {}

func (x *GetBestVisibleResponse) ProtoReflect() protoreflect.Message {
	mi := &file_chromite_api_packages_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 GetBestVisibleResponse.ProtoReflect.Descriptor instead.
func (*GetBestVisibleResponse) Descriptor() ([]byte, []int) {
	return file_chromite_api_packages_proto_rawDescGZIP(), []int{3}
}

func (x *GetBestVisibleResponse) GetPackageInfo() *chromiumos.PackageInfo {
	if x != nil {
		return x.PackageInfo
	}
	return nil
}

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

	// The chroot path.
	// Required if not in the default location.
	Chroot *chromiumos.Chroot `protobuf:"bytes,1,opt,name=chroot,proto3" json:"chroot,omitempty"`
	// The build target to examine.
	// Required.
	BuildTarget *chromiumos.BuildTarget `protobuf:"bytes,2,opt,name=build_target,json=buildTarget,proto3" json:"build_target,omitempty"`
}

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

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

func (*GetChromeVersionRequest) ProtoMessage() {}

func (x *GetChromeVersionRequest) ProtoReflect() protoreflect.Message {
	mi := &file_chromite_api_packages_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 GetChromeVersionRequest.ProtoReflect.Descriptor instead.
func (*GetChromeVersionRequest) Descriptor() ([]byte, []int) {
	return file_chromite_api_packages_proto_rawDescGZIP(), []int{4}
}

func (x *GetChromeVersionRequest) GetChroot() *chromiumos.Chroot {
	if x != nil {
		return x.Chroot
	}
	return nil
}

func (x *GetChromeVersionRequest) GetBuildTarget() *chromiumos.BuildTarget {
	if x != nil {
		return x.BuildTarget
	}
	return nil
}

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

	// The chrome version.
	Version string `protobuf:"bytes,1,opt,name=version,proto3" json:"version,omitempty"`
}

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

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

func (*GetChromeVersionResponse) ProtoMessage() {}

func (x *GetChromeVersionResponse) ProtoReflect() protoreflect.Message {
	mi := &file_chromite_api_packages_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 GetChromeVersionResponse.ProtoReflect.Descriptor instead.
func (*GetChromeVersionResponse) Descriptor() ([]byte, []int) {
	return file_chromite_api_packages_proto_rawDescGZIP(), []int{5}
}

func (x *GetChromeVersionResponse) GetVersion() string {
	if x != nil {
		return x.Version
	}
	return ""
}

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

	// The chroot path.
	// Required if not in the default location.
	Chroot *chromiumos.Chroot `protobuf:"bytes,1,opt,name=chroot,proto3" json:"chroot,omitempty"`
	// The build target to examine.
	// Required.
	BuildTarget *chromiumos.BuildTarget `protobuf:"bytes,2,opt,name=build_target,json=buildTarget,proto3" json:"build_target,omitempty"`
	// Optional packages to generate the depgraph for, such as
	// 'virtual/target-fuzzers'.  This is passed in based on the informational
	// builder type, see chromite/config/chromeos_config.py for examples.
	Packages []*chromiumos.PackageInfo `protobuf:"bytes,3,rep,name=packages,proto3" json:"packages,omitempty"`
}

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

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

func (*GetTargetVersionsRequest) ProtoMessage() {}

func (x *GetTargetVersionsRequest) ProtoReflect() protoreflect.Message {
	mi := &file_chromite_api_packages_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 GetTargetVersionsRequest.ProtoReflect.Descriptor instead.
func (*GetTargetVersionsRequest) Descriptor() ([]byte, []int) {
	return file_chromite_api_packages_proto_rawDescGZIP(), []int{6}
}

func (x *GetTargetVersionsRequest) GetChroot() *chromiumos.Chroot {
	if x != nil {
		return x.Chroot
	}
	return nil
}

func (x *GetTargetVersionsRequest) GetBuildTarget() *chromiumos.BuildTarget {
	if x != nil {
		return x.BuildTarget
	}
	return nil
}

func (x *GetTargetVersionsRequest) GetPackages() []*chromiumos.PackageInfo {
	if x != nil {
		return x.Packages
	}
	return nil
}

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

	// Android version, e.g. 5812377
	AndroidVersion string `protobuf:"bytes,1,opt,name=android_version,json=androidVersion,proto3" json:"android_version,omitempty"`
	// Android-branch version, e.g. git_nyc
	AndroidBranchVersion string `protobuf:"bytes,2,opt,name=android_branch_version,json=androidBranchVersion,proto3" json:"android_branch_version,omitempty"`
	// Android-target version, e.g. cheets
	AndroidTargetVersion string `protobuf:"bytes,3,opt,name=android_target_version,json=androidTargetVersion,proto3" json:"android_target_version,omitempty"`
	// Chrome version, e.g. 78.0.3877.0.
	ChromeVersion string `protobuf:"bytes,4,opt,name=chrome_version,json=chromeVersion,proto3" json:"chrome_version,omitempty"`
	// Full version, e.g. R78-12438.0.0.
	FullVersion string `protobuf:"bytes,5,opt,name=full_version,json=fullVersion,proto3" json:"full_version,omitempty"`
	// Milestone version, e.g. 78.
	MilestoneVersion string `protobuf:"bytes,6,opt,name=milestone_version,json=milestoneVersion,proto3" json:"milestone_version,omitempty"`
	// Platform version, e.g. 12438.0.0.
	PlatformVersion string `protobuf:"bytes,7,opt,name=platform_version,json=platformVersion,proto3" json:"platform_version,omitempty"`
}

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

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

func (*GetTargetVersionsResponse) ProtoMessage() {}

func (x *GetTargetVersionsResponse) ProtoReflect() protoreflect.Message {
	mi := &file_chromite_api_packages_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 GetTargetVersionsResponse.ProtoReflect.Descriptor instead.
func (*GetTargetVersionsResponse) Descriptor() ([]byte, []int) {
	return file_chromite_api_packages_proto_rawDescGZIP(), []int{7}
}

func (x *GetTargetVersionsResponse) GetAndroidVersion() string {
	if x != nil {
		return x.AndroidVersion
	}
	return ""
}

func (x *GetTargetVersionsResponse) GetAndroidBranchVersion() string {
	if x != nil {
		return x.AndroidBranchVersion
	}
	return ""
}

func (x *GetTargetVersionsResponse) GetAndroidTargetVersion() string {
	if x != nil {
		return x.AndroidTargetVersion
	}
	return ""
}

func (x *GetTargetVersionsResponse) GetChromeVersion() string {
	if x != nil {
		return x.ChromeVersion
	}
	return ""
}

func (x *GetTargetVersionsResponse) GetFullVersion() string {
	if x != nil {
		return x.FullVersion
	}
	return ""
}

func (x *GetTargetVersionsResponse) GetMilestoneVersion() string {
	if x != nil {
		return x.MilestoneVersion
	}
	return ""
}

func (x *GetTargetVersionsResponse) GetPlatformVersion() string {
	if x != nil {
		return x.PlatformVersion
	}
	return ""
}

// The associated method can be run after InstallPackages.
type GetBuilderMetadataRequest struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	// The chroot path.
	// Required if not in the default location.
	Chroot *chromiumos.Chroot `protobuf:"bytes,1,opt,name=chroot,proto3" json:"chroot,omitempty"`
	// The build target to examine.
	// Required.
	BuildTarget *chromiumos.BuildTarget `protobuf:"bytes,2,opt,name=build_target,json=buildTarget,proto3" json:"build_target,omitempty"`
}

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

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

func (*GetBuilderMetadataRequest) ProtoMessage() {}

func (x *GetBuilderMetadataRequest) ProtoReflect() protoreflect.Message {
	mi := &file_chromite_api_packages_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 GetBuilderMetadataRequest.ProtoReflect.Descriptor instead.
func (*GetBuilderMetadataRequest) Descriptor() ([]byte, []int) {
	return file_chromite_api_packages_proto_rawDescGZIP(), []int{8}
}

func (x *GetBuilderMetadataRequest) GetChroot() *chromiumos.Chroot {
	if x != nil {
		return x.Chroot
	}
	return nil
}

func (x *GetBuilderMetadataRequest) GetBuildTarget() *chromiumos.BuildTarget {
	if x != nil {
		return x.BuildTarget
	}
	return nil
}

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

	// Metadata for build targets.
	BuildTargetMetadata []*GetBuilderMetadataResponse_BuildTargetMetadata `protobuf:"bytes,1,rep,name=build_target_metadata,json=buildTargetMetadata,proto3" json:"build_target_metadata,omitempty"`
	// Metadata for models.
	ModelMetadata []*GetBuilderMetadataResponse_ModelMetadata `protobuf:"bytes,2,rep,name=model_metadata,json=modelMetadata,proto3" json:"model_metadata,omitempty"`
}

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

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

func (*GetBuilderMetadataResponse) ProtoMessage() {}

func (x *GetBuilderMetadataResponse) ProtoReflect() protoreflect.Message {
	mi := &file_chromite_api_packages_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 GetBuilderMetadataResponse.ProtoReflect.Descriptor instead.
func (*GetBuilderMetadataResponse) Descriptor() ([]byte, []int) {
	return file_chromite_api_packages_proto_rawDescGZIP(), []int{9}
}

func (x *GetBuilderMetadataResponse) GetBuildTargetMetadata() []*GetBuilderMetadataResponse_BuildTargetMetadata {
	if x != nil {
		return x.BuildTargetMetadata
	}
	return nil
}

func (x *GetBuilderMetadataResponse) GetModelMetadata() []*GetBuilderMetadataResponse_ModelMetadata {
	if x != nil {
		return x.ModelMetadata
	}
	return nil
}

// This can easily be generalized to a HasPrebuilt method if necessary, but
// currently we have no use case for anything but Chrome, and making this
// specifically for Chrome simplifies the calling code significantly.
type HasChromePrebuiltRequest struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	// The chroot where the operations will be executed.
	// Required.
	Chroot *chromiumos.Chroot `protobuf:"bytes,1,opt,name=chroot,proto3" json:"chroot,omitempty"`
	// The build target whose prebuilt is being checked.
	BuildTarget *chromiumos.BuildTarget `protobuf:"bytes,2,opt,name=build_target,json=buildTarget,proto3" json:"build_target,omitempty"`
	// Whether to look for internal chrome, or external chromium prebuilts.
	// Shortcut for ensuring USE=chrome_internal. Does not disable
	// chrome_internal when false if otherwise set (e.g. chroot env).
	Chrome bool `protobuf:"varint,3,opt,name=chrome,proto3" json:"chrome,omitempty"`
}

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

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

func (*HasChromePrebuiltRequest) ProtoMessage() {}

func (x *HasChromePrebuiltRequest) ProtoReflect() protoreflect.Message {
	mi := &file_chromite_api_packages_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 HasChromePrebuiltRequest.ProtoReflect.Descriptor instead.
func (*HasChromePrebuiltRequest) Descriptor() ([]byte, []int) {
	return file_chromite_api_packages_proto_rawDescGZIP(), []int{10}
}

func (x *HasChromePrebuiltRequest) GetChroot() *chromiumos.Chroot {
	if x != nil {
		return x.Chroot
	}
	return nil
}

func (x *HasChromePrebuiltRequest) GetBuildTarget() *chromiumos.BuildTarget {
	if x != nil {
		return x.BuildTarget
	}
	return nil
}

func (x *HasChromePrebuiltRequest) GetChrome() bool {
	if x != nil {
		return x.Chrome
	}
	return false
}

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

	// Whether or not it has a prebuilt.
	HasPrebuilt bool `protobuf:"varint,1,opt,name=has_prebuilt,json=hasPrebuilt,proto3" json:"has_prebuilt,omitempty"`
}

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

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

func (*HasChromePrebuiltResponse) ProtoMessage() {}

func (x *HasChromePrebuiltResponse) ProtoReflect() protoreflect.Message {
	mi := &file_chromite_api_packages_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 HasChromePrebuiltResponse.ProtoReflect.Descriptor instead.
func (*HasChromePrebuiltResponse) Descriptor() ([]byte, []int) {
	return file_chromite_api_packages_proto_rawDescGZIP(), []int{11}
}

func (x *HasChromePrebuiltResponse) GetHasPrebuilt() bool {
	if x != nil {
		return x.HasPrebuilt
	}
	return false
}

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

	// The request that will be passed to InstallPackages.
	InstallRequest *InstallPackagesRequest `protobuf:"bytes,1,opt,name=install_request,json=installRequest,proto3" json:"install_request,omitempty"`
}

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

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

func (*NeedsChromeSourceRequest) ProtoMessage() {}

func (x *NeedsChromeSourceRequest) ProtoReflect() protoreflect.Message {
	mi := &file_chromite_api_packages_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 NeedsChromeSourceRequest.ProtoReflect.Descriptor instead.
func (*NeedsChromeSourceRequest) Descriptor() ([]byte, []int) {
	return file_chromite_api_packages_proto_rawDescGZIP(), []int{12}
}

func (x *NeedsChromeSourceRequest) GetInstallRequest() *InstallPackagesRequest {
	if x != nil {
		return x.InstallRequest
	}
	return nil
}

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

	// Whether Chrome source is needed.
	NeedsChromeSource bool                               `protobuf:"varint,1,opt,name=needs_chrome_source,json=needsChromeSource,proto3" json:"needs_chrome_source,omitempty"`
	Reasons           []NeedsChromeSourceResponse_Reason `protobuf:"varint,2,rep,packed,name=reasons,proto3,enum=chromite.api.NeedsChromeSourceResponse_Reason" json:"reasons,omitempty"`
	// Packages causing the need for source.
	Packages []*chromiumos.PackageInfo `protobuf:"bytes,3,rep,name=packages,proto3" json:"packages,omitempty"`
	// Whether or not it builds Chrome.  See BuildsChrome().
	BuildsChrome bool `protobuf:"varint,4,opt,name=builds_chrome,json=buildsChrome,proto3" json:"builds_chrome,omitempty"`
}

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

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

func (*NeedsChromeSourceResponse) ProtoMessage() {}

func (x *NeedsChromeSourceResponse) ProtoReflect() protoreflect.Message {
	mi := &file_chromite_api_packages_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 NeedsChromeSourceResponse.ProtoReflect.Descriptor instead.
func (*NeedsChromeSourceResponse) Descriptor() ([]byte, []int) {
	return file_chromite_api_packages_proto_rawDescGZIP(), []int{13}
}

func (x *NeedsChromeSourceResponse) GetNeedsChromeSource() bool {
	if x != nil {
		return x.NeedsChromeSource
	}
	return false
}

func (x *NeedsChromeSourceResponse) GetReasons() []NeedsChromeSourceResponse_Reason {
	if x != nil {
		return x.Reasons
	}
	return nil
}

func (x *NeedsChromeSourceResponse) GetPackages() []*chromiumos.PackageInfo {
	if x != nil {
		return x.Packages
	}
	return nil
}

func (x *NeedsChromeSourceResponse) GetBuildsChrome() bool {
	if x != nil {
		return x.BuildsChrome
	}
	return false
}

// The generic version of HasChromePrebuilt.
type HasPrebuiltRequest struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	// The chroot where the operations will be executed.
	// Required.
	Chroot *chromiumos.Chroot `protobuf:"bytes,1,opt,name=chroot,proto3" json:"chroot,omitempty"`
	// The build target whose prebuilt is being checked.
	// Required.
	BuildTarget *chromiumos.BuildTarget `protobuf:"bytes,2,opt,name=build_target,json=buildTarget,proto3" json:"build_target,omitempty"`
	// Whether to look for internal chrome, or external chromium prebuilts.
	// Shortcut for ensuring USE=chrome_internal. Does not disable
	// chrome_internal when false if otherwise set (e.g. chroot env).
	Chrome bool `protobuf:"varint,3,opt,name=chrome,proto3" json:"chrome,omitempty"`
	// The package whose prebuilt is being queried.
	// The category and package name are required.
	PackageInfo *chromiumos.PackageInfo `protobuf:"bytes,4,opt,name=package_info,json=packageInfo,proto3" json:"package_info,omitempty"`
}

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

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

func (*HasPrebuiltRequest) ProtoMessage() {}

func (x *HasPrebuiltRequest) ProtoReflect() protoreflect.Message {
	mi := &file_chromite_api_packages_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 HasPrebuiltRequest.ProtoReflect.Descriptor instead.
func (*HasPrebuiltRequest) Descriptor() ([]byte, []int) {
	return file_chromite_api_packages_proto_rawDescGZIP(), []int{14}
}

func (x *HasPrebuiltRequest) GetChroot() *chromiumos.Chroot {
	if x != nil {
		return x.Chroot
	}
	return nil
}

func (x *HasPrebuiltRequest) GetBuildTarget() *chromiumos.BuildTarget {
	if x != nil {
		return x.BuildTarget
	}
	return nil
}

func (x *HasPrebuiltRequest) GetChrome() bool {
	if x != nil {
		return x.Chrome
	}
	return false
}

func (x *HasPrebuiltRequest) GetPackageInfo() *chromiumos.PackageInfo {
	if x != nil {
		return x.PackageInfo
	}
	return nil
}

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

	// Whether or not it has a prebuilt.
	HasPrebuilt bool `protobuf:"varint,1,opt,name=has_prebuilt,json=hasPrebuilt,proto3" json:"has_prebuilt,omitempty"`
}

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

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

func (*HasPrebuiltResponse) ProtoMessage() {}

func (x *HasPrebuiltResponse) ProtoReflect() protoreflect.Message {
	mi := &file_chromite_api_packages_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 HasPrebuiltResponse.ProtoReflect.Descriptor instead.
func (*HasPrebuiltResponse) Descriptor() ([]byte, []int) {
	return file_chromite_api_packages_proto_rawDescGZIP(), []int{15}
}

func (x *HasPrebuiltResponse) GetHasPrebuilt() bool {
	if x != nil {
		return x.HasPrebuilt
	}
	return false
}

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

	// The chroot path.
	// Required if not in the default location.
	Chroot *chromiumos.Chroot `protobuf:"bytes,1,opt,name=chroot,proto3" json:"chroot,omitempty"`
	// The build target(s) whose packages should be uprevved.
	// Defaults to all build targets when none are given.
	BuildTargets []*chromiumos.BuildTarget `protobuf:"bytes,2,rep,name=build_targets,json=buildTargets,proto3" json:"build_targets,omitempty"`
	// Required.
	// The overlay type to search against.
	OverlayType OverlayType `protobuf:"varint,3,opt,name=overlay_type,json=overlayType,proto3,enum=chromite.api.OverlayType" json:"overlay_type,omitempty"`
	// Optional.
	// A directory where results should be dumped.
	OutputDir string `protobuf:"bytes,4,opt,name=output_dir,json=outputDir,proto3" json:"output_dir,omitempty"`
}

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

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

func (*UprevPackagesRequest) ProtoMessage() {}

func (x *UprevPackagesRequest) ProtoReflect() protoreflect.Message {
	mi := &file_chromite_api_packages_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 UprevPackagesRequest.ProtoReflect.Descriptor instead.
func (*UprevPackagesRequest) Descriptor() ([]byte, []int) {
	return file_chromite_api_packages_proto_rawDescGZIP(), []int{16}
}

func (x *UprevPackagesRequest) GetChroot() *chromiumos.Chroot {
	if x != nil {
		return x.Chroot
	}
	return nil
}

func (x *UprevPackagesRequest) GetBuildTargets() []*chromiumos.BuildTarget {
	if x != nil {
		return x.BuildTargets
	}
	return nil
}

func (x *UprevPackagesRequest) GetOverlayType() OverlayType {
	if x != nil {
		return x.OverlayType
	}
	return OverlayType_OVERLAYTYPE_UNSPECIFIED
}

func (x *UprevPackagesRequest) GetOutputDir() string {
	if x != nil {
		return x.OutputDir
	}
	return ""
}

// TODO(evanhernandez): Support build-target specific uprevs once needed.
type UprevVersionedPackageRequest struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	// The chroot path. Required.
	Chroot *chromiumos.Chroot `protobuf:"bytes,1,opt,name=chroot,proto3" json:"chroot,omitempty"`
	// The package to uprev.
	PackageInfo *chromiumos.PackageInfo `protobuf:"bytes,2,opt,name=package_info,json=packageInfo,proto3" json:"package_info,omitempty"`
	// The versions to consider for an update.
	Versions []*UprevVersionedPackageRequest_GitRef `protobuf:"bytes,3,rep,name=versions,proto3" json:"versions,omitempty"`
	// The build targets whose sysroot should be cleaned of old versions.
	BuildTargets []*chromiumos.BuildTarget `protobuf:"bytes,4,rep,name=build_targets,json=buildTargets,proto3" json:"build_targets,omitempty"`
}

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

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

func (*UprevVersionedPackageRequest) ProtoMessage() {}

func (x *UprevVersionedPackageRequest) ProtoReflect() protoreflect.Message {
	mi := &file_chromite_api_packages_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 UprevVersionedPackageRequest.ProtoReflect.Descriptor instead.
func (*UprevVersionedPackageRequest) Descriptor() ([]byte, []int) {
	return file_chromite_api_packages_proto_rawDescGZIP(), []int{17}
}

func (x *UprevVersionedPackageRequest) GetChroot() *chromiumos.Chroot {
	if x != nil {
		return x.Chroot
	}
	return nil
}

func (x *UprevVersionedPackageRequest) GetPackageInfo() *chromiumos.PackageInfo {
	if x != nil {
		return x.PackageInfo
	}
	return nil
}

func (x *UprevVersionedPackageRequest) GetVersions() []*UprevVersionedPackageRequest_GitRef {
	if x != nil {
		return x.Versions
	}
	return nil
}

func (x *UprevVersionedPackageRequest) GetBuildTargets() []*chromiumos.BuildTarget {
	if x != nil {
		return x.BuildTargets
	}
	return nil
}

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

	// The list of ebuilds that were modified. Contains added and deleted files.
	ModifiedEbuilds []*UprevPackagesResponse_Ebuild `protobuf:"bytes,1,rep,name=modified_ebuilds,json=modifiedEbuilds,proto3" json:"modified_ebuilds,omitempty"`
	// The new version that was uprevved to when an uprev was completed.
	Version string `protobuf:"bytes,2,opt,name=version,proto3" json:"version,omitempty"`
}

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

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

func (*UprevPackagesResponse) ProtoMessage() {}

func (x *UprevPackagesResponse) ProtoReflect() protoreflect.Message {
	mi := &file_chromite_api_packages_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 UprevPackagesResponse.ProtoReflect.Descriptor instead.
func (*UprevPackagesResponse) Descriptor() ([]byte, []int) {
	return file_chromite_api_packages_proto_rawDescGZIP(), []int{18}
}

func (x *UprevPackagesResponse) GetModifiedEbuilds() []*UprevPackagesResponse_Ebuild {
	if x != nil {
		return x.ModifiedEbuilds
	}
	return nil
}

func (x *UprevPackagesResponse) GetVersion() string {
	if x != nil {
		return x.Version
	}
	return ""
}

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

	// list of uprev responses.
	Responses []*UprevPackagesResponse `protobuf:"bytes,1,rep,name=responses,proto3" json:"responses,omitempty"`
}

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

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

func (*UprevVersionedPackageResponse) ProtoMessage() {}

func (x *UprevVersionedPackageResponse) ProtoReflect() protoreflect.Message {
	mi := &file_chromite_api_packages_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 UprevVersionedPackageResponse.ProtoReflect.Descriptor instead.
func (*UprevVersionedPackageResponse) Descriptor() ([]byte, []int) {
	return file_chromite_api_packages_proto_rawDescGZIP(), []int{19}
}

func (x *UprevVersionedPackageResponse) GetResponses() []*UprevPackagesResponse {
	if x != nil {
		return x.Responses
	}
	return nil
}

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

	// Name of model, such as "astronaut", "babymega", etc.
	ModelName string `protobuf:"bytes,1,opt,name=model_name,json=modelName,proto3" json:"model_name,omitempty"`
	// EC firmware version, such as "coral_v1.1.7292-04956f5df".
	EcFirmwareVersion string `protobuf:"bytes,2,opt,name=ec_firmware_version,json=ecFirmwareVersion,proto3" json:"ec_firmware_version,omitempty"`
	// Firmware key id, such as "CORALG"
	FirmwareKeyId string `protobuf:"bytes,3,opt,name=firmware_key_id,json=firmwareKeyId,proto3" json:"firmware_key_id,omitempty"`
	// Main readonly firmware version, such as "Google_Coral.10068.82.0".
	MainReadonlyFirmwareVersion string `protobuf:"bytes,4,opt,name=main_readonly_firmware_version,json=mainReadonlyFirmwareVersion,proto3" json:"main_readonly_firmware_version,omitempty"`
	// Main readwrite firmware version, such as "Google_Coral.10068.82.0".
	MainReadwriteFirmwareVersion string `protobuf:"bytes,5,opt,name=main_readwrite_firmware_version,json=mainReadwriteFirmwareVersion,proto3" json:"main_readwrite_firmware_version,omitempty"`
}

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

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

func (*GetBuilderMetadataResponse_ModelMetadata) ProtoMessage() {}

func (x *GetBuilderMetadataResponse_ModelMetadata) ProtoReflect() protoreflect.Message {
	mi := &file_chromite_api_packages_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 GetBuilderMetadataResponse_ModelMetadata.ProtoReflect.Descriptor instead.
func (*GetBuilderMetadataResponse_ModelMetadata) Descriptor() ([]byte, []int) {
	return file_chromite_api_packages_proto_rawDescGZIP(), []int{9, 0}
}

func (x *GetBuilderMetadataResponse_ModelMetadata) GetModelName() string {
	if x != nil {
		return x.ModelName
	}
	return ""
}

func (x *GetBuilderMetadataResponse_ModelMetadata) GetEcFirmwareVersion() string {
	if x != nil {
		return x.EcFirmwareVersion
	}
	return ""
}

func (x *GetBuilderMetadataResponse_ModelMetadata) GetFirmwareKeyId() string {
	if x != nil {
		return x.FirmwareKeyId
	}
	return ""
}

func (x *GetBuilderMetadataResponse_ModelMetadata) GetMainReadonlyFirmwareVersion() string {
	if x != nil {
		return x.MainReadonlyFirmwareVersion
	}
	return ""
}

func (x *GetBuilderMetadataResponse_ModelMetadata) GetMainReadwriteFirmwareVersion() string {
	if x != nil {
		return x.MainReadwriteFirmwareVersion
	}
	return ""
}

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

	// Name of build_target, such as auron_paine, coral, etc.
	BuildTarget string `protobuf:"bytes,1,opt,name=build_target,json=buildTarget,proto3" json:"build_target,omitempty"`
	// Name of android container branch, such as "git_pi-arc".
	AndroidContainerBranch string `protobuf:"bytes,2,opt,name=android_container_branch,json=androidContainerBranch,proto3" json:"android_container_branch,omitempty"`
	// Name of android container target, such as "cheets".
	AndroidContainerTarget string `protobuf:"bytes,3,opt,name=android_container_target,json=androidContainerTarget,proto3" json:"android_container_target,omitempty"`
	// Name of android container version, such as "6387315".
	AndroidContainerVersion string `protobuf:"bytes,4,opt,name=android_container_version,json=androidContainerVersion,proto3" json:"android_container_version,omitempty"`
	// Whether or not arc-use is enabled.
	ArcUseSet bool `protobuf:"varint,5,opt,name=arc_use_set,json=arcUseSet,proto3" json:"arc_use_set,omitempty"`
	// EC firmware version.
	EcFirmwareVersion string `protobuf:"bytes,6,opt,name=ec_firmware_version,json=ecFirmwareVersion,proto3" json:"ec_firmware_version,omitempty"`
	// Fingerprints.
	Fingerprints []string `protobuf:"bytes,7,rep,name=fingerprints,proto3" json:"fingerprints,omitempty"`
	// Kernel version, such as  "4.14.176-r1088".
	KernelVersion string `protobuf:"bytes,8,opt,name=kernel_version,json=kernelVersion,proto3" json:"kernel_version,omitempty"`
	// Main firmware version, such as "Google_Auron_paine.6301.58.98.
	MainFirmwareVersion string `protobuf:"bytes,9,opt,name=main_firmware_version,json=mainFirmwareVersion,proto3" json:"main_firmware_version,omitempty"`
}

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

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

func (*GetBuilderMetadataResponse_BuildTargetMetadata) ProtoMessage() {}

func (x *GetBuilderMetadataResponse_BuildTargetMetadata) ProtoReflect() protoreflect.Message {
	mi := &file_chromite_api_packages_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 GetBuilderMetadataResponse_BuildTargetMetadata.ProtoReflect.Descriptor instead.
func (*GetBuilderMetadataResponse_BuildTargetMetadata) Descriptor() ([]byte, []int) {
	return file_chromite_api_packages_proto_rawDescGZIP(), []int{9, 1}
}

func (x *GetBuilderMetadataResponse_BuildTargetMetadata) GetBuildTarget() string {
	if x != nil {
		return x.BuildTarget
	}
	return ""
}

func (x *GetBuilderMetadataResponse_BuildTargetMetadata) GetAndroidContainerBranch() string {
	if x != nil {
		return x.AndroidContainerBranch
	}
	return ""
}

func (x *GetBuilderMetadataResponse_BuildTargetMetadata) GetAndroidContainerTarget() string {
	if x != nil {
		return x.AndroidContainerTarget
	}
	return ""
}

func (x *GetBuilderMetadataResponse_BuildTargetMetadata) GetAndroidContainerVersion() string {
	if x != nil {
		return x.AndroidContainerVersion
	}
	return ""
}

func (x *GetBuilderMetadataResponse_BuildTargetMetadata) GetArcUseSet() bool {
	if x != nil {
		return x.ArcUseSet
	}
	return false
}

func (x *GetBuilderMetadataResponse_BuildTargetMetadata) GetEcFirmwareVersion() string {
	if x != nil {
		return x.EcFirmwareVersion
	}
	return ""
}

func (x *GetBuilderMetadataResponse_BuildTargetMetadata) GetFingerprints() []string {
	if x != nil {
		return x.Fingerprints
	}
	return nil
}

func (x *GetBuilderMetadataResponse_BuildTargetMetadata) GetKernelVersion() string {
	if x != nil {
		return x.KernelVersion
	}
	return ""
}

func (x *GetBuilderMetadataResponse_BuildTargetMetadata) GetMainFirmwareVersion() string {
	if x != nil {
		return x.MainFirmwareVersion
	}
	return ""
}

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

	// Relative path to the git repository.
	Repository string `protobuf:"bytes,1,opt,name=repository,proto3" json:"repository,omitempty"`
	// The name of the git ref.
	Ref string `protobuf:"bytes,2,opt,name=ref,proto3" json:"ref,omitempty"`
	// The exact sha1 of the git ref.
	Revision string `protobuf:"bytes,3,opt,name=revision,proto3" json:"revision,omitempty"`
}

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

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

func (*UprevVersionedPackageRequest_GitRef) ProtoMessage() {}

func (x *UprevVersionedPackageRequest_GitRef) ProtoReflect() protoreflect.Message {
	mi := &file_chromite_api_packages_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 UprevVersionedPackageRequest_GitRef.ProtoReflect.Descriptor instead.
func (*UprevVersionedPackageRequest_GitRef) Descriptor() ([]byte, []int) {
	return file_chromite_api_packages_proto_rawDescGZIP(), []int{17, 0}
}

func (x *UprevVersionedPackageRequest_GitRef) GetRepository() string {
	if x != nil {
		return x.Repository
	}
	return ""
}

func (x *UprevVersionedPackageRequest_GitRef) GetRef() string {
	if x != nil {
		return x.Ref
	}
	return ""
}

func (x *UprevVersionedPackageRequest_GitRef) GetRevision() string {
	if x != nil {
		return x.Revision
	}
	return ""
}

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

	Path string `protobuf:"bytes,1,opt,name=path,proto3" json:"path,omitempty"`
}

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

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

func (*UprevPackagesResponse_Ebuild) ProtoMessage() {}

func (x *UprevPackagesResponse_Ebuild) ProtoReflect() protoreflect.Message {
	mi := &file_chromite_api_packages_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 UprevPackagesResponse_Ebuild.ProtoReflect.Descriptor instead.
func (*UprevPackagesResponse_Ebuild) Descriptor() ([]byte, []int) {
	return file_chromite_api_packages_proto_rawDescGZIP(), []int{18, 0}
}

func (x *UprevPackagesResponse_Ebuild) GetPath() string {
	if x != nil {
		return x.Path
	}
	return ""
}

var File_chromite_api_packages_proto protoreflect.FileDescriptor

var file_chromite_api_packages_proto_rawDesc = []byte{
	0x0a, 0x1b, 0x63, 0x68, 0x72, 0x6f, 0x6d, 0x69, 0x74, 0x65, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x70,
	0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x0c, 0x63,
	0x68, 0x72, 0x6f, 0x6d, 0x69, 0x74, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x1a, 0x1a, 0x63, 0x68, 0x72,
	0x6f, 0x6d, 0x69, 0x74, 0x65, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x62, 0x69, 0x6e, 0x68, 0x6f, 0x73,
	0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1c, 0x63, 0x68, 0x72, 0x6f, 0x6d, 0x69, 0x74,
	0x65, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x5f, 0x61, 0x70, 0x69, 0x2e,
	0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1a, 0x63, 0x68, 0x72, 0x6f, 0x6d, 0x69, 0x74, 0x65, 0x2f,
	0x61, 0x70, 0x69, 0x2f, 0x73, 0x79, 0x73, 0x72, 0x6f, 0x6f, 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74,
	0x6f, 0x1a, 0x17, 0x63, 0x68, 0x72, 0x6f, 0x6d, 0x69, 0x75, 0x6d, 0x6f, 0x73, 0x2f, 0x63, 0x6f,
	0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xb2, 0x01, 0x0a, 0x13, 0x42,
	0x75, 0x69, 0x6c, 0x64, 0x73, 0x43, 0x68, 0x72, 0x6f, 0x6d, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65,
	0x73, 0x74, 0x12, 0x2a, 0x0a, 0x06, 0x63, 0x68, 0x72, 0x6f, 0x6f, 0x74, 0x18, 0x01, 0x20, 0x01,
	0x28, 0x0b, 0x32, 0x12, 0x2e, 0x63, 0x68, 0x72, 0x6f, 0x6d, 0x69, 0x75, 0x6d, 0x6f, 0x73, 0x2e,
	0x43, 0x68, 0x72, 0x6f, 0x6f, 0x74, 0x52, 0x06, 0x63, 0x68, 0x72, 0x6f, 0x6f, 0x74, 0x12, 0x3a,
	0x0a, 0x0c, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x5f, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x18, 0x02,
	0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x63, 0x68, 0x72, 0x6f, 0x6d, 0x69, 0x75, 0x6d, 0x6f,
	0x73, 0x2e, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x54, 0x61, 0x72, 0x67, 0x65, 0x74, 0x52, 0x0b, 0x62,
	0x75, 0x69, 0x6c, 0x64, 0x54, 0x61, 0x72, 0x67, 0x65, 0x74, 0x12, 0x33, 0x0a, 0x08, 0x70, 0x61,
	0x63, 0x6b, 0x61, 0x67, 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x63,
	0x68, 0x72, 0x6f, 0x6d, 0x69, 0x75, 0x6d, 0x6f, 0x73, 0x2e, 0x50, 0x61, 0x63, 0x6b, 0x61, 0x67,
	0x65, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x08, 0x70, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x73, 0x22,
	0x3b, 0x0a, 0x14, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x73, 0x43, 0x68, 0x72, 0x6f, 0x6d, 0x65, 0x52,
	0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x23, 0x0a, 0x0d, 0x62, 0x75, 0x69, 0x6c, 0x64,
	0x73, 0x5f, 0x63, 0x68, 0x72, 0x6f, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c,
	0x62, 0x75, 0x69, 0x6c, 0x64, 0x73, 0x43, 0x68, 0x72, 0x6f, 0x6d, 0x65, 0x22, 0x93, 0x01, 0x0a,
	0x15, 0x47, 0x65, 0x74, 0x42, 0x65, 0x73, 0x74, 0x56, 0x69, 0x73, 0x69, 0x62, 0x6c, 0x65, 0x52,
	0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x61, 0x74, 0x6f, 0x6d, 0x18, 0x01,
	0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x61, 0x74, 0x6f, 0x6d, 0x12, 0x2a, 0x0a, 0x06, 0x63, 0x68,
	0x72, 0x6f, 0x6f, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x63, 0x68, 0x72,
	0x6f, 0x6d, 0x69, 0x75, 0x6d, 0x6f, 0x73, 0x2e, 0x43, 0x68, 0x72, 0x6f, 0x6f, 0x74, 0x52, 0x06,
	0x63, 0x68, 0x72, 0x6f, 0x6f, 0x74, 0x12, 0x3a, 0x0a, 0x0c, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x5f,
	0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x63,
	0x68, 0x72, 0x6f, 0x6d, 0x69, 0x75, 0x6d, 0x6f, 0x73, 0x2e, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x54,
	0x61, 0x72, 0x67, 0x65, 0x74, 0x52, 0x0b, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x54, 0x61, 0x72, 0x67,
	0x65, 0x74, 0x22, 0x54, 0x0a, 0x16, 0x47, 0x65, 0x74, 0x42, 0x65, 0x73, 0x74, 0x56, 0x69, 0x73,
	0x69, 0x62, 0x6c, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3a, 0x0a, 0x0c,
	0x70, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x18, 0x01, 0x20, 0x01,
	0x28, 0x0b, 0x32, 0x17, 0x2e, 0x63, 0x68, 0x72, 0x6f, 0x6d, 0x69, 0x75, 0x6d, 0x6f, 0x73, 0x2e,
	0x50, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x0b, 0x70, 0x61, 0x63,
	0x6b, 0x61, 0x67, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x22, 0x81, 0x01, 0x0a, 0x17, 0x47, 0x65, 0x74,
	0x43, 0x68, 0x72, 0x6f, 0x6d, 0x65, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71,
	0x75, 0x65, 0x73, 0x74, 0x12, 0x2a, 0x0a, 0x06, 0x63, 0x68, 0x72, 0x6f, 0x6f, 0x74, 0x18, 0x01,
	0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x63, 0x68, 0x72, 0x6f, 0x6d, 0x69, 0x75, 0x6d, 0x6f,
	0x73, 0x2e, 0x43, 0x68, 0x72, 0x6f, 0x6f, 0x74, 0x52, 0x06, 0x63, 0x68, 0x72, 0x6f, 0x6f, 0x74,
	0x12, 0x3a, 0x0a, 0x0c, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x5f, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74,
	0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x63, 0x68, 0x72, 0x6f, 0x6d, 0x69, 0x75,
	0x6d, 0x6f, 0x73, 0x2e, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x54, 0x61, 0x72, 0x67, 0x65, 0x74, 0x52,
	0x0b, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x54, 0x61, 0x72, 0x67, 0x65, 0x74, 0x22, 0x34, 0x0a, 0x18,
	0x47, 0x65, 0x74, 0x43, 0x68, 0x72, 0x6f, 0x6d, 0x65, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e,
	0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73,
	0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69,
	0x6f, 0x6e, 0x22, 0xb7, 0x01, 0x0a, 0x18, 0x47, 0x65, 0x74, 0x54, 0x61, 0x72, 0x67, 0x65, 0x74,
	0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12,
	0x2a, 0x0a, 0x06, 0x63, 0x68, 0x72, 0x6f, 0x6f, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32,
	0x12, 0x2e, 0x63, 0x68, 0x72, 0x6f, 0x6d, 0x69, 0x75, 0x6d, 0x6f, 0x73, 0x2e, 0x43, 0x68, 0x72,
	0x6f, 0x6f, 0x74, 0x52, 0x06, 0x63, 0x68, 0x72, 0x6f, 0x6f, 0x74, 0x12, 0x3a, 0x0a, 0x0c, 0x62,
	0x75, 0x69, 0x6c, 0x64, 0x5f, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28,
	0x0b, 0x32, 0x17, 0x2e, 0x63, 0x68, 0x72, 0x6f, 0x6d, 0x69, 0x75, 0x6d, 0x6f, 0x73, 0x2e, 0x42,
	0x75, 0x69, 0x6c, 0x64, 0x54, 0x61, 0x72, 0x67, 0x65, 0x74, 0x52, 0x0b, 0x62, 0x75, 0x69, 0x6c,
	0x64, 0x54, 0x61, 0x72, 0x67, 0x65, 0x74, 0x12, 0x33, 0x0a, 0x08, 0x70, 0x61, 0x63, 0x6b, 0x61,
	0x67, 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x63, 0x68, 0x72, 0x6f,
	0x6d, 0x69, 0x75, 0x6d, 0x6f, 0x73, 0x2e, 0x50, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x49, 0x6e,
	0x66, 0x6f, 0x52, 0x08, 0x70, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x73, 0x22, 0xd2, 0x02, 0x0a,
	0x19, 0x47, 0x65, 0x74, 0x54, 0x61, 0x72, 0x67, 0x65, 0x74, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f,
	0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x27, 0x0a, 0x0f, 0x61, 0x6e,
	0x64, 0x72, 0x6f, 0x69, 0x64, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20,
	0x01, 0x28, 0x09, 0x52, 0x0e, 0x61, 0x6e, 0x64, 0x72, 0x6f, 0x69, 0x64, 0x56, 0x65, 0x72, 0x73,
	0x69, 0x6f, 0x6e, 0x12, 0x34, 0x0a, 0x16, 0x61, 0x6e, 0x64, 0x72, 0x6f, 0x69, 0x64, 0x5f, 0x62,
	0x72, 0x61, 0x6e, 0x63, 0x68, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20,
	0x01, 0x28, 0x09, 0x52, 0x14, 0x61, 0x6e, 0x64, 0x72, 0x6f, 0x69, 0x64, 0x42, 0x72, 0x61, 0x6e,
	0x63, 0x68, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x34, 0x0a, 0x16, 0x61, 0x6e, 0x64,
	0x72, 0x6f, 0x69, 0x64, 0x5f, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x5f, 0x76, 0x65, 0x72, 0x73,
	0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x14, 0x61, 0x6e, 0x64, 0x72, 0x6f,
	0x69, 0x64, 0x54, 0x61, 0x72, 0x67, 0x65, 0x74, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12,
	0x25, 0x0a, 0x0e, 0x63, 0x68, 0x72, 0x6f, 0x6d, 0x65, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f,
	0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x63, 0x68, 0x72, 0x6f, 0x6d, 0x65, 0x56,
	0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x21, 0x0a, 0x0c, 0x66, 0x75, 0x6c, 0x6c, 0x5f, 0x76,
	0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x66, 0x75,
	0x6c, 0x6c, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x2b, 0x0a, 0x11, 0x6d, 0x69, 0x6c,
	0x65, 0x73, 0x74, 0x6f, 0x6e, 0x65, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x06,
	0x20, 0x01, 0x28, 0x09, 0x52, 0x10, 0x6d, 0x69, 0x6c, 0x65, 0x73, 0x74, 0x6f, 0x6e, 0x65, 0x56,
	0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x29, 0x0a, 0x10, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f,
	0x72, 0x6d, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09,
	0x52, 0x0f, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f,
	0x6e, 0x22, 0x83, 0x01, 0x0a, 0x19, 0x47, 0x65, 0x74, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x65, 0x72,
	0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12,
	0x2a, 0x0a, 0x06, 0x63, 0x68, 0x72, 0x6f, 0x6f, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32,
	0x12, 0x2e, 0x63, 0x68, 0x72, 0x6f, 0x6d, 0x69, 0x75, 0x6d, 0x6f, 0x73, 0x2e, 0x43, 0x68, 0x72,
	0x6f, 0x6f, 0x74, 0x52, 0x06, 0x63, 0x68, 0x72, 0x6f, 0x6f, 0x74, 0x12, 0x3a, 0x0a, 0x0c, 0x62,
	0x75, 0x69, 0x6c, 0x64, 0x5f, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28,
	0x0b, 0x32, 0x17, 0x2e, 0x63, 0x68, 0x72, 0x6f, 0x6d, 0x69, 0x75, 0x6d, 0x6f, 0x73, 0x2e, 0x42,
	0x75, 0x69, 0x6c, 0x64, 0x54, 0x61, 0x72, 0x67, 0x65, 0x74, 0x52, 0x0b, 0x62, 0x75, 0x69, 0x6c,
	0x64, 0x54, 0x61, 0x72, 0x67, 0x65, 0x74, 0x22, 0xbc, 0x07, 0x0a, 0x1a, 0x47, 0x65, 0x74, 0x42,
	0x75, 0x69, 0x6c, 0x64, 0x65, 0x72, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x65,
	0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x70, 0x0a, 0x15, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x5f,
	0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x5f, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18,
	0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3c, 0x2e, 0x63, 0x68, 0x72, 0x6f, 0x6d, 0x69, 0x74, 0x65,
	0x2e, 0x61, 0x70, 0x69, 0x2e, 0x47, 0x65, 0x74, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x65, 0x72, 0x4d,
	0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e,
	0x42, 0x75, 0x69, 0x6c, 0x64, 0x54, 0x61, 0x72, 0x67, 0x65, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x64,
	0x61, 0x74, 0x61, 0x52, 0x13, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x54, 0x61, 0x72, 0x67, 0x65, 0x74,
	0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x5d, 0x0a, 0x0e, 0x6d, 0x6f, 0x64, 0x65,
	0x6c, 0x5f, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b,
	0x32, 0x36, 0x2e, 0x63, 0x68, 0x72, 0x6f, 0x6d, 0x69, 0x74, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e,
	0x47, 0x65, 0x74, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x65, 0x72, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61,
	0x74, 0x61, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x4d, 0x6f, 0x64, 0x65, 0x6c,
	0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x0d, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x4d,
	0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x1a, 0x92, 0x02, 0x0a, 0x0d, 0x4d, 0x6f, 0x64, 0x65,
	0x6c, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x1d, 0x0a, 0x0a, 0x6d, 0x6f, 0x64,
	0x65, 0x6c, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6d,
	0x6f, 0x64, 0x65, 0x6c, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x2e, 0x0a, 0x13, 0x65, 0x63, 0x5f, 0x66,
	0x69, 0x72, 0x6d, 0x77, 0x61, 0x72, 0x65, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18,
	0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x11, 0x65, 0x63, 0x46, 0x69, 0x72, 0x6d, 0x77, 0x61, 0x72,
	0x65, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x26, 0x0a, 0x0f, 0x66, 0x69, 0x72, 0x6d,
	0x77, 0x61, 0x72, 0x65, 0x5f, 0x6b, 0x65, 0x79, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28,
	0x09, 0x52, 0x0d, 0x66, 0x69, 0x72, 0x6d, 0x77, 0x61, 0x72, 0x65, 0x4b, 0x65, 0x79, 0x49, 0x64,
	0x12, 0x43, 0x0a, 0x1e, 0x6d, 0x61, 0x69, 0x6e, 0x5f, 0x72, 0x65, 0x61, 0x64, 0x6f, 0x6e, 0x6c,
	0x79, 0x5f, 0x66, 0x69, 0x72, 0x6d, 0x77, 0x61, 0x72, 0x65, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69,
	0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x1b, 0x6d, 0x61, 0x69, 0x6e, 0x52, 0x65,
	0x61, 0x64, 0x6f, 0x6e, 0x6c, 0x79, 0x46, 0x69, 0x72, 0x6d, 0x77, 0x61, 0x72, 0x65, 0x56, 0x65,
	0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x45, 0x0a, 0x1f, 0x6d, 0x61, 0x69, 0x6e, 0x5f, 0x72, 0x65,
	0x61, 0x64, 0x77, 0x72, 0x69, 0x74, 0x65, 0x5f, 0x66, 0x69, 0x72, 0x6d, 0x77, 0x61, 0x72, 0x65,
	0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x1c,
	0x6d, 0x61, 0x69, 0x6e, 0x52, 0x65, 0x61, 0x64, 0x77, 0x72, 0x69, 0x74, 0x65, 0x46, 0x69, 0x72,
	0x6d, 0x77, 0x61, 0x72, 0x65, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x1a, 0xb7, 0x03, 0x0a,
	0x13, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x54, 0x61, 0x72, 0x67, 0x65, 0x74, 0x4d, 0x65, 0x74, 0x61,
	0x64, 0x61, 0x74, 0x61, 0x12, 0x21, 0x0a, 0x0c, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x5f, 0x74, 0x61,
	0x72, 0x67, 0x65, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x62, 0x75, 0x69, 0x6c,
	0x64, 0x54, 0x61, 0x72, 0x67, 0x65, 0x74, 0x12, 0x38, 0x0a, 0x18, 0x61, 0x6e, 0x64, 0x72, 0x6f,
	0x69, 0x64, 0x5f, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x5f, 0x62, 0x72, 0x61,
	0x6e, 0x63, 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x16, 0x61, 0x6e, 0x64, 0x72, 0x6f,
	0x69, 0x64, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x42, 0x72, 0x61, 0x6e, 0x63,
	0x68, 0x12, 0x38, 0x0a, 0x18, 0x61, 0x6e, 0x64, 0x72, 0x6f, 0x69, 0x64, 0x5f, 0x63, 0x6f, 0x6e,
	0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x5f, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x18, 0x03, 0x20,
	0x01, 0x28, 0x09, 0x52, 0x16, 0x61, 0x6e, 0x64, 0x72, 0x6f, 0x69, 0x64, 0x43, 0x6f, 0x6e, 0x74,
	0x61, 0x69, 0x6e, 0x65, 0x72, 0x54, 0x61, 0x72, 0x67, 0x65, 0x74, 0x12, 0x3a, 0x0a, 0x19, 0x61,
	0x6e, 0x64, 0x72, 0x6f, 0x69, 0x64, 0x5f, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72,
	0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x17,
	0x61, 0x6e, 0x64, 0x72, 0x6f, 0x69, 0x64, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72,
	0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x1e, 0x0a, 0x0b, 0x61, 0x72, 0x63, 0x5f, 0x75,
	0x73, 0x65, 0x5f, 0x73, 0x65, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x61, 0x72,
	0x63, 0x55, 0x73, 0x65, 0x53, 0x65, 0x74, 0x12, 0x2e, 0x0a, 0x13, 0x65, 0x63, 0x5f, 0x66, 0x69,
	0x72, 0x6d, 0x77, 0x61, 0x72, 0x65, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x06,
	0x20, 0x01, 0x28, 0x09, 0x52, 0x11, 0x65, 0x63, 0x46, 0x69, 0x72, 0x6d, 0x77, 0x61, 0x72, 0x65,
	0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x22, 0x0a, 0x0c, 0x66, 0x69, 0x6e, 0x67, 0x65,
	0x72, 0x70, 0x72, 0x69, 0x6e, 0x74, 0x73, 0x18, 0x07, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0c, 0x66,
	0x69, 0x6e, 0x67, 0x65, 0x72, 0x70, 0x72, 0x69, 0x6e, 0x74, 0x73, 0x12, 0x25, 0x0a, 0x0e, 0x6b,
	0x65, 0x72, 0x6e, 0x65, 0x6c, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x08, 0x20,
	0x01, 0x28, 0x09, 0x52, 0x0d, 0x6b, 0x65, 0x72, 0x6e, 0x65, 0x6c, 0x56, 0x65, 0x72, 0x73, 0x69,
	0x6f, 0x6e, 0x12, 0x32, 0x0a, 0x15, 0x6d, 0x61, 0x69, 0x6e, 0x5f, 0x66, 0x69, 0x72, 0x6d, 0x77,
	0x61, 0x72, 0x65, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x09, 0x20, 0x01, 0x28,
	0x09, 0x52, 0x13, 0x6d, 0x61, 0x69, 0x6e, 0x46, 0x69, 0x72, 0x6d, 0x77, 0x61, 0x72, 0x65, 0x56,
	0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x22, 0x9a, 0x01, 0x0a, 0x18, 0x48, 0x61, 0x73, 0x43, 0x68,
	0x72, 0x6f, 0x6d, 0x65, 0x50, 0x72, 0x65, 0x62, 0x75, 0x69, 0x6c, 0x74, 0x52, 0x65, 0x71, 0x75,
	0x65, 0x73, 0x74, 0x12, 0x2a, 0x0a, 0x06, 0x63, 0x68, 0x72, 0x6f, 0x6f, 0x74, 0x18, 0x01, 0x20,
	0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x63, 0x68, 0x72, 0x6f, 0x6d, 0x69, 0x75, 0x6d, 0x6f, 0x73,
	0x2e, 0x43, 0x68, 0x72, 0x6f, 0x6f, 0x74, 0x52, 0x06, 0x63, 0x68, 0x72, 0x6f, 0x6f, 0x74, 0x12,
	0x3a, 0x0a, 0x0c, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x5f, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x18,
	0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x63, 0x68, 0x72, 0x6f, 0x6d, 0x69, 0x75, 0x6d,
	0x6f, 0x73, 0x2e, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x54, 0x61, 0x72, 0x67, 0x65, 0x74, 0x52, 0x0b,
	0x62, 0x75, 0x69, 0x6c, 0x64, 0x54, 0x61, 0x72, 0x67, 0x65, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x63,
	0x68, 0x72, 0x6f, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x63, 0x68, 0x72,
	0x6f, 0x6d, 0x65, 0x22, 0x3e, 0x0a, 0x19, 0x48, 0x61, 0x73, 0x43, 0x68, 0x72, 0x6f, 0x6d, 0x65,
	0x50, 0x72, 0x65, 0x62, 0x75, 0x69, 0x6c, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65,
	0x12, 0x21, 0x0a, 0x0c, 0x68, 0x61, 0x73, 0x5f, 0x70, 0x72, 0x65, 0x62, 0x75, 0x69, 0x6c, 0x74,
	0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0b, 0x68, 0x61, 0x73, 0x50, 0x72, 0x65, 0x62, 0x75,
	0x69, 0x6c, 0x74, 0x22, 0x69, 0x0a, 0x18, 0x4e, 0x65, 0x65, 0x64, 0x73, 0x43, 0x68, 0x72, 0x6f,
	0x6d, 0x65, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12,
	0x4d, 0x0a, 0x0f, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x65,
	0x73, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x63, 0x68, 0x72, 0x6f, 0x6d,
	0x69, 0x74, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x50,
	0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x52, 0x0e,
	0x69, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0xdd,
	0x02, 0x0a, 0x19, 0x4e, 0x65, 0x65, 0x64, 0x73, 0x43, 0x68, 0x72, 0x6f, 0x6d, 0x65, 0x53, 0x6f,
	0x75, 0x72, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2e, 0x0a, 0x13,
	0x6e, 0x65, 0x65, 0x64, 0x73, 0x5f, 0x63, 0x68, 0x72, 0x6f, 0x6d, 0x65, 0x5f, 0x73, 0x6f, 0x75,
	0x72, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x11, 0x6e, 0x65, 0x65, 0x64, 0x73,
	0x43, 0x68, 0x72, 0x6f, 0x6d, 0x65, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x48, 0x0a, 0x07,
	0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0e, 0x32, 0x2e, 0x2e,
	0x63, 0x68, 0x72, 0x6f, 0x6d, 0x69, 0x74, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x4e, 0x65, 0x65,
	0x64, 0x73, 0x43, 0x68, 0x72, 0x6f, 0x6d, 0x65, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x65,
	0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x52, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x52, 0x07, 0x72,
	0x65, 0x61, 0x73, 0x6f, 0x6e, 0x73, 0x12, 0x33, 0x0a, 0x08, 0x70, 0x61, 0x63, 0x6b, 0x61, 0x67,
	0x65, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x63, 0x68, 0x72, 0x6f, 0x6d,
	0x69, 0x75, 0x6d, 0x6f, 0x73, 0x2e, 0x50, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x49, 0x6e, 0x66,
	0x6f, 0x52, 0x08, 0x70, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x73, 0x12, 0x23, 0x0a, 0x0d, 0x62,
	0x75, 0x69, 0x6c, 0x64, 0x73, 0x5f, 0x63, 0x68, 0x72, 0x6f, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01,
	0x28, 0x08, 0x52, 0x0c, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x73, 0x43, 0x68, 0x72, 0x6f, 0x6d, 0x65,
	0x22, 0x6c, 0x0a, 0x06, 0x52, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x12, 0x0f, 0x0a, 0x0b, 0x55, 0x4e,
	0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x0f, 0x0a, 0x0b, 0x4e,
	0x4f, 0x5f, 0x50, 0x52, 0x45, 0x42, 0x55, 0x49, 0x4c, 0x54, 0x10, 0x01, 0x12, 0x12, 0x0a, 0x0e,
	0x43, 0x4f, 0x4d, 0x50, 0x49, 0x4c, 0x45, 0x5f, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x10, 0x02,
	0x12, 0x0f, 0x0a, 0x0b, 0x4c, 0x4f, 0x43, 0x41, 0x4c, 0x5f, 0x55, 0x50, 0x52, 0x45, 0x56, 0x10,
	0x03, 0x12, 0x1b, 0x0a, 0x17, 0x46, 0x4f, 0x4c, 0x4c, 0x4f, 0x57, 0x45, 0x52, 0x5f, 0x4c, 0x41,
	0x43, 0x4b, 0x53, 0x5f, 0x50, 0x52, 0x45, 0x42, 0x55, 0x49, 0x4c, 0x54, 0x10, 0x04, 0x22, 0xd0,
	0x01, 0x0a, 0x12, 0x48, 0x61, 0x73, 0x50, 0x72, 0x65, 0x62, 0x75, 0x69, 0x6c, 0x74, 0x52, 0x65,
	0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x2a, 0x0a, 0x06, 0x63, 0x68, 0x72, 0x6f, 0x6f, 0x74, 0x18,
	0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x63, 0x68, 0x72, 0x6f, 0x6d, 0x69, 0x75, 0x6d,
	0x6f, 0x73, 0x2e, 0x43, 0x68, 0x72, 0x6f, 0x6f, 0x74, 0x52, 0x06, 0x63, 0x68, 0x72, 0x6f, 0x6f,
	0x74, 0x12, 0x3a, 0x0a, 0x0c, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x5f, 0x74, 0x61, 0x72, 0x67, 0x65,
	0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x63, 0x68, 0x72, 0x6f, 0x6d, 0x69,
	0x75, 0x6d, 0x6f, 0x73, 0x2e, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x54, 0x61, 0x72, 0x67, 0x65, 0x74,
	0x52, 0x0b, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x54, 0x61, 0x72, 0x67, 0x65, 0x74, 0x12, 0x16, 0x0a,
	0x06, 0x63, 0x68, 0x72, 0x6f, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x63,
	0x68, 0x72, 0x6f, 0x6d, 0x65, 0x12, 0x3a, 0x0a, 0x0c, 0x70, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65,
	0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x63, 0x68,
	0x72, 0x6f, 0x6d, 0x69, 0x75, 0x6d, 0x6f, 0x73, 0x2e, 0x50, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65,
	0x49, 0x6e, 0x66, 0x6f, 0x52, 0x0b, 0x70, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x49, 0x6e, 0x66,
	0x6f, 0x22, 0x38, 0x0a, 0x13, 0x48, 0x61, 0x73, 0x50, 0x72, 0x65, 0x62, 0x75, 0x69, 0x6c, 0x74,
	0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x68, 0x61, 0x73, 0x5f,
	0x70, 0x72, 0x65, 0x62, 0x75, 0x69, 0x6c, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0b,
	0x68, 0x61, 0x73, 0x50, 0x72, 0x65, 0x62, 0x75, 0x69, 0x6c, 0x74, 0x22, 0xdd, 0x01, 0x0a, 0x14,
	0x55, 0x70, 0x72, 0x65, 0x76, 0x50, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x73, 0x52, 0x65, 0x71,
	0x75, 0x65, 0x73, 0x74, 0x12, 0x2a, 0x0a, 0x06, 0x63, 0x68, 0x72, 0x6f, 0x6f, 0x74, 0x18, 0x01,
	0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x63, 0x68, 0x72, 0x6f, 0x6d, 0x69, 0x75, 0x6d, 0x6f,
	0x73, 0x2e, 0x43, 0x68, 0x72, 0x6f, 0x6f, 0x74, 0x52, 0x06, 0x63, 0x68, 0x72, 0x6f, 0x6f, 0x74,
	0x12, 0x3c, 0x0a, 0x0d, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x5f, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74,
	0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x63, 0x68, 0x72, 0x6f, 0x6d, 0x69,
	0x75, 0x6d, 0x6f, 0x73, 0x2e, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x54, 0x61, 0x72, 0x67, 0x65, 0x74,
	0x52, 0x0c, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x54, 0x61, 0x72, 0x67, 0x65, 0x74, 0x73, 0x12, 0x3c,
	0x0a, 0x0c, 0x6f, 0x76, 0x65, 0x72, 0x6c, 0x61, 0x79, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x03,
	0x20, 0x01, 0x28, 0x0e, 0x32, 0x19, 0x2e, 0x63, 0x68, 0x72, 0x6f, 0x6d, 0x69, 0x74, 0x65, 0x2e,
	0x61, 0x70, 0x69, 0x2e, 0x4f, 0x76, 0x65, 0x72, 0x6c, 0x61, 0x79, 0x54, 0x79, 0x70, 0x65, 0x52,
	0x0b, 0x6f, 0x76, 0x65, 0x72, 0x6c, 0x61, 0x79, 0x54, 0x79, 0x70, 0x65, 0x12, 0x1d, 0x0a, 0x0a,
	0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x5f, 0x64, 0x69, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09,
	0x52, 0x09, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x44, 0x69, 0x72, 0x22, 0xeb, 0x02, 0x0a, 0x1c,
	0x55, 0x70, 0x72, 0x65, 0x76, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x65, 0x64, 0x50, 0x61,
	0x63, 0x6b, 0x61, 0x67, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x2a, 0x0a, 0x06,
	0x63, 0x68, 0x72, 0x6f, 0x6f, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x63,
	0x68, 0x72, 0x6f, 0x6d, 0x69, 0x75, 0x6d, 0x6f, 0x73, 0x2e, 0x43, 0x68, 0x72, 0x6f, 0x6f, 0x74,
	0x52, 0x06, 0x63, 0x68, 0x72, 0x6f, 0x6f, 0x74, 0x12, 0x3a, 0x0a, 0x0c, 0x70, 0x61, 0x63, 0x6b,
	0x61, 0x67, 0x65, 0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17,
	0x2e, 0x63, 0x68, 0x72, 0x6f, 0x6d, 0x69, 0x75, 0x6d, 0x6f, 0x73, 0x2e, 0x50, 0x61, 0x63, 0x6b,
	0x61, 0x67, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x0b, 0x70, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65,
	0x49, 0x6e, 0x66, 0x6f, 0x12, 0x4d, 0x0a, 0x08, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x73,
	0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x63, 0x68, 0x72, 0x6f, 0x6d, 0x69, 0x74,
	0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x55, 0x70, 0x72, 0x65, 0x76, 0x56, 0x65, 0x72, 0x73, 0x69,
	0x6f, 0x6e, 0x65, 0x64, 0x50, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65,
	0x73, 0x74, 0x2e, 0x47, 0x69, 0x74, 0x52, 0x65, 0x66, 0x52, 0x08, 0x76, 0x65, 0x72, 0x73, 0x69,
	0x6f, 0x6e, 0x73, 0x12, 0x3c, 0x0a, 0x0d, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x5f, 0x74, 0x61, 0x72,
	0x67, 0x65, 0x74, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x63, 0x68, 0x72,
	0x6f, 0x6d, 0x69, 0x75, 0x6d, 0x6f, 0x73, 0x2e, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x54, 0x61, 0x72,
	0x67, 0x65, 0x74, 0x52, 0x0c, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x54, 0x61, 0x72, 0x67, 0x65, 0x74,
	0x73, 0x1a, 0x56, 0x0a, 0x06, 0x47, 0x69, 0x74, 0x52, 0x65, 0x66, 0x12, 0x1e, 0x0a, 0x0a, 0x72,
	0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52,
	0x0a, 0x72, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x72,
	0x65, 0x66, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x72, 0x65, 0x66, 0x12, 0x1a, 0x0a,
	0x08, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52,
	0x08, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x22, 0xa6, 0x01, 0x0a, 0x15, 0x55, 0x70,
	0x72, 0x65, 0x76, 0x50, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f,
	0x6e, 0x73, 0x65, 0x12, 0x55, 0x0a, 0x10, 0x6d, 0x6f, 0x64, 0x69, 0x66, 0x69, 0x65, 0x64, 0x5f,
	0x65, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2a, 0x2e,
	0x63, 0x68, 0x72, 0x6f, 0x6d, 0x69, 0x74, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x55, 0x70, 0x72,
	0x65, 0x76, 0x50, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e,
	0x73, 0x65, 0x2e, 0x45, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x52, 0x0f, 0x6d, 0x6f, 0x64, 0x69, 0x66,
	0x69, 0x65, 0x64, 0x45, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x76, 0x65,
	0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x76, 0x65, 0x72,
	0x73, 0x69, 0x6f, 0x6e, 0x1a, 0x1c, 0x0a, 0x06, 0x45, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x12, 0x12,
	0x0a, 0x04, 0x70, 0x61, 0x74, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x70, 0x61,
	0x74, 0x68, 0x22, 0x62, 0x0a, 0x1d, 0x55, 0x70, 0x72, 0x65, 0x76, 0x56, 0x65, 0x72, 0x73, 0x69,
	0x6f, 0x6e, 0x65, 0x64, 0x50, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f,
	0x6e, 0x73, 0x65, 0x12, 0x41, 0x0a, 0x09, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x73,
	0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x63, 0x68, 0x72, 0x6f, 0x6d, 0x69, 0x74,
	0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x55, 0x70, 0x72, 0x65, 0x76, 0x50, 0x61, 0x63, 0x6b, 0x61,
	0x67, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x52, 0x09, 0x72, 0x65, 0x73,
	0x70, 0x6f, 0x6e, 0x73, 0x65, 0x73, 0x32, 0xfc, 0x07, 0x0a, 0x0e, 0x50, 0x61, 0x63, 0x6b, 0x61,
	0x67, 0x65, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x55, 0x0a, 0x0c, 0x42, 0x75, 0x69,
	0x6c, 0x64, 0x73, 0x43, 0x68, 0x72, 0x6f, 0x6d, 0x65, 0x12, 0x21, 0x2e, 0x63, 0x68, 0x72, 0x6f,
	0x6d, 0x69, 0x74, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x73, 0x43,
	0x68, 0x72, 0x6f, 0x6d, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x22, 0x2e, 0x63,
	0x68, 0x72, 0x6f, 0x6d, 0x69, 0x74, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x42, 0x75, 0x69, 0x6c,
	0x64, 0x73, 0x43, 0x68, 0x72, 0x6f, 0x6d, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65,
	0x12, 0x5b, 0x0a, 0x0e, 0x47, 0x65, 0x74, 0x42, 0x65, 0x73, 0x74, 0x56, 0x69, 0x73, 0x69, 0x62,
	0x6c, 0x65, 0x12, 0x23, 0x2e, 0x63, 0x68, 0x72, 0x6f, 0x6d, 0x69, 0x74, 0x65, 0x2e, 0x61, 0x70,
	0x69, 0x2e, 0x47, 0x65, 0x74, 0x42, 0x65, 0x73, 0x74, 0x56, 0x69, 0x73, 0x69, 0x62, 0x6c, 0x65,
	0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x24, 0x2e, 0x63, 0x68, 0x72, 0x6f, 0x6d, 0x69,
	0x74, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x47, 0x65, 0x74, 0x42, 0x65, 0x73, 0x74, 0x56, 0x69,
	0x73, 0x69, 0x62, 0x6c, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x61, 0x0a,
	0x10, 0x47, 0x65, 0x74, 0x43, 0x68, 0x72, 0x6f, 0x6d, 0x65, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f,
	0x6e, 0x12, 0x25, 0x2e, 0x63, 0x68, 0x72, 0x6f, 0x6d, 0x69, 0x74, 0x65, 0x2e, 0x61, 0x70, 0x69,
	0x2e, 0x47, 0x65, 0x74, 0x43, 0x68, 0x72, 0x6f, 0x6d, 0x65, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f,
	0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x26, 0x2e, 0x63, 0x68, 0x72, 0x6f, 0x6d,
	0x69, 0x74, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x68, 0x72, 0x6f, 0x6d,
	0x65, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65,
	0x12, 0x64, 0x0a, 0x11, 0x47, 0x65, 0x74, 0x54, 0x61, 0x72, 0x67, 0x65, 0x74, 0x56, 0x65, 0x72,
	0x73, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x26, 0x2e, 0x63, 0x68, 0x72, 0x6f, 0x6d, 0x69, 0x74, 0x65,
	0x2e, 0x61, 0x70, 0x69, 0x2e, 0x47, 0x65, 0x74, 0x54, 0x61, 0x72, 0x67, 0x65, 0x74, 0x56, 0x65,
	0x72, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x27, 0x2e,
	0x63, 0x68, 0x72, 0x6f, 0x6d, 0x69, 0x74, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x47, 0x65, 0x74,
	0x54, 0x61, 0x72, 0x67, 0x65, 0x74, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65,
	0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x67, 0x0a, 0x12, 0x47, 0x65, 0x74, 0x42, 0x75, 0x69,
	0x6c, 0x64, 0x65, 0x72, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x27, 0x2e, 0x63,
	0x68, 0x72, 0x6f, 0x6d, 0x69, 0x74, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x47, 0x65, 0x74, 0x42,
	0x75, 0x69, 0x6c, 0x64, 0x65, 0x72, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x65,
	0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x28, 0x2e, 0x63, 0x68, 0x72, 0x6f, 0x6d, 0x69, 0x74, 0x65,
	0x2e, 0x61, 0x70, 0x69, 0x2e, 0x47, 0x65, 0x74, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x65, 0x72, 0x4d,
	0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12,
	0x64, 0x0a, 0x11, 0x48, 0x61, 0x73, 0x43, 0x68, 0x72, 0x6f, 0x6d, 0x65, 0x50, 0x72, 0x65, 0x62,
	0x75, 0x69, 0x6c, 0x74, 0x12, 0x26, 0x2e, 0x63, 0x68, 0x72, 0x6f, 0x6d, 0x69, 0x74, 0x65, 0x2e,
	0x61, 0x70, 0x69, 0x2e, 0x48, 0x61, 0x73, 0x43, 0x68, 0x72, 0x6f, 0x6d, 0x65, 0x50, 0x72, 0x65,
	0x62, 0x75, 0x69, 0x6c, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x27, 0x2e, 0x63,
	0x68, 0x72, 0x6f, 0x6d, 0x69, 0x74, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x48, 0x61, 0x73, 0x43,
	0x68, 0x72, 0x6f, 0x6d, 0x65, 0x50, 0x72, 0x65, 0x62, 0x75, 0x69, 0x6c, 0x74, 0x52, 0x65, 0x73,
	0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x52, 0x0a, 0x0b, 0x48, 0x61, 0x73, 0x50, 0x72, 0x65, 0x62,
	0x75, 0x69, 0x6c, 0x74, 0x12, 0x20, 0x2e, 0x63, 0x68, 0x72, 0x6f, 0x6d, 0x69, 0x74, 0x65, 0x2e,
	0x61, 0x70, 0x69, 0x2e, 0x48, 0x61, 0x73, 0x50, 0x72, 0x65, 0x62, 0x75, 0x69, 0x6c, 0x74, 0x52,
	0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x63, 0x68, 0x72, 0x6f, 0x6d, 0x69, 0x74,
	0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x48, 0x61, 0x73, 0x50, 0x72, 0x65, 0x62, 0x75, 0x69, 0x6c,
	0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x64, 0x0a, 0x11, 0x4e, 0x65, 0x65,
	0x64, 0x73, 0x43, 0x68, 0x72, 0x6f, 0x6d, 0x65, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x26,
	0x2e, 0x63, 0x68, 0x72, 0x6f, 0x6d, 0x69, 0x74, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x4e, 0x65,
	0x65, 0x64, 0x73, 0x43, 0x68, 0x72, 0x6f, 0x6d, 0x65, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52,
	0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x27, 0x2e, 0x63, 0x68, 0x72, 0x6f, 0x6d, 0x69, 0x74,
	0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x4e, 0x65, 0x65, 0x64, 0x73, 0x43, 0x68, 0x72, 0x6f, 0x6d,
	0x65, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12,
	0x58, 0x0a, 0x05, 0x55, 0x70, 0x72, 0x65, 0x76, 0x12, 0x22, 0x2e, 0x63, 0x68, 0x72, 0x6f, 0x6d,
	0x69, 0x74, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x55, 0x70, 0x72, 0x65, 0x76, 0x50, 0x61, 0x63,
	0x6b, 0x61, 0x67, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x23, 0x2e, 0x63,
	0x68, 0x72, 0x6f, 0x6d, 0x69, 0x74, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x55, 0x70, 0x72, 0x65,
	0x76, 0x50, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73,
	0x65, 0x22, 0x06, 0xc2, 0xed, 0x1a, 0x02, 0x10, 0x02, 0x12, 0x78, 0x0a, 0x15, 0x55, 0x70, 0x72,
	0x65, 0x76, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x65, 0x64, 0x50, 0x61, 0x63, 0x6b, 0x61,
	0x67, 0x65, 0x12, 0x2a, 0x2e, 0x63, 0x68, 0x72, 0x6f, 0x6d, 0x69, 0x74, 0x65, 0x2e, 0x61, 0x70,
	0x69, 0x2e, 0x55, 0x70, 0x72, 0x65, 0x76, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x65, 0x64,
	0x50, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2b,
	0x2e, 0x63, 0x68, 0x72, 0x6f, 0x6d, 0x69, 0x74, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x55, 0x70,
	0x72, 0x65, 0x76, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x65, 0x64, 0x50, 0x61, 0x63, 0x6b,
	0x61, 0x67, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x06, 0xc2, 0xed, 0x1a,
	0x02, 0x10, 0x02, 0x1a, 0x10, 0xc2, 0xed, 0x1a, 0x0c, 0x0a, 0x08, 0x70, 0x61, 0x63, 0x6b, 0x61,
	0x67, 0x65, 0x73, 0x10, 0x01, 0x42, 0x38, 0x5a, 0x36, 0x67, 0x6f, 0x2e, 0x63, 0x68, 0x72, 0x6f,
	0x6d, 0x69, 0x75, 0x6d, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x63, 0x68, 0x72, 0x6f, 0x6d, 0x69, 0x75,
	0x6d, 0x6f, 0x73, 0x2f, 0x69, 0x6e, 0x66, 0x72, 0x61, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f,
	0x67, 0x6f, 0x2f, 0x63, 0x68, 0x72, 0x6f, 0x6d, 0x69, 0x74, 0x65, 0x2f, 0x61, 0x70, 0x69, 0x62,
	0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
}

var (
	file_chromite_api_packages_proto_rawDescOnce sync.Once
	file_chromite_api_packages_proto_rawDescData = file_chromite_api_packages_proto_rawDesc
)

func file_chromite_api_packages_proto_rawDescGZIP() []byte {
	file_chromite_api_packages_proto_rawDescOnce.Do(func() {
		file_chromite_api_packages_proto_rawDescData = protoimpl.X.CompressGZIP(file_chromite_api_packages_proto_rawDescData)
	})
	return file_chromite_api_packages_proto_rawDescData
}

var file_chromite_api_packages_proto_enumTypes = make([]protoimpl.EnumInfo, 1)
var file_chromite_api_packages_proto_msgTypes = make([]protoimpl.MessageInfo, 24)
var file_chromite_api_packages_proto_goTypes = []interface{}{
	(NeedsChromeSourceResponse_Reason)(0),                  // 0: chromite.api.NeedsChromeSourceResponse.Reason
	(*BuildsChromeRequest)(nil),                            // 1: chromite.api.BuildsChromeRequest
	(*BuildsChromeResponse)(nil),                           // 2: chromite.api.BuildsChromeResponse
	(*GetBestVisibleRequest)(nil),                          // 3: chromite.api.GetBestVisibleRequest
	(*GetBestVisibleResponse)(nil),                         // 4: chromite.api.GetBestVisibleResponse
	(*GetChromeVersionRequest)(nil),                        // 5: chromite.api.GetChromeVersionRequest
	(*GetChromeVersionResponse)(nil),                       // 6: chromite.api.GetChromeVersionResponse
	(*GetTargetVersionsRequest)(nil),                       // 7: chromite.api.GetTargetVersionsRequest
	(*GetTargetVersionsResponse)(nil),                      // 8: chromite.api.GetTargetVersionsResponse
	(*GetBuilderMetadataRequest)(nil),                      // 9: chromite.api.GetBuilderMetadataRequest
	(*GetBuilderMetadataResponse)(nil),                     // 10: chromite.api.GetBuilderMetadataResponse
	(*HasChromePrebuiltRequest)(nil),                       // 11: chromite.api.HasChromePrebuiltRequest
	(*HasChromePrebuiltResponse)(nil),                      // 12: chromite.api.HasChromePrebuiltResponse
	(*NeedsChromeSourceRequest)(nil),                       // 13: chromite.api.NeedsChromeSourceRequest
	(*NeedsChromeSourceResponse)(nil),                      // 14: chromite.api.NeedsChromeSourceResponse
	(*HasPrebuiltRequest)(nil),                             // 15: chromite.api.HasPrebuiltRequest
	(*HasPrebuiltResponse)(nil),                            // 16: chromite.api.HasPrebuiltResponse
	(*UprevPackagesRequest)(nil),                           // 17: chromite.api.UprevPackagesRequest
	(*UprevVersionedPackageRequest)(nil),                   // 18: chromite.api.UprevVersionedPackageRequest
	(*UprevPackagesResponse)(nil),                          // 19: chromite.api.UprevPackagesResponse
	(*UprevVersionedPackageResponse)(nil),                  // 20: chromite.api.UprevVersionedPackageResponse
	(*GetBuilderMetadataResponse_ModelMetadata)(nil),       // 21: chromite.api.GetBuilderMetadataResponse.ModelMetadata
	(*GetBuilderMetadataResponse_BuildTargetMetadata)(nil), // 22: chromite.api.GetBuilderMetadataResponse.BuildTargetMetadata
	(*UprevVersionedPackageRequest_GitRef)(nil),            // 23: chromite.api.UprevVersionedPackageRequest.GitRef
	(*UprevPackagesResponse_Ebuild)(nil),                   // 24: chromite.api.UprevPackagesResponse.Ebuild
	(*chromiumos.Chroot)(nil),                              // 25: chromiumos.Chroot
	(*chromiumos.BuildTarget)(nil),                         // 26: chromiumos.BuildTarget
	(*chromiumos.PackageInfo)(nil),                         // 27: chromiumos.PackageInfo
	(*InstallPackagesRequest)(nil),                         // 28: chromite.api.InstallPackagesRequest
	(OverlayType)(0),                                       // 29: chromite.api.OverlayType
}
var file_chromite_api_packages_proto_depIdxs = []int32{
	25, // 0: chromite.api.BuildsChromeRequest.chroot:type_name -> chromiumos.Chroot
	26, // 1: chromite.api.BuildsChromeRequest.build_target:type_name -> chromiumos.BuildTarget
	27, // 2: chromite.api.BuildsChromeRequest.packages:type_name -> chromiumos.PackageInfo
	25, // 3: chromite.api.GetBestVisibleRequest.chroot:type_name -> chromiumos.Chroot
	26, // 4: chromite.api.GetBestVisibleRequest.build_target:type_name -> chromiumos.BuildTarget
	27, // 5: chromite.api.GetBestVisibleResponse.package_info:type_name -> chromiumos.PackageInfo
	25, // 6: chromite.api.GetChromeVersionRequest.chroot:type_name -> chromiumos.Chroot
	26, // 7: chromite.api.GetChromeVersionRequest.build_target:type_name -> chromiumos.BuildTarget
	25, // 8: chromite.api.GetTargetVersionsRequest.chroot:type_name -> chromiumos.Chroot
	26, // 9: chromite.api.GetTargetVersionsRequest.build_target:type_name -> chromiumos.BuildTarget
	27, // 10: chromite.api.GetTargetVersionsRequest.packages:type_name -> chromiumos.PackageInfo
	25, // 11: chromite.api.GetBuilderMetadataRequest.chroot:type_name -> chromiumos.Chroot
	26, // 12: chromite.api.GetBuilderMetadataRequest.build_target:type_name -> chromiumos.BuildTarget
	22, // 13: chromite.api.GetBuilderMetadataResponse.build_target_metadata:type_name -> chromite.api.GetBuilderMetadataResponse.BuildTargetMetadata
	21, // 14: chromite.api.GetBuilderMetadataResponse.model_metadata:type_name -> chromite.api.GetBuilderMetadataResponse.ModelMetadata
	25, // 15: chromite.api.HasChromePrebuiltRequest.chroot:type_name -> chromiumos.Chroot
	26, // 16: chromite.api.HasChromePrebuiltRequest.build_target:type_name -> chromiumos.BuildTarget
	28, // 17: chromite.api.NeedsChromeSourceRequest.install_request:type_name -> chromite.api.InstallPackagesRequest
	0,  // 18: chromite.api.NeedsChromeSourceResponse.reasons:type_name -> chromite.api.NeedsChromeSourceResponse.Reason
	27, // 19: chromite.api.NeedsChromeSourceResponse.packages:type_name -> chromiumos.PackageInfo
	25, // 20: chromite.api.HasPrebuiltRequest.chroot:type_name -> chromiumos.Chroot
	26, // 21: chromite.api.HasPrebuiltRequest.build_target:type_name -> chromiumos.BuildTarget
	27, // 22: chromite.api.HasPrebuiltRequest.package_info:type_name -> chromiumos.PackageInfo
	25, // 23: chromite.api.UprevPackagesRequest.chroot:type_name -> chromiumos.Chroot
	26, // 24: chromite.api.UprevPackagesRequest.build_targets:type_name -> chromiumos.BuildTarget
	29, // 25: chromite.api.UprevPackagesRequest.overlay_type:type_name -> chromite.api.OverlayType
	25, // 26: chromite.api.UprevVersionedPackageRequest.chroot:type_name -> chromiumos.Chroot
	27, // 27: chromite.api.UprevVersionedPackageRequest.package_info:type_name -> chromiumos.PackageInfo
	23, // 28: chromite.api.UprevVersionedPackageRequest.versions:type_name -> chromite.api.UprevVersionedPackageRequest.GitRef
	26, // 29: chromite.api.UprevVersionedPackageRequest.build_targets:type_name -> chromiumos.BuildTarget
	24, // 30: chromite.api.UprevPackagesResponse.modified_ebuilds:type_name -> chromite.api.UprevPackagesResponse.Ebuild
	19, // 31: chromite.api.UprevVersionedPackageResponse.responses:type_name -> chromite.api.UprevPackagesResponse
	1,  // 32: chromite.api.PackageService.BuildsChrome:input_type -> chromite.api.BuildsChromeRequest
	3,  // 33: chromite.api.PackageService.GetBestVisible:input_type -> chromite.api.GetBestVisibleRequest
	5,  // 34: chromite.api.PackageService.GetChromeVersion:input_type -> chromite.api.GetChromeVersionRequest
	7,  // 35: chromite.api.PackageService.GetTargetVersions:input_type -> chromite.api.GetTargetVersionsRequest
	9,  // 36: chromite.api.PackageService.GetBuilderMetadata:input_type -> chromite.api.GetBuilderMetadataRequest
	11, // 37: chromite.api.PackageService.HasChromePrebuilt:input_type -> chromite.api.HasChromePrebuiltRequest
	15, // 38: chromite.api.PackageService.HasPrebuilt:input_type -> chromite.api.HasPrebuiltRequest
	13, // 39: chromite.api.PackageService.NeedsChromeSource:input_type -> chromite.api.NeedsChromeSourceRequest
	17, // 40: chromite.api.PackageService.Uprev:input_type -> chromite.api.UprevPackagesRequest
	18, // 41: chromite.api.PackageService.UprevVersionedPackage:input_type -> chromite.api.UprevVersionedPackageRequest
	2,  // 42: chromite.api.PackageService.BuildsChrome:output_type -> chromite.api.BuildsChromeResponse
	4,  // 43: chromite.api.PackageService.GetBestVisible:output_type -> chromite.api.GetBestVisibleResponse
	6,  // 44: chromite.api.PackageService.GetChromeVersion:output_type -> chromite.api.GetChromeVersionResponse
	8,  // 45: chromite.api.PackageService.GetTargetVersions:output_type -> chromite.api.GetTargetVersionsResponse
	10, // 46: chromite.api.PackageService.GetBuilderMetadata:output_type -> chromite.api.GetBuilderMetadataResponse
	12, // 47: chromite.api.PackageService.HasChromePrebuilt:output_type -> chromite.api.HasChromePrebuiltResponse
	16, // 48: chromite.api.PackageService.HasPrebuilt:output_type -> chromite.api.HasPrebuiltResponse
	14, // 49: chromite.api.PackageService.NeedsChromeSource:output_type -> chromite.api.NeedsChromeSourceResponse
	19, // 50: chromite.api.PackageService.Uprev:output_type -> chromite.api.UprevPackagesResponse
	20, // 51: chromite.api.PackageService.UprevVersionedPackage:output_type -> chromite.api.UprevVersionedPackageResponse
	42, // [42:52] is the sub-list for method output_type
	32, // [32:42] is the sub-list for method input_type
	32, // [32:32] is the sub-list for extension type_name
	32, // [32:32] is the sub-list for extension extendee
	0,  // [0:32] is the sub-list for field type_name
}

func init() { file_chromite_api_packages_proto_init() }
func file_chromite_api_packages_proto_init() {
	if File_chromite_api_packages_proto != nil {
		return
	}
	file_chromite_api_binhost_proto_init()
	file_chromite_api_build_api_proto_init()
	file_chromite_api_sysroot_proto_init()
	if !protoimpl.UnsafeEnabled {
		file_chromite_api_packages_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*BuildsChromeRequest); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_chromite_api_packages_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*BuildsChromeResponse); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_chromite_api_packages_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*GetBestVisibleRequest); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_chromite_api_packages_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*GetBestVisibleResponse); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_chromite_api_packages_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*GetChromeVersionRequest); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_chromite_api_packages_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*GetChromeVersionResponse); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_chromite_api_packages_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*GetTargetVersionsRequest); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_chromite_api_packages_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*GetTargetVersionsResponse); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_chromite_api_packages_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*GetBuilderMetadataRequest); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_chromite_api_packages_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*GetBuilderMetadataResponse); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_chromite_api_packages_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*HasChromePrebuiltRequest); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_chromite_api_packages_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*HasChromePrebuiltResponse); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_chromite_api_packages_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*NeedsChromeSourceRequest); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_chromite_api_packages_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*NeedsChromeSourceResponse); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_chromite_api_packages_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*HasPrebuiltRequest); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_chromite_api_packages_proto_msgTypes[15].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*HasPrebuiltResponse); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_chromite_api_packages_proto_msgTypes[16].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*UprevPackagesRequest); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_chromite_api_packages_proto_msgTypes[17].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*UprevVersionedPackageRequest); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_chromite_api_packages_proto_msgTypes[18].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*UprevPackagesResponse); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_chromite_api_packages_proto_msgTypes[19].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*UprevVersionedPackageResponse); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_chromite_api_packages_proto_msgTypes[20].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*GetBuilderMetadataResponse_ModelMetadata); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_chromite_api_packages_proto_msgTypes[21].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*GetBuilderMetadataResponse_BuildTargetMetadata); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_chromite_api_packages_proto_msgTypes[22].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*UprevVersionedPackageRequest_GitRef); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_chromite_api_packages_proto_msgTypes[23].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*UprevPackagesResponse_Ebuild); 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_chromite_api_packages_proto_rawDesc,
			NumEnums:      1,
			NumMessages:   24,
			NumExtensions: 0,
			NumServices:   1,
		},
		GoTypes:           file_chromite_api_packages_proto_goTypes,
		DependencyIndexes: file_chromite_api_packages_proto_depIdxs,
		EnumInfos:         file_chromite_api_packages_proto_enumTypes,
		MessageInfos:      file_chromite_api_packages_proto_msgTypes,
	}.Build()
	File_chromite_api_packages_proto = out.File
	file_chromite_api_packages_proto_rawDesc = nil
	file_chromite_api_packages_proto_goTypes = nil
	file_chromite_api_packages_proto_depIdxs = nil
}
