Begin migrating to ArtifactsByService.

This includes both the ArtifactsService endpoints and the protobufs
enabling them.

BUG=chromium:1072785, chromium:1027720, chromium:1034529
TEST=generate.sh

Change-Id: I4860f13676c921dcc0864c542eb8f75cd7c20d79
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/infra/proto/+/2157859
Tested-by: LaMont Jones <lamontjones@chromium.org>
Commit-Queue: LaMont Jones <lamontjones@chromium.org>
Reviewed-by: Alex Klein <saklein@chromium.org>
diff --git a/go/chromite/api/artifacts.pb.go b/go/chromite/api/artifacts.pb.go
index 79120eb..bd59e14 100644
--- a/go/chromite/api/artifacts.pb.go
+++ b/go/chromite/api/artifacts.pb.go
@@ -25,6 +25,42 @@
 // proto package needs to be updated.
 const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
 
+// Whether this artifact requires a build.
+type PrepareForBuildResponse_BuildRelevance int32
+
+const (
+	PrepareForBuildResponse_UNSPECIFIED PrepareForBuildResponse_BuildRelevance = 0
+	// Build is necessary to generate artifacts.
+	PrepareForBuildResponse_NEEDED PrepareForBuildResponse_BuildRelevance = 1
+	// Defer to other artifacts.  Used primarily for aggregation of artifact
+	// results.
+	PrepareForBuildResponse_UNKNOWN PrepareForBuildResponse_BuildRelevance = 2
+	// Artifacts are already generated.  The build is pointless.
+	PrepareForBuildResponse_POINTLESS PrepareForBuildResponse_BuildRelevance = 3
+)
+
+var PrepareForBuildResponse_BuildRelevance_name = map[int32]string{
+	0: "UNSPECIFIED",
+	1: "NEEDED",
+	2: "UNKNOWN",
+	3: "POINTLESS",
+}
+
+var PrepareForBuildResponse_BuildRelevance_value = map[string]int32{
+	"UNSPECIFIED": 0,
+	"NEEDED":      1,
+	"UNKNOWN":     2,
+	"POINTLESS":   3,
+}
+
+func (x PrepareForBuildResponse_BuildRelevance) String() string {
+	return proto.EnumName(PrepareForBuildResponse_BuildRelevance_name, int32(x))
+}
+
+func (PrepareForBuildResponse_BuildRelevance) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_62a7d4c8524262a7, []int{2, 0}
+}
+
 // An artifact is a file generated during or after a build.
 type Artifact struct {
 	// Absolute path to the artifact file.
@@ -66,8 +102,223 @@
 	return ""
 }
 
+type PrepareForBuildRequest struct {
+	// The chroot where the sysroot lives.
+	Chroot *chromiumos.Chroot `protobuf:"bytes,1,opt,name=chroot,proto3" json:"chroot,omitempty"`
+	// The sysroot where the files live.
+	Sysroot *Sysroot `protobuf:"bytes,2,opt,name=sysroot,proto3" json:"sysroot,omitempty"`
+	// Information about the artifacts.
+	ArtifactInfo *chromiumos.ArtifactsByService `protobuf:"bytes,3,opt,name=artifact_info,json=artifactInfo,proto3" json:"artifact_info,omitempty"`
+	// Whether we will proceed even if the build is POINTLESS.
+	ForcedBuildRelevance bool     `protobuf:"varint,4,opt,name=forced_build_relevance,json=forcedBuildRelevance,proto3" json:"forced_build_relevance,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *PrepareForBuildRequest) Reset()         { *m = PrepareForBuildRequest{} }
+func (m *PrepareForBuildRequest) String() string { return proto.CompactTextString(m) }
+func (*PrepareForBuildRequest) ProtoMessage()    {}
+func (*PrepareForBuildRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_62a7d4c8524262a7, []int{1}
+}
+
+func (m *PrepareForBuildRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_PrepareForBuildRequest.Unmarshal(m, b)
+}
+func (m *PrepareForBuildRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_PrepareForBuildRequest.Marshal(b, m, deterministic)
+}
+func (m *PrepareForBuildRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_PrepareForBuildRequest.Merge(m, src)
+}
+func (m *PrepareForBuildRequest) XXX_Size() int {
+	return xxx_messageInfo_PrepareForBuildRequest.Size(m)
+}
+func (m *PrepareForBuildRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_PrepareForBuildRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_PrepareForBuildRequest proto.InternalMessageInfo
+
+func (m *PrepareForBuildRequest) GetChroot() *chromiumos.Chroot {
+	if m != nil {
+		return m.Chroot
+	}
+	return nil
+}
+
+func (m *PrepareForBuildRequest) GetSysroot() *Sysroot {
+	if m != nil {
+		return m.Sysroot
+	}
+	return nil
+}
+
+func (m *PrepareForBuildRequest) GetArtifactInfo() *chromiumos.ArtifactsByService {
+	if m != nil {
+		return m.ArtifactInfo
+	}
+	return nil
+}
+
+func (m *PrepareForBuildRequest) GetForcedBuildRelevance() bool {
+	if m != nil {
+		return m.ForcedBuildRelevance
+	}
+	return false
+}
+
+type PrepareForBuildResponse struct {
+	BuildRelevance       PrepareForBuildResponse_BuildRelevance `protobuf:"varint,1,opt,name=build_relevance,json=buildRelevance,proto3,enum=chromite.api.PrepareForBuildResponse_BuildRelevance" json:"build_relevance,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}                               `json:"-"`
+	XXX_unrecognized     []byte                                 `json:"-"`
+	XXX_sizecache        int32                                  `json:"-"`
+}
+
+func (m *PrepareForBuildResponse) Reset()         { *m = PrepareForBuildResponse{} }
+func (m *PrepareForBuildResponse) String() string { return proto.CompactTextString(m) }
+func (*PrepareForBuildResponse) ProtoMessage()    {}
+func (*PrepareForBuildResponse) Descriptor() ([]byte, []int) {
+	return fileDescriptor_62a7d4c8524262a7, []int{2}
+}
+
+func (m *PrepareForBuildResponse) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_PrepareForBuildResponse.Unmarshal(m, b)
+}
+func (m *PrepareForBuildResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_PrepareForBuildResponse.Marshal(b, m, deterministic)
+}
+func (m *PrepareForBuildResponse) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_PrepareForBuildResponse.Merge(m, src)
+}
+func (m *PrepareForBuildResponse) XXX_Size() int {
+	return xxx_messageInfo_PrepareForBuildResponse.Size(m)
+}
+func (m *PrepareForBuildResponse) XXX_DiscardUnknown() {
+	xxx_messageInfo_PrepareForBuildResponse.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_PrepareForBuildResponse proto.InternalMessageInfo
+
+func (m *PrepareForBuildResponse) GetBuildRelevance() PrepareForBuildResponse_BuildRelevance {
+	if m != nil {
+		return m.BuildRelevance
+	}
+	return PrepareForBuildResponse_UNSPECIFIED
+}
+
+type BundleArtifactsRequest struct {
+	// The chroot where the sysroot lives.
+	Chroot *chromiumos.Chroot `protobuf:"bytes,1,opt,name=chroot,proto3" json:"chroot,omitempty"`
+	// The sysroot where the files live.
+	Sysroot *Sysroot `protobuf:"bytes,2,opt,name=sysroot,proto3" json:"sysroot,omitempty"`
+	// Artifact information.
+	ArtifactInfo *chromiumos.ArtifactsByService `protobuf:"bytes,3,opt,name=artifact_info,json=artifactInfo,proto3" json:"artifact_info,omitempty"`
+	// Absolute path to the directory in which artifacts should be dropped.
+	OutputDir            string   `protobuf:"bytes,4,opt,name=output_dir,json=outputDir,proto3" json:"output_dir,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *BundleArtifactsRequest) Reset()         { *m = BundleArtifactsRequest{} }
+func (m *BundleArtifactsRequest) String() string { return proto.CompactTextString(m) }
+func (*BundleArtifactsRequest) ProtoMessage()    {}
+func (*BundleArtifactsRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_62a7d4c8524262a7, []int{3}
+}
+
+func (m *BundleArtifactsRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_BundleArtifactsRequest.Unmarshal(m, b)
+}
+func (m *BundleArtifactsRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_BundleArtifactsRequest.Marshal(b, m, deterministic)
+}
+func (m *BundleArtifactsRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_BundleArtifactsRequest.Merge(m, src)
+}
+func (m *BundleArtifactsRequest) XXX_Size() int {
+	return xxx_messageInfo_BundleArtifactsRequest.Size(m)
+}
+func (m *BundleArtifactsRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_BundleArtifactsRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_BundleArtifactsRequest proto.InternalMessageInfo
+
+func (m *BundleArtifactsRequest) GetChroot() *chromiumos.Chroot {
+	if m != nil {
+		return m.Chroot
+	}
+	return nil
+}
+
+func (m *BundleArtifactsRequest) GetSysroot() *Sysroot {
+	if m != nil {
+		return m.Sysroot
+	}
+	return nil
+}
+
+func (m *BundleArtifactsRequest) GetArtifactInfo() *chromiumos.ArtifactsByService {
+	if m != nil {
+		return m.ArtifactInfo
+	}
+	return nil
+}
+
+func (m *BundleArtifactsRequest) GetOutputDir() string {
+	if m != nil {
+		return m.OutputDir
+	}
+	return ""
+}
+
+type BundleArtifactsResponse struct {
+	// The artifacts that were bundled.
+	Artifacts            *chromiumos.UploadedArtifactsByService `protobuf:"bytes,1,opt,name=artifacts,proto3" json:"artifacts,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}                               `json:"-"`
+	XXX_unrecognized     []byte                                 `json:"-"`
+	XXX_sizecache        int32                                  `json:"-"`
+}
+
+func (m *BundleArtifactsResponse) Reset()         { *m = BundleArtifactsResponse{} }
+func (m *BundleArtifactsResponse) String() string { return proto.CompactTextString(m) }
+func (*BundleArtifactsResponse) ProtoMessage()    {}
+func (*BundleArtifactsResponse) Descriptor() ([]byte, []int) {
+	return fileDescriptor_62a7d4c8524262a7, []int{4}
+}
+
+func (m *BundleArtifactsResponse) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_BundleArtifactsResponse.Unmarshal(m, b)
+}
+func (m *BundleArtifactsResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_BundleArtifactsResponse.Marshal(b, m, deterministic)
+}
+func (m *BundleArtifactsResponse) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_BundleArtifactsResponse.Merge(m, src)
+}
+func (m *BundleArtifactsResponse) XXX_Size() int {
+	return xxx_messageInfo_BundleArtifactsResponse.Size(m)
+}
+func (m *BundleArtifactsResponse) XXX_DiscardUnknown() {
+	xxx_messageInfo_BundleArtifactsResponse.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_BundleArtifactsResponse proto.InternalMessageInfo
+
+func (m *BundleArtifactsResponse) GetArtifacts() *chromiumos.UploadedArtifactsByService {
+	if m != nil {
+		return m.Artifacts
+	}
+	return nil
+}
+
 // Request describing where build artifact bundles for a given build target
 // should be dumped.
+// TODO(crbug/1034529): BundleRequest and BundleResponse are being deprecated
+// (along with most of this file).  See BundleArtifactsRequest/Response
 type BundleRequest struct {
 	// The build target to bundle artifacts for.
 	// Deprecated. Use sysroot instead.
@@ -87,7 +338,7 @@
 func (m *BundleRequest) String() string { return proto.CompactTextString(m) }
 func (*BundleRequest) ProtoMessage()    {}
 func (*BundleRequest) Descriptor() ([]byte, []int) {
-	return fileDescriptor_62a7d4c8524262a7, []int{1}
+	return fileDescriptor_62a7d4c8524262a7, []int{5}
 }
 
 func (m *BundleRequest) XXX_Unmarshal(b []byte) error {
@@ -149,7 +400,7 @@
 func (m *BundleResponse) String() string { return proto.CompactTextString(m) }
 func (*BundleResponse) ProtoMessage()    {}
 func (*BundleResponse) Descriptor() ([]byte, []int) {
-	return fileDescriptor_62a7d4c8524262a7, []int{2}
+	return fileDescriptor_62a7d4c8524262a7, []int{6}
 }
 
 func (m *BundleResponse) XXX_Unmarshal(b []byte) error {
@@ -197,7 +448,7 @@
 func (m *BundleVmFilesRequest) String() string { return proto.CompactTextString(m) }
 func (*BundleVmFilesRequest) ProtoMessage()    {}
 func (*BundleVmFilesRequest) Descriptor() ([]byte, []int) {
-	return fileDescriptor_62a7d4c8524262a7, []int{3}
+	return fileDescriptor_62a7d4c8524262a7, []int{7}
 }
 
 func (m *BundleVmFilesRequest) XXX_Unmarshal(b []byte) error {
@@ -267,7 +518,7 @@
 func (m *BundleChromeAFDORequest) String() string { return proto.CompactTextString(m) }
 func (*BundleChromeAFDORequest) ProtoMessage()    {}
 func (*BundleChromeAFDORequest) Descriptor() ([]byte, []int) {
-	return fileDescriptor_62a7d4c8524262a7, []int{4}
+	return fileDescriptor_62a7d4c8524262a7, []int{8}
 }
 
 func (m *BundleChromeAFDORequest) XXX_Unmarshal(b []byte) error {
@@ -331,7 +582,7 @@
 func (m *PinnedGuestImageUriRequest) String() string { return proto.CompactTextString(m) }
 func (*PinnedGuestImageUriRequest) ProtoMessage()    {}
 func (*PinnedGuestImageUriRequest) Descriptor() ([]byte, []int) {
-	return fileDescriptor_62a7d4c8524262a7, []int{5}
+	return fileDescriptor_62a7d4c8524262a7, []int{9}
 }
 
 func (m *PinnedGuestImageUriRequest) XXX_Unmarshal(b []byte) error {
@@ -379,7 +630,7 @@
 func (m *PinnedGuestImageUriResponse) String() string { return proto.CompactTextString(m) }
 func (*PinnedGuestImageUriResponse) ProtoMessage()    {}
 func (*PinnedGuestImageUriResponse) Descriptor() ([]byte, []int) {
-	return fileDescriptor_62a7d4c8524262a7, []int{6}
+	return fileDescriptor_62a7d4c8524262a7, []int{10}
 }
 
 func (m *PinnedGuestImageUriResponse) XXX_Unmarshal(b []byte) error {
@@ -423,7 +674,7 @@
 }
 func (*PinnedGuestImageUriResponse_PinnedGuestImage) ProtoMessage() {}
 func (*PinnedGuestImageUriResponse_PinnedGuestImage) Descriptor() ([]byte, []int) {
-	return fileDescriptor_62a7d4c8524262a7, []int{6, 0}
+	return fileDescriptor_62a7d4c8524262a7, []int{10, 0}
 }
 
 func (m *PinnedGuestImageUriResponse_PinnedGuestImage) XXX_Unmarshal(b []byte) error {
@@ -459,7 +710,12 @@
 }
 
 func init() {
+	proto.RegisterEnum("chromite.api.PrepareForBuildResponse_BuildRelevance", PrepareForBuildResponse_BuildRelevance_name, PrepareForBuildResponse_BuildRelevance_value)
 	proto.RegisterType((*Artifact)(nil), "chromite.api.Artifact")
+	proto.RegisterType((*PrepareForBuildRequest)(nil), "chromite.api.PrepareForBuildRequest")
+	proto.RegisterType((*PrepareForBuildResponse)(nil), "chromite.api.PrepareForBuildResponse")
+	proto.RegisterType((*BundleArtifactsRequest)(nil), "chromite.api.BundleArtifactsRequest")
+	proto.RegisterType((*BundleArtifactsResponse)(nil), "chromite.api.BundleArtifactsResponse")
 	proto.RegisterType((*BundleRequest)(nil), "chromite.api.BundleRequest")
 	proto.RegisterType((*BundleResponse)(nil), "chromite.api.BundleResponse")
 	proto.RegisterType((*BundleVmFilesRequest)(nil), "chromite.api.BundleVmFilesRequest")
@@ -472,54 +728,68 @@
 func init() { proto.RegisterFile("chromite/api/artifacts.proto", fileDescriptor_62a7d4c8524262a7) }
 
 var fileDescriptor_62a7d4c8524262a7 = []byte{
-	// 737 bytes of a gzipped FileDescriptorProto
-	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x56, 0xdf, 0x6e, 0xd3, 0x3e,
-	0x14, 0x56, 0xda, 0x69, 0xbf, 0xf5, 0xac, 0xdd, 0xaf, 0x98, 0x3f, 0x2b, 0xd9, 0x86, 0xa6, 0x48,
-	0x48, 0x85, 0x8b, 0x46, 0x2a, 0x08, 0xa1, 0x5d, 0xd1, 0xfd, 0xe9, 0x84, 0x18, 0xda, 0x48, 0x3b,
-	0x84, 0x76, 0x53, 0x79, 0xad, 0xdb, 0x5a, 0x6a, 0x62, 0x63, 0x3b, 0x83, 0xbe, 0x1b, 0x17, 0x88,
-	0x1b, 0x1e, 0x80, 0x47, 0xe0, 0x9a, 0x77, 0x40, 0xb1, 0x93, 0xb6, 0xe9, 0x2a, 0x36, 0x96, 0x89,
-	0xbb, 0xf8, 0x7c, 0x27, 0xdf, 0x39, 0xfe, 0xfc, 0xf9, 0x24, 0xb0, 0xd9, 0x1d, 0x0a, 0xe6, 0x53,
-	0x45, 0x5c, 0xcc, 0xa9, 0x8b, 0x85, 0xa2, 0x7d, 0xdc, 0x55, 0xb2, 0xc6, 0x05, 0x53, 0x0c, 0x15,
-	0x13, 0xb4, 0x86, 0x39, 0xb5, 0xd3, 0xb9, 0xe7, 0x21, 0x1d, 0xf5, 0x3a, 0x98, 0x53, 0x93, 0x6b,
-	0xdb, 0x29, 0x54, 0x8e, 0xa5, 0x60, 0x4c, 0xc5, 0xd8, 0xba, 0xc1, 0x42, 0x9f, 0x49, 0xb7, 0xcb,
-	0x7c, 0x9f, 0x05, 0x06, 0x70, 0x1e, 0xc1, 0x4a, 0x23, 0xae, 0x89, 0x10, 0x2c, 0x71, 0xac, 0x86,
-	0x15, 0x6b, 0xdb, 0xaa, 0x16, 0x3c, 0xfd, 0xec, 0x7c, 0xb7, 0xa0, 0xb4, 0x1b, 0x06, 0xbd, 0x11,
-	0xf1, 0xc8, 0xc7, 0x90, 0x48, 0x85, 0x76, 0xa0, 0x68, 0x2a, 0x2b, 0x2c, 0x06, 0x44, 0xe9, 0xec,
-	0xd5, 0xfa, 0x7a, 0x6d, 0x5a, 0xa1, 0xb6, 0x1b, 0xe1, 0x6d, 0x0d, 0x7b, 0xab, 0xe7, 0xd3, 0x05,
-	0xda, 0x02, 0x60, 0xa1, 0xe2, 0xa1, 0xea, 0xf4, 0xa8, 0xa8, 0xe4, 0x74, 0x9d, 0x82, 0x89, 0xec,
-	0x53, 0x81, 0x9e, 0xc2, 0x72, 0xc4, 0xc2, 0x54, 0x25, 0xaf, 0x49, 0xd1, 0x2c, 0xe9, 0x9e, 0x46,
-	0xbc, 0x38, 0x03, 0xb9, 0xf0, 0x5f, 0xbc, 0xc5, 0xca, 0x92, 0x4e, 0xbe, 0x5f, 0x9b, 0xd5, 0xaa,
-	0xd6, 0x32, 0xa0, 0x97, 0x64, 0x39, 0x4d, 0x58, 0x4b, 0x36, 0x22, 0x39, 0x0b, 0x24, 0x41, 0xcf,
-	0xa1, 0x30, 0xd1, 0xbb, 0x62, 0x6d, 0xe7, 0xab, 0xab, 0xf5, 0x07, 0x69, 0x92, 0x44, 0x1a, 0x6f,
-	0x9a, 0xe8, 0x7c, 0xb1, 0xe0, 0x9e, 0x21, 0x7a, 0xef, 0x37, 0xe9, 0x88, 0xc8, 0x44, 0x98, 0x69,
-	0xf7, 0xd6, 0xdf, 0x74, 0x9f, 0xbb, 0x4e, 0xf7, 0xa8, 0x0a, 0x65, 0x45, 0xa4, 0xea, 0x08, 0x22,
-	0xc3, 0x91, 0x92, 0x5a, 0xbf, 0xbc, 0xd6, 0x6f, 0x2d, 0x8a, 0x7b, 0x26, 0x1c, 0x89, 0x98, 0xd6,
-	0x78, 0x69, 0x4e, 0x63, 0xe7, 0xa7, 0x05, 0xeb, 0xa6, 0xfd, 0xa8, 0x25, 0x9f, 0x34, 0x9a, 0xfb,
-	0xc7, 0x37, 0xd9, 0xc1, 0xbc, 0x0d, 0x72, 0x37, 0xb6, 0x41, 0x7e, 0xde, 0x06, 0x0d, 0x28, 0x25,
-	0x72, 0x77, 0xd4, 0x98, 0x13, 0xbd, 0x89, 0xb5, 0xfa, 0xe6, 0x2c, 0x77, 0xd4, 0x76, 0x72, 0x3a,
-	0xed, 0x31, 0x27, 0x5e, 0x11, 0xcf, 0xac, 0x9c, 0x31, 0xd8, 0x27, 0x34, 0x08, 0x48, 0xef, 0x30,
-	0xda, 0xd8, 0x6b, 0x1f, 0x0f, 0xc8, 0xa9, 0xa0, 0xff, 0xe2, 0xa4, 0x9c, 0xaf, 0x16, 0x6c, 0x2c,
-	0xac, 0x1d, 0xbb, 0xae, 0x03, 0x25, 0xae, 0xe1, 0x0e, 0x8d, 0xa0, 0xc4, 0x79, 0x3b, 0x69, 0xda,
-	0x3f, 0x30, 0x5c, 0xc2, 0xbc, 0xa2, 0x21, 0xd4, 0x0b, 0x69, 0xbf, 0x82, 0xf2, 0x7c, 0x06, 0xb2,
-	0x61, 0xa5, 0x4f, 0x47, 0x24, 0xc0, 0x3e, 0x89, 0xaf, 0xf7, 0x64, 0x8d, 0xca, 0x90, 0x0f, 0x05,
-	0x8d, 0x6f, 0x63, 0xf4, 0x58, 0xff, 0x51, 0x80, 0x72, 0x22, 0xae, 0x6c, 0x11, 0x71, 0x41, 0xbb,
-	0x04, 0x9d, 0xc0, 0x5d, 0xe3, 0x9b, 0x46, 0xa8, 0x58, 0xe4, 0x39, 0x6d, 0x7e, 0xb4, 0x91, 0xee,
-	0x3b, 0x35, 0x2b, 0xec, 0xcd, 0xc5, 0x60, 0xac, 0xc4, 0xbb, 0xe4, 0x22, 0x19, 0x27, 0x1e, 0xb7,
-	0xf6, 0x58, 0xd0, 0xa7, 0x83, 0x2c, 0x94, 0x6f, 0xa1, 0x6c, 0x22, 0x07, 0xda, 0x6f, 0x47, 0x6c,
-	0x90, 0xa9, 0xc3, 0x37, 0xc9, 0xcc, 0x68, 0x52, 0xe1, 0x7f, 0xc2, 0x82, 0x64, 0x21, 0x9b, 0x08,
-	0xa8, 0x8f, 0xa4, 0x21, 0xba, 0x43, 0x7a, 0x41, 0x6e, 0xa7, 0x3d, 0xcd, 0x78, 0x46, 0x79, 0x16,
-	0xb2, 0x1e, 0x6c, 0xc5, 0xe7, 0xdb, 0xdc, 0x3f, 0x3e, 0x24, 0x01, 0x11, 0x58, 0x51, 0x16, 0x4c,
-	0x7c, 0x80, 0x1e, 0x2f, 0x7a, 0xfd, 0xd2, 0x10, 0xb9, 0xa2, 0x4a, 0x3b, 0x99, 0x3e, 0xf3, 0x16,
-	0xcd, 0x24, 0xc4, 0x07, 0xd8, 0x30, 0x91, 0x16, 0xf5, 0xf9, 0xa4, 0xa9, 0x49, 0xe7, 0x19, 0x98,
-	0x8f, 0xe0, 0x7f, 0x13, 0x69, 0xe3, 0x5b, 0x70, 0xfc, 0x29, 0x54, 0x62, 0x36, 0x22, 0xd5, 0x29,
-	0xef, 0x61, 0x45, 0x4e, 0xf0, 0x78, 0xc4, 0x70, 0x2f, 0xe3, 0x45, 0x2a, 0xa5, 0xbe, 0x48, 0xc8,
-	0x59, 0x94, 0x9e, 0xfe, 0x5c, 0x5d, 0xbd, 0xef, 0x83, 0xcf, 0x9c, 0x09, 0xb5, 0xc7, 0x89, 0x47,
-	0xa2, 0x87, 0x2c, 0x0d, 0x72, 0x78, 0xd8, 0x24, 0xaa, 0x3b, 0x5c, 0x30, 0xd5, 0x24, 0xaa, 0x5e,
-	0x63, 0xf2, 0x99, 0x22, 0x4f, 0xae, 0x3d, 0x23, 0xed, 0x3b, 0xdf, 0x7e, 0xd9, 0xa5, 0x99, 0xef,
-	0x7b, 0x39, 0xb7, 0xfb, 0xf2, 0xec, 0xc5, 0x80, 0x4d, 0x26, 0x7d, 0x8d, 0x89, 0x81, 0x3b, 0xf3,
-	0x57, 0x44, 0x83, 0xbe, 0xc0, 0xae, 0xfe, 0x29, 0x72, 0x07, 0xcc, 0x9d, 0xfd, 0x97, 0x3a, 0x5f,
-	0xd6, 0xe1, 0x67, 0xbf, 0x03, 0x00, 0x00, 0xff, 0xff, 0x05, 0xaa, 0x8b, 0x68, 0xac, 0x09, 0x00,
-	0x00,
+	// 964 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xd4, 0x57, 0xdd, 0x6e, 0xe3, 0xc4,
+	0x17, 0xff, 0x3b, 0xa9, 0xba, 0xcd, 0x49, 0x93, 0xfa, 0x3f, 0x2c, 0x6d, 0x48, 0xbb, 0xab, 0x95,
+	0x05, 0x28, 0x70, 0x91, 0x48, 0xa1, 0x42, 0x68, 0xaf, 0x68, 0xf3, 0xb1, 0x8a, 0xb6, 0x24, 0xc1,
+	0x49, 0x00, 0xad, 0x04, 0xd1, 0x34, 0x9e, 0xa4, 0x23, 0xc5, 0x9e, 0x61, 0x3c, 0x2e, 0xe4, 0x39,
+	0x78, 0x1d, 0x2e, 0x10, 0x5c, 0xf0, 0x0c, 0x5c, 0x73, 0x8d, 0xc4, 0x23, 0x20, 0xcf, 0xd8, 0xa9,
+	0xed, 0xa6, 0x6a, 0xd9, 0xac, 0x56, 0xe2, 0xce, 0x33, 0xe7, 0xcc, 0xef, 0x9c, 0xf3, 0x3b, 0x1f,
+	0xe3, 0x81, 0x93, 0xd9, 0x95, 0x60, 0x2e, 0x95, 0xa4, 0x81, 0x39, 0x6d, 0x60, 0x21, 0xe9, 0x1c,
+	0xcf, 0xa4, 0x5f, 0xe7, 0x82, 0x49, 0x86, 0xf6, 0x63, 0x69, 0x1d, 0x73, 0x5a, 0x4d, 0xeb, 0x5e,
+	0x06, 0x74, 0xe9, 0x4c, 0x31, 0xa7, 0x5a, 0xb7, 0x5a, 0x4d, 0x49, 0xfd, 0x95, 0x2f, 0x18, 0x93,
+	0x91, 0xec, 0x48, 0xcb, 0x02, 0x97, 0xf9, 0x8d, 0x19, 0x73, 0x5d, 0xe6, 0x69, 0x81, 0xf5, 0x14,
+	0xf6, 0xce, 0x22, 0x9b, 0x08, 0xc1, 0x0e, 0xc7, 0xf2, 0xaa, 0x62, 0x3c, 0x33, 0x6a, 0x05, 0x5b,
+	0x7d, 0x5b, 0x7f, 0x1b, 0x70, 0x38, 0x14, 0x84, 0x63, 0x41, 0xba, 0x4c, 0x9c, 0x87, 0x26, 0x6d,
+	0xf2, 0x7d, 0x40, 0x7c, 0x89, 0x3e, 0x86, 0xdd, 0x10, 0x95, 0x49, 0x75, 0xa0, 0xd8, 0x44, 0xf5,
+	0x1b, 0x23, 0xf5, 0x96, 0x92, 0xd8, 0x91, 0x06, 0x6a, 0xc0, 0xa3, 0xc8, 0xa1, 0x4a, 0x4e, 0x29,
+	0xbf, 0x5b, 0x4f, 0x46, 0x56, 0x1f, 0x69, 0xa1, 0x1d, 0x6b, 0xa1, 0x16, 0x94, 0x62, 0x2e, 0xa6,
+	0xd4, 0x9b, 0xb3, 0x4a, 0x5e, 0x1d, 0x7b, 0x9a, 0xb4, 0x11, 0x3b, 0xee, 0x9f, 0xaf, 0x46, 0x44,
+	0x5c, 0xd3, 0x19, 0xb1, 0xf7, 0xe3, 0x43, 0x3d, 0x6f, 0xce, 0xd0, 0x29, 0x1c, 0xce, 0x99, 0x98,
+	0x11, 0x67, 0xaa, 0xb9, 0x12, 0x64, 0x49, 0xae, 0xb1, 0x37, 0x23, 0x95, 0x9d, 0x67, 0x46, 0x6d,
+	0xcf, 0x7e, 0xac, 0xa5, 0x51, 0x54, 0x91, 0xcc, 0xfa, 0xcd, 0x80, 0xa3, 0x5b, 0x21, 0xfb, 0x9c,
+	0x79, 0x3e, 0x41, 0xdf, 0xc2, 0x41, 0x16, 0x2a, 0x0c, 0xbe, 0xdc, 0x3c, 0x4d, 0xc7, 0x73, 0xc7,
+	0xf9, 0x7a, 0xda, 0x94, 0x5d, 0xbe, 0x4c, 0x9b, 0xee, 0x41, 0x39, 0xad, 0x81, 0x0e, 0xa0, 0x38,
+	0xe9, 0x8f, 0x86, 0x9d, 0x56, 0xaf, 0xdb, 0xeb, 0xb4, 0xcd, 0xff, 0x21, 0x80, 0xdd, 0x7e, 0xa7,
+	0xd3, 0xee, 0xb4, 0x4d, 0x03, 0x15, 0xe1, 0xd1, 0xa4, 0xff, 0xb2, 0x3f, 0xf8, 0xba, 0x6f, 0xe6,
+	0x50, 0x09, 0x0a, 0xc3, 0x41, 0xaf, 0x3f, 0xbe, 0xe8, 0x8c, 0x46, 0x66, 0xde, 0xfa, 0xc3, 0x80,
+	0xc3, 0xf3, 0xc0, 0x73, 0x96, 0x64, 0x4d, 0xd3, 0x7f, 0x27, 0x71, 0x4f, 0x00, 0x58, 0x20, 0x79,
+	0x20, 0xa7, 0x0e, 0x15, 0x2a, 0x59, 0x05, 0xbb, 0xa0, 0x77, 0xda, 0x54, 0x58, 0x53, 0x38, 0xba,
+	0x15, 0x5a, 0x94, 0xa0, 0x36, 0x14, 0xd6, 0x3d, 0x14, 0x85, 0xf7, 0x61, 0xd2, 0xf4, 0x84, 0x2f,
+	0x19, 0x76, 0x88, 0xb3, 0xc1, 0x85, 0x9b, 0x83, 0xd6, 0xef, 0x06, 0x94, 0xb4, 0x85, 0x98, 0xb3,
+	0xe7, 0xb0, 0xaf, 0x13, 0x2f, 0xb1, 0x58, 0x90, 0x98, 0xb9, 0xa3, 0x24, 0xb4, 0xca, 0xdc, 0x58,
+	0x89, 0xed, 0xe2, 0xe5, 0xcd, 0x22, 0x13, 0x4d, 0x2e, 0x13, 0x4d, 0x22, 0x1d, 0xf9, 0x7f, 0x93,
+	0x8e, 0x9d, 0x87, 0xa4, 0xc3, 0xea, 0x86, 0x15, 0xa5, 0x03, 0x89, 0x18, 0x3a, 0x4d, 0x33, 0x94,
+	0xaf, 0x15, 0x9b, 0x87, 0x69, 0x90, 0x98, 0x9b, 0x24, 0x23, 0x3f, 0x1b, 0xf0, 0x58, 0x03, 0x7d,
+	0xe5, 0x76, 0xe9, 0x92, 0xbc, 0x9d, 0x62, 0xaa, 0x81, 0x29, 0x89, 0x2f, 0xa7, 0x82, 0xf8, 0xc1,
+	0x52, 0xfa, 0x8a, 0xbf, 0xbc, 0xe2, 0xaf, 0x1c, 0xee, 0xdb, 0x7a, 0x3b, 0x24, 0xf1, 0x9e, 0x8a,
+	0xf9, 0xd3, 0x88, 0x4b, 0x26, 0x74, 0xc9, 0x25, 0x67, 0xdd, 0xf6, 0xe0, 0x75, 0x22, 0xc8, 0x96,
+	0x41, 0xee, 0xb5, 0xcb, 0x20, 0x9f, 0x2d, 0x83, 0xb3, 0x44, 0xe3, 0xc8, 0x15, 0xd7, 0x33, 0xaa,
+	0xdc, 0x3c, 0x49, 0x35, 0x4e, 0xb7, 0x3d, 0x88, 0xb3, 0x33, 0x5e, 0xf1, 0x44, 0xdb, 0x84, 0x2b,
+	0x6b, 0x05, 0xd5, 0x21, 0xf5, 0x3c, 0xe2, 0xbc, 0x08, 0x03, 0xeb, 0xb9, 0x78, 0x41, 0x26, 0x82,
+	0xbe, 0x8d, 0x4c, 0x59, 0xbf, 0x18, 0x70, 0xbc, 0xd1, 0x76, 0x54, 0x75, 0x53, 0x28, 0x71, 0x25,
+	0x9e, 0xd2, 0x50, 0x14, 0x57, 0xde, 0xf3, 0xcc, 0xd8, 0xbc, 0x1b, 0xe1, 0x96, 0xcc, 0xde, 0xd7,
+	0x80, 0x6a, 0xe1, 0x57, 0x3f, 0x07, 0x33, 0xab, 0x81, 0xaa, 0xb0, 0x37, 0xa7, 0x4b, 0xe2, 0x61,
+	0x97, 0x44, 0x97, 0xda, 0x7a, 0x8d, 0x4c, 0xc8, 0x07, 0x82, 0x46, 0xdd, 0x18, 0x7e, 0x36, 0x7f,
+	0x2a, 0x82, 0xb9, 0x1e, 0x0b, 0xd1, 0x50, 0x40, 0xdf, 0xc1, 0x41, 0x66, 0x96, 0xa3, 0xf7, 0xef,
+	0x19, 0xf5, 0x8a, 0xed, 0xea, 0x07, 0x0f, 0xba, 0x10, 0x42, 0xfc, 0xcc, 0x28, 0xcb, 0xe2, 0x6f,
+	0x1e, 0xe2, 0x59, 0xfc, 0xbb, 0xe6, 0x21, 0x87, 0xf7, 0xba, 0x44, 0xce, 0xae, 0x36, 0x30, 0xeb,
+	0xa3, 0xda, 0x03, 0xd8, 0xd7, 0xd6, 0x3e, 0x7a, 0x70, 0x9e, 0xd0, 0x10, 0xde, 0x89, 0x9c, 0x09,
+	0x24, 0x0b, 0xbb, 0x54, 0x8d, 0x0b, 0x74, 0xbc, 0xc9, 0xdf, 0x18, 0xfe, 0x64, 0xb3, 0x30, 0x42,
+	0xfc, 0x32, 0x1e, 0x3d, 0xba, 0x77, 0x07, 0xa3, 0x16, 0xf3, 0xe6, 0x74, 0xb1, 0x0d, 0xe4, 0x17,
+	0x60, 0xea, 0x9d, 0x8e, 0xea, 0xd0, 0x0b, 0xb6, 0xd8, 0xca, 0xc3, 0x97, 0xf1, 0x94, 0xed, 0x52,
+	0xe1, 0xfe, 0x80, 0x05, 0xd9, 0x06, 0x6c, 0x4d, 0xa0, 0xa2, 0xf6, 0x4c, 0xcc, 0xae, 0xe8, 0x35,
+	0x79, 0x33, 0xee, 0x29, 0xc4, 0x57, 0x94, 0x6f, 0x03, 0xe6, 0xc0, 0x93, 0x28, 0xbf, 0xdd, 0xf6,
+	0xe0, 0x05, 0xf1, 0x88, 0xc0, 0x92, 0x32, 0xef, 0xa6, 0x7e, 0x37, 0x56, 0xe6, 0xad, 0xb1, 0x7b,
+	0x8f, 0x95, 0x71, 0x3c, 0xaf, 0xb3, 0xa5, 0xb6, 0x15, 0x11, 0xdf, 0xc0, 0xb1, 0xde, 0x19, 0x51,
+	0x97, 0xaf, 0x9d, 0x5a, 0x7b, 0xbe, 0x05, 0xf2, 0x45, 0xdc, 0xc7, 0x63, 0xfc, 0x06, 0x2a, 0x7e,
+	0x02, 0x95, 0x08, 0x8d, 0xf8, 0x72, 0xc2, 0x1d, 0x2c, 0xc9, 0x10, 0xaf, 0xc2, 0x3f, 0x97, 0x2d,
+	0x1b, 0xa9, 0x94, 0xba, 0xc3, 0x91, 0xb5, 0x49, 0x3d, 0x7d, 0xc1, 0xdf, 0x1f, 0x77, 0xe7, 0x47,
+	0xce, 0x84, 0x6c, 0x71, 0x62, 0x93, 0xf0, 0x63, 0x0b, 0x07, 0xab, 0xff, 0xff, 0xf5, 0xaf, 0x6a,
+	0x29, 0xf1, 0x7f, 0x62, 0xe6, 0xce, 0x3f, 0x7b, 0xf5, 0xe9, 0x82, 0xad, 0x6f, 0xaa, 0x3a, 0x13,
+	0x8b, 0x46, 0xe2, 0x2d, 0x43, 0xbd, 0xb9, 0xc0, 0x0d, 0xf5, 0x94, 0x69, 0x2c, 0x58, 0x23, 0xf9,
+	0x02, 0xba, 0xdc, 0x55, 0xdb, 0x9f, 0xfc, 0x13, 0x00, 0x00, 0xff, 0xff, 0x3a, 0x26, 0x47, 0xc1,
+	0x62, 0x0d, 0x00, 0x00,
 }
 
 // Reference imports to suppress errors if they are not otherwise used.
@@ -534,36 +804,53 @@
 //
 // For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream.
 type ArtifactsServiceClient interface {
+	// Prepare to build artifacts.
+	PrepareForBuild(ctx context.Context, in *PrepareForBuildRequest, opts ...grpc.CallOption) (*PrepareForBuildResponse, error)
+	// Bundle artifacts for build.
+	BundleArtifacts(ctx context.Context, in *BundleArtifactsRequest, opts ...grpc.CallOption) (*BundleArtifactsResponse, error)
+	// Fetch the pinned guest image locations.
+	FetchPinnedGuestImageUris(ctx context.Context, in *PinnedGuestImageUriRequest, opts ...grpc.CallOption) (*PinnedGuestImageUriResponse, error)
+	// TODO(crbug/1034529): DEPRECATED use BundleArtifacts
 	// Create a tar archive with all files needed for Autotest HW testing.
 	BundleAutotestFiles(ctx context.Context, in *BundleRequest, opts ...grpc.CallOption) (*BundleResponse, error)
+	// TODO(crbug/1034529): DEPRECATED use BundleArtifacts
 	// Create the ChromeOS Config JSON payload.
 	BundleChromeOSConfig(ctx context.Context, in *BundleRequest, opts ...grpc.CallOption) (*BundleResponse, error)
+	// TODO(crbug/1034529): DEPRECATED use BundleArtifacts
 	// Create a tar archive with ebuild logs.
 	BundleEbuildLogs(ctx context.Context, in *BundleRequest, opts ...grpc.CallOption) (*BundleResponse, error)
+	// TODO(crbug/1034529): DEPRECATED use BundleArtifacts
 	// Create a tar archive with unsigned firmware images.
 	BundleFirmware(ctx context.Context, in *BundleRequest, opts ...grpc.CallOption) (*BundleResponse, error)
+	// TODO(crbug/1034529): DEPRECATED use BundleArtifacts
 	// Create a tar.xz archive for each image that has been created.
 	BundleImageArchives(ctx context.Context, in *BundleRequest, opts ...grpc.CallOption) (*BundleResponse, error)
+	// TODO(crbug/1034529): DEPRECATED use BundleArtifacts
 	// Generate zip containing all built images for the target.
 	BundleImageZip(ctx context.Context, in *BundleRequest, opts ...grpc.CallOption) (*BundleResponse, error)
+	// TODO(crbug/1034529): DEPRECATED use BundleArtifacts
 	// DEPRECATED for recipes: crbug/1019868: This are being replaced by
 	// ToolchainService.Bundle{ArtifactType}()
 	// Create Chrome Benchmark AFDO builder artifacts.
 	BundleAFDOGenerationArtifacts(ctx context.Context, in *BundleChromeAFDORequest, opts ...grpc.CallOption) (*BundleResponse, error)
+	// TODO(crbug/1034529): DEPRECATED use BundleArtifacts
 	// Create a tar archive with all guest images test bundles.
 	BundlePinnedGuestImages(ctx context.Context, in *BundleRequest, opts ...grpc.CallOption) (*BundleResponse, error)
+	// TODO(crbug/1034529): DEPRECATED use BundleArtifacts
 	// Create the simple chrome artifacts.
 	BundleSimpleChromeArtifacts(ctx context.Context, in *BundleRequest, opts ...grpc.CallOption) (*BundleResponse, error)
+	// TODO(crbug/1034529): DEPRECATED use BundleArtifacts
 	// Create a tar archive with all files needed for Tast HW testing.
 	BundleTastFiles(ctx context.Context, in *BundleRequest, opts ...grpc.CallOption) (*BundleResponse, error)
+	// TODO(crbug/1034529): DEPRECATED use BundleArtifacts
 	// Generate minimal update payloads to be used in HW testing.
 	BundleTestUpdatePayloads(ctx context.Context, in *BundleRequest, opts ...grpc.CallOption) (*BundleResponse, error)
+	// TODO(crbug/1034529): DEPRECATED use BundleArtifacts
 	// Create a tar archive with VM memory and disk images.
 	BundleVmFiles(ctx context.Context, in *BundleVmFilesRequest, opts ...grpc.CallOption) (*BundleResponse, error)
+	// TODO(crbug/1034529): DEPRECATED use BundleArtifacts
 	// Generate a CPE report to a file.
 	ExportCpeReport(ctx context.Context, in *BundleRequest, opts ...grpc.CallOption) (*BundleResponse, error)
-	// Fetch the pinned guest image locations.
-	FetchPinnedGuestImageUris(ctx context.Context, in *PinnedGuestImageUriRequest, opts ...grpc.CallOption) (*PinnedGuestImageUriResponse, error)
 }
 
 type artifactsServiceClient struct {
@@ -574,6 +861,33 @@
 	return &artifactsServiceClient{cc}
 }
 
+func (c *artifactsServiceClient) PrepareForBuild(ctx context.Context, in *PrepareForBuildRequest, opts ...grpc.CallOption) (*PrepareForBuildResponse, error) {
+	out := new(PrepareForBuildResponse)
+	err := c.cc.Invoke(ctx, "/chromite.api.ArtifactsService/PrepareForBuild", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *artifactsServiceClient) BundleArtifacts(ctx context.Context, in *BundleArtifactsRequest, opts ...grpc.CallOption) (*BundleArtifactsResponse, error) {
+	out := new(BundleArtifactsResponse)
+	err := c.cc.Invoke(ctx, "/chromite.api.ArtifactsService/BundleArtifacts", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *artifactsServiceClient) FetchPinnedGuestImageUris(ctx context.Context, in *PinnedGuestImageUriRequest, opts ...grpc.CallOption) (*PinnedGuestImageUriResponse, error) {
+	out := new(PinnedGuestImageUriResponse)
+	err := c.cc.Invoke(ctx, "/chromite.api.ArtifactsService/FetchPinnedGuestImageUris", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
 func (c *artifactsServiceClient) BundleAutotestFiles(ctx context.Context, in *BundleRequest, opts ...grpc.CallOption) (*BundleResponse, error) {
 	out := new(BundleResponse)
 	err := c.cc.Invoke(ctx, "/chromite.api.ArtifactsService/BundleAutotestFiles", in, out, opts...)
@@ -691,53 +1005,70 @@
 	return out, nil
 }
 
-func (c *artifactsServiceClient) FetchPinnedGuestImageUris(ctx context.Context, in *PinnedGuestImageUriRequest, opts ...grpc.CallOption) (*PinnedGuestImageUriResponse, error) {
-	out := new(PinnedGuestImageUriResponse)
-	err := c.cc.Invoke(ctx, "/chromite.api.ArtifactsService/FetchPinnedGuestImageUris", in, out, opts...)
-	if err != nil {
-		return nil, err
-	}
-	return out, nil
-}
-
 // ArtifactsServiceServer is the server API for ArtifactsService service.
 type ArtifactsServiceServer interface {
+	// Prepare to build artifacts.
+	PrepareForBuild(context.Context, *PrepareForBuildRequest) (*PrepareForBuildResponse, error)
+	// Bundle artifacts for build.
+	BundleArtifacts(context.Context, *BundleArtifactsRequest) (*BundleArtifactsResponse, error)
+	// Fetch the pinned guest image locations.
+	FetchPinnedGuestImageUris(context.Context, *PinnedGuestImageUriRequest) (*PinnedGuestImageUriResponse, error)
+	// TODO(crbug/1034529): DEPRECATED use BundleArtifacts
 	// Create a tar archive with all files needed for Autotest HW testing.
 	BundleAutotestFiles(context.Context, *BundleRequest) (*BundleResponse, error)
+	// TODO(crbug/1034529): DEPRECATED use BundleArtifacts
 	// Create the ChromeOS Config JSON payload.
 	BundleChromeOSConfig(context.Context, *BundleRequest) (*BundleResponse, error)
+	// TODO(crbug/1034529): DEPRECATED use BundleArtifacts
 	// Create a tar archive with ebuild logs.
 	BundleEbuildLogs(context.Context, *BundleRequest) (*BundleResponse, error)
+	// TODO(crbug/1034529): DEPRECATED use BundleArtifacts
 	// Create a tar archive with unsigned firmware images.
 	BundleFirmware(context.Context, *BundleRequest) (*BundleResponse, error)
+	// TODO(crbug/1034529): DEPRECATED use BundleArtifacts
 	// Create a tar.xz archive for each image that has been created.
 	BundleImageArchives(context.Context, *BundleRequest) (*BundleResponse, error)
+	// TODO(crbug/1034529): DEPRECATED use BundleArtifacts
 	// Generate zip containing all built images for the target.
 	BundleImageZip(context.Context, *BundleRequest) (*BundleResponse, error)
+	// TODO(crbug/1034529): DEPRECATED use BundleArtifacts
 	// DEPRECATED for recipes: crbug/1019868: This are being replaced by
 	// ToolchainService.Bundle{ArtifactType}()
 	// Create Chrome Benchmark AFDO builder artifacts.
 	BundleAFDOGenerationArtifacts(context.Context, *BundleChromeAFDORequest) (*BundleResponse, error)
+	// TODO(crbug/1034529): DEPRECATED use BundleArtifacts
 	// Create a tar archive with all guest images test bundles.
 	BundlePinnedGuestImages(context.Context, *BundleRequest) (*BundleResponse, error)
+	// TODO(crbug/1034529): DEPRECATED use BundleArtifacts
 	// Create the simple chrome artifacts.
 	BundleSimpleChromeArtifacts(context.Context, *BundleRequest) (*BundleResponse, error)
+	// TODO(crbug/1034529): DEPRECATED use BundleArtifacts
 	// Create a tar archive with all files needed for Tast HW testing.
 	BundleTastFiles(context.Context, *BundleRequest) (*BundleResponse, error)
+	// TODO(crbug/1034529): DEPRECATED use BundleArtifacts
 	// Generate minimal update payloads to be used in HW testing.
 	BundleTestUpdatePayloads(context.Context, *BundleRequest) (*BundleResponse, error)
+	// TODO(crbug/1034529): DEPRECATED use BundleArtifacts
 	// Create a tar archive with VM memory and disk images.
 	BundleVmFiles(context.Context, *BundleVmFilesRequest) (*BundleResponse, error)
+	// TODO(crbug/1034529): DEPRECATED use BundleArtifacts
 	// Generate a CPE report to a file.
 	ExportCpeReport(context.Context, *BundleRequest) (*BundleResponse, error)
-	// Fetch the pinned guest image locations.
-	FetchPinnedGuestImageUris(context.Context, *PinnedGuestImageUriRequest) (*PinnedGuestImageUriResponse, error)
 }
 
 // UnimplementedArtifactsServiceServer can be embedded to have forward compatible implementations.
 type UnimplementedArtifactsServiceServer struct {
 }
 
+func (*UnimplementedArtifactsServiceServer) PrepareForBuild(ctx context.Context, req *PrepareForBuildRequest) (*PrepareForBuildResponse, error) {
+	return nil, status.Errorf(codes.Unimplemented, "method PrepareForBuild not implemented")
+}
+func (*UnimplementedArtifactsServiceServer) BundleArtifacts(ctx context.Context, req *BundleArtifactsRequest) (*BundleArtifactsResponse, error) {
+	return nil, status.Errorf(codes.Unimplemented, "method BundleArtifacts not implemented")
+}
+func (*UnimplementedArtifactsServiceServer) FetchPinnedGuestImageUris(ctx context.Context, req *PinnedGuestImageUriRequest) (*PinnedGuestImageUriResponse, error) {
+	return nil, status.Errorf(codes.Unimplemented, "method FetchPinnedGuestImageUris not implemented")
+}
 func (*UnimplementedArtifactsServiceServer) BundleAutotestFiles(ctx context.Context, req *BundleRequest) (*BundleResponse, error) {
 	return nil, status.Errorf(codes.Unimplemented, "method BundleAutotestFiles not implemented")
 }
@@ -777,14 +1108,65 @@
 func (*UnimplementedArtifactsServiceServer) ExportCpeReport(ctx context.Context, req *BundleRequest) (*BundleResponse, error) {
 	return nil, status.Errorf(codes.Unimplemented, "method ExportCpeReport not implemented")
 }
-func (*UnimplementedArtifactsServiceServer) FetchPinnedGuestImageUris(ctx context.Context, req *PinnedGuestImageUriRequest) (*PinnedGuestImageUriResponse, error) {
-	return nil, status.Errorf(codes.Unimplemented, "method FetchPinnedGuestImageUris not implemented")
-}
 
 func RegisterArtifactsServiceServer(s *grpc.Server, srv ArtifactsServiceServer) {
 	s.RegisterService(&_ArtifactsService_serviceDesc, srv)
 }
 
+func _ArtifactsService_PrepareForBuild_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(PrepareForBuildRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(ArtifactsServiceServer).PrepareForBuild(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/chromite.api.ArtifactsService/PrepareForBuild",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(ArtifactsServiceServer).PrepareForBuild(ctx, req.(*PrepareForBuildRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _ArtifactsService_BundleArtifacts_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(BundleArtifactsRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(ArtifactsServiceServer).BundleArtifacts(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/chromite.api.ArtifactsService/BundleArtifacts",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(ArtifactsServiceServer).BundleArtifacts(ctx, req.(*BundleArtifactsRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _ArtifactsService_FetchPinnedGuestImageUris_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(PinnedGuestImageUriRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(ArtifactsServiceServer).FetchPinnedGuestImageUris(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/chromite.api.ArtifactsService/FetchPinnedGuestImageUris",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(ArtifactsServiceServer).FetchPinnedGuestImageUris(ctx, req.(*PinnedGuestImageUriRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
 func _ArtifactsService_BundleAutotestFiles_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
 	in := new(BundleRequest)
 	if err := dec(in); err != nil {
@@ -1019,29 +1401,23 @@
 	return interceptor(ctx, in, info, handler)
 }
 
-func _ArtifactsService_FetchPinnedGuestImageUris_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
-	in := new(PinnedGuestImageUriRequest)
-	if err := dec(in); err != nil {
-		return nil, err
-	}
-	if interceptor == nil {
-		return srv.(ArtifactsServiceServer).FetchPinnedGuestImageUris(ctx, in)
-	}
-	info := &grpc.UnaryServerInfo{
-		Server:     srv,
-		FullMethod: "/chromite.api.ArtifactsService/FetchPinnedGuestImageUris",
-	}
-	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
-		return srv.(ArtifactsServiceServer).FetchPinnedGuestImageUris(ctx, req.(*PinnedGuestImageUriRequest))
-	}
-	return interceptor(ctx, in, info, handler)
-}
-
 var _ArtifactsService_serviceDesc = grpc.ServiceDesc{
 	ServiceName: "chromite.api.ArtifactsService",
 	HandlerType: (*ArtifactsServiceServer)(nil),
 	Methods: []grpc.MethodDesc{
 		{
+			MethodName: "PrepareForBuild",
+			Handler:    _ArtifactsService_PrepareForBuild_Handler,
+		},
+		{
+			MethodName: "BundleArtifacts",
+			Handler:    _ArtifactsService_BundleArtifacts_Handler,
+		},
+		{
+			MethodName: "FetchPinnedGuestImageUris",
+			Handler:    _ArtifactsService_FetchPinnedGuestImageUris_Handler,
+		},
+		{
 			MethodName: "BundleAutotestFiles",
 			Handler:    _ArtifactsService_BundleAutotestFiles_Handler,
 		},
@@ -1093,10 +1469,6 @@
 			MethodName: "ExportCpeReport",
 			Handler:    _ArtifactsService_ExportCpeReport_Handler,
 		},
-		{
-			MethodName: "FetchPinnedGuestImageUris",
-			Handler:    _ArtifactsService_FetchPinnedGuestImageUris_Handler,
-		},
 	},
 	Streams:  []grpc.StreamDesc{},
 	Metadata: "chromite/api/artifacts.proto",
diff --git a/go/chromiumos/builder_config.pb.go b/go/chromiumos/builder_config.pb.go
index 1a499e3..ebf95e6 100644
--- a/go/chromiumos/builder_config.pb.go
+++ b/go/chromiumos/builder_config.pb.go
@@ -232,7 +232,9 @@
 // Used to indicate artifact types that should be uploaded by the builder.
 // Must be kept in sync with the dictionary in:
 // https://chromium.googlesource.com/chromiumos/infra/recipes/+/refs/heads/master/recipe_modules/cros_artifacts/api.py
-// TODO(crbug/1027720): Migrate this to common.proto
+// TODO(crbug/1034529): Being replaced by common.ArtifactsByService, to
+// eliminate the need to update cros_artifacts every time an artifact type
+// is added.
 type BuilderConfig_Artifacts_ArtifactTypes int32
 
 const (
@@ -822,16 +824,20 @@
 	// Google storage bucket to upload prebuilts to.
 	PrebuiltsGsBucket string `protobuf:"bytes,3,opt,name=prebuilts_gs_bucket,json=prebuiltsGsBucket,proto3" json:"prebuilts_gs_bucket,omitempty"`
 	// Google storage bucket to upload artifacts to.
+	// TODO(crbug/1034529): DEPRECATED: see artifacts_info.
 	ArtifactsGsBucket string `protobuf:"bytes,4,opt,name=artifacts_gs_bucket,json=artifactsGsBucket,proto3" json:"artifacts_gs_bucket,omitempty"`
 	// There may be more than one set of publishing instructions.
 	PublishArtifacts []*BuilderConfig_Artifacts_PublishInfo `protobuf:"bytes,5,rep,name=publish_artifacts,json=publishArtifacts,proto3" json:"publish_artifacts,omitempty"`
 	// There may be more than one set of consumable artifacts.
 	InputArtifacts []*BuilderConfig_Artifacts_InputArtifactInfo `protobuf:"bytes,6,rep,name=input_artifacts,json=inputArtifacts,proto3" json:"input_artifacts,omitempty"`
 	// Profile information needed by artifact prepare/bundle endpoints.
-	ArtifactProfileInfo  *ArtifactProfileInfo `protobuf:"bytes,7,opt,name=artifact_profile_info,json=artifactProfileInfo,proto3" json:"artifact_profile_info,omitempty"`
-	XXX_NoUnkeyedLiteral struct{}             `json:"-"`
-	XXX_unrecognized     []byte               `json:"-"`
-	XXX_sizecache        int32                `json:"-"`
+	// TODO(crbug/1034529): DEPRECATED: see artifacts_info.
+	ArtifactProfileInfo *ArtifactProfileInfo `protobuf:"bytes,7,opt,name=artifact_profile_info,json=artifactProfileInfo,proto3" json:"artifact_profile_info,omitempty"`
+	// Artifacts separated by service.
+	ArtifactsInfo        *ArtifactsByService `protobuf:"bytes,8,opt,name=artifacts_info,json=artifactsInfo,proto3" json:"artifacts_info,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}            `json:"-"`
+	XXX_unrecognized     []byte              `json:"-"`
+	XXX_sizecache        int32               `json:"-"`
 }
 
 func (m *BuilderConfig_Artifacts) Reset()         { *m = BuilderConfig_Artifacts{} }
@@ -908,6 +914,14 @@
 	return nil
 }
 
+func (m *BuilderConfig_Artifacts) GetArtifactsInfo() *ArtifactsByService {
+	if m != nil {
+		return m.ArtifactsInfo
+	}
+	return nil
+}
+
+// TODO(crbug/1034529): DEPRECATED: see artifacts_info.
 type BuilderConfig_Artifacts_PublishInfo struct {
 	// Artifact types to publish to this bucket.
 	PublishTypes []BuilderConfig_Artifacts_ArtifactTypes `protobuf:"varint,2,rep,packed,name=publish_types,json=publishTypes,proto3,enum=chromiumos.BuilderConfig_Artifacts_ArtifactTypes" json:"publish_types,omitempty"`
@@ -966,6 +980,7 @@
 	return ""
 }
 
+// TODO(crbug/1034529): DEPRECATED: see artifacts_info.
 type BuilderConfig_Artifacts_InputArtifactInfo struct {
 	// Artifact type to seek in these buckets.  Use the first instance of the
 	// artifact found in the list of locations.
@@ -1565,142 +1580,143 @@
 func init() { proto.RegisterFile("chromiumos/builder_config.proto", fileDescriptor_6fe67302c16003fb) }
 
 var fileDescriptor_6fe67302c16003fb = []byte{
-	// 2180 bytes of a gzipped FileDescriptorProto
-	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xa4, 0x58, 0x4d, 0x73, 0xdb, 0xc8,
-	0xd1, 0x7e, 0x49, 0x51, 0x12, 0xd9, 0xfc, 0x82, 0x46, 0xb2, 0xcd, 0xe5, 0xfa, 0xb5, 0x65, 0x79,
-	0x37, 0x6b, 0x6f, 0xb2, 0x94, 0xa3, 0x8d, 0x5d, 0x49, 0x6d, 0x52, 0xbb, 0x20, 0x08, 0x52, 0xb0,
-	0x29, 0x00, 0x3b, 0x04, 0xa5, 0xb5, 0xf3, 0x31, 0x05, 0x82, 0x20, 0x85, 0x12, 0x08, 0x20, 0x00,
-	0xb8, 0x2e, 0x9f, 0x53, 0xf9, 0x09, 0x39, 0xe5, 0x96, 0xff, 0x90, 0x5b, 0xaa, 0x72, 0xc8, 0x3d,
-	0xc7, 0x1c, 0xf3, 0x57, 0x92, 0x9a, 0xc1, 0x07, 0x01, 0x5a, 0xb2, 0x98, 0xe4, 0xc2, 0x42, 0xf7,
-	0x3c, 0x4f, 0x4f, 0x4f, 0x4f, 0x4f, 0x4f, 0x0f, 0xe1, 0xa1, 0x71, 0xe9, 0xbb, 0x0b, 0x6b, 0xb9,
-	0x70, 0x83, 0xe3, 0xc9, 0xd2, 0xb2, 0xa7, 0xa6, 0x4f, 0x0c, 0xd7, 0x99, 0x59, 0xf3, 0x8e, 0xe7,
-	0xbb, 0xa1, 0x8b, 0x60, 0x05, 0x68, 0xdf, 0xcb, 0x80, 0x0d, 0x77, 0xb1, 0x70, 0x9d, 0x08, 0xd4,
-	0x7e, 0x38, 0x77, 0xdd, 0xb9, 0x6d, 0x1e, 0x33, 0x69, 0xb2, 0x9c, 0x1d, 0x87, 0xd6, 0xc2, 0x0c,
-	0x42, 0x7d, 0xe1, 0xc5, 0x80, 0x07, 0xeb, 0x80, 0xb7, 0xbe, 0xee, 0x79, 0xa6, 0x1f, 0x44, 0xe3,
-	0x47, 0xff, 0xfa, 0x0c, 0xea, 0xdd, 0x68, 0x7a, 0x81, 0xcd, 0x8e, 0x7e, 0x04, 0x45, 0x6b, 0xda,
-	0x2a, 0x1c, 0x16, 0x9e, 0x54, 0x4f, 0xee, 0x77, 0x56, 0x13, 0x77, 0x72, 0xb0, 0x8e, 0x34, 0xc5,
-	0x45, 0x6b, 0x8a, 0xbe, 0x82, 0xdd, 0xb9, 0xe9, 0x98, 0xbe, 0x6e, 0xb7, 0x8a, 0x8c, 0xf2, 0xe8,
-	0x66, 0xca, 0x20, 0x02, 0xe2, 0x84, 0x81, 0x5e, 0x42, 0xcd, 0xf5, 0x8d, 0x4b, 0x33, 0x08, 0x7d,
-	0x3d, 0x74, 0xfd, 0xd6, 0x16, 0xb3, 0xf0, 0x83, 0x9b, 0x2d, 0x28, 0x19, 0x34, 0xce, 0x71, 0x11,
-	0x0f, 0x15, 0xdd, 0x0f, 0xad, 0x99, 0x6e, 0x84, 0x41, 0xab, 0xc4, 0x0c, 0x3d, 0xbe, 0xd9, 0x10,
-	0x9f, 0x40, 0xf1, 0x8a, 0x85, 0x7e, 0x0a, 0x3b, 0x8c, 0x60, 0xb6, 0xb6, 0x19, 0xff, 0xf0, 0x66,
-	0xbe, 0xc0, 0x70, 0x38, 0xc6, 0xa3, 0xe7, 0xb0, 0xcd, 0xf6, 0xb0, 0xb5, 0xc3, 0x88, 0x0f, 0x6f,
-	0x26, 0x32, 0x09, 0x47, 0x68, 0xd4, 0x05, 0x58, 0x3a, 0x56, 0x48, 0x42, 0x33, 0x08, 0x83, 0xd6,
-	0xee, 0x6d, 0x4e, 0x8f, 0x1d, 0x2b, 0xd4, 0x28, 0x14, 0x57, 0x96, 0xc9, 0x67, 0xfb, 0xaf, 0x05,
-	0x28, 0x4a, 0x53, 0x84, 0xa0, 0xe4, 0xe8, 0x0b, 0x93, 0xed, 0x5b, 0x05, 0xb3, 0x6f, 0x74, 0x17,
-	0x76, 0x26, 0xbe, 0xee, 0x18, 0x97, 0x6c, 0x6b, 0x2a, 0x38, 0x96, 0xd0, 0x73, 0x28, 0x85, 0xef,
-	0x3c, 0x93, 0x85, 0xbb, 0xf1, 0xa1, 0x0d, 0x93, 0xa6, 0x1d, 0xed, 0x9d, 0x67, 0x62, 0x06, 0x3f,
-	0x3a, 0x87, 0x12, 0x95, 0xd0, 0x01, 0x70, 0xda, 0x6b, 0x55, 0x24, 0x63, 0x79, 0xa4, 0x8a, 0x82,
-	0xd4, 0x97, 0xc4, 0x1e, 0xf7, 0x7f, 0x68, 0x07, 0x8a, 0xc2, 0xb7, 0x5c, 0x01, 0x35, 0x00, 0x54,
-	0x65, 0xa4, 0x8d, 0xc6, 0xdd, 0x33, 0x49, 0xe3, 0x8a, 0xa8, 0x0e, 0x15, 0x4d, 0x51, 0x86, 0xc2,
-	0x29, 0x2f, 0xc9, 0xdc, 0x16, 0xda, 0x83, 0xba, 0x24, 0xf7, 0x15, 0x7c, 0xc6, 0x6b, 0x92, 0x22,
-	0xf3, 0x43, 0xae, 0xd4, 0xfe, 0xdd, 0x36, 0xec, 0xc6, 0xa9, 0x81, 0x5e, 0x40, 0xd9, 0xf0, 0xad,
-	0xd0, 0x32, 0x74, 0x3b, 0x4e, 0xc1, 0x76, 0x27, 0xca, 0xe0, 0x4e, 0x92, 0xc1, 0x9d, 0xae, 0xeb,
-	0xda, 0xe7, 0xba, 0xbd, 0x34, 0x71, 0x8a, 0x45, 0x0a, 0x54, 0x4d, 0xe7, 0x7b, 0xcb, 0x77, 0x9d,
-	0x85, 0xe9, 0x84, 0x6c, 0xbd, 0x8d, 0x93, 0x2f, 0x6e, 0x4d, 0xc5, 0x8e, 0xb8, 0x22, 0xe1, 0xac,
-	0x05, 0xd4, 0x83, 0xb2, 0xbf, 0x74, 0xc8, 0xdb, 0x4b, 0xd3, 0x89, 0xd3, 0xf2, 0xe9, 0xed, 0xd6,
-	0xf0, 0xd2, 0xb9, 0xb8, 0x34, 0x1d, 0xbc, 0xeb, 0x47, 0x1f, 0xe8, 0x6b, 0xa8, 0x4f, 0x7c, 0xf7,
-	0xca, 0x74, 0xc8, 0xc4, 0x9c, 0xb9, 0xbe, 0x19, 0x27, 0xe6, 0xfb, 0x6b, 0xd2, 0x92, 0x63, 0x8b,
-	0x6b, 0x11, 0xa1, 0xcb, 0xf0, 0xe8, 0x73, 0xd8, 0x0b, 0xa6, 0x57, 0xc4, 0xd0, 0x8d, 0x4b, 0x93,
-	0x7c, 0x6f, 0xfa, 0x81, 0xe5, 0x3a, 0x2c, 0x3b, 0xb7, 0x71, 0x33, 0x98, 0x5e, 0x09, 0x54, 0x7f,
-	0x1e, 0xa9, 0x51, 0x1b, 0xca, 0x4b, 0xc7, 0x5a, 0xe5, 0x61, 0x19, 0xa7, 0x72, 0xfb, 0x1f, 0x05,
-	0xd8, 0x8d, 0xbd, 0x43, 0x5d, 0x28, 0x2d, 0xdc, 0x69, 0x94, 0x2a, 0x8d, 0x93, 0xce, 0xc6, 0xcb,
-	0xea, 0x9c, 0xb9, 0x53, 0x13, 0x33, 0x2e, 0x7a, 0x0c, 0xf5, 0x99, 0x65, 0x9b, 0xc4, 0xd3, 0xc3,
-	0xd0, 0xf4, 0x9d, 0xa0, 0x55, 0x3c, 0xdc, 0x7a, 0x52, 0xc1, 0x35, 0xaa, 0x54, 0x63, 0xdd, 0xd1,
-	0x04, 0x4a, 0x94, 0x42, 0x13, 0xe6, 0x4c, 0xe9, 0xad, 0x27, 0x4c, 0x03, 0x80, 0x1f, 0x5e, 0xf0,
-	0xaf, 0x47, 0x04, 0x8f, 0x65, 0xae, 0x80, 0xda, 0x70, 0x57, 0x91, 0x87, 0xaf, 0xa9, 0x44, 0x14,
-	0x99, 0xf4, 0xa5, 0xa1, 0x48, 0xce, 0x78, 0x4d, 0x38, 0xe5, 0x8a, 0xa8, 0x05, 0x07, 0xb2, 0x72,
-	0xcd, 0xc8, 0xd6, 0xd1, 0x00, 0xaa, 0x99, 0x3d, 0x44, 0x1f, 0xc3, 0x3d, 0x51, 0x3e, 0x97, 0xb0,
-	0x22, 0x9f, 0x89, 0xb2, 0xf6, 0xfe, 0x8c, 0x2a, 0x56, 0x7a, 0x63, 0x81, 0xa6, 0x1e, 0x57, 0x40,
-	0x55, 0xd8, 0x1d, 0x69, 0xfc, 0x40, 0x92, 0x07, 0x5c, 0xb1, 0xfd, 0x87, 0x6d, 0xa8, 0x65, 0xcb,
-	0x0b, 0xfa, 0x16, 0xaa, 0xc6, 0xa5, 0x65, 0x4f, 0x49, 0xe0, 0x99, 0x46, 0xd0, 0xda, 0x3e, 0xdc,
-	0x7a, 0x52, 0x3d, 0x79, 0xb6, 0x59, 0x6d, 0xea, 0x08, 0x94, 0x39, 0xf2, 0x4c, 0x03, 0x83, 0x91,
-	0x7c, 0x06, 0xe8, 0x1b, 0x68, 0xcc, 0xad, 0xd0, 0xb2, 0xcd, 0x80, 0xd0, 0x2a, 0x6e, 0x85, 0x71,
-	0xcd, 0xfc, 0x28, 0x6b, 0x75, 0x10, 0x21, 0x04, 0x06, 0xc0, 0xf5, 0x79, 0x56, 0x44, 0x5f, 0x43,
-	0x63, 0x6e, 0xfa, 0xbe, 0x15, 0x12, 0xe3, 0x52, 0x77, 0xe6, 0x66, 0xd0, 0xda, 0x62, 0x7e, 0xb5,
-	0x72, 0x16, 0x18, 0x42, 0x60, 0x00, 0x5c, 0x9f, 0x67, 0xa4, 0x00, 0xfd, 0x16, 0xee, 0xce, 0x5c,
-	0xdb, 0x76, 0xdf, 0x12, 0xd7, 0x21, 0xb9, 0xe2, 0x1b, 0xa5, 0xe6, 0x57, 0x1b, 0x2e, 0xb0, 0xcf,
-	0x8c, 0x28, 0x4e, 0xae, 0x22, 0x1f, 0xcc, 0xae, 0xd1, 0xb6, 0xff, 0x59, 0x80, 0x4a, 0x1a, 0x8f,
-	0x6b, 0x0b, 0xd5, 0x15, 0x70, 0x86, 0x6b, 0xdb, 0xa6, 0x11, 0x92, 0x4b, 0xdd, 0x99, 0xda, 0x96,
-	0x33, 0x8f, 0x8f, 0xf0, 0x37, 0xff, 0x69, 0xbc, 0x3b, 0x42, 0x64, 0xe8, 0x34, 0xb6, 0x83, 0x9b,
-	0x46, 0x5e, 0x71, 0xa4, 0x42, 0x73, 0x0d, 0x83, 0x0e, 0xe1, 0xbe, 0xa0, 0x0c, 0x87, 0xa2, 0xa0,
-	0x91, 0x53, 0x5e, 0xee, 0x0d, 0x25, 0x79, 0xb0, 0x96, 0x3a, 0x55, 0xd8, 0x8d, 0x11, 0x51, 0x89,
-	0x93, 0x15, 0x92, 0xc8, 0xc5, 0xf6, 0x18, 0x0e, 0xae, 0x0b, 0xc7, 0xb5, 0x4b, 0x7d, 0x0a, 0x9c,
-	0xfe, 0x56, 0xa7, 0xfb, 0xe7, 0x2e, 0x3c, 0xdb, 0x0c, 0xe9, 0x79, 0x2e, 0xb2, 0xc3, 0xda, 0x64,
-	0x7a, 0x21, 0x55, 0xbf, 0x2c, 0x95, 0x0b, 0x5c, 0xb1, 0xfd, 0xfb, 0x3a, 0x54, 0xd2, 0xdb, 0x0a,
-	0xbd, 0x82, 0x8a, 0xe7, 0x9b, 0xf4, 0x4c, 0x87, 0x41, 0x7c, 0x80, 0xbf, 0xd8, 0xe0, 0x96, 0xeb,
-	0xa8, 0x09, 0x09, 0xaf, 0xf8, 0xe8, 0x3b, 0x68, 0x24, 0x97, 0x1f, 0xa1, 0x15, 0x3e, 0x3a, 0xc5,
-	0x8d, 0x93, 0x1f, 0x6f, 0x62, 0x31, 0xf9, 0xa2, 0x57, 0x42, 0x80, 0xeb, 0x7a, 0x56, 0x44, 0x1d,
-	0xd8, 0x4f, 0xa7, 0x21, 0xf3, 0x80, 0x4c, 0x96, 0xc6, 0x95, 0x19, 0xb2, 0x42, 0x5a, 0xc1, 0x7b,
-	0xe9, 0xd0, 0x20, 0xe8, 0xb2, 0x01, 0x8a, 0x4f, 0xaf, 0xe1, 0x0c, 0xbe, 0x14, 0xe1, 0xd3, 0xa1,
-	0x14, 0xff, 0x2b, 0xd8, 0xf3, 0x96, 0x13, 0xdb, 0x0a, 0x2e, 0xc9, 0xea, 0xd2, 0x8f, 0x4e, 0xe8,
-	0xf1, 0x46, 0xe1, 0x88, 0xc8, 0x92, 0x33, 0x73, 0x31, 0x17, 0x5b, 0x5a, 0x05, 0xf9, 0x37, 0xd0,
-	0xb4, 0x1c, 0x6f, 0x19, 0x66, 0x6c, 0xef, 0x30, 0xdb, 0xcf, 0x37, 0xb1, 0x2d, 0x51, 0x6a, 0x22,
-	0xb2, 0x19, 0x1a, 0x56, 0x56, 0x15, 0xa0, 0x11, 0xdc, 0x49, 0xe3, 0xee, 0xf9, 0x2e, 0x2b, 0xa4,
-	0x96, 0x33, 0x73, 0xe3, 0x0e, 0x20, 0xd7, 0x3d, 0x24, 0x2c, 0x35, 0xc2, 0x31, 0x7b, 0x69, 0xac,
-	0x32, 0xca, 0xf6, 0x1f, 0x0b, 0x50, 0xcd, 0x2c, 0x0b, 0x9d, 0x43, 0x3d, 0x09, 0xd1, 0xff, 0xb8,
-	0xb7, 0xb5, 0xd8, 0xce, 0x6a, 0x6b, 0x63, 0xbb, 0xf3, 0x80, 0xd8, 0xae, 0xa1, 0xb3, 0x1c, 0x4e,
-	0xb6, 0x36, 0x1a, 0x1a, 0x04, 0xc3, 0x78, 0x20, 0xce, 0xe2, 0x3f, 0x17, 0x60, 0xef, 0xbd, 0xc0,
-	0x20, 0x1d, 0xf6, 0xf3, 0x81, 0x66, 0xae, 0xc6, 0x79, 0xfd, 0x5f, 0x78, 0xba, 0x97, 0x0b, 0x34,
-	0x6b, 0x56, 0x7e, 0x01, 0x1f, 0xaf, 0x4d, 0x91, 0xf1, 0x3a, 0xb9, 0xb6, 0x5a, 0x39, 0xde, 0xca,
-	0xf9, 0xe0, 0x48, 0x82, 0x4a, 0x7a, 0x74, 0xd0, 0x47, 0x70, 0x47, 0xc5, 0x62, 0x77, 0x2c, 0x0d,
-	0xb5, 0xd1, 0x5a, 0x7d, 0x00, 0xd8, 0x51, 0xc7, 0xdd, 0xa1, 0x24, 0x44, 0xd7, 0x8a, 0x8a, 0xa5,
-	0x73, 0x5e, 0x13, 0xb9, 0x22, 0x2a, 0x43, 0x49, 0x56, 0x64, 0x91, 0xdb, 0x3a, 0xfa, 0xcb, 0x36,
-	0xd4, 0x73, 0xee, 0xa2, 0x07, 0xd0, 0xe6, 0xb1, 0x26, 0xf5, 0x79, 0x41, 0x23, 0xb4, 0xa3, 0x5a,
-	0x37, 0x5a, 0x87, 0x8a, 0x74, 0xc6, 0x0f, 0x44, 0xf2, 0x46, 0x52, 0xb9, 0x02, 0xba, 0x07, 0xfb,
-	0x9a, 0x38, 0xd2, 0xc8, 0x58, 0xed, 0xf1, 0x9a, 0x48, 0x54, 0xfe, 0xf5, 0x50, 0xe1, 0x7b, 0x5c,
-	0x11, 0x21, 0x68, 0xf0, 0x63, 0x4d, 0x61, 0x83, 0xf4, 0x72, 0x1c, 0x71, 0x5b, 0xb4, 0x46, 0x69,
-	0x7c, 0x2a, 0x97, 0x28, 0x59, 0x95, 0x64, 0x59, 0xec, 0x91, 0xc1, 0x98, 0xe2, 0x98, 0xe1, 0x11,
-	0xb7, 0x8d, 0x6a, 0x50, 0xee, 0x4b, 0xf8, 0xec, 0x82, 0xc7, 0x22, 0xb7, 0x83, 0x9a, 0x50, 0x65,
-	0x0b, 0xec, 0x91, 0xa1, 0x32, 0x18, 0x71, 0xbb, 0x68, 0x1f, 0x9a, 0xc2, 0x29, 0x56, 0xce, 0x44,
-	0x65, 0x44, 0x04, 0x45, 0xee, 0x4b, 0x03, 0xae, 0x4c, 0x8d, 0x0b, 0xaa, 0x48, 0xb0, 0xa8, 0x2a,
-	0x58, 0xe3, 0x2a, 0xd4, 0x81, 0xc8, 0x51, 0x1e, 0x0b, 0xa7, 0xd2, 0xb9, 0x38, 0xe2, 0x00, 0x7d,
-	0x02, 0x87, 0x63, 0xf9, 0x5c, 0xc4, 0x6c, 0x31, 0x24, 0xb2, 0x41, 0x86, 0xc3, 0xf3, 0x33, 0xa2,
-	0xe0, 0x9e, 0x88, 0xa9, 0x5f, 0x5c, 0x15, 0x1d, 0xc1, 0x83, 0x5b, 0x30, 0x35, 0x1a, 0xa6, 0x78,
-	0x48, 0x18, 0xf2, 0xf2, 0x80, 0x5c, 0xf0, 0x58, 0x96, 0xe4, 0xc1, 0x88, 0xad, 0x8d, 0xab, 0xa3,
-	0xfb, 0xd0, 0xca, 0xcc, 0xc4, 0xe8, 0xea, 0x40, 0x89, 0x46, 0x1b, 0xe8, 0x29, 0x7c, 0xfa, 0xbe,
-	0x1f, 0x5d, 0x51, 0x16, 0x4e, 0xcf, 0x78, 0xfc, 0x8a, 0xf0, 0xfd, 0x5e, 0x0c, 0x6d, 0xa2, 0xcf,
-	0xe0, 0xf1, 0x26, 0x40, 0x0e, 0x3d, 0x82, 0xff, 0x4f, 0x81, 0xaf, 0x44, 0x2c, 0x8b, 0x43, 0x22,
-	0x5c, 0xa8, 0x19, 0xc8, 0x1e, 0x7a, 0x0c, 0x0f, 0x33, 0xd3, 0x5e, 0x0b, 0x42, 0x6b, 0xa0, 0x64,
-	0x91, 0x39, 0xd0, 0x7e, 0x6e, 0xb2, 0x6b, 0x21, 0x07, 0x34, 0x42, 0x29, 0x04, 0x8b, 0x43, 0x91,
-	0x1f, 0x89, 0x99, 0xf1, 0x3b, 0xb7, 0xc5, 0x40, 0x15, 0x71, 0x3f, 0x82, 0xde, 0xa5, 0x79, 0x12,
-	0x8f, 0xf7, 0xc4, 0xee, 0x78, 0x40, 0xba, 0x92, 0xcc, 0xe3, 0xd7, 0xdc, 0xbd, 0xf6, 0x27, 0xb0,
-	0x13, 0x3d, 0x7a, 0x68, 0x9f, 0x69, 0x39, 0xb4, 0xc3, 0x8b, 0x7b, 0xf4, 0x32, 0x4e, 0xe5, 0xf6,
-	0x9f, 0x2a, 0xb0, 0xcd, 0xce, 0x2a, 0x7a, 0x06, 0x95, 0x65, 0x60, 0x92, 0x99, 0xad, 0xcf, 0xe9,
-	0x4d, 0x45, 0xcb, 0xe7, 0x7e, 0xf6, 0x44, 0x8f, 0x03, 0xb3, 0x6f, 0xeb, 0x73, 0x5c, 0x5e, 0x46,
-	0x1f, 0x01, 0xba, 0x80, 0xa6, 0xe7, 0xfa, 0xa1, 0x3e, 0x37, 0x93, 0xaa, 0x18, 0xb7, 0x47, 0x9d,
-	0x5b, 0x9e, 0x53, 0x1d, 0x35, 0xa2, 0xc5, 0xe5, 0x10, 0x37, 0xbc, 0x9c, 0x8c, 0x9e, 0xc1, 0x81,
-	0xee, 0x79, 0xf6, 0x3b, 0xb2, 0xd6, 0x3a, 0x45, 0x4d, 0x32, 0x62, 0x63, 0x83, 0x5c, 0x97, 0xf4,
-	0x4b, 0xa0, 0x97, 0x94, 0xa7, 0xfb, 0x26, 0x99, 0xb9, 0x3e, 0x89, 0x7a, 0xea, 0x3d, 0xe6, 0xcc,
-	0xf1, 0xad, 0xce, 0x44, 0xc4, 0xbe, 0xeb, 0x47, 0x6f, 0xbd, 0xa6, 0x97, 0x57, 0xa0, 0x53, 0x00,
-	0xda, 0xd3, 0x2f, 0xbd, 0xa9, 0x1e, 0x9a, 0xad, 0xda, 0x6d, 0x8f, 0x8b, 0xc8, 0xea, 0x68, 0x7a,
-	0x35, 0x66, 0x04, 0x5c, 0x09, 0x92, 0x4f, 0xf4, 0x6b, 0xd8, 0xb3, 0x9c, 0x20, 0xd4, 0x6d, 0x9b,
-	0x84, 0xae, 0x6b, 0x1b, 0x97, 0xba, 0xe5, 0xb4, 0xea, 0xcc, 0xe0, 0xb3, 0xdb, 0x0c, 0x4a, 0x11,
-	0x51, 0x4b, 0x78, 0x98, 0xb3, 0xd6, 0x34, 0xe8, 0x0d, 0x24, 0x3a, 0xe2, 0xe9, 0xc6, 0x95, 0x4e,
-	0x63, 0xc6, 0x6d, 0x16, 0x84, 0xd8, 0xba, 0x1a, 0xd3, 0x70, 0xd3, 0xca, 0x2b, 0x90, 0x0c, 0x35,
-	0x16, 0x55, 0x62, 0x2d, 0x98, 0xdd, 0x26, 0xb3, 0xfb, 0xc3, 0xdb, 0xec, 0xb2, 0x5f, 0x89, 0x51,
-	0x70, 0x75, 0xb2, 0x12, 0xda, 0x9f, 0x43, 0x23, 0x9f, 0x05, 0xa8, 0x05, 0xbb, 0x49, 0x1a, 0x45,
-	0x0d, 0x58, 0x22, 0xb6, 0x4d, 0x68, 0xae, 0x6d, 0x12, 0xc2, 0xd0, 0xd4, 0xa7, 0x53, 0x8b, 0x16,
-	0x7d, 0xdd, 0x26, 0xba, 0x3f, 0x0f, 0xe2, 0xe7, 0x67, 0x6e, 0x63, 0xd6, 0x58, 0x7c, 0xca, 0xe0,
-	0xfd, 0x79, 0x80, 0x1b, 0x7a, 0x4e, 0x6e, 0x9f, 0x40, 0x25, 0xdd, 0x35, 0xf4, 0x29, 0x34, 0x68,
-	0xc7, 0x47, 0xaf, 0xfa, 0xc0, 0x5d, 0xfa, 0x86, 0x19, 0x1f, 0x9d, 0x7a, 0xac, 0x1d, 0x31, 0x65,
-	0xfb, 0x67, 0xc0, 0xad, 0x6f, 0xcc, 0xa6, 0xd4, 0xbf, 0x17, 0xa0, 0xb9, 0x16, 0xf6, 0x0d, 0xa9,
-	0xe8, 0xe7, 0xd1, 0x63, 0x97, 0x3e, 0x74, 0xe2, 0xbe, 0xfb, 0x03, 0x7f, 0x0a, 0xe0, 0xa5, 0xc3,
-	0x1e, 0x36, 0xf4, 0x91, 0xcb, 0x3a, 0xfa, 0x2f, 0xa1, 0x9c, 0xa6, 0x47, 0xf4, 0x1a, 0xb9, 0x97,
-	0x0b, 0x5a, 0x34, 0xc6, 0x3a, 0x97, 0x14, 0x88, 0x1e, 0x41, 0x6d, 0x6a, 0x05, 0xfa, 0xc4, 0x36,
-	0xc9, 0xdc, 0x5d, 0xe8, 0xac, 0xd5, 0x2b, 0xe3, 0x6a, 0xac, 0x1b, 0xb8, 0x0b, 0xbd, 0x2d, 0x42,
-	0x35, 0xb3, 0xdd, 0xe8, 0x05, 0x54, 0x59, 0xae, 0xc4, 0xed, 0x4c, 0x81, 0xb5, 0x33, 0x77, 0xb2,
-	0x33, 0x31, 0x20, 0xfb, 0xc3, 0x02, 0xac, 0xe4, 0x33, 0x78, 0x59, 0x2a, 0x6f, 0x71, 0x3b, 0x2f,
-	0x4b, 0xe5, 0x5d, 0xae, 0xf6, 0xb2, 0x54, 0x6e, 0x70, 0xcd, 0xf6, 0xdf, 0x0a, 0x50, 0x49, 0xff,
-	0x4b, 0x41, 0x3d, 0xd8, 0x8b, 0xbd, 0x22, 0x13, 0x5b, 0x37, 0xae, 0x6c, 0x2b, 0xa0, 0x9d, 0xe7,
-	0x07, 0xd7, 0xc1, 0xc5, 0x8c, 0x6e, 0x42, 0x40, 0xaf, 0x80, 0x63, 0x6d, 0xc2, 0x34, 0x20, 0x69,
-	0x28, 0xb7, 0x37, 0x0d, 0x65, 0x23, 0xa6, 0xc6, 0x32, 0x7d, 0x5d, 0x9b, 0x0b, 0x2f, 0x7c, 0x47,
-	0x82, 0x77, 0x81, 0xef, 0xba, 0x61, 0x5c, 0xa9, 0x6a, 0x4c, 0x39, 0x8a, 0x74, 0x47, 0x7d, 0xf6,
-	0xa2, 0x67, 0xf8, 0x16, 0x1c, 0xd0, 0xb7, 0x31, 0xed, 0x1d, 0xde, 0xef, 0x4b, 0xa2, 0x87, 0x33,
-	0x57, 0x40, 0xbb, 0xb0, 0x45, 0x3f, 0x8a, 0xf4, 0xca, 0xa7, 0x70, 0xf1, 0x3b, 0x49, 0xe3, 0xb6,
-	0x8e, 0x34, 0x68, 0xe4, 0xbc, 0x0a, 0x50, 0x17, 0x9a, 0xf9, 0x7f, 0x24, 0x93, 0x02, 0xfe, 0xd1,
-	0x8d, 0x4b, 0xc1, 0x8d, 0x49, 0xce, 0x46, 0xf7, 0xc5, 0x9b, 0x9f, 0xcc, 0xdd, 0x14, 0xde, 0x71,
-	0xfd, 0xf9, 0x71, 0xe6, 0x3f, 0x4c, 0xcb, 0x99, 0xf9, 0x7a, 0xf4, 0x9f, 0xe4, 0xf1, 0xdc, 0xcd,
-	0x8c, 0x4c, 0x76, 0x98, 0xf2, 0xcb, 0x7f, 0x07, 0x00, 0x00, 0xff, 0xff, 0xdd, 0x28, 0xd2, 0x3a,
-	0x1f, 0x15, 0x00, 0x00,
+	// 2207 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xa4, 0x58, 0xcd, 0x72, 0xdb, 0xc8,
+	0x11, 0x0e, 0x29, 0x4a, 0x22, 0x9b, 0x7f, 0xd0, 0x48, 0xb6, 0x69, 0xae, 0x63, 0xcb, 0xf2, 0x6e,
+	0x62, 0x6f, 0xb2, 0x94, 0xa3, 0x8d, 0x5d, 0x49, 0x6d, 0x52, 0xbb, 0x20, 0x08, 0x52, 0xb0, 0x29,
+	0x80, 0x3b, 0x04, 0xa5, 0xb5, 0xf3, 0x33, 0x05, 0x82, 0x20, 0x89, 0x12, 0x08, 0x20, 0x00, 0x68,
+	0x97, 0xce, 0x79, 0x86, 0x9c, 0x72, 0xcb, 0x3b, 0xe4, 0x96, 0xaa, 0x1c, 0x52, 0x95, 0x53, 0x2a,
+	0xc7, 0x1c, 0xf3, 0x2c, 0xa9, 0x19, 0xfc, 0x10, 0xa0, 0x25, 0x8b, 0x49, 0x2e, 0x2c, 0x4c, 0xcf,
+	0xf7, 0x7d, 0x33, 0xd3, 0xd3, 0xd3, 0xd3, 0x43, 0x78, 0xa4, 0xcf, 0x3d, 0x67, 0x61, 0x2e, 0x17,
+	0x8e, 0x7f, 0x3c, 0x5e, 0x9a, 0xd6, 0xc4, 0xf0, 0x88, 0xee, 0xd8, 0x53, 0x73, 0xd6, 0x72, 0x3d,
+	0x27, 0x70, 0x10, 0xac, 0x00, 0xcd, 0x7b, 0x29, 0xb0, 0xee, 0x2c, 0x16, 0x8e, 0x1d, 0x82, 0x9a,
+	0x8f, 0x66, 0x8e, 0x33, 0xb3, 0x8c, 0x63, 0xd6, 0x1a, 0x2f, 0xa7, 0xc7, 0x81, 0xb9, 0x30, 0xfc,
+	0x40, 0x5b, 0xb8, 0x11, 0xe0, 0xe1, 0x3a, 0xe0, 0xbd, 0xa7, 0xb9, 0xae, 0xe1, 0xf9, 0x61, 0xff,
+	0xd1, 0xdf, 0x9f, 0x42, 0xb5, 0x1d, 0x0e, 0x2f, 0xb0, 0xd1, 0xd1, 0x8f, 0x21, 0x6f, 0x4e, 0x1a,
+	0xb9, 0xc3, 0xdc, 0xd3, 0xf2, 0xc9, 0x83, 0xd6, 0x6a, 0xe0, 0x56, 0x06, 0xd6, 0x92, 0x26, 0x38,
+	0x6f, 0x4e, 0xd0, 0x57, 0xb0, 0x3b, 0x33, 0x6c, 0xc3, 0xd3, 0xac, 0x46, 0x9e, 0x51, 0x1e, 0xdf,
+	0x4c, 0xe9, 0x85, 0x40, 0x1c, 0x33, 0xd0, 0x2b, 0xa8, 0x38, 0x9e, 0x3e, 0x37, 0xfc, 0xc0, 0xd3,
+	0x02, 0xc7, 0x6b, 0x6c, 0x31, 0x85, 0x1f, 0xdc, 0xac, 0xa0, 0xa4, 0xd0, 0x38, 0xc3, 0x45, 0x3c,
+	0x94, 0x34, 0x2f, 0x30, 0xa7, 0x9a, 0x1e, 0xf8, 0x8d, 0x02, 0x13, 0x7a, 0x72, 0xb3, 0x10, 0x1f,
+	0x43, 0xf1, 0x8a, 0x85, 0x7e, 0x06, 0x3b, 0x8c, 0x60, 0x34, 0xb6, 0x19, 0xff, 0xf0, 0x66, 0xbe,
+	0xc0, 0x70, 0x38, 0xc2, 0xa3, 0x17, 0xb0, 0xcd, 0xf6, 0xb0, 0xb1, 0xc3, 0x88, 0x8f, 0x6e, 0x26,
+	0xb2, 0x16, 0x0e, 0xd1, 0xa8, 0x0d, 0xb0, 0xb4, 0xcd, 0x80, 0x04, 0x86, 0x1f, 0xf8, 0x8d, 0xdd,
+	0xdb, 0x26, 0x3d, 0xb2, 0xcd, 0x40, 0xa5, 0x50, 0x5c, 0x5a, 0xc6, 0x9f, 0xcd, 0xbf, 0xe6, 0x20,
+	0x2f, 0x4d, 0x10, 0x82, 0x82, 0xad, 0x2d, 0x0c, 0xb6, 0x6f, 0x25, 0xcc, 0xbe, 0xd1, 0x5d, 0xd8,
+	0x19, 0x7b, 0x9a, 0xad, 0xcf, 0xd9, 0xd6, 0x94, 0x70, 0xd4, 0x42, 0x2f, 0xa0, 0x10, 0x5c, 0xb9,
+	0x06, 0x73, 0x77, 0xed, 0x63, 0x1b, 0x26, 0x4d, 0x5a, 0xea, 0x95, 0x6b, 0x60, 0x06, 0x3f, 0x3a,
+	0x87, 0x02, 0x6d, 0xa1, 0x03, 0xe0, 0xd4, 0x37, 0x03, 0x91, 0x8c, 0xe4, 0xe1, 0x40, 0x14, 0xa4,
+	0xae, 0x24, 0x76, 0xb8, 0xef, 0xa1, 0x1d, 0xc8, 0x0b, 0xdf, 0x72, 0x39, 0x54, 0x03, 0x18, 0x28,
+	0x43, 0x75, 0x38, 0x6a, 0x9f, 0x49, 0x2a, 0x97, 0x47, 0x55, 0x28, 0xa9, 0x8a, 0xd2, 0x17, 0x4e,
+	0x79, 0x49, 0xe6, 0xb6, 0xd0, 0x1e, 0x54, 0x25, 0xb9, 0xab, 0xe0, 0x33, 0x5e, 0x95, 0x14, 0x99,
+	0xef, 0x73, 0x85, 0xe6, 0xef, 0xb7, 0x61, 0x37, 0x0a, 0x0d, 0xf4, 0x12, 0x8a, 0xba, 0x67, 0x06,
+	0xa6, 0xae, 0x59, 0x51, 0x08, 0x36, 0x5b, 0x61, 0x04, 0xb7, 0xe2, 0x08, 0x6e, 0xb5, 0x1d, 0xc7,
+	0x3a, 0xd7, 0xac, 0xa5, 0x81, 0x13, 0x2c, 0x52, 0xa0, 0x6c, 0xd8, 0xef, 0x4c, 0xcf, 0xb1, 0x17,
+	0x86, 0x1d, 0xb0, 0xf5, 0xd6, 0x4e, 0xbe, 0xb8, 0x35, 0x14, 0x5b, 0xe2, 0x8a, 0x84, 0xd3, 0x0a,
+	0xa8, 0x03, 0x45, 0x6f, 0x69, 0x93, 0xf7, 0x73, 0xc3, 0x8e, 0xc2, 0xf2, 0xd9, 0xed, 0x6a, 0x78,
+	0x69, 0x5f, 0xcc, 0x0d, 0x1b, 0xef, 0x7a, 0xe1, 0x07, 0xfa, 0x1a, 0xaa, 0x63, 0xcf, 0xb9, 0x34,
+	0x6c, 0x32, 0x36, 0xa6, 0x8e, 0x67, 0x44, 0x81, 0xf9, 0xe1, 0x9a, 0xd4, 0xf8, 0xd8, 0xe2, 0x4a,
+	0x48, 0x68, 0x33, 0x3c, 0xfa, 0x1c, 0xf6, 0xfc, 0xc9, 0x25, 0xd1, 0x35, 0x7d, 0x6e, 0x90, 0x77,
+	0x86, 0xe7, 0x9b, 0x8e, 0xcd, 0xa2, 0x73, 0x1b, 0xd7, 0xfd, 0xc9, 0xa5, 0x40, 0xed, 0xe7, 0xa1,
+	0x19, 0x35, 0xa1, 0xb8, 0xb4, 0xcd, 0x55, 0x1c, 0x16, 0x71, 0xd2, 0x6e, 0xfe, 0x2b, 0x07, 0xbb,
+	0xd1, 0xec, 0x50, 0x1b, 0x0a, 0x0b, 0x67, 0x12, 0x86, 0x4a, 0xed, 0xa4, 0xb5, 0xf1, 0xb2, 0x5a,
+	0x67, 0xce, 0xc4, 0xc0, 0x8c, 0x8b, 0x9e, 0x40, 0x75, 0x6a, 0x5a, 0x06, 0x71, 0xb5, 0x20, 0x30,
+	0x3c, 0xdb, 0x6f, 0xe4, 0x0f, 0xb7, 0x9e, 0x96, 0x70, 0x85, 0x1a, 0x07, 0x91, 0xed, 0x68, 0x0c,
+	0x05, 0x4a, 0xa1, 0x01, 0x73, 0xa6, 0x74, 0xd6, 0x03, 0xa6, 0x06, 0xc0, 0xf7, 0x2f, 0xf8, 0x37,
+	0x43, 0x82, 0x47, 0x32, 0x97, 0x43, 0x4d, 0xb8, 0xab, 0xc8, 0xfd, 0x37, 0xb4, 0x45, 0x14, 0x99,
+	0x74, 0xa5, 0xbe, 0x48, 0xce, 0x78, 0x55, 0x38, 0xe5, 0xf2, 0xa8, 0x01, 0x07, 0xb2, 0x72, 0x4d,
+	0xcf, 0xd6, 0x51, 0x0f, 0xca, 0xa9, 0x3d, 0x44, 0x9f, 0xc0, 0x3d, 0x51, 0x3e, 0x97, 0xb0, 0x22,
+	0x9f, 0x89, 0xb2, 0xfa, 0xe1, 0x88, 0x03, 0xac, 0x74, 0x46, 0x02, 0x0d, 0x3d, 0x2e, 0x87, 0xca,
+	0xb0, 0x3b, 0x54, 0xf9, 0x9e, 0x24, 0xf7, 0xb8, 0x7c, 0xf3, 0x0f, 0xdb, 0x50, 0x49, 0xa7, 0x17,
+	0xf4, 0x2d, 0x94, 0xf5, 0xb9, 0x69, 0x4d, 0x88, 0xef, 0x1a, 0xba, 0xdf, 0xd8, 0x3e, 0xdc, 0x7a,
+	0x5a, 0x3e, 0x79, 0xbe, 0x59, 0x6e, 0x6a, 0x09, 0x94, 0x39, 0x74, 0x0d, 0x1d, 0x83, 0x1e, 0x7f,
+	0xfa, 0xe8, 0x1b, 0xa8, 0xcd, 0xcc, 0xc0, 0xb4, 0x0c, 0x9f, 0xd0, 0x2c, 0x6e, 0x06, 0x51, 0xce,
+	0xbc, 0x9f, 0x56, 0xed, 0x85, 0x08, 0x81, 0x01, 0x70, 0x75, 0x96, 0x6e, 0xa2, 0xaf, 0xa1, 0x36,
+	0x33, 0x3c, 0xcf, 0x0c, 0x88, 0x3e, 0xd7, 0xec, 0x99, 0xe1, 0x37, 0xb6, 0xd8, 0xbc, 0x1a, 0x19,
+	0x05, 0x86, 0x10, 0x18, 0x00, 0x57, 0x67, 0xa9, 0x96, 0x8f, 0x7e, 0x07, 0x77, 0xa7, 0x8e, 0x65,
+	0x39, 0xef, 0x89, 0x63, 0x93, 0x4c, 0xf2, 0x0d, 0x43, 0xf3, 0xab, 0x0d, 0x17, 0xd8, 0x65, 0x22,
+	0x8a, 0x9d, 0xc9, 0xc8, 0x07, 0xd3, 0x6b, 0xac, 0xcd, 0x7f, 0xe7, 0xa0, 0x94, 0xf8, 0xe3, 0xda,
+	0x44, 0x75, 0x09, 0x9c, 0xee, 0x58, 0x96, 0xa1, 0x07, 0x64, 0xae, 0xd9, 0x13, 0xcb, 0xb4, 0x67,
+	0xd1, 0x11, 0xfe, 0xe6, 0xbf, 0xf5, 0x77, 0x4b, 0x08, 0x85, 0x4e, 0x23, 0x1d, 0x5c, 0xd7, 0xb3,
+	0x86, 0xa3, 0x01, 0xd4, 0xd7, 0x30, 0xe8, 0x10, 0x1e, 0x08, 0x4a, 0xbf, 0x2f, 0x0a, 0x2a, 0x39,
+	0xe5, 0xe5, 0x4e, 0x5f, 0x92, 0x7b, 0x6b, 0xa1, 0x53, 0x86, 0xdd, 0x08, 0x11, 0xa6, 0x38, 0x59,
+	0x21, 0x71, 0x3b, 0xdf, 0x1c, 0xc1, 0xc1, 0x75, 0xee, 0xb8, 0x76, 0xa9, 0xcf, 0x80, 0xd3, 0xde,
+	0x6b, 0x74, 0xff, 0x9c, 0x85, 0x6b, 0x19, 0x01, 0x3d, 0xcf, 0x79, 0x76, 0x58, 0xeb, 0xcc, 0x2e,
+	0x24, 0xe6, 0x57, 0x85, 0x62, 0x8e, 0xcb, 0x37, 0xff, 0x51, 0x85, 0x52, 0x72, 0x5b, 0xa1, 0xd7,
+	0x50, 0x72, 0x3d, 0x83, 0x9e, 0xe9, 0xc0, 0x8f, 0x0e, 0xf0, 0x17, 0x1b, 0xdc, 0x72, 0xad, 0x41,
+	0x4c, 0xc2, 0x2b, 0x3e, 0xfa, 0x0e, 0x6a, 0xf1, 0xe5, 0x47, 0x68, 0x86, 0x0f, 0x4f, 0x71, 0xed,
+	0xe4, 0x27, 0x9b, 0x28, 0xc6, 0x5f, 0xf4, 0x4a, 0xf0, 0x71, 0x55, 0x4b, 0x37, 0x51, 0x0b, 0xf6,
+	0x93, 0x61, 0xc8, 0xcc, 0x27, 0xe3, 0xa5, 0x7e, 0x69, 0x04, 0x2c, 0x91, 0x96, 0xf0, 0x5e, 0xd2,
+	0xd5, 0xf3, 0xdb, 0xac, 0x83, 0xe2, 0x93, 0x6b, 0x38, 0x85, 0x2f, 0x84, 0xf8, 0xa4, 0x2b, 0xc1,
+	0xff, 0x1a, 0xf6, 0xdc, 0xe5, 0xd8, 0x32, 0xfd, 0x39, 0x59, 0x5d, 0xfa, 0xe1, 0x09, 0x3d, 0xde,
+	0xc8, 0x1d, 0x21, 0x59, 0xb2, 0xa7, 0x0e, 0xe6, 0x22, 0xa5, 0x95, 0x93, 0x7f, 0x0b, 0x75, 0xd3,
+	0x76, 0x97, 0x41, 0x4a, 0x7b, 0x87, 0x69, 0xbf, 0xd8, 0x44, 0x5b, 0xa2, 0xd4, 0xb8, 0xc9, 0x46,
+	0xa8, 0x99, 0x69, 0x93, 0x8f, 0x86, 0x70, 0x27, 0xf1, 0xbb, 0xeb, 0x39, 0x2c, 0x91, 0x9a, 0xf6,
+	0xd4, 0x89, 0x2a, 0x80, 0x4c, 0xf5, 0x10, 0xb3, 0x06, 0x21, 0x8e, 0xe9, 0x25, 0xbe, 0x4a, 0x19,
+	0x91, 0xb8, 0xda, 0x4c, 0x3f, 0x54, 0x2b, 0x32, 0xb5, 0x87, 0xd7, 0xa9, 0xf9, 0xed, 0xab, 0xa1,
+	0xe1, 0xbd, 0x33, 0x75, 0x63, 0xb5, 0x73, 0x3e, 0x95, 0x69, 0xfe, 0x31, 0x07, 0xe5, 0x94, 0x77,
+	0xd0, 0x39, 0x54, 0x63, 0x4f, 0xff, 0x9f, 0x21, 0x52, 0x89, 0x74, 0x56, 0x11, 0x12, 0xe9, 0xce,
+	0x7c, 0x62, 0x39, 0xba, 0xc6, 0x8e, 0x42, 0x1c, 0x21, 0x61, 0x57, 0xcf, 0xef, 0x47, 0x1d, 0xd1,
+	0x61, 0xf8, 0x73, 0x0e, 0xf6, 0x3e, 0xf0, 0x2f, 0xd2, 0x60, 0x3f, 0xbb, 0x5f, 0x6c, 0xaa, 0xd1,
+	0xf1, 0xf8, 0x1f, 0x66, 0xba, 0x97, 0xd9, 0x2f, 0x56, 0xf3, 0xfc, 0x12, 0x3e, 0x59, 0x1b, 0x22,
+	0x35, 0xeb, 0xf8, 0xf6, 0x6b, 0x64, 0x78, 0xab, 0xc9, 0xfb, 0x47, 0x12, 0x94, 0x92, 0x13, 0x88,
+	0xee, 0xc3, 0x9d, 0x01, 0x16, 0xdb, 0x23, 0xa9, 0xaf, 0x0e, 0xd7, 0xd2, 0x0c, 0xc0, 0xce, 0x60,
+	0xd4, 0xee, 0x4b, 0x42, 0x78, 0x3b, 0x0d, 0xb0, 0x74, 0xce, 0xab, 0x22, 0x97, 0x47, 0x45, 0x28,
+	0xc8, 0x8a, 0x2c, 0x72, 0x5b, 0x47, 0x7f, 0xd9, 0x86, 0x6a, 0x66, 0xba, 0xe8, 0x21, 0x34, 0x79,
+	0xac, 0x4a, 0x5d, 0x5e, 0x50, 0x09, 0x2d, 0xcc, 0xd6, 0x45, 0xab, 0x50, 0x92, 0xce, 0xf8, 0x9e,
+	0x48, 0xde, 0x4a, 0x03, 0x2e, 0x87, 0xee, 0xc1, 0xbe, 0x2a, 0x0e, 0x55, 0x32, 0x1a, 0x74, 0x78,
+	0x55, 0x24, 0x03, 0xfe, 0x4d, 0x5f, 0xe1, 0x3b, 0x5c, 0x1e, 0x21, 0xa8, 0xf1, 0x23, 0x55, 0x61,
+	0x9d, 0xf4, 0x8e, 0x1d, 0x72, 0x5b, 0x34, 0xd5, 0xa9, 0x7c, 0xd2, 0x2e, 0x50, 0xf2, 0x40, 0x92,
+	0x65, 0xb1, 0x43, 0x7a, 0x23, 0x8a, 0x63, 0xc2, 0x43, 0x6e, 0x1b, 0x55, 0xa0, 0xd8, 0x95, 0xf0,
+	0xd9, 0x05, 0x8f, 0x45, 0x6e, 0x07, 0xd5, 0xa1, 0xcc, 0x16, 0xd8, 0x21, 0x7d, 0xa5, 0x37, 0xe4,
+	0x76, 0xd1, 0x3e, 0xd4, 0x85, 0x53, 0xac, 0x9c, 0x89, 0xca, 0x90, 0x08, 0x8a, 0xdc, 0x95, 0x7a,
+	0x5c, 0x91, 0x8a, 0x0b, 0x03, 0x91, 0x60, 0x71, 0xa0, 0x60, 0x95, 0x2b, 0xd1, 0x09, 0x84, 0x13,
+	0xe5, 0xb1, 0x70, 0x2a, 0x9d, 0x8b, 0x43, 0x0e, 0xd0, 0xa7, 0x70, 0x38, 0x92, 0xcf, 0x45, 0xcc,
+	0x16, 0x43, 0x42, 0x0d, 0xd2, 0xef, 0x9f, 0x9f, 0x11, 0x05, 0x77, 0x44, 0x4c, 0xe7, 0xc5, 0x95,
+	0xd1, 0x11, 0x3c, 0xbc, 0x05, 0x53, 0xa1, 0x6e, 0x8a, 0xba, 0x84, 0x3e, 0x2f, 0xf7, 0xc8, 0x05,
+	0x8f, 0x65, 0x49, 0xee, 0x0d, 0xd9, 0xda, 0xb8, 0x2a, 0x7a, 0x00, 0x8d, 0xd4, 0x48, 0x8c, 0x3e,
+	0xe8, 0x29, 0x61, 0x6f, 0x0d, 0x3d, 0x83, 0xcf, 0x3e, 0x9c, 0x47, 0x5b, 0x94, 0x85, 0xd3, 0x33,
+	0x1e, 0xbf, 0x26, 0x7c, 0xb7, 0x13, 0x41, 0xeb, 0xe8, 0x87, 0xf0, 0x64, 0x13, 0x20, 0x87, 0x1e,
+	0xc3, 0xf7, 0x13, 0xe0, 0x6b, 0x11, 0xcb, 0x62, 0x9f, 0x08, 0x17, 0x83, 0x14, 0x64, 0x0f, 0x3d,
+	0x81, 0x47, 0xa9, 0x61, 0xaf, 0x05, 0xa1, 0x35, 0x50, 0xbc, 0xc8, 0x0c, 0x68, 0x3f, 0x33, 0xd8,
+	0xb5, 0x90, 0x03, 0xea, 0xa1, 0x04, 0x82, 0xc5, 0xbe, 0xc8, 0x0f, 0xc5, 0x54, 0xff, 0x9d, 0xdb,
+	0x7c, 0x30, 0x10, 0x71, 0x37, 0x84, 0xde, 0xa5, 0x71, 0x12, 0xf5, 0x77, 0xc4, 0xf6, 0xa8, 0x47,
+	0xda, 0x92, 0xcc, 0xe3, 0x37, 0xdc, 0xbd, 0xe6, 0xa7, 0xb0, 0x13, 0xbe, 0x9d, 0x68, 0xb9, 0x6a,
+	0xda, 0xb4, 0x50, 0x8c, 0x4a, 0xfd, 0x22, 0x4e, 0xda, 0xcd, 0x3f, 0x95, 0x60, 0x9b, 0x9d, 0x55,
+	0xf4, 0x1c, 0x4a, 0x4b, 0xdf, 0x20, 0x53, 0x4b, 0x9b, 0xd1, 0x0b, 0x8f, 0x66, 0xe1, 0xfd, 0xf4,
+	0x89, 0x1e, 0xf9, 0x46, 0xd7, 0xd2, 0x66, 0xb8, 0xb8, 0x0c, 0x3f, 0x7c, 0x74, 0x01, 0x75, 0xd7,
+	0xf1, 0x02, 0x6d, 0x66, 0xc4, 0xc9, 0x35, 0xaa, 0xb2, 0x5a, 0xb7, 0xbc, 0xca, 0x5a, 0x83, 0x90,
+	0x16, 0x65, 0x55, 0x5c, 0x73, 0x33, 0x6d, 0xf4, 0x1c, 0x0e, 0x34, 0xd7, 0xb5, 0xae, 0xc8, 0x5a,
+	0x05, 0x16, 0xd6, 0xda, 0x88, 0xf5, 0xf5, 0x32, 0xc5, 0xd6, 0xaf, 0x80, 0xde, 0x75, 0xae, 0xe6,
+	0x19, 0x64, 0xea, 0x78, 0x24, 0x2c, 0xcd, 0xf7, 0xd8, 0x64, 0x8e, 0x6f, 0x9d, 0x4c, 0x48, 0xec,
+	0x3a, 0x5e, 0xf8, 0x64, 0xac, 0xbb, 0x59, 0x03, 0x3a, 0x05, 0xa0, 0x4f, 0x83, 0xa5, 0x3b, 0xd1,
+	0x02, 0xa3, 0x51, 0xb9, 0xed, 0x8d, 0x12, 0xaa, 0x0e, 0x27, 0x97, 0x23, 0x46, 0xc0, 0x25, 0x3f,
+	0xfe, 0x44, 0xbf, 0x81, 0x3d, 0xd3, 0xf6, 0x03, 0xcd, 0xb2, 0x48, 0xe0, 0x38, 0x96, 0x3e, 0xd7,
+	0x4c, 0xbb, 0x51, 0x65, 0x82, 0xcf, 0x6f, 0x13, 0x94, 0x42, 0xa2, 0x1a, 0xf3, 0x30, 0x67, 0xae,
+	0x59, 0xd0, 0x5b, 0x88, 0x6d, 0xc4, 0xd5, 0xf4, 0x4b, 0x8d, 0xfa, 0x8c, 0xdb, 0xcc, 0x09, 0x91,
+	0xfa, 0x20, 0xa2, 0xe1, 0xba, 0x99, 0x35, 0x20, 0x19, 0x2a, 0xcc, 0xab, 0xc4, 0x5c, 0x30, 0xdd,
+	0x3a, 0xd3, 0xfd, 0xd1, 0x6d, 0xba, 0xec, 0x57, 0x62, 0x14, 0x5c, 0x1e, 0xaf, 0x1a, 0xcd, 0xcf,
+	0xa1, 0x96, 0x8d, 0x02, 0xd4, 0x80, 0xdd, 0x38, 0x8c, 0xc2, 0x3a, 0x2e, 0x6e, 0x36, 0x0d, 0xa8,
+	0xaf, 0x6d, 0x12, 0xc2, 0x50, 0xd7, 0x26, 0x13, 0x93, 0x26, 0x7d, 0xcd, 0x22, 0x9a, 0x37, 0xf3,
+	0xa3, 0x57, 0x6c, 0x66, 0x63, 0xd6, 0x58, 0x7c, 0xc2, 0xe0, 0xbd, 0x99, 0x8f, 0x6b, 0x5a, 0xa6,
+	0xdd, 0x3c, 0x81, 0x52, 0xb2, 0x6b, 0xe8, 0x33, 0xa8, 0xd1, 0xc2, 0x91, 0x56, 0x0c, 0xbe, 0xb3,
+	0xf4, 0x74, 0x23, 0x3a, 0x3a, 0xd5, 0xc8, 0x3a, 0x64, 0xc6, 0xe6, 0xcf, 0x81, 0x5b, 0xdf, 0x98,
+	0x4d, 0xa9, 0xff, 0xcc, 0x41, 0x7d, 0xcd, 0xed, 0x1b, 0x52, 0xd1, 0x2f, 0xc2, 0x37, 0x33, 0x7d,
+	0x2f, 0x45, 0xe5, 0xfb, 0x47, 0xfe, 0x5b, 0xc0, 0x4b, 0x9b, 0xbd, 0x8f, 0xe8, 0x5b, 0x99, 0x3d,
+	0x0c, 0xbe, 0x84, 0x62, 0x12, 0x1e, 0xe1, 0xa3, 0xe6, 0x5e, 0xc6, 0x69, 0x61, 0x1f, 0x2b, 0x80,
+	0x12, 0x20, 0x7a, 0x0c, 0x95, 0x89, 0xe9, 0x6b, 0x63, 0xcb, 0x20, 0x33, 0x67, 0xa1, 0xb1, 0x8a,
+	0xb1, 0x88, 0xcb, 0x91, 0xad, 0xe7, 0x2c, 0xb4, 0xa6, 0x08, 0xe5, 0xd4, 0x76, 0xa3, 0x97, 0x50,
+	0x66, 0xb1, 0x12, 0x95, 0x33, 0x39, 0x56, 0xce, 0xdc, 0x49, 0x8f, 0xc4, 0x80, 0xec, 0x7f, 0x0f,
+	0x30, 0xe3, 0x4f, 0xff, 0x55, 0xa1, 0xb8, 0xc5, 0xed, 0xbc, 0x2a, 0x14, 0x77, 0xb9, 0xca, 0xab,
+	0x42, 0xb1, 0xc6, 0xd5, 0x9b, 0x7f, 0xcb, 0x41, 0x29, 0xf9, 0x4b, 0x06, 0x75, 0x60, 0x2f, 0x9a,
+	0x15, 0x19, 0x5b, 0x9a, 0x7e, 0x69, 0x99, 0x3e, 0x2d, 0x60, 0x3f, 0xba, 0x0e, 0x2e, 0x62, 0xb4,
+	0x63, 0x02, 0x7a, 0x0d, 0x1c, 0x2b, 0x13, 0x26, 0x3e, 0x49, 0x5c, 0xb9, 0xbd, 0xa9, 0x2b, 0x6b,
+	0x11, 0x35, 0x6a, 0xd3, 0x47, 0xba, 0xb1, 0x70, 0x83, 0x2b, 0xe2, 0x5f, 0xf9, 0x9e, 0xe3, 0x04,
+	0x51, 0xa6, 0xaa, 0x30, 0xe3, 0x30, 0xb4, 0x1d, 0x75, 0xd9, 0x1f, 0x03, 0x0c, 0xdf, 0x80, 0x03,
+	0xfa, 0xc4, 0xa6, 0xb5, 0xc3, 0x87, 0x75, 0x49, 0xf8, 0xfe, 0xe6, 0x72, 0x68, 0x17, 0xb6, 0xe8,
+	0x47, 0x9e, 0x5e, 0xf9, 0x14, 0x2e, 0x7e, 0x27, 0xa9, 0xdc, 0xd6, 0x91, 0x0a, 0xb5, 0xcc, 0xac,
+	0x7c, 0xd4, 0x86, 0x7a, 0xf6, 0x8f, 0xcd, 0x38, 0x81, 0xdf, 0xbf, 0x71, 0x29, 0xb8, 0x36, 0xce,
+	0x68, 0xb4, 0x5f, 0xbe, 0xfd, 0xe9, 0xcc, 0x49, 0xe0, 0x2d, 0xc7, 0x9b, 0x1d, 0xa7, 0xfe, 0x0a,
+	0x35, 0xed, 0xa9, 0xa7, 0x85, 0x7f, 0x6d, 0x1e, 0xcf, 0x9c, 0x54, 0xcf, 0x78, 0x87, 0x19, 0xbf,
+	0xfc, 0x4f, 0x00, 0x00, 0x00, 0xff, 0xff, 0x13, 0x33, 0xbb, 0xb2, 0x66, 0x15, 0x00, 0x00,
 }
diff --git a/go/chromiumos/common.pb.go b/go/chromiumos/common.pb.go
index 057799a..d07f617 100644
--- a/go/chromiumos/common.pb.go
+++ b/go/chromiumos/common.pb.go
@@ -218,40 +218,144 @@
 	return fileDescriptor_fa0b57c3d7d4c63b, []int{6, 0}
 }
 
-// Does this artifact require a build?
-type PrepareForBuildResponse_BuildRelevance int32
+// TODO(crbug/1034529): Drop this message.
+// Legacy artifacts, handled in cros_artifacts.  DO NOT ADD TO THIS.
+type ArtifactsByService_Legacy_ArtifactType int32
 
 const (
-	PrepareForBuildResponse_UNSPECIFIED PrepareForBuildResponse_BuildRelevance = 0
-	// Build is necessary to generate artifacts.
-	PrepareForBuildResponse_NEEDED PrepareForBuildResponse_BuildRelevance = 1
-	// Defer to other artifacts.  Used primarily for aggregation of artifact
-	// results.
-	PrepareForBuildResponse_UNKNOWN PrepareForBuildResponse_BuildRelevance = 2
-	// Artifacts are already generated.  The build is pointless.
-	PrepareForBuildResponse_POINTLESS PrepareForBuildResponse_BuildRelevance = 3
+	ArtifactsByService_Legacy_UNSPECIFIED ArtifactsByService_Legacy_ArtifactType = 0
+	// Indicates wanting a zip file of everything in the image directory.
+	ArtifactsByService_Legacy_IMAGE_ZIP ArtifactsByService_Legacy_ArtifactType = 1
+	// Indicates wanting update payloads.
+	ArtifactsByService_Legacy_TEST_UPDATE_PAYLOAD ArtifactsByService_Legacy_ArtifactType = 2
+	// Indicates wanting the autotest tarballs.
+	ArtifactsByService_Legacy_AUTOTEST_FILES ArtifactsByService_Legacy_ArtifactType = 3
+	// Indicates wanting a tarball containing private TAST test bundles.
+	ArtifactsByService_Legacy_TAST_FILES ArtifactsByService_Legacy_ArtifactType = 4
+	// Indicates wanting a tarball containing guest images and test bundles.
+	ArtifactsByService_Legacy_PINNED_GUEST_IMAGES ArtifactsByService_Legacy_ArtifactType = 5
+	// Indicates wanting an archive of firmware images built from source.
+	ArtifactsByService_Legacy_FIRMWARE ArtifactsByService_Legacy_ArtifactType = 6
+	// Indicates wanting a tarball of the Ebuilds logs.
+	ArtifactsByService_Legacy_EBUILD_LOGS ArtifactsByService_Legacy_ArtifactType = 7
+	// Indicates wanting an archive of the ChromeOS Config.
+	ArtifactsByService_Legacy_CHROMEOS_CONFIG ArtifactsByService_Legacy_ArtifactType = 8
+	// Indicates wanting the CPE report.
+	ArtifactsByService_Legacy_CPE_REPORT ArtifactsByService_Legacy_ArtifactType = 9
+	// Indicates wanting a tar.xz archive for each image that has been created.
+	ArtifactsByService_Legacy_IMAGE_ARCHIVES ArtifactsByService_Legacy_ArtifactType = 10
 )
 
-var PrepareForBuildResponse_BuildRelevance_name = map[int32]string{
-	0: "UNSPECIFIED",
-	1: "NEEDED",
-	2: "UNKNOWN",
-	3: "POINTLESS",
+var ArtifactsByService_Legacy_ArtifactType_name = map[int32]string{
+	0:  "UNSPECIFIED",
+	1:  "IMAGE_ZIP",
+	2:  "TEST_UPDATE_PAYLOAD",
+	3:  "AUTOTEST_FILES",
+	4:  "TAST_FILES",
+	5:  "PINNED_GUEST_IMAGES",
+	6:  "FIRMWARE",
+	7:  "EBUILD_LOGS",
+	8:  "CHROMEOS_CONFIG",
+	9:  "CPE_REPORT",
+	10: "IMAGE_ARCHIVES",
 }
 
-var PrepareForBuildResponse_BuildRelevance_value = map[string]int32{
-	"UNSPECIFIED": 0,
-	"NEEDED":      1,
-	"UNKNOWN":     2,
-	"POINTLESS":   3,
+var ArtifactsByService_Legacy_ArtifactType_value = map[string]int32{
+	"UNSPECIFIED":         0,
+	"IMAGE_ZIP":           1,
+	"TEST_UPDATE_PAYLOAD": 2,
+	"AUTOTEST_FILES":      3,
+	"TAST_FILES":          4,
+	"PINNED_GUEST_IMAGES": 5,
+	"FIRMWARE":            6,
+	"EBUILD_LOGS":         7,
+	"CHROMEOS_CONFIG":     8,
+	"CPE_REPORT":          9,
+	"IMAGE_ARCHIVES":      10,
 }
 
-func (x PrepareForBuildResponse_BuildRelevance) String() string {
-	return proto.EnumName(PrepareForBuildResponse_BuildRelevance_name, int32(x))
+func (x ArtifactsByService_Legacy_ArtifactType) String() string {
+	return proto.EnumName(ArtifactsByService_Legacy_ArtifactType_name, int32(x))
 }
 
-func (PrepareForBuildResponse_BuildRelevance) EnumDescriptor() ([]byte, []int) {
-	return fileDescriptor_fa0b57c3d7d4c63b, []int{13, 0}
+func (ArtifactsByService_Legacy_ArtifactType) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_fa0b57c3d7d4c63b, []int{16, 0, 0}
+}
+
+// Artifacts handled by ToolchainService.
+type ArtifactsByService_Toolchain_ArtifactType int32
+
+const (
+	ArtifactsByService_Toolchain_UNSPECIFIED ArtifactsByService_Toolchain_ArtifactType = 0
+	// Indicates an unvetted orderfile for Chrome.
+	ArtifactsByService_Toolchain_UNVERIFIED_CHROME_LLVM_ORDERFILE ArtifactsByService_Toolchain_ArtifactType = 11
+	// Indicates a vetted orderfile for Chrome.
+	ArtifactsByService_Toolchain_VERIFIED_CHROME_LLVM_ORDERFILE ArtifactsByService_Toolchain_ArtifactType = 12
+	// Indicates a clang-tidy artifact.
+	ArtifactsByService_Toolchain_CHROME_CLANG_WARNINGS_FILE ArtifactsByService_Toolchain_ArtifactType = 13
+	// Indicates a PGO artifact for the compiler.
+	ArtifactsByService_Toolchain_UNVERIFIED_LLVM_PGO_FILE ArtifactsByService_Toolchain_ArtifactType = 14
+	// Indicates an unvetted AFDO Chrome profile.  (Generated by HW Tests in
+	// the benchmark-afdo-generate builder.)
+	ArtifactsByService_Toolchain_UNVERIFIED_CHROME_BENCHMARK_AFDO_FILE ArtifactsByService_Toolchain_ArtifactType = 15
+	// Indicates a vetted AFDO Chrome profile.
+	ArtifactsByService_Toolchain_VERIFIED_CHROME_BENCHMARK_AFDO_FILE ArtifactsByService_Toolchain_ArtifactType = 16
+	// Indicates a vetted AFDO Kernel profile.
+	ArtifactsByService_Toolchain_VERIFIED_KERNEL_CWP_AFDO_FILE ArtifactsByService_Toolchain_ArtifactType = 17
+	// Indicates an unvetted AFDO Kernel CWP profile.
+	ArtifactsByService_Toolchain_UNVERIFIED_KERNEL_CWP_AFDO_FILE ArtifactsByService_Toolchain_ArtifactType = 18
+	// Indicates an unvetted AFDO Chrome CWP profile.
+	ArtifactsByService_Toolchain_UNVERIFIED_CHROME_CWP_AFDO_FILE ArtifactsByService_Toolchain_ArtifactType = 19
+	// Indicates a vetted AFDO Chrome CWP profile.
+	ArtifactsByService_Toolchain_VERIFIED_CHROME_CWP_AFDO_FILE ArtifactsByService_Toolchain_ArtifactType = 20
+	// Indicates a vetted AFDO profile for release.
+	ArtifactsByService_Toolchain_VERIFIED_RELEASE_AFDO_FILE ArtifactsByService_Toolchain_ArtifactType = 21
+	// Indicates an unvetted AFDO perf data file (from HW Test).
+	ArtifactsByService_Toolchain_UNVERIFIED_CHROME_BENCHMARK_PERF_FILE ArtifactsByService_Toolchain_ArtifactType = 22
+	// Indicates an unstripped Chrome binary.
+	ArtifactsByService_Toolchain_CHROME_DEBUG_BINARY ArtifactsByService_Toolchain_ArtifactType = 23
+)
+
+var ArtifactsByService_Toolchain_ArtifactType_name = map[int32]string{
+	0:  "UNSPECIFIED",
+	11: "UNVERIFIED_CHROME_LLVM_ORDERFILE",
+	12: "VERIFIED_CHROME_LLVM_ORDERFILE",
+	13: "CHROME_CLANG_WARNINGS_FILE",
+	14: "UNVERIFIED_LLVM_PGO_FILE",
+	15: "UNVERIFIED_CHROME_BENCHMARK_AFDO_FILE",
+	16: "VERIFIED_CHROME_BENCHMARK_AFDO_FILE",
+	17: "VERIFIED_KERNEL_CWP_AFDO_FILE",
+	18: "UNVERIFIED_KERNEL_CWP_AFDO_FILE",
+	19: "UNVERIFIED_CHROME_CWP_AFDO_FILE",
+	20: "VERIFIED_CHROME_CWP_AFDO_FILE",
+	21: "VERIFIED_RELEASE_AFDO_FILE",
+	22: "UNVERIFIED_CHROME_BENCHMARK_PERF_FILE",
+	23: "CHROME_DEBUG_BINARY",
+}
+
+var ArtifactsByService_Toolchain_ArtifactType_value = map[string]int32{
+	"UNSPECIFIED":                           0,
+	"UNVERIFIED_CHROME_LLVM_ORDERFILE":      11,
+	"VERIFIED_CHROME_LLVM_ORDERFILE":        12,
+	"CHROME_CLANG_WARNINGS_FILE":            13,
+	"UNVERIFIED_LLVM_PGO_FILE":              14,
+	"UNVERIFIED_CHROME_BENCHMARK_AFDO_FILE": 15,
+	"VERIFIED_CHROME_BENCHMARK_AFDO_FILE":   16,
+	"VERIFIED_KERNEL_CWP_AFDO_FILE":         17,
+	"UNVERIFIED_KERNEL_CWP_AFDO_FILE":       18,
+	"UNVERIFIED_CHROME_CWP_AFDO_FILE":       19,
+	"VERIFIED_CHROME_CWP_AFDO_FILE":         20,
+	"VERIFIED_RELEASE_AFDO_FILE":            21,
+	"UNVERIFIED_CHROME_BENCHMARK_PERF_FILE": 22,
+	"CHROME_DEBUG_BINARY":                   23,
+}
+
+func (x ArtifactsByService_Toolchain_ArtifactType) String() string {
+	return proto.EnumName(ArtifactsByService_Toolchain_ArtifactType_name, int32(x))
+}
+
+func (ArtifactsByService_Toolchain_ArtifactType) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_fa0b57c3d7d4c63b, []int{16, 1, 0}
 }
 
 // BuildTarget encapsulates a number of related arguments. At the moment, the
@@ -1035,47 +1139,6 @@
 	return nil
 }
 
-// TODO(crbug/1019868): Consider migrating
-// chromite.api.toolchain.PrepareForToolchainBuildRequest as well.
-type PrepareForBuildResponse struct {
-	BuildRelevance       PrepareForBuildResponse_BuildRelevance `protobuf:"varint,1,opt,name=build_relevance,json=buildRelevance,proto3,enum=chromiumos.PrepareForBuildResponse_BuildRelevance" json:"build_relevance,omitempty"`
-	XXX_NoUnkeyedLiteral struct{}                               `json:"-"`
-	XXX_unrecognized     []byte                                 `json:"-"`
-	XXX_sizecache        int32                                  `json:"-"`
-}
-
-func (m *PrepareForBuildResponse) Reset()         { *m = PrepareForBuildResponse{} }
-func (m *PrepareForBuildResponse) String() string { return proto.CompactTextString(m) }
-func (*PrepareForBuildResponse) ProtoMessage()    {}
-func (*PrepareForBuildResponse) Descriptor() ([]byte, []int) {
-	return fileDescriptor_fa0b57c3d7d4c63b, []int{13}
-}
-
-func (m *PrepareForBuildResponse) XXX_Unmarshal(b []byte) error {
-	return xxx_messageInfo_PrepareForBuildResponse.Unmarshal(m, b)
-}
-func (m *PrepareForBuildResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
-	return xxx_messageInfo_PrepareForBuildResponse.Marshal(b, m, deterministic)
-}
-func (m *PrepareForBuildResponse) XXX_Merge(src proto.Message) {
-	xxx_messageInfo_PrepareForBuildResponse.Merge(m, src)
-}
-func (m *PrepareForBuildResponse) XXX_Size() int {
-	return xxx_messageInfo_PrepareForBuildResponse.Size(m)
-}
-func (m *PrepareForBuildResponse) XXX_DiscardUnknown() {
-	xxx_messageInfo_PrepareForBuildResponse.DiscardUnknown(m)
-}
-
-var xxx_messageInfo_PrepareForBuildResponse proto.InternalMessageInfo
-
-func (m *PrepareForBuildResponse) GetBuildRelevance() PrepareForBuildResponse_BuildRelevance {
-	if m != nil {
-		return m.BuildRelevance
-	}
-	return PrepareForBuildResponse_UNSPECIFIED
-}
-
 // Additional information about artifacts used by PrepareForBuild endpoints.
 // TODO(crbug/1019868): This is migrating to ArtifactProfileInfo.
 type PrepareForBuildAdditionalArgs struct {
@@ -1092,7 +1155,7 @@
 func (m *PrepareForBuildAdditionalArgs) String() string { return proto.CompactTextString(m) }
 func (*PrepareForBuildAdditionalArgs) ProtoMessage()    {}
 func (*PrepareForBuildAdditionalArgs) Descriptor() ([]byte, []int) {
-	return fileDescriptor_fa0b57c3d7d4c63b, []int{14}
+	return fileDescriptor_fa0b57c3d7d4c63b, []int{13}
 }
 
 func (m *PrepareForBuildAdditionalArgs) XXX_Unmarshal(b []byte) error {
@@ -1178,7 +1241,7 @@
 func (m *AfdoRelease) String() string { return proto.CompactTextString(m) }
 func (*AfdoRelease) ProtoMessage()    {}
 func (*AfdoRelease) Descriptor() ([]byte, []int) {
-	return fileDescriptor_fa0b57c3d7d4c63b, []int{15}
+	return fileDescriptor_fa0b57c3d7d4c63b, []int{14}
 }
 
 func (m *AfdoRelease) XXX_Unmarshal(b []byte) error {
@@ -1230,7 +1293,7 @@
 func (m *ArtifactProfileInfo) String() string { return proto.CompactTextString(m) }
 func (*ArtifactProfileInfo) ProtoMessage()    {}
 func (*ArtifactProfileInfo) Descriptor() ([]byte, []int) {
-	return fileDescriptor_fa0b57c3d7d4c63b, []int{16}
+	return fileDescriptor_fa0b57c3d7d4c63b, []int{15}
 }
 
 func (m *ArtifactProfileInfo) XXX_Unmarshal(b []byte) error {
@@ -1310,13 +1373,540 @@
 	}
 }
 
+type ArtifactsByService struct {
+	Legacy               *ArtifactsByService_Legacy    `protobuf:"bytes,1,opt,name=legacy,proto3" json:"legacy,omitempty"`
+	Toolchain            *ArtifactsByService_Toolchain `protobuf:"bytes,2,opt,name=toolchain,proto3" json:"toolchain,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}                      `json:"-"`
+	XXX_unrecognized     []byte                        `json:"-"`
+	XXX_sizecache        int32                         `json:"-"`
+}
+
+func (m *ArtifactsByService) Reset()         { *m = ArtifactsByService{} }
+func (m *ArtifactsByService) String() string { return proto.CompactTextString(m) }
+func (*ArtifactsByService) ProtoMessage()    {}
+func (*ArtifactsByService) Descriptor() ([]byte, []int) {
+	return fileDescriptor_fa0b57c3d7d4c63b, []int{16}
+}
+
+func (m *ArtifactsByService) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_ArtifactsByService.Unmarshal(m, b)
+}
+func (m *ArtifactsByService) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_ArtifactsByService.Marshal(b, m, deterministic)
+}
+func (m *ArtifactsByService) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_ArtifactsByService.Merge(m, src)
+}
+func (m *ArtifactsByService) XXX_Size() int {
+	return xxx_messageInfo_ArtifactsByService.Size(m)
+}
+func (m *ArtifactsByService) XXX_DiscardUnknown() {
+	xxx_messageInfo_ArtifactsByService.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_ArtifactsByService proto.InternalMessageInfo
+
+func (m *ArtifactsByService) GetLegacy() *ArtifactsByService_Legacy {
+	if m != nil {
+		return m.Legacy
+	}
+	return nil
+}
+
+func (m *ArtifactsByService) GetToolchain() *ArtifactsByService_Toolchain {
+	if m != nil {
+		return m.Toolchain
+	}
+	return nil
+}
+
+type ArtifactsByService_Legacy struct {
+	// Input artifact information
+	InputArtifacts []*ArtifactsByService_Legacy_ArtifactInfo `protobuf:"bytes,1,rep,name=input_artifacts,json=inputArtifacts,proto3" json:"input_artifacts,omitempty"`
+	// Output artifact information
+	OutputArtifacts      []*ArtifactsByService_Legacy_ArtifactInfo `protobuf:"bytes,2,rep,name=output_artifacts,json=outputArtifacts,proto3" json:"output_artifacts,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}                                  `json:"-"`
+	XXX_unrecognized     []byte                                    `json:"-"`
+	XXX_sizecache        int32                                     `json:"-"`
+}
+
+func (m *ArtifactsByService_Legacy) Reset()         { *m = ArtifactsByService_Legacy{} }
+func (m *ArtifactsByService_Legacy) String() string { return proto.CompactTextString(m) }
+func (*ArtifactsByService_Legacy) ProtoMessage()    {}
+func (*ArtifactsByService_Legacy) Descriptor() ([]byte, []int) {
+	return fileDescriptor_fa0b57c3d7d4c63b, []int{16, 0}
+}
+
+func (m *ArtifactsByService_Legacy) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_ArtifactsByService_Legacy.Unmarshal(m, b)
+}
+func (m *ArtifactsByService_Legacy) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_ArtifactsByService_Legacy.Marshal(b, m, deterministic)
+}
+func (m *ArtifactsByService_Legacy) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_ArtifactsByService_Legacy.Merge(m, src)
+}
+func (m *ArtifactsByService_Legacy) XXX_Size() int {
+	return xxx_messageInfo_ArtifactsByService_Legacy.Size(m)
+}
+func (m *ArtifactsByService_Legacy) XXX_DiscardUnknown() {
+	xxx_messageInfo_ArtifactsByService_Legacy.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_ArtifactsByService_Legacy proto.InternalMessageInfo
+
+func (m *ArtifactsByService_Legacy) GetInputArtifacts() []*ArtifactsByService_Legacy_ArtifactInfo {
+	if m != nil {
+		return m.InputArtifacts
+	}
+	return nil
+}
+
+func (m *ArtifactsByService_Legacy) GetOutputArtifacts() []*ArtifactsByService_Legacy_ArtifactInfo {
+	if m != nil {
+		return m.OutputArtifacts
+	}
+	return nil
+}
+
+// Information about one or more artifacts.
+type ArtifactsByService_Legacy_ArtifactInfo struct {
+	// The ArtifactType.  One or more types to which the rest of the fields
+	// apply.
+	ArtifactType []ArtifactsByService_Legacy_ArtifactType `protobuf:"varint,1,rep,packed,name=artifact_type,json=artifactType,proto3,enum=chromiumos.ArtifactsByService_Legacy_ArtifactType" json:"artifact_type,omitempty"`
+	// GS location in which to upload artifacts ("gs://" is prepended).
+	// Several fields can be logically specified:
+	//   %(kind)s: BuilderConfig.Id.Type with underscores turned into hyphens.
+	//   %(version)s: Chromeos version (e.g., R81-12813.0.0)
+	//   %(build_id)s: Buildbucket job ID.
+	//   %(target)s: build target name.
+	//   %(builder_name)s: The builder name (e.g. octopus-cq), lowercase with
+	//       underscores turned into hyphens.
+	//   %(gs_path)s: "%(builder_name)s/%(version)s-%(build_id)s".
+	//   %(artifact_name)s: The name of the artifact being published.
+	GsLocations []string `protobuf:"bytes,2,rep,name=gs_locations,json=gsLocations,proto3" json:"gs_locations,omitempty"`
+	// Profile information needed by the artifact handler.
+	ProfileInfo          *ArtifactProfileInfo `protobuf:"bytes,3,opt,name=profile_info,json=profileInfo,proto3" json:"profile_info,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}             `json:"-"`
+	XXX_unrecognized     []byte               `json:"-"`
+	XXX_sizecache        int32                `json:"-"`
+}
+
+func (m *ArtifactsByService_Legacy_ArtifactInfo) Reset() {
+	*m = ArtifactsByService_Legacy_ArtifactInfo{}
+}
+func (m *ArtifactsByService_Legacy_ArtifactInfo) String() string { return proto.CompactTextString(m) }
+func (*ArtifactsByService_Legacy_ArtifactInfo) ProtoMessage()    {}
+func (*ArtifactsByService_Legacy_ArtifactInfo) Descriptor() ([]byte, []int) {
+	return fileDescriptor_fa0b57c3d7d4c63b, []int{16, 0, 0}
+}
+
+func (m *ArtifactsByService_Legacy_ArtifactInfo) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_ArtifactsByService_Legacy_ArtifactInfo.Unmarshal(m, b)
+}
+func (m *ArtifactsByService_Legacy_ArtifactInfo) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_ArtifactsByService_Legacy_ArtifactInfo.Marshal(b, m, deterministic)
+}
+func (m *ArtifactsByService_Legacy_ArtifactInfo) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_ArtifactsByService_Legacy_ArtifactInfo.Merge(m, src)
+}
+func (m *ArtifactsByService_Legacy_ArtifactInfo) XXX_Size() int {
+	return xxx_messageInfo_ArtifactsByService_Legacy_ArtifactInfo.Size(m)
+}
+func (m *ArtifactsByService_Legacy_ArtifactInfo) XXX_DiscardUnknown() {
+	xxx_messageInfo_ArtifactsByService_Legacy_ArtifactInfo.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_ArtifactsByService_Legacy_ArtifactInfo proto.InternalMessageInfo
+
+func (m *ArtifactsByService_Legacy_ArtifactInfo) GetArtifactType() []ArtifactsByService_Legacy_ArtifactType {
+	if m != nil {
+		return m.ArtifactType
+	}
+	return nil
+}
+
+func (m *ArtifactsByService_Legacy_ArtifactInfo) GetGsLocations() []string {
+	if m != nil {
+		return m.GsLocations
+	}
+	return nil
+}
+
+func (m *ArtifactsByService_Legacy_ArtifactInfo) GetProfileInfo() *ArtifactProfileInfo {
+	if m != nil {
+		return m.ProfileInfo
+	}
+	return nil
+}
+
+type ArtifactsByService_Toolchain struct {
+	// Input artifact information
+	InputArtifacts []*ArtifactsByService_Toolchain_ArtifactInfo `protobuf:"bytes,1,rep,name=input_artifacts,json=inputArtifacts,proto3" json:"input_artifacts,omitempty"`
+	// Output artifact information
+	OutputArtifacts      []*ArtifactsByService_Toolchain_ArtifactInfo `protobuf:"bytes,2,rep,name=output_artifacts,json=outputArtifacts,proto3" json:"output_artifacts,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}                                     `json:"-"`
+	XXX_unrecognized     []byte                                       `json:"-"`
+	XXX_sizecache        int32                                        `json:"-"`
+}
+
+func (m *ArtifactsByService_Toolchain) Reset()         { *m = ArtifactsByService_Toolchain{} }
+func (m *ArtifactsByService_Toolchain) String() string { return proto.CompactTextString(m) }
+func (*ArtifactsByService_Toolchain) ProtoMessage()    {}
+func (*ArtifactsByService_Toolchain) Descriptor() ([]byte, []int) {
+	return fileDescriptor_fa0b57c3d7d4c63b, []int{16, 1}
+}
+
+func (m *ArtifactsByService_Toolchain) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_ArtifactsByService_Toolchain.Unmarshal(m, b)
+}
+func (m *ArtifactsByService_Toolchain) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_ArtifactsByService_Toolchain.Marshal(b, m, deterministic)
+}
+func (m *ArtifactsByService_Toolchain) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_ArtifactsByService_Toolchain.Merge(m, src)
+}
+func (m *ArtifactsByService_Toolchain) XXX_Size() int {
+	return xxx_messageInfo_ArtifactsByService_Toolchain.Size(m)
+}
+func (m *ArtifactsByService_Toolchain) XXX_DiscardUnknown() {
+	xxx_messageInfo_ArtifactsByService_Toolchain.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_ArtifactsByService_Toolchain proto.InternalMessageInfo
+
+func (m *ArtifactsByService_Toolchain) GetInputArtifacts() []*ArtifactsByService_Toolchain_ArtifactInfo {
+	if m != nil {
+		return m.InputArtifacts
+	}
+	return nil
+}
+
+func (m *ArtifactsByService_Toolchain) GetOutputArtifacts() []*ArtifactsByService_Toolchain_ArtifactInfo {
+	if m != nil {
+		return m.OutputArtifacts
+	}
+	return nil
+}
+
+// Information about one or more artifacts.  This should match the rest of
+// the ArtifactInfo definitions in ArtifactsByService, other than having
+// it's own (service-specific) definition for ArtifactType.
+type ArtifactsByService_Toolchain_ArtifactInfo struct {
+	// The ArtifactType.  One or more types to which the rest of the fields
+	// apply.
+	ArtifactType []ArtifactsByService_Toolchain_ArtifactType `protobuf:"varint,1,rep,packed,name=artifact_type,json=artifactType,proto3,enum=chromiumos.ArtifactsByService_Toolchain_ArtifactType" json:"artifact_type,omitempty"`
+	// GS location in which to upload artifacts ("gs://" is prepended).
+	// Several fields can be logically specified:
+	//   %(kind)s: BuilderConfig.Id.Type with underscores turned into hyphens.
+	//   %(version)s: Chromeos version (e.g., R81-12813.0.0)
+	//   %(build_id)s: Buildbucket job ID.
+	//   %(target)s: build target name.
+	//   %(builder_name)s: The builder name (e.g. octopus-cq), lowercase with
+	//       underscores turned into hyphens.
+	//   %(gs_path)s: "%(builder_name)s/%(version)s-%(build_id)s".
+	//   %(artifact_name)s: The name of the artifact being published.
+	//
+	// At least one location must be specified.  (This will typically be
+	// 'chromeos-image-archive/%(gs_path)s' to match the behavior of
+	// 'artifacts_gs_location'.
+	GsLocations []string `protobuf:"bytes,2,rep,name=gs_locations,json=gsLocations,proto3" json:"gs_locations,omitempty"`
+	// Profile information needed by the artifact handler, if any.
+	ProfileInfo          *ArtifactProfileInfo `protobuf:"bytes,3,opt,name=profile_info,json=profileInfo,proto3" json:"profile_info,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}             `json:"-"`
+	XXX_unrecognized     []byte               `json:"-"`
+	XXX_sizecache        int32                `json:"-"`
+}
+
+func (m *ArtifactsByService_Toolchain_ArtifactInfo) Reset() {
+	*m = ArtifactsByService_Toolchain_ArtifactInfo{}
+}
+func (m *ArtifactsByService_Toolchain_ArtifactInfo) String() string { return proto.CompactTextString(m) }
+func (*ArtifactsByService_Toolchain_ArtifactInfo) ProtoMessage()    {}
+func (*ArtifactsByService_Toolchain_ArtifactInfo) Descriptor() ([]byte, []int) {
+	return fileDescriptor_fa0b57c3d7d4c63b, []int{16, 1, 0}
+}
+
+func (m *ArtifactsByService_Toolchain_ArtifactInfo) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_ArtifactsByService_Toolchain_ArtifactInfo.Unmarshal(m, b)
+}
+func (m *ArtifactsByService_Toolchain_ArtifactInfo) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_ArtifactsByService_Toolchain_ArtifactInfo.Marshal(b, m, deterministic)
+}
+func (m *ArtifactsByService_Toolchain_ArtifactInfo) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_ArtifactsByService_Toolchain_ArtifactInfo.Merge(m, src)
+}
+func (m *ArtifactsByService_Toolchain_ArtifactInfo) XXX_Size() int {
+	return xxx_messageInfo_ArtifactsByService_Toolchain_ArtifactInfo.Size(m)
+}
+func (m *ArtifactsByService_Toolchain_ArtifactInfo) XXX_DiscardUnknown() {
+	xxx_messageInfo_ArtifactsByService_Toolchain_ArtifactInfo.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_ArtifactsByService_Toolchain_ArtifactInfo proto.InternalMessageInfo
+
+func (m *ArtifactsByService_Toolchain_ArtifactInfo) GetArtifactType() []ArtifactsByService_Toolchain_ArtifactType {
+	if m != nil {
+		return m.ArtifactType
+	}
+	return nil
+}
+
+func (m *ArtifactsByService_Toolchain_ArtifactInfo) GetGsLocations() []string {
+	if m != nil {
+		return m.GsLocations
+	}
+	return nil
+}
+
+func (m *ArtifactsByService_Toolchain_ArtifactInfo) GetProfileInfo() *ArtifactProfileInfo {
+	if m != nil {
+		return m.ProfileInfo
+	}
+	return nil
+}
+
+type UploadedArtifactsByService struct {
+	Legacy               *UploadedArtifactsByService_Legacy    `protobuf:"bytes,1,opt,name=legacy,proto3" json:"legacy,omitempty"`
+	Toolchain            *UploadedArtifactsByService_Toolchain `protobuf:"bytes,2,opt,name=toolchain,proto3" json:"toolchain,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}                              `json:"-"`
+	XXX_unrecognized     []byte                                `json:"-"`
+	XXX_sizecache        int32                                 `json:"-"`
+}
+
+func (m *UploadedArtifactsByService) Reset()         { *m = UploadedArtifactsByService{} }
+func (m *UploadedArtifactsByService) String() string { return proto.CompactTextString(m) }
+func (*UploadedArtifactsByService) ProtoMessage()    {}
+func (*UploadedArtifactsByService) Descriptor() ([]byte, []int) {
+	return fileDescriptor_fa0b57c3d7d4c63b, []int{17}
+}
+
+func (m *UploadedArtifactsByService) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_UploadedArtifactsByService.Unmarshal(m, b)
+}
+func (m *UploadedArtifactsByService) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_UploadedArtifactsByService.Marshal(b, m, deterministic)
+}
+func (m *UploadedArtifactsByService) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_UploadedArtifactsByService.Merge(m, src)
+}
+func (m *UploadedArtifactsByService) XXX_Size() int {
+	return xxx_messageInfo_UploadedArtifactsByService.Size(m)
+}
+func (m *UploadedArtifactsByService) XXX_DiscardUnknown() {
+	xxx_messageInfo_UploadedArtifactsByService.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_UploadedArtifactsByService proto.InternalMessageInfo
+
+func (m *UploadedArtifactsByService) GetLegacy() *UploadedArtifactsByService_Legacy {
+	if m != nil {
+		return m.Legacy
+	}
+	return nil
+}
+
+func (m *UploadedArtifactsByService) GetToolchain() *UploadedArtifactsByService_Toolchain {
+	if m != nil {
+		return m.Toolchain
+	}
+	return nil
+}
+
+// TODO(crbug/1034529): Drop this UploadedArtifactsByService.Legacy.
+// Legacy artifacts, handled by ArtifactsService.
+type UploadedArtifactsByService_Legacy struct {
+	Artifacts            []*UploadedArtifactsByService_Legacy_ArtifactPaths `protobuf:"bytes,1,rep,name=artifacts,proto3" json:"artifacts,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}                                           `json:"-"`
+	XXX_unrecognized     []byte                                             `json:"-"`
+	XXX_sizecache        int32                                              `json:"-"`
+}
+
+func (m *UploadedArtifactsByService_Legacy) Reset()         { *m = UploadedArtifactsByService_Legacy{} }
+func (m *UploadedArtifactsByService_Legacy) String() string { return proto.CompactTextString(m) }
+func (*UploadedArtifactsByService_Legacy) ProtoMessage()    {}
+func (*UploadedArtifactsByService_Legacy) Descriptor() ([]byte, []int) {
+	return fileDescriptor_fa0b57c3d7d4c63b, []int{17, 0}
+}
+
+func (m *UploadedArtifactsByService_Legacy) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_UploadedArtifactsByService_Legacy.Unmarshal(m, b)
+}
+func (m *UploadedArtifactsByService_Legacy) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_UploadedArtifactsByService_Legacy.Marshal(b, m, deterministic)
+}
+func (m *UploadedArtifactsByService_Legacy) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_UploadedArtifactsByService_Legacy.Merge(m, src)
+}
+func (m *UploadedArtifactsByService_Legacy) XXX_Size() int {
+	return xxx_messageInfo_UploadedArtifactsByService_Legacy.Size(m)
+}
+func (m *UploadedArtifactsByService_Legacy) XXX_DiscardUnknown() {
+	xxx_messageInfo_UploadedArtifactsByService_Legacy.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_UploadedArtifactsByService_Legacy proto.InternalMessageInfo
+
+func (m *UploadedArtifactsByService_Legacy) GetArtifacts() []*UploadedArtifactsByService_Legacy_ArtifactPaths {
+	if m != nil {
+		return m.Artifacts
+	}
+	return nil
+}
+
+type UploadedArtifactsByService_Legacy_ArtifactPaths struct {
+	// The ArtifactType.
+	ArtifactType ArtifactsByService_Legacy_ArtifactType `protobuf:"varint,1,opt,name=artifact_type,json=artifactType,proto3,enum=chromiumos.ArtifactsByService_Legacy_ArtifactType" json:"artifact_type,omitempty"`
+	// Absolute path to the artifact file.
+	Paths                []string `protobuf:"bytes,2,rep,name=paths,proto3" json:"paths,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *UploadedArtifactsByService_Legacy_ArtifactPaths) Reset() {
+	*m = UploadedArtifactsByService_Legacy_ArtifactPaths{}
+}
+func (m *UploadedArtifactsByService_Legacy_ArtifactPaths) String() string {
+	return proto.CompactTextString(m)
+}
+func (*UploadedArtifactsByService_Legacy_ArtifactPaths) ProtoMessage() {}
+func (*UploadedArtifactsByService_Legacy_ArtifactPaths) Descriptor() ([]byte, []int) {
+	return fileDescriptor_fa0b57c3d7d4c63b, []int{17, 0, 0}
+}
+
+func (m *UploadedArtifactsByService_Legacy_ArtifactPaths) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_UploadedArtifactsByService_Legacy_ArtifactPaths.Unmarshal(m, b)
+}
+func (m *UploadedArtifactsByService_Legacy_ArtifactPaths) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_UploadedArtifactsByService_Legacy_ArtifactPaths.Marshal(b, m, deterministic)
+}
+func (m *UploadedArtifactsByService_Legacy_ArtifactPaths) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_UploadedArtifactsByService_Legacy_ArtifactPaths.Merge(m, src)
+}
+func (m *UploadedArtifactsByService_Legacy_ArtifactPaths) XXX_Size() int {
+	return xxx_messageInfo_UploadedArtifactsByService_Legacy_ArtifactPaths.Size(m)
+}
+func (m *UploadedArtifactsByService_Legacy_ArtifactPaths) XXX_DiscardUnknown() {
+	xxx_messageInfo_UploadedArtifactsByService_Legacy_ArtifactPaths.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_UploadedArtifactsByService_Legacy_ArtifactPaths proto.InternalMessageInfo
+
+func (m *UploadedArtifactsByService_Legacy_ArtifactPaths) GetArtifactType() ArtifactsByService_Legacy_ArtifactType {
+	if m != nil {
+		return m.ArtifactType
+	}
+	return ArtifactsByService_Legacy_UNSPECIFIED
+}
+
+func (m *UploadedArtifactsByService_Legacy_ArtifactPaths) GetPaths() []string {
+	if m != nil {
+		return m.Paths
+	}
+	return nil
+}
+
+type UploadedArtifactsByService_Toolchain struct {
+	Artifacts            []*UploadedArtifactsByService_Toolchain_ArtifactPaths `protobuf:"bytes,1,rep,name=artifacts,proto3" json:"artifacts,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}                                              `json:"-"`
+	XXX_unrecognized     []byte                                                `json:"-"`
+	XXX_sizecache        int32                                                 `json:"-"`
+}
+
+func (m *UploadedArtifactsByService_Toolchain) Reset()         { *m = UploadedArtifactsByService_Toolchain{} }
+func (m *UploadedArtifactsByService_Toolchain) String() string { return proto.CompactTextString(m) }
+func (*UploadedArtifactsByService_Toolchain) ProtoMessage()    {}
+func (*UploadedArtifactsByService_Toolchain) Descriptor() ([]byte, []int) {
+	return fileDescriptor_fa0b57c3d7d4c63b, []int{17, 1}
+}
+
+func (m *UploadedArtifactsByService_Toolchain) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_UploadedArtifactsByService_Toolchain.Unmarshal(m, b)
+}
+func (m *UploadedArtifactsByService_Toolchain) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_UploadedArtifactsByService_Toolchain.Marshal(b, m, deterministic)
+}
+func (m *UploadedArtifactsByService_Toolchain) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_UploadedArtifactsByService_Toolchain.Merge(m, src)
+}
+func (m *UploadedArtifactsByService_Toolchain) XXX_Size() int {
+	return xxx_messageInfo_UploadedArtifactsByService_Toolchain.Size(m)
+}
+func (m *UploadedArtifactsByService_Toolchain) XXX_DiscardUnknown() {
+	xxx_messageInfo_UploadedArtifactsByService_Toolchain.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_UploadedArtifactsByService_Toolchain proto.InternalMessageInfo
+
+func (m *UploadedArtifactsByService_Toolchain) GetArtifacts() []*UploadedArtifactsByService_Toolchain_ArtifactPaths {
+	if m != nil {
+		return m.Artifacts
+	}
+	return nil
+}
+
+type UploadedArtifactsByService_Toolchain_ArtifactPaths struct {
+	// The ArtifactType.
+	ArtifactType ArtifactsByService_Toolchain_ArtifactType `protobuf:"varint,1,opt,name=artifact_type,json=artifactType,proto3,enum=chromiumos.ArtifactsByService_Toolchain_ArtifactType" json:"artifact_type,omitempty"`
+	// Absolute path to the artifact file.
+	Paths                []string `protobuf:"bytes,2,rep,name=paths,proto3" json:"paths,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *UploadedArtifactsByService_Toolchain_ArtifactPaths) Reset() {
+	*m = UploadedArtifactsByService_Toolchain_ArtifactPaths{}
+}
+func (m *UploadedArtifactsByService_Toolchain_ArtifactPaths) String() string {
+	return proto.CompactTextString(m)
+}
+func (*UploadedArtifactsByService_Toolchain_ArtifactPaths) ProtoMessage() {}
+func (*UploadedArtifactsByService_Toolchain_ArtifactPaths) Descriptor() ([]byte, []int) {
+	return fileDescriptor_fa0b57c3d7d4c63b, []int{17, 1, 0}
+}
+
+func (m *UploadedArtifactsByService_Toolchain_ArtifactPaths) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_UploadedArtifactsByService_Toolchain_ArtifactPaths.Unmarshal(m, b)
+}
+func (m *UploadedArtifactsByService_Toolchain_ArtifactPaths) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_UploadedArtifactsByService_Toolchain_ArtifactPaths.Marshal(b, m, deterministic)
+}
+func (m *UploadedArtifactsByService_Toolchain_ArtifactPaths) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_UploadedArtifactsByService_Toolchain_ArtifactPaths.Merge(m, src)
+}
+func (m *UploadedArtifactsByService_Toolchain_ArtifactPaths) XXX_Size() int {
+	return xxx_messageInfo_UploadedArtifactsByService_Toolchain_ArtifactPaths.Size(m)
+}
+func (m *UploadedArtifactsByService_Toolchain_ArtifactPaths) XXX_DiscardUnknown() {
+	xxx_messageInfo_UploadedArtifactsByService_Toolchain_ArtifactPaths.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_UploadedArtifactsByService_Toolchain_ArtifactPaths proto.InternalMessageInfo
+
+func (m *UploadedArtifactsByService_Toolchain_ArtifactPaths) GetArtifactType() ArtifactsByService_Toolchain_ArtifactType {
+	if m != nil {
+		return m.ArtifactType
+	}
+	return ArtifactsByService_Toolchain_UNSPECIFIED
+}
+
+func (m *UploadedArtifactsByService_Toolchain_ArtifactPaths) GetPaths() []string {
+	if m != nil {
+		return m.Paths
+	}
+	return nil
+}
+
 func init() {
 	proto.RegisterEnum("chromiumos.ImageType", ImageType_name, ImageType_value)
 	proto.RegisterEnum("chromiumos.Channel", Channel_name, Channel_value)
 	proto.RegisterEnum("chromiumos.AFDOArtifactType", AFDOArtifactType_name, AFDOArtifactType_value)
 	proto.RegisterEnum("chromiumos.GomaConfig_GomaApproach", GomaConfig_GomaApproach_name, GomaConfig_GomaApproach_value)
 	proto.RegisterEnum("chromiumos.Path_Location", Path_Location_name, Path_Location_value)
-	proto.RegisterEnum("chromiumos.PrepareForBuildResponse_BuildRelevance", PrepareForBuildResponse_BuildRelevance_name, PrepareForBuildResponse_BuildRelevance_value)
+	proto.RegisterEnum("chromiumos.ArtifactsByService_Legacy_ArtifactType", ArtifactsByService_Legacy_ArtifactType_name, ArtifactsByService_Legacy_ArtifactType_value)
+	proto.RegisterEnum("chromiumos.ArtifactsByService_Toolchain_ArtifactType", ArtifactsByService_Toolchain_ArtifactType_name, ArtifactsByService_Toolchain_ArtifactType_value)
 	proto.RegisterType((*BuildTarget)(nil), "chromiumos.BuildTarget")
 	proto.RegisterType((*Chroot)(nil), "chromiumos.Chroot")
 	proto.RegisterType((*Chroot_ChrootEnv)(nil), "chromiumos.Chroot.ChrootEnv")
@@ -1331,97 +1921,141 @@
 	proto.RegisterType((*GitilesCommit)(nil), "chromiumos.GitilesCommit")
 	proto.RegisterType((*UseFlag)(nil), "chromiumos.UseFlag")
 	proto.RegisterType((*ProtoBytes)(nil), "chromiumos.ProtoBytes")
-	proto.RegisterType((*PrepareForBuildResponse)(nil), "chromiumos.PrepareForBuildResponse")
 	proto.RegisterType((*PrepareForBuildAdditionalArgs)(nil), "chromiumos.PrepareForBuildAdditionalArgs")
 	proto.RegisterType((*AfdoRelease)(nil), "chromiumos.AfdoRelease")
 	proto.RegisterType((*ArtifactProfileInfo)(nil), "chromiumos.ArtifactProfileInfo")
+	proto.RegisterType((*ArtifactsByService)(nil), "chromiumos.ArtifactsByService")
+	proto.RegisterType((*ArtifactsByService_Legacy)(nil), "chromiumos.ArtifactsByService.Legacy")
+	proto.RegisterType((*ArtifactsByService_Legacy_ArtifactInfo)(nil), "chromiumos.ArtifactsByService.Legacy.ArtifactInfo")
+	proto.RegisterType((*ArtifactsByService_Toolchain)(nil), "chromiumos.ArtifactsByService.Toolchain")
+	proto.RegisterType((*ArtifactsByService_Toolchain_ArtifactInfo)(nil), "chromiumos.ArtifactsByService.Toolchain.ArtifactInfo")
+	proto.RegisterType((*UploadedArtifactsByService)(nil), "chromiumos.UploadedArtifactsByService")
+	proto.RegisterType((*UploadedArtifactsByService_Legacy)(nil), "chromiumos.UploadedArtifactsByService.Legacy")
+	proto.RegisterType((*UploadedArtifactsByService_Legacy_ArtifactPaths)(nil), "chromiumos.UploadedArtifactsByService.Legacy.ArtifactPaths")
+	proto.RegisterType((*UploadedArtifactsByService_Toolchain)(nil), "chromiumos.UploadedArtifactsByService.Toolchain")
+	proto.RegisterType((*UploadedArtifactsByService_Toolchain_ArtifactPaths)(nil), "chromiumos.UploadedArtifactsByService.Toolchain.ArtifactPaths")
 }
 
 func init() { proto.RegisterFile("chromiumos/common.proto", fileDescriptor_fa0b57c3d7d4c63b) }
 
 var fileDescriptor_fa0b57c3d7d4c63b = []byte{
-	// 1327 bytes of a gzipped FileDescriptorProto
-	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xb4, 0x56, 0xcb, 0x6e, 0xdb, 0xc6,
-	0x1a, 0xb6, 0x44, 0x45, 0x97, 0x5f, 0x17, 0x33, 0x93, 0x93, 0x58, 0xc9, 0x39, 0x06, 0x1c, 0x26,
-	0xc0, 0xf1, 0x31, 0x0e, 0xe4, 0x40, 0x4d, 0xda, 0x4d, 0x37, 0x14, 0x45, 0xc9, 0x4c, 0x6c, 0x52,
-	0x18, 0xc9, 0x0e, 0xdc, 0x2e, 0x88, 0x09, 0x35, 0xa2, 0x98, 0x50, 0x1c, 0x62, 0x48, 0x3b, 0x70,
-	0xfa, 0x00, 0xdd, 0x77, 0xd1, 0xc7, 0x29, 0xd0, 0x45, 0x5f, 0xab, 0x28, 0x66, 0x48, 0x4a, 0xb2,
-	0x93, 0xa2, 0xe8, 0xa2, 0x2b, 0xcd, 0xff, 0xfd, 0xf7, 0x2b, 0x05, 0x7b, 0xde, 0x92, 0xb3, 0x55,
-	0x70, 0xb5, 0x62, 0xc9, 0xb1, 0xc7, 0x56, 0x2b, 0x16, 0xf5, 0x62, 0xce, 0x52, 0x86, 0x60, 0xc3,
-	0xd0, 0x9e, 0x42, 0x73, 0x70, 0x15, 0x84, 0xf3, 0x19, 0xe1, 0x3e, 0x4d, 0x11, 0x82, 0x4a, 0x44,
-	0x56, 0xb4, 0x5b, 0x3a, 0x28, 0x1d, 0x36, 0xb0, 0x7c, 0x6b, 0xbf, 0x97, 0xa0, 0x6a, 0x2c, 0x39,
-	0x63, 0x92, 0x1d, 0x93, 0x74, 0x59, 0xb0, 0xc5, 0x1b, 0xfd, 0x1b, 0x1a, 0x1e, 0xf1, 0x96, 0xd4,
-	0x9d, 0x07, 0xbc, 0x5b, 0x96, 0x8c, 0xba, 0x04, 0x86, 0x01, 0x47, 0x3d, 0x50, 0x68, 0x74, 0xdd,
-	0x55, 0x0e, 0x4a, 0x87, 0xcd, 0xfe, 0x7f, 0x7a, 0x1b, 0xc7, 0xbd, 0xcc, 0x62, 0xfe, 0x63, 0x46,
-	0xd7, 0x58, 0x08, 0xa2, 0x7d, 0xc8, 0x82, 0xcb, 0xac, 0x55, 0xa4, 0xb5, 0x46, 0x86, 0x0c, 0x03,
-	0xfe, 0x24, 0x82, 0xc6, 0x5a, 0x01, 0xbd, 0x80, 0xc6, 0x55, 0x42, 0xdd, 0x45, 0x48, 0xfc, 0xa4,
-	0x5b, 0x3a, 0x50, 0x0e, 0x9b, 0xfd, 0x07, 0xdb, 0x1e, 0xce, 0x13, 0x3a, 0x0a, 0x89, 0x8f, 0xeb,
-	0x57, 0xd9, 0x23, 0x41, 0xc7, 0x50, 0x5f, 0x50, 0x92, 0x5e, 0x71, 0x9a, 0x74, 0xcb, 0x9f, 0x2b,
-	0x8c, 0x32, 0x1e, 0x5e, 0x0b, 0xbd, 0xae, 0xd4, 0xef, 0xa9, 0x55, 0xed, 0x19, 0xd4, 0x72, 0x16,
-	0xea, 0x42, 0x2d, 0x67, 0xe6, 0x35, 0x28, 0x48, 0xed, 0x67, 0x05, 0x60, 0xcc, 0x56, 0xc4, 0x60,
-	0xd1, 0x22, 0xf0, 0xd1, 0x63, 0xa8, 0xfb, 0x6c, 0x45, 0x64, 0x1a, 0xb9, 0xa4, 0xa0, 0x45, 0x4d,
-	0x0e, 0x41, 0x95, 0x2c, 0x2f, 0x0c, 0x68, 0x94, 0xba, 0xef, 0x13, 0x16, 0xe5, 0x75, 0xeb, 0x08,
-	0xdc, 0x90, 0xf0, 0xeb, 0x84, 0x45, 0xe8, 0x08, 0xee, 0x67, 0xb9, 0xb3, 0xc4, 0x5d, 0x5b, 0x53,
-	0xa4, 0xe8, 0x6e, 0xc1, 0x18, 0xe7, 0x56, 0x4f, 0xa0, 0x2d, 0x45, 0x48, 0x1c, 0x73, 0x46, 0xbc,
-	0xa5, 0x2c, 0x5e, 0xa7, 0xff, 0x6c, 0x3b, 0xc1, 0x4d, 0x7c, 0xf2, 0xa9, 0xe7, 0xa2, 0xb8, 0xe5,
-	0x6f, 0x51, 0xa8, 0x07, 0xb5, 0x90, 0xf9, 0xd2, 0xd7, 0x3d, 0xd9, 0xb7, 0x87, 0xdb, 0x36, 0xa6,
-	0x37, 0x91, 0x47, 0xe7, 0xc3, 0x80, 0xe3, 0x6a, 0xc8, 0x7c, 0xe1, 0x79, 0x1f, 0x20, 0x49, 0x49,
-	0x9a, 0xb8, 0x8b, 0x20, 0xa4, 0xdd, 0x6a, 0xd6, 0x33, 0x89, 0x8c, 0x82, 0x90, 0xa2, 0x67, 0xd0,
-	0xf6, 0xd8, 0x55, 0x94, 0x52, 0xfe, 0x29, 0x93, 0xa8, 0x49, 0x89, 0x56, 0x01, 0x0a, 0x21, 0xed,
-	0x12, 0x5a, 0xdb, 0x11, 0xa1, 0x7d, 0x78, 0x3c, 0x76, 0xce, 0x74, 0x57, 0x9f, 0x4c, 0xb0, 0xa3,
-	0x1b, 0x27, 0xee, 0xb9, 0x3d, 0x9d, 0x98, 0x86, 0x35, 0xb2, 0xcc, 0xa1, 0xba, 0x83, 0x9a, 0x50,
-	0x1b, 0x9a, 0x23, 0xfd, 0xfc, 0x74, 0xa6, 0x96, 0x50, 0x0b, 0xea, 0x78, 0x60, 0xba, 0x13, 0xec,
-	0x0c, 0xd5, 0x32, 0xda, 0x85, 0xa6, 0xa0, 0xa6, 0x33, 0x7d, 0x6c, 0xd9, 0x63, 0x55, 0xd1, 0x62,
-	0x68, 0x4b, 0xd3, 0x3c, 0x0d, 0x16, 0xc4, 0x4b, 0x93, 0x3b, 0xf1, 0x96, 0xfe, 0x32, 0xde, 0xf2,
-	0xe7, 0xf1, 0x8a, 0xa1, 0x17, 0x35, 0x12, 0xfc, 0xa4, 0xab, 0x1c, 0x28, 0x62, 0xe8, 0x43, 0xe6,
-	0x0b, 0x5e, 0xa2, 0x2d, 0xa0, 0x39, 0x21, 0xde, 0x07, 0xe2, 0x53, 0x2b, 0x5a, 0x30, 0xf4, 0x14,
-	0x5a, 0x71, 0x46, 0xba, 0x5b, 0xbb, 0xd5, 0xcc, 0x31, 0x9b, 0xac, 0x28, 0x7a, 0x02, 0x75, 0x8f,
-	0xa4, 0xd4, 0x67, 0xfc, 0x66, 0xb3, 0x42, 0x19, 0x2d, 0x46, 0xee, 0x9a, 0xf2, 0x24, 0x60, 0x51,
-	0xde, 0xfa, 0x82, 0xd4, 0x7e, 0x2c, 0x41, 0x65, 0x22, 0x56, 0xf0, 0x4b, 0x6b, 0xf9, 0x0a, 0xea,
-	0x21, 0xf3, 0x48, 0x1a, 0xe4, 0xd3, 0xd5, 0xe9, 0x3f, 0xde, 0x6e, 0xa3, 0xd0, 0xeb, 0x9d, 0xe6,
-	0x02, 0x78, 0x2d, 0xaa, 0xbd, 0x84, 0x7a, 0x81, 0x8a, 0x52, 0xda, 0x8e, 0x7b, 0xea, 0x18, 0xfa,
-	0xcc, 0x72, 0x6c, 0x75, 0x07, 0x01, 0x54, 0x2d, 0x7b, 0x6a, 0x0d, 0x4d, 0xb5, 0x24, 0x5a, 0xe0,
-	0x9c, 0xcf, 0x24, 0x51, 0xd6, 0xfa, 0x00, 0x98, 0x26, 0x57, 0x61, 0x2a, 0xc3, 0x79, 0xbe, 0x15,
-	0x4e, 0xb3, 0xaf, 0xde, 0x75, 0x9b, 0x05, 0xa8, 0xed, 0x43, 0x63, 0x3d, 0x4b, 0x48, 0x05, 0x65,
-	0xb3, 0x29, 0xe2, 0xa9, 0xc5, 0xd0, 0x1a, 0x53, 0xce, 0x83, 0xd4, 0x58, 0x92, 0xc8, 0xa7, 0x22,
-	0xc7, 0x25, 0x4b, 0xd2, 0x22, 0x47, 0xf1, 0x16, 0xa5, 0x89, 0x39, 0x7b, 0x4f, 0xbd, 0x34, 0xaf,
-	0x5a, 0x41, 0xa2, 0x47, 0x50, 0xf5, 0xa4, 0x9e, 0xac, 0x99, 0x82, 0x73, 0x4a, 0x14, 0x3a, 0x26,
-	0xa9, 0xb7, 0x4c, 0x68, 0x2a, 0x17, 0x44, 0xc1, 0x6b, 0x5a, 0xfb, 0x01, 0xda, 0xe3, 0x20, 0x15,
-	0x1d, 0x34, 0xd8, 0x6a, 0x15, 0xa4, 0x7f, 0xd3, 0x65, 0x07, 0xca, 0xc1, 0x3c, 0x6f, 0x51, 0x39,
-	0x98, 0x8b, 0x94, 0x38, 0x5d, 0xe4, 0x37, 0x4c, 0x3c, 0xa5, 0x73, 0x96, 0x04, 0xb2, 0x25, 0x62,
-	0xb3, 0xda, 0x78, 0x4d, 0x6b, 0xfb, 0x50, 0xcb, 0xef, 0x95, 0x70, 0x2b, 0x6e, 0x5a, 0xe1, 0x56,
-	0xbc, 0xb5, 0x6f, 0x00, 0x26, 0xe2, 0x76, 0x0f, 0x6e, 0x52, 0x9a, 0xa0, 0xff, 0x81, 0x9a, 0x50,
-	0x1e, 0x90, 0x30, 0xf8, 0x44, 0xe7, 0xae, 0x3c, 0xea, 0x52, 0xba, 0x85, 0x77, 0x37, 0xb8, 0x94,
-	0xd7, 0x7e, 0x2d, 0xc1, 0xde, 0x84, 0xd3, 0x98, 0x70, 0x3a, 0x62, 0x5c, 0x9e, 0x7a, 0x4c, 0x93,
-	0x98, 0x45, 0x09, 0x45, 0xdf, 0xc3, 0xee, 0x3b, 0x01, 0xb8, 0x9c, 0x86, 0xf4, 0x9a, 0x44, 0x5e,
-	0x36, 0x9b, 0x9d, 0x7e, 0xff, 0x56, 0xcb, 0xbe, 0xac, 0xdd, 0xcb, 0xa9, 0x5c, 0x13, 0x77, 0xde,
-	0xdd, 0xa2, 0x35, 0x0b, 0x3a, 0xb7, 0x25, 0xc4, 0x38, 0xdd, 0xde, 0x62, 0x80, 0xaa, 0x6d, 0x9a,
-	0x43, 0x73, 0x98, 0x8d, 0xd3, 0xb9, 0xfd, 0xc6, 0x76, 0xde, 0xda, 0x6a, 0x19, 0xb5, 0xa1, 0x31,
-	0x71, 0x2c, 0x7b, 0x76, 0x6a, 0x4e, 0xa7, 0xaa, 0xa2, 0xfd, 0x54, 0x82, 0xfd, 0x3b, 0x51, 0xe8,
-	0xf3, 0xb9, 0xac, 0x1b, 0x09, 0x75, 0xee, 0x27, 0xa8, 0x07, 0x28, 0xff, 0x6c, 0x78, 0x1f, 0x63,
-	0x51, 0x90, 0xcd, 0x6a, 0x9f, 0xec, 0x60, 0x35, 0xe3, 0x19, 0x1f, 0xe3, 0x49, 0xc6, 0x41, 0xff,
-	0x85, 0xce, 0x07, 0xca, 0x23, 0x1a, 0xba, 0xc5, 0x6a, 0x95, 0x73, 0xd9, 0x76, 0x86, 0x5f, 0x64,
-	0xf0, 0xa0, 0x0b, 0x8f, 0xe2, 0xcc, 0xb3, 0xbb, 0x60, 0xdc, 0xcd, 0xca, 0x45, 0xb8, 0x9f, 0x68,
-	0x04, 0x9a, 0xfa, 0x62, 0xce, 0x44, 0x7a, 0x24, 0xa1, 0xe8, 0xff, 0x7f, 0x1e, 0xc1, 0x17, 0xfc,
-	0x3f, 0x87, 0x4e, 0xb0, 0x12, 0x07, 0x21, 0x33, 0x18, 0xcc, 0xa5, 0x7f, 0x05, 0xb7, 0x24, 0x2a,
-	0x33, 0xb4, 0xe6, 0xda, 0x6f, 0x25, 0x78, 0x50, 0x9c, 0xad, 0x5c, 0x53, 0x1e, 0x94, 0x7f, 0x2a,
-	0x5b, 0xf4, 0x2d, 0xb4, 0xc8, 0x62, 0xce, 0xe4, 0x3c, 0x90, 0x84, 0xe6, 0x9f, 0xed, 0xbd, 0xed,
-	0x69, 0xd8, 0xca, 0xf9, 0x64, 0x07, 0x37, 0xc9, 0x86, 0x1c, 0xec, 0xc1, 0x43, 0x92, 0x47, 0x5b,
-	0x04, 0xe5, 0x06, 0xd1, 0x82, 0x1d, 0xfd, 0x52, 0x82, 0x86, 0x25, 0x12, 0x9b, 0xdd, 0xc4, 0xe2,
-	0x13, 0xfa, 0x2f, 0xeb, 0x4c, 0x1f, 0x9b, 0xee, 0xec, 0x72, 0x62, 0xba, 0xe7, 0xf6, 0xd0, 0x1c,
-	0x59, 0xb6, 0x9c, 0x87, 0x3a, 0x54, 0x06, 0xfa, 0x54, 0x1c, 0x97, 0x1a, 0x28, 0x43, 0xf3, 0x42,
-	0x2d, 0x0b, 0x68, 0x66, 0x4e, 0x67, 0xaa, 0x22, 0x06, 0x44, 0x30, 0xdd, 0x8b, 0x33, 0xb5, 0x22,
-	0x08, 0x01, 0x0b, 0xe2, 0x9e, 0xbc, 0xff, 0xa6, 0xe1, 0x5c, 0x98, 0xf8, 0x52, 0xad, 0x0a, 0xd6,
-	0x48, 0x37, 0x66, 0x0e, 0xbe, 0x54, 0x6b, 0x82, 0x35, 0xb2, 0xf0, 0xd9, 0x5b, 0x1d, 0x9b, 0x6a,
-	0x1d, 0xdd, 0x87, 0xb6, 0x81, 0x5f, 0xbd, 0x70, 0xd7, 0x50, 0x43, 0x40, 0xd2, 0xea, 0xf8, 0x3c,
-	0x37, 0x07, 0x02, 0x92, 0xb6, 0xd7, 0x50, 0xf3, 0x68, 0x05, 0x35, 0x71, 0x85, 0x22, 0x1a, 0xa2,
-	0x3d, 0x78, 0x60, 0x9c, 0xe8, 0xb6, 0x6d, 0x9e, 0xde, 0xf9, 0x24, 0x21, 0xe8, 0x14, 0x8c, 0xe9,
-	0x4c, 0x1f, 0x9c, 0x8a, 0x34, 0x54, 0x68, 0x15, 0xd8, 0xc0, 0x9c, 0xe9, 0xd9, 0xd7, 0xa9, 0x40,
-	0x44, 0x82, 0xca, 0xb6, 0x9a, 0xa1, 0xdb, 0x3a, 0xbe, 0x54, 0x2b, 0x47, 0x0b, 0x50, 0xf5, 0xd1,
-	0xd0, 0x29, 0x5a, 0x2f, 0xab, 0xd6, 0x86, 0x86, 0xed, 0xd8, 0x59, 0xd1, 0xd4, 0x1d, 0x41, 0x3a,
-	0x78, 0x68, 0xe2, 0x91, 0x25, 0x1d, 0x21, 0xe8, 0x0c, 0x4c, 0xdb, 0x38, 0x39, 0xd3, 0xf1, 0x1b,
-	0x57, 0xe8, 0x66, 0xae, 0xde, 0x98, 0x58, 0x18, 0x96, 0x80, 0x92, 0xf9, 0xc6, 0xce, 0x99, 0x99,
-	0x01, 0x95, 0xc1, 0xd7, 0xdf, 0xbd, 0xf4, 0xd9, 0xba, 0xb9, 0x3d, 0xc6, 0xfd, 0xe3, 0xad, 0xbf,
-	0x8c, 0x41, 0xb4, 0xe0, 0xe4, 0x58, 0x1e, 0x97, 0x63, 0x9f, 0x6d, 0x71, 0xde, 0x55, 0x25, 0xf8,
-	0xd5, 0x1f, 0x01, 0x00, 0x00, 0xff, 0xff, 0x80, 0x8f, 0x99, 0x8b, 0x61, 0x0a, 0x00, 0x00,
+	// 1877 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xc4, 0x58, 0xcb, 0x6f, 0xe3, 0xc6,
+	0x19, 0x5f, 0x4a, 0x5a, 0x3d, 0x3e, 0x3d, 0xcc, 0xcc, 0x3e, 0xac, 0x75, 0xe3, 0xc4, 0x4b, 0x6f,
+	0x10, 0x67, 0xd1, 0xda, 0x0b, 0x37, 0xdb, 0x1e, 0xfa, 0x00, 0x28, 0x8a, 0x92, 0x99, 0xc8, 0x14,
+	0x31, 0x92, 0xbc, 0xf0, 0xf6, 0xc1, 0x32, 0xd4, 0x88, 0x62, 0x42, 0x71, 0x04, 0x92, 0xde, 0xc0,
+	0x29, 0x50, 0xa0, 0xa7, 0xa2, 0xd7, 0x1e, 0x0a, 0xf4, 0xff, 0xe8, 0xb9, 0xb7, 0x5e, 0x0b, 0xf4,
+	0x5f, 0x68, 0xcf, 0x3d, 0xf6, 0xd2, 0x43, 0x51, 0xcc, 0xf0, 0x21, 0xca, 0x96, 0xeb, 0x75, 0x90,
+	0xa2, 0x27, 0xcf, 0xf7, 0x7d, 0xbf, 0xf9, 0x5e, 0xf3, 0x3d, 0x44, 0xc3, 0xb6, 0x3d, 0x0f, 0xe8,
+	0xc2, 0xbd, 0x58, 0xd0, 0xf0, 0xc8, 0xa6, 0x8b, 0x05, 0xf5, 0x0f, 0x97, 0x01, 0x8d, 0x28, 0x82,
+	0x95, 0x40, 0x7a, 0x0a, 0xf5, 0xce, 0x85, 0xeb, 0x4d, 0xc7, 0x56, 0xe0, 0x90, 0x08, 0x21, 0x28,
+	0xf9, 0xd6, 0x82, 0xb4, 0x85, 0x3d, 0xe1, 0xa0, 0x86, 0xf9, 0x59, 0xfa, 0xb7, 0x00, 0x65, 0x65,
+	0x1e, 0x50, 0xca, 0xc5, 0x4b, 0x2b, 0x9a, 0xa7, 0x62, 0x76, 0x46, 0xdf, 0x82, 0x9a, 0x6d, 0xd9,
+	0x73, 0x62, 0x4e, 0xdd, 0xa0, 0x5d, 0xe0, 0x82, 0x2a, 0x67, 0x74, 0xdd, 0x00, 0x1d, 0x42, 0x91,
+	0xf8, 0x6f, 0xda, 0xc5, 0x3d, 0xe1, 0xa0, 0x7e, 0xfc, 0xee, 0xe1, 0xca, 0xf0, 0x61, 0xac, 0x31,
+	0xf9, 0xa3, 0xfa, 0x6f, 0x30, 0x03, 0xa2, 0x5d, 0x88, 0x9d, 0x8b, 0xb5, 0x95, 0xb8, 0xb6, 0x5a,
+	0xcc, 0xe9, 0xba, 0xc1, 0x8e, 0x0f, 0xb5, 0xec, 0x02, 0x7a, 0x01, 0xb5, 0x8b, 0x90, 0x98, 0x33,
+	0xcf, 0x72, 0xc2, 0xb6, 0xb0, 0x57, 0x3c, 0xa8, 0x1f, 0x3f, 0xc8, 0x5b, 0x98, 0x84, 0xa4, 0xe7,
+	0x59, 0x0e, 0xae, 0x5e, 0xc4, 0x87, 0x10, 0x1d, 0x41, 0x75, 0x46, 0xac, 0xe8, 0x22, 0x20, 0x61,
+	0xbb, 0x70, 0xfd, 0x42, 0x2f, 0x96, 0xe1, 0x0c, 0xf4, 0x49, 0xa9, 0x7a, 0x5f, 0x2c, 0x4b, 0xfb,
+	0x50, 0x49, 0x44, 0xa8, 0x0d, 0x95, 0x44, 0x98, 0xe4, 0x20, 0x25, 0xa5, 0xdf, 0x17, 0x01, 0xfa,
+	0x74, 0x61, 0x29, 0xd4, 0x9f, 0xb9, 0x0e, 0x7a, 0x02, 0x55, 0x87, 0x2e, 0x2c, 0x1e, 0x46, 0x82,
+	0x64, 0x34, 0xcb, 0xc9, 0x01, 0x88, 0x5c, 0x64, 0x7b, 0x2e, 0xf1, 0x23, 0xf3, 0xf3, 0x90, 0xfa,
+	0x49, 0xde, 0x5a, 0x8c, 0xaf, 0x70, 0xf6, 0x27, 0x21, 0xf5, 0xd1, 0x73, 0x78, 0x27, 0x8e, 0x9d,
+	0x86, 0x66, 0xa6, 0xad, 0xc8, 0xa1, 0x5b, 0xa9, 0xa0, 0x9f, 0x68, 0x3d, 0x81, 0x26, 0x87, 0x58,
+	0xcb, 0x65, 0x40, 0x2d, 0x7b, 0xce, 0x93, 0xd7, 0x3a, 0xde, 0xcf, 0x07, 0xb8, 0xf2, 0x8f, 0x1f,
+	0xe5, 0x04, 0x8a, 0x1b, 0x4e, 0x8e, 0x42, 0x87, 0x50, 0xf1, 0xa8, 0xc3, 0x6d, 0xdd, 0xe7, 0xef,
+	0xf6, 0x28, 0xaf, 0x63, 0x74, 0xe9, 0xdb, 0x64, 0xda, 0x75, 0x03, 0x5c, 0xf6, 0xa8, 0xc3, 0x2c,
+	0xef, 0x02, 0x84, 0x91, 0x15, 0x85, 0xe6, 0xcc, 0xf5, 0x48, 0xbb, 0x1c, 0xbf, 0x19, 0xe7, 0xf4,
+	0x5c, 0x8f, 0xa0, 0x7d, 0x68, 0xda, 0xf4, 0xc2, 0x8f, 0x48, 0xf0, 0x55, 0x8c, 0xa8, 0x70, 0x44,
+	0x23, 0x65, 0x32, 0x90, 0x74, 0x0e, 0x8d, 0xbc, 0x47, 0x68, 0x17, 0x9e, 0xf4, 0x87, 0xa7, 0xb2,
+	0x29, 0x1b, 0x06, 0x1e, 0xca, 0xca, 0x89, 0x39, 0xd1, 0x47, 0x86, 0xaa, 0x68, 0x3d, 0x4d, 0xed,
+	0x8a, 0xf7, 0x50, 0x1d, 0x2a, 0x5d, 0xb5, 0x27, 0x4f, 0x06, 0x63, 0x51, 0x40, 0x0d, 0xa8, 0xe2,
+	0x8e, 0x6a, 0x1a, 0x78, 0xd8, 0x15, 0x0b, 0x68, 0x0b, 0xea, 0x8c, 0x1a, 0x8d, 0xe5, 0xbe, 0xa6,
+	0xf7, 0xc5, 0xa2, 0xb4, 0x84, 0x26, 0x57, 0x1d, 0x44, 0xee, 0xcc, 0xb2, 0xa3, 0xf0, 0x8a, 0xbf,
+	0xc2, 0xad, 0xfe, 0x16, 0xae, 0xfb, 0xcb, 0x8a, 0x9e, 0xe5, 0x88, 0xc9, 0xc3, 0x76, 0x71, 0xaf,
+	0xc8, 0x8a, 0xde, 0xa3, 0x0e, 0x93, 0x85, 0xd2, 0x0c, 0xea, 0x86, 0x65, 0x7f, 0x61, 0x39, 0x44,
+	0xf3, 0x67, 0x14, 0x3d, 0x85, 0xc6, 0x32, 0x26, 0xcd, 0x5c, 0x6f, 0xd5, 0x13, 0x9e, 0x6e, 0x2d,
+	0x08, 0xda, 0x81, 0xaa, 0x6d, 0x45, 0xc4, 0xa1, 0xc1, 0xe5, 0xaa, 0x85, 0x62, 0x9a, 0x95, 0xdc,
+	0x1b, 0x12, 0x84, 0x2e, 0xf5, 0x93, 0xa7, 0x4f, 0x49, 0xe9, 0x37, 0x02, 0x94, 0x0c, 0xd6, 0x82,
+	0x9b, 0xda, 0xf2, 0x25, 0x54, 0x3d, 0x6a, 0x5b, 0x91, 0x9b, 0x54, 0x57, 0xeb, 0xf8, 0x49, 0xfe,
+	0x19, 0xd9, 0xbd, 0xc3, 0x41, 0x02, 0xc0, 0x19, 0x54, 0xfa, 0x18, 0xaa, 0x29, 0x97, 0xa5, 0x52,
+	0x1f, 0x9a, 0x83, 0xa1, 0x22, 0x8f, 0xb5, 0xa1, 0x2e, 0xde, 0x43, 0x00, 0x65, 0x4d, 0x1f, 0x69,
+	0x5d, 0x55, 0x14, 0xd8, 0x13, 0x0c, 0x27, 0x63, 0x4e, 0x14, 0xa4, 0x63, 0x00, 0x4c, 0xc2, 0x0b,
+	0x2f, 0xe2, 0xee, 0x3c, 0xcb, 0xb9, 0x53, 0x3f, 0x16, 0xaf, 0x9a, 0x8d, 0x1d, 0x94, 0x76, 0xa1,
+	0x96, 0xd5, 0x12, 0x12, 0xa1, 0xb8, 0xea, 0x14, 0x76, 0x94, 0x96, 0xd0, 0xe8, 0x93, 0x20, 0x70,
+	0x23, 0x65, 0x6e, 0xf9, 0x0e, 0x61, 0x31, 0xce, 0x69, 0x18, 0xa5, 0x31, 0xb2, 0x33, 0x4b, 0xcd,
+	0x32, 0xa0, 0x9f, 0x13, 0x3b, 0x4a, 0xb2, 0x96, 0x92, 0xe8, 0x31, 0x94, 0x6d, 0x7e, 0x8f, 0xe7,
+	0xac, 0x88, 0x13, 0x8a, 0x25, 0x7a, 0x69, 0x45, 0xf6, 0x3c, 0x24, 0x11, 0x6f, 0x90, 0x22, 0xce,
+	0x68, 0xe9, 0x97, 0xd0, 0xec, 0xbb, 0x11, 0x7b, 0x41, 0x85, 0x2e, 0x16, 0x6e, 0x74, 0x47, 0x93,
+	0x2d, 0x28, 0xb8, 0xd3, 0xe4, 0x89, 0x0a, 0xee, 0x94, 0x85, 0x14, 0x90, 0x59, 0x32, 0xc3, 0xd8,
+	0x91, 0x1b, 0xa7, 0xa1, 0xcb, 0x9f, 0x84, 0x75, 0x56, 0x13, 0x67, 0xb4, 0xb4, 0x0b, 0x95, 0x64,
+	0x5e, 0x31, 0xb3, 0x6c, 0xa6, 0xa5, 0x66, 0xd9, 0x59, 0xfa, 0x3e, 0x80, 0xc1, 0x66, 0x77, 0xe7,
+	0x32, 0x22, 0x21, 0xfa, 0x08, 0xc4, 0x90, 0x04, 0xae, 0xe5, 0xb9, 0x5f, 0x91, 0xa9, 0xc9, 0x87,
+	0x3a, 0x47, 0x37, 0xf0, 0xd6, 0x8a, 0xcf, 0xf1, 0xd2, 0xef, 0x04, 0xd8, 0x35, 0x02, 0xb2, 0xb4,
+	0x02, 0xd2, 0xa3, 0x01, 0x1f, 0xf5, 0xf2, 0x74, 0xca, 0x6d, 0x5a, 0x9e, 0x1c, 0x38, 0x21, 0x3a,
+	0x04, 0x94, 0x8c, 0x5c, 0xfb, 0xcb, 0x25, 0x53, 0xb6, 0x6a, 0x8b, 0x93, 0x7b, 0x58, 0x8c, 0x65,
+	0xca, 0x97, 0x4b, 0x23, 0x96, 0xa0, 0x0f, 0xa1, 0xf5, 0x05, 0x09, 0x7c, 0xe2, 0x99, 0x69, 0x59,
+	0x16, 0x12, 0x6c, 0x33, 0xe6, 0x9f, 0xc5, 0xec, 0x4e, 0x1b, 0x1e, 0x2f, 0x63, 0xcb, 0xe6, 0x8c,
+	0x06, 0xe6, 0x67, 0xcc, 0xb6, 0x69, 0x05, 0x4e, 0x28, 0x59, 0x50, 0x97, 0x67, 0x53, 0x8a, 0x89,
+	0x47, 0xac, 0x90, 0xa0, 0x6f, 0xdf, 0xec, 0xc1, 0x06, 0xfb, 0xcf, 0xa0, 0xe5, 0x2e, 0x58, 0x33,
+	0xc5, 0x0a, 0xdd, 0x29, 0xb7, 0x5f, 0xc4, 0x0d, 0xce, 0xe5, 0x11, 0x6a, 0x53, 0xe9, 0xcf, 0x02,
+	0x3c, 0x48, 0x5b, 0x3e, 0xb9, 0xc9, 0x9b, 0xf1, 0x7f, 0x15, 0x2d, 0xfa, 0x21, 0x34, 0xac, 0xd9,
+	0x94, 0x9a, 0x41, 0x1c, 0x54, 0xb2, 0xf2, 0xb6, 0xf3, 0xc5, 0x9f, 0x8b, 0xf9, 0xe4, 0x1e, 0xae,
+	0x5b, 0x2b, 0xb2, 0xb3, 0x0d, 0x8f, 0xac, 0xc4, 0xdb, 0xd4, 0x29, 0xd3, 0xf5, 0x67, 0x54, 0xfa,
+	0x63, 0x13, 0x50, 0x36, 0xba, 0x3a, 0x97, 0x23, 0x12, 0xbc, 0x71, 0x6d, 0x82, 0x7e, 0x04, 0x65,
+	0x8f, 0x38, 0x96, 0x7d, 0x99, 0x34, 0xd9, 0x07, 0x6b, 0x76, 0xae, 0xe1, 0x0f, 0x07, 0x1c, 0x8c,
+	0x93, 0x4b, 0xa8, 0x07, 0xb5, 0x88, 0x52, 0xcf, 0x9e, 0x5b, 0x6e, 0x1c, 0x50, 0xfd, 0xf8, 0xe0,
+	0x16, 0x0d, 0xe3, 0x14, 0x8f, 0x57, 0x57, 0x77, 0xfe, 0x55, 0x82, 0x72, 0xac, 0x1a, 0xfd, 0x04,
+	0xb6, 0x5c, 0x7f, 0x79, 0x11, 0x99, 0x69, 0x1c, 0xe9, 0x4e, 0x3e, 0x7e, 0x2b, 0xd7, 0x32, 0x09,
+	0x7b, 0x25, 0xdc, 0xe2, 0xaa, 0x56, 0x23, 0xfb, 0x67, 0x20, 0xd2, 0x8b, 0x68, 0x5d, 0x7b, 0xe1,
+	0x6b, 0x6b, 0xdf, 0x8a, 0x75, 0x65, 0xe8, 0x9d, 0xbf, 0x08, 0xd0, 0xc8, 0x23, 0xd0, 0x2b, 0x68,
+	0x66, 0xcf, 0x11, 0x5d, 0x2e, 0x09, 0x0f, 0xa5, 0x75, 0x57, 0x63, 0xe3, 0xcb, 0x25, 0xc1, 0x0d,
+	0x2b, 0x47, 0xb1, 0x5d, 0xe0, 0x84, 0x66, 0x3a, 0x6d, 0xe3, 0x20, 0x6a, 0xb8, 0xee, 0x84, 0xe9,
+	0xd0, 0x0d, 0x51, 0x07, 0x1a, 0xf9, 0x0a, 0x48, 0x0a, 0xe9, 0xfd, 0x4d, 0xa6, 0x73, 0x85, 0x8d,
+	0xeb, 0xcb, 0x15, 0x21, 0xfd, 0x2d, 0x17, 0x10, 0xb7, 0xbb, 0x05, 0xf5, 0xf5, 0x0d, 0xda, 0x84,
+	0x9a, 0x76, 0x2a, 0xf7, 0x55, 0xf3, 0xb5, 0x66, 0x88, 0x02, 0xda, 0x86, 0x07, 0x63, 0x75, 0x34,
+	0x36, 0x27, 0x46, 0x57, 0x1e, 0xab, 0xa6, 0x21, 0x9f, 0x0f, 0x86, 0x32, 0x5b, 0xa7, 0x08, 0x5a,
+	0xf2, 0x64, 0x3c, 0xe4, 0xc2, 0x9e, 0x36, 0x50, 0x47, 0x62, 0x11, 0xb5, 0x00, 0xc6, 0x72, 0x46,
+	0x97, 0xd8, 0x65, 0x43, 0xd3, 0x75, 0xb5, 0x6b, 0xf6, 0x27, 0x0c, 0xc7, 0x15, 0x8f, 0xc4, 0xfb,
+	0x6c, 0x33, 0xf7, 0x34, 0x7c, 0xfa, 0x4a, 0xc6, 0xaa, 0x58, 0x66, 0x3e, 0xa8, 0x9d, 0x89, 0x36,
+	0xe8, 0x9a, 0x83, 0x61, 0x7f, 0x24, 0x56, 0xd0, 0x03, 0xd8, 0x52, 0x4e, 0xf0, 0xf0, 0x54, 0x1d,
+	0x8e, 0x4c, 0x65, 0xa8, 0xf7, 0xb4, 0xbe, 0x58, 0x65, 0xca, 0x15, 0x43, 0x35, 0xb1, 0x6a, 0x0c,
+	0xf1, 0x58, 0xac, 0x31, 0x07, 0x62, 0x47, 0x65, 0xac, 0x9c, 0x68, 0x67, 0xea, 0x48, 0x04, 0xa9,
+	0x54, 0xad, 0x8b, 0xdb, 0x3b, 0x7f, 0xa8, 0x40, 0x2d, 0xab, 0x4a, 0xf4, 0xf3, 0x9b, 0xea, 0xef,
+	0xe5, 0xdb, 0x16, 0xf6, 0x7f, 0x2f, 0xc1, 0x5f, 0xdc, 0x58, 0x82, 0x5f, 0xd3, 0xc0, 0xb5, 0x2a,
+	0xfc, 0xeb, 0xd5, 0x2a, 0x7c, 0xbd, 0xb9, 0x0a, 0xef, 0x6e, 0xef, 0xff, 0x57, 0x88, 0xff, 0x2c,
+	0xde, 0x56, 0x88, 0xcf, 0x60, 0x6f, 0xa2, 0x9f, 0xa9, 0x98, 0xd3, 0x66, 0x5c, 0x0f, 0xe6, 0x60,
+	0x70, 0x76, 0x6a, 0x0e, 0x71, 0x57, 0xc5, 0xac, 0xc6, 0xc4, 0x3a, 0x92, 0xe0, 0xbd, 0x5b, 0x30,
+	0x0d, 0xf4, 0x1e, 0xec, 0x24, 0x22, 0x65, 0x20, 0xeb, 0x7d, 0xf3, 0x95, 0x8c, 0x75, 0x4d, 0xef,
+	0x8f, 0x78, 0x9d, 0x8a, 0x4d, 0xf4, 0x2e, 0xb4, 0x73, 0x96, 0xf8, 0x75, 0xa3, 0x3f, 0x8c, 0xa5,
+	0x2d, 0xf4, 0x11, 0x7c, 0x70, 0xdd, 0x8f, 0x8e, 0xaa, 0x2b, 0x27, 0xa7, 0x32, 0xfe, 0xd4, 0x94,
+	0x7b, 0xdd, 0x04, 0xba, 0x85, 0x3e, 0x84, 0xfd, 0xb7, 0x01, 0x8a, 0xe8, 0x29, 0xec, 0x66, 0xc0,
+	0x4f, 0x55, 0xac, 0xab, 0x03, 0x53, 0x79, 0x65, 0xe4, 0x20, 0xef, 0xa0, 0x7d, 0x78, 0x3f, 0x67,
+	0x76, 0x23, 0x08, 0x5d, 0x01, 0xa5, 0x41, 0xae, 0x81, 0x1e, 0xac, 0x19, 0xdb, 0x08, 0x79, 0xc8,
+	0x32, 0x94, 0x41, 0xb0, 0x3a, 0x50, 0xe5, 0x91, 0x9a, 0x93, 0x3f, 0xba, 0x2d, 0x07, 0x86, 0x8a,
+	0x7b, 0x31, 0xf4, 0x31, 0xeb, 0xf9, 0x44, 0xde, 0x55, 0x3b, 0x93, 0xbe, 0xd9, 0xd1, 0x74, 0x19,
+	0x9f, 0x8b, 0xdb, 0x52, 0xa9, 0x2a, 0x88, 0x20, 0xfd, 0xf6, 0x3e, 0xec, 0x4c, 0x96, 0x1e, 0xb5,
+	0xa6, 0x64, 0xba, 0x61, 0x7d, 0xa9, 0x57, 0xd6, 0xd7, 0x77, 0xd6, 0xbe, 0xdb, 0x6e, 0xbc, 0x77,
+	0x75, 0x8d, 0xe9, 0xd7, 0xd7, 0xd8, 0x8b, 0xb7, 0xd4, 0xb4, 0x71, 0x9d, 0xfd, 0x5d, 0xc8, 0xd6,
+	0xd9, 0x39, 0xd4, 0xae, 0x0e, 0x92, 0x1f, 0xdc, 0xc9, 0xc9, 0x55, 0x6f, 0x58, 0xd1, 0x3c, 0xc4,
+	0x2b, 0x6d, 0x3b, 0xbf, 0x82, 0xe6, 0x9a, 0x6c, 0xd3, 0xb6, 0x11, 0xbe, 0x91, 0x6d, 0xf3, 0x10,
+	0xee, 0xb3, 0x9f, 0xda, 0x69, 0x77, 0xc7, 0xc4, 0xce, 0x3f, 0x84, 0xfc, 0xdc, 0xfc, 0xe9, 0xf5,
+	0x40, 0x7f, 0x7c, 0xd7, 0x1c, 0xde, 0x1c, 0xeb, 0xaf, 0x85, 0xab, 0xc1, 0xbe, 0xde, 0x1c, 0xec,
+	0x37, 0x32, 0xd4, 0x36, 0xc6, 0xfb, 0xfc, 0x4f, 0x02, 0xd4, 0x34, 0xf6, 0xdb, 0x90, 0x63, 0xda,
+	0xf0, 0x30, 0xde, 0x27, 0xe3, 0x73, 0x43, 0x35, 0x27, 0x7a, 0x57, 0xed, 0x69, 0x3a, 0x9f, 0x44,
+	0x55, 0x28, 0x75, 0xe4, 0x11, 0xfb, 0xb6, 0xa9, 0x40, 0xb1, 0xab, 0x9e, 0x89, 0x05, 0xc6, 0x62,
+	0x9b, 0x4f, 0x2c, 0xb2, 0xcf, 0x1d, 0x26, 0x34, 0xcf, 0x4e, 0xc5, 0x12, 0x23, 0xf8, 0x42, 0x3c,
+	0x3b, 0x8d, 0x97, 0x1c, 0x56, 0x95, 0xe1, 0x99, 0x8a, 0xcf, 0xc5, 0x32, 0x13, 0xf5, 0x64, 0x65,
+	0x3c, 0xc4, 0xe7, 0x62, 0x65, 0x6d, 0xff, 0x55, 0xd1, 0x3b, 0xd0, 0x54, 0xf0, 0xcb, 0x17, 0x66,
+	0xc6, 0xaa, 0x31, 0x16, 0xd7, 0x1a, 0xef, 0xcd, 0xb3, 0x53, 0x11, 0x18, 0x8b, 0xeb, 0xce, 0x58,
+	0xf5, 0xe7, 0x0b, 0xa8, 0xb0, 0x8f, 0x20, 0x9f, 0x78, 0x71, 0xdb, 0xc9, 0x3a, 0x1b, 0x12, 0xeb,
+	0x63, 0x14, 0x41, 0x2b, 0x15, 0x8c, 0xc6, 0x72, 0x67, 0xc0, 0xc2, 0x10, 0xa1, 0x91, 0xf2, 0x3a,
+	0xea, 0x58, 0x8e, 0x3f, 0x8e, 0x53, 0x0e, 0x0b, 0xb0, 0x98, 0xbf, 0xa6, 0xc8, 0xbc, 0x83, 0x4b,
+	0xcf, 0x67, 0x20, 0xb2, 0xa1, 0xb0, 0x36, 0xb6, 0x9b, 0x50, 0xd3, 0x87, 0x7a, 0x9c, 0xb4, 0xf8,
+	0xd7, 0xc3, 0x6a, 0xf2, 0x0a, 0x4c, 0xcb, 0xfa, 0x00, 0x8c, 0x4d, 0x25, 0xd3, 0x8c, 0x33, 0x8a,
+	0xb1, 0x6d, 0x3e, 0x31, 0x38, 0xa3, 0xd4, 0xf9, 0xde, 0xeb, 0x8f, 0x1d, 0x9a, 0x3d, 0xfb, 0x21,
+	0x0d, 0x9c, 0xa3, 0xdc, 0x7f, 0xac, 0x5c, 0x7f, 0x16, 0x58, 0x47, 0xfc, 0xdb, 0xe6, 0xc8, 0xa1,
+	0x39, 0xc9, 0x67, 0x65, 0xce, 0xfc, 0xee, 0x7f, 0x02, 0x00, 0x00, 0xff, 0xff, 0x20, 0x21, 0xc3,
+	0xc1, 0xe0, 0x12, 0x00, 0x00,
 }
diff --git a/src/chromite/api/artifacts.proto b/src/chromite/api/artifacts.proto
index 90b7d81..350dbb8 100644
--- a/src/chromite/api/artifacts.proto
+++ b/src/chromite/api/artifacts.proto
@@ -13,8 +13,58 @@
   string path = 1;
 }
 
+message PrepareForBuildRequest {
+  // The chroot where the sysroot lives.
+  chromiumos.Chroot chroot = 1;
+
+  // The sysroot where the files live.
+  Sysroot sysroot = 2;
+
+  // Information about the artifacts.
+  chromiumos.ArtifactsByService artifact_info = 3;
+
+  // Whether we will proceed even if the build is POINTLESS.
+  bool forced_build_relevance = 4;
+}
+
+message PrepareForBuildResponse {
+  // Whether this artifact requires a build.
+  enum BuildRelevance {
+    UNSPECIFIED = 0;
+    // Build is necessary to generate artifacts.
+    NEEDED = 1;
+    // Defer to other artifacts.  Used primarily for aggregation of artifact
+    // results.
+    UNKNOWN = 2;
+    // Artifacts are already generated.  The build is pointless.
+    POINTLESS = 3;
+  }
+  BuildRelevance build_relevance = 1;
+}
+
+message BundleArtifactsRequest {
+  // The chroot where the sysroot lives.
+  chromiumos.Chroot chroot = 1;
+
+  // The sysroot where the files live.
+  Sysroot sysroot = 2;
+
+  // Artifact information.
+  chromiumos.ArtifactsByService artifact_info = 3;
+
+  // Absolute path to the directory in which artifacts should be dropped.
+  string output_dir = 4;
+}
+
+message BundleArtifactsResponse {
+  // The artifacts that were bundled.
+  chromiumos.UploadedArtifactsByService artifacts = 1;
+}
+
 // Request describing where build artifact bundles for a given build target
 // should be dumped.
+// TODO(crbug/1034529): BundleRequest and BundleResponse are being deprecated
+// (along with most of this file).  See BundleArtifactsRequest/Response
 message BundleRequest {
   // The build target to bundle artifacts for.
   // Deprecated. Use sysroot instead.
@@ -89,49 +139,72 @@
     service_chroot_assert: OUTSIDE,
   };
 
+  // Prepare to build artifacts.
+  rpc PrepareForBuild(PrepareForBuildRequest) returns (PrepareForBuildResponse);
+
+  // Bundle artifacts for build.
+  rpc BundleArtifacts(BundleArtifactsRequest) returns (BundleArtifactsResponse);
+
+  // Fetch the pinned guest image locations.
+  rpc FetchPinnedGuestImageUris(PinnedGuestImageUriRequest)
+    returns (PinnedGuestImageUriResponse);
+
+  //
+  // EVERYTHING THAT FOLLOWS THIS LINE IS DEPRECATED.
+  //
+
+  // TODO(crbug/1034529): DEPRECATED use BundleArtifacts
   // Create a tar archive with all files needed for Autotest HW testing.
   rpc BundleAutotestFiles(BundleRequest) returns (BundleResponse);
 
+  // TODO(crbug/1034529): DEPRECATED use BundleArtifacts
   // Create the ChromeOS Config JSON payload.
   rpc BundleChromeOSConfig(BundleRequest) returns (BundleResponse);
 
+  // TODO(crbug/1034529): DEPRECATED use BundleArtifacts
   // Create a tar archive with ebuild logs.
   rpc BundleEbuildLogs(BundleRequest) returns (BundleResponse);
 
+  // TODO(crbug/1034529): DEPRECATED use BundleArtifacts
   // Create a tar archive with unsigned firmware images.
   rpc BundleFirmware(BundleRequest) returns (BundleResponse);
 
+  // TODO(crbug/1034529): DEPRECATED use BundleArtifacts
   // Create a tar.xz archive for each image that has been created.
   rpc BundleImageArchives(BundleRequest) returns (BundleResponse);
 
+  // TODO(crbug/1034529): DEPRECATED use BundleArtifacts
   // Generate zip containing all built images for the target.
   rpc BundleImageZip(BundleRequest) returns (BundleResponse);
 
+  // TODO(crbug/1034529): DEPRECATED use BundleArtifacts
   // DEPRECATED for recipes: crbug/1019868: This are being replaced by
   // ToolchainService.Bundle{ArtifactType}()
   // Create Chrome Benchmark AFDO builder artifacts.
   rpc BundleAFDOGenerationArtifacts(BundleChromeAFDORequest)
     returns (BundleResponse);
 
+  // TODO(crbug/1034529): DEPRECATED use BundleArtifacts
   // Create a tar archive with all guest images test bundles.
   rpc BundlePinnedGuestImages(BundleRequest) returns (BundleResponse);
 
+  // TODO(crbug/1034529): DEPRECATED use BundleArtifacts
   // Create the simple chrome artifacts.
   rpc BundleSimpleChromeArtifacts(BundleRequest) returns (BundleResponse);
 
+  // TODO(crbug/1034529): DEPRECATED use BundleArtifacts
   // Create a tar archive with all files needed for Tast HW testing.
   rpc BundleTastFiles(BundleRequest) returns (BundleResponse);
 
+  // TODO(crbug/1034529): DEPRECATED use BundleArtifacts
   // Generate minimal update payloads to be used in HW testing.
   rpc BundleTestUpdatePayloads(BundleRequest) returns (BundleResponse);
 
+  // TODO(crbug/1034529): DEPRECATED use BundleArtifacts
   // Create a tar archive with VM memory and disk images.
   rpc BundleVmFiles(BundleVmFilesRequest) returns (BundleResponse);
 
+  // TODO(crbug/1034529): DEPRECATED use BundleArtifacts
   // Generate a CPE report to a file.
   rpc ExportCpeReport(BundleRequest) returns (BundleResponse);
-
-  // Fetch the pinned guest image locations.
-  rpc FetchPinnedGuestImageUris(PinnedGuestImageUriRequest)
-    returns (PinnedGuestImageUriResponse);
 }
diff --git a/src/chromiumos/builder_config.proto b/src/chromiumos/builder_config.proto
index 03a66d8..fe555b7 100644
--- a/src/chromiumos/builder_config.proto
+++ b/src/chromiumos/builder_config.proto
@@ -172,7 +172,9 @@
     // Used to indicate artifact types that should be uploaded by the builder.
     // Must be kept in sync with the dictionary in:
     // https://chromium.googlesource.com/chromiumos/infra/recipes/+/refs/heads/master/recipe_modules/cros_artifacts/api.py
-    // TODO(crbug/1027720): Migrate this to common.proto
+    // TODO(crbug/1034529): Being replaced by common.ArtifactsByService, to
+    // eliminate the need to update cros_artifacts every time an artifact type
+    // is added.
     enum ArtifactTypes {
       ARTIFACT_TYPES_UNSPECIFIED = 0;
       // Indicates wanting a zip file of everything in the image directory.
@@ -236,8 +238,10 @@
     string prebuilts_gs_bucket = 3;
 
     // Google storage bucket to upload artifacts to.
+    // TODO(crbug/1034529): DEPRECATED: see artifacts_info.
     string artifacts_gs_bucket = 4;
 
+    // TODO(crbug/1034529): DEPRECATED: see artifacts_info.
     message PublishInfo {
       reserved 1;
 
@@ -259,6 +263,7 @@
     // There may be more than one set of publishing instructions.
     repeated PublishInfo publish_artifacts = 5;
 
+    // TODO(crbug/1034529): DEPRECATED: see artifacts_info.
     message InputArtifactInfo {
       // Artifact type to seek in these buckets.  Use the first instance of the
       // artifact found in the list of locations.
@@ -271,7 +276,11 @@
     repeated InputArtifactInfo input_artifacts = 6;
 
     // Profile information needed by artifact prepare/bundle endpoints.
+    // TODO(crbug/1034529): DEPRECATED: see artifacts_info.
     ArtifactProfileInfo artifact_profile_info = 7;
+
+    // Artifacts separated by service.
+    ArtifactsByService artifacts_info = 8;
   }
   Artifacts artifacts = 4;
 
diff --git a/src/chromiumos/common.proto b/src/chromiumos/common.proto
index f0a4926..e32b12b 100644
--- a/src/chromiumos/common.proto
+++ b/src/chromiumos/common.proto
@@ -196,23 +196,6 @@
   bytes serialized_proto = 1;
 }
 
-// TODO(crbug/1019868): Consider migrating
-// chromite.api.toolchain.PrepareForToolchainBuildRequest as well.
-message PrepareForBuildResponse {
-  // Does this artifact require a build?
-  enum BuildRelevance {
-    UNSPECIFIED = 0;
-    // Build is necessary to generate artifacts.
-    NEEDED = 1;
-    // Defer to other artifacts.  Used primarily for aggregation of artifact
-    // results.
-    UNKNOWN = 2;
-    // Artifacts are already generated.  The build is pointless.
-    POINTLESS = 3;
-  }
-  BuildRelevance build_relevance = 1;
-}
-
 // TODO(crbug.com/1020615): Drop this from chromite/api/toolchain.proto (and
 // here) once usage has migrated to BuilderConfig.Artifacts.ArtifactType.
 // Meanwhile, keep this in sync with chromite/api/toolchain.proto.  The various
@@ -272,3 +255,170 @@
     AfdoRelease afdo_release = 3;
   }
 }
+
+message ArtifactsByService {
+  message Legacy {
+    // TODO(crbug/1034529): Drop this message.
+    // Legacy artifacts, handled in cros_artifacts.  DO NOT ADD TO THIS.
+    enum ArtifactType {
+      UNSPECIFIED = 0;
+      // Indicates wanting a zip file of everything in the image directory.
+      IMAGE_ZIP = 1;
+      // Indicates wanting update payloads.
+      TEST_UPDATE_PAYLOAD = 2;
+      // Indicates wanting the autotest tarballs.
+      AUTOTEST_FILES = 3;
+      // Indicates wanting a tarball containing private TAST test bundles.
+      TAST_FILES = 4;
+      // Indicates wanting a tarball containing guest images and test bundles.
+      PINNED_GUEST_IMAGES = 5;
+      // Indicates wanting an archive of firmware images built from source.
+      FIRMWARE = 6;
+      // Indicates wanting a tarball of the Ebuilds logs.
+      EBUILD_LOGS = 7;
+      // Indicates wanting an archive of the ChromeOS Config.
+      CHROMEOS_CONFIG = 8;
+      // Indicates wanting the CPE report.
+      CPE_REPORT = 9;
+      // Indicates wanting a tar.xz archive for each image that has been created.
+      IMAGE_ARCHIVES = 10;
+
+      // TODO(crbug/1034529): BuilderConfig.Artifacts.ArtifactTypes is a common
+      // namespace for all services.  We must reserve numbers until that is
+      // gone.
+      reserved 11 to 23;
+    }
+    // Information about one or more artifacts.
+    message ArtifactInfo {
+      // The ArtifactType.  One or more types to which the rest of the fields
+      // apply.
+      repeated ArtifactType artifact_type = 1;
+
+      // GS location in which to upload artifacts ("gs://" is prepended).
+      // Several fields can be logically specified:
+      //   %(kind)s: BuilderConfig.Id.Type with underscores turned into hyphens.
+      //   %(version)s: Chromeos version (e.g., R81-12813.0.0)
+      //   %(build_id)s: Buildbucket job ID.
+      //   %(target)s: build target name.
+      //   %(builder_name)s: The builder name (e.g. octopus-cq), lowercase with
+      //       underscores turned into hyphens.
+      //   %(gs_path)s: "%(builder_name)s/%(version)s-%(build_id)s".
+      //   %(artifact_name)s: The name of the artifact being published.
+      repeated string gs_locations = 2;
+
+      // Profile information needed by the artifact handler.
+      ArtifactProfileInfo profile_info = 3;
+    }
+    // Input artifact information
+    repeated ArtifactInfo input_artifacts = 1;
+
+    // Output artifact information
+    repeated ArtifactInfo output_artifacts = 2;
+  }
+  Legacy legacy = 1;
+
+  message Toolchain {
+    // Artifacts handled by ToolchainService.
+    enum ArtifactType {
+      UNSPECIFIED = 0;
+
+      // TODO(crbug/1034529): BuilderConfig.Artifacts.ArtifactTypes is a common
+      // namespace for all services.  We must reserve numbers until that is
+      // gone.
+      reserved 1 to 10;
+
+      // Indicates an unvetted orderfile for Chrome.
+      UNVERIFIED_CHROME_LLVM_ORDERFILE = 11;
+      // Indicates a vetted orderfile for Chrome.
+      VERIFIED_CHROME_LLVM_ORDERFILE = 12;
+      // Indicates a clang-tidy artifact.
+      CHROME_CLANG_WARNINGS_FILE = 13;
+      // Indicates a PGO artifact for the compiler.
+      UNVERIFIED_LLVM_PGO_FILE = 14;
+
+      // Indicates an unvetted AFDO Chrome profile.  (Generated by HW Tests in
+      // the benchmark-afdo-generate builder.)
+      UNVERIFIED_CHROME_BENCHMARK_AFDO_FILE = 15;
+      // Indicates a vetted AFDO Chrome profile.
+      VERIFIED_CHROME_BENCHMARK_AFDO_FILE = 16;
+
+      // Indicates a vetted AFDO Kernel profile.
+      VERIFIED_KERNEL_CWP_AFDO_FILE = 17;
+      // Indicates an unvetted AFDO Kernel CWP profile.
+      UNVERIFIED_KERNEL_CWP_AFDO_FILE = 18;
+
+      // Indicates an unvetted AFDO Chrome CWP profile.
+      UNVERIFIED_CHROME_CWP_AFDO_FILE = 19;
+      // Indicates a vetted AFDO Chrome CWP profile.
+      VERIFIED_CHROME_CWP_AFDO_FILE = 20;
+      // Indicates a vetted AFDO profile for release.
+      VERIFIED_RELEASE_AFDO_FILE = 21;
+
+      // Indicates an unvetted AFDO perf data file (from HW Test).
+      UNVERIFIED_CHROME_BENCHMARK_PERF_FILE = 22;
+      // Indicates an unstripped Chrome binary.
+      CHROME_DEBUG_BINARY = 23;
+    }
+    // Information about one or more artifacts.  This should match the rest of
+    // the ArtifactInfo definitions in ArtifactsByService, other than having
+    // it's own (service-specific) definition for ArtifactType.
+    message ArtifactInfo {
+      // The ArtifactType.  One or more types to which the rest of the fields
+      // apply.
+      repeated ArtifactType artifact_type = 1;
+
+      // GS location in which to upload artifacts ("gs://" is prepended).
+      // Several fields can be logically specified:
+      //   %(kind)s: BuilderConfig.Id.Type with underscores turned into hyphens.
+      //   %(version)s: Chromeos version (e.g., R81-12813.0.0)
+      //   %(build_id)s: Buildbucket job ID.
+      //   %(target)s: build target name.
+      //   %(builder_name)s: The builder name (e.g. octopus-cq), lowercase with
+      //       underscores turned into hyphens.
+      //   %(gs_path)s: "%(builder_name)s/%(version)s-%(build_id)s".
+      //   %(artifact_name)s: The name of the artifact being published.
+      //
+      // At least one location must be specified.  (This will typically be
+      // 'chromeos-image-archive/%(gs_path)s' to match the behavior of
+      // 'artifacts_gs_location'.
+      repeated string gs_locations = 2;
+
+      // Profile information needed by the artifact handler, if any.
+      ArtifactProfileInfo profile_info = 3;
+    }
+    // Input artifact information
+    repeated ArtifactInfo input_artifacts = 1;
+
+    // Output artifact information
+    repeated ArtifactInfo output_artifacts = 2;
+  }
+  Toolchain toolchain = 2;
+}
+
+message UploadedArtifactsByService {
+  // TODO(crbug/1034529): Drop this UploadedArtifactsByService.Legacy.
+  // Legacy artifacts, handled by ArtifactsService.
+  message Legacy {
+    message ArtifactPaths {
+      // The ArtifactType.
+      ArtifactsByService.Legacy.ArtifactType artifact_type = 1;
+
+      // Absolute path to the artifact file.
+      repeated string paths = 2;
+    }
+    repeated ArtifactPaths artifacts = 1;
+  }
+  Legacy legacy = 1;
+
+  message Toolchain {
+    message ArtifactPaths {
+      // The ArtifactType.
+      ArtifactsByService.Toolchain.ArtifactType artifact_type = 1;
+
+      // Absolute path to the artifact file.
+      repeated string paths = 2;
+    }
+    repeated ArtifactPaths artifacts = 1;
+  }
+  Toolchain toolchain = 2;
+}