go.chromium.org/luci@v0.0.0-20240309015107-7cdc2e660f33/analysis/proto/config/project_config.pb.go (about)

     1  // Copyright 2022 The LUCI Authors.
     2  //
     3  // Licensed under the Apache License, Version 2.0 (the "License");
     4  // you may not use this file except in compliance with the License.
     5  // You may obtain a copy of the License at
     6  //
     7  //      http://www.apache.org/licenses/LICENSE-2.0
     8  //
     9  // Unless required by applicable law or agreed to in writing, software
    10  // distributed under the License is distributed on an "AS IS" BASIS,
    11  // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    12  // See the License for the specific language governing permissions and
    13  // limitations under the License.
    14  
    15  // Code generated by protoc-gen-go. DO NOT EDIT.
    16  // versions:
    17  // 	protoc-gen-go v1.31.0
    18  // 	protoc        v3.21.7
    19  // source: go.chromium.org/luci/analysis/proto/config/project_config.proto
    20  
    21  package configpb
    22  
    23  import (
    24  	protoreflect "google.golang.org/protobuf/reflect/protoreflect"
    25  	protoimpl "google.golang.org/protobuf/runtime/protoimpl"
    26  	timestamppb "google.golang.org/protobuf/types/known/timestamppb"
    27  	reflect "reflect"
    28  	sync "sync"
    29  )
    30  
    31  const (
    32  	// Verify that this generated code is sufficiently up-to-date.
    33  	_ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion)
    34  	// Verify that runtime/protoimpl is sufficiently up-to-date.
    35  	_ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20)
    36  )
    37  
    38  // An enum that represents the bug filing system that the project uses.
    39  type BugSystem int32
    40  
    41  const (
    42  	// An unspecified bug system, Do not use, this will
    43  	// break LUCI Analysis bug filing functionality.
    44  	BugSystem_BUG_SYSTEM_UNSPECIFIED BugSystem = 0
    45  	// Use Monorail to file bugs.
    46  	BugSystem_MONORAIL BugSystem = 1
    47  	// Use Buganizer to file bugs.
    48  	BugSystem_BUGANIZER BugSystem = 2
    49  )
    50  
    51  // Enum value maps for BugSystem.
    52  var (
    53  	BugSystem_name = map[int32]string{
    54  		0: "BUG_SYSTEM_UNSPECIFIED",
    55  		1: "MONORAIL",
    56  		2: "BUGANIZER",
    57  	}
    58  	BugSystem_value = map[string]int32{
    59  		"BUG_SYSTEM_UNSPECIFIED": 0,
    60  		"MONORAIL":               1,
    61  		"BUGANIZER":              2,
    62  	}
    63  )
    64  
    65  func (x BugSystem) Enum() *BugSystem {
    66  	p := new(BugSystem)
    67  	*p = x
    68  	return p
    69  }
    70  
    71  func (x BugSystem) String() string {
    72  	return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))
    73  }
    74  
    75  func (BugSystem) Descriptor() protoreflect.EnumDescriptor {
    76  	return file_go_chromium_org_luci_analysis_proto_config_project_config_proto_enumTypes[0].Descriptor()
    77  }
    78  
    79  func (BugSystem) Type() protoreflect.EnumType {
    80  	return &file_go_chromium_org_luci_analysis_proto_config_project_config_proto_enumTypes[0]
    81  }
    82  
    83  func (x BugSystem) Number() protoreflect.EnumNumber {
    84  	return protoreflect.EnumNumber(x)
    85  }
    86  
    87  // Deprecated: Use BugSystem.Descriptor instead.
    88  func (BugSystem) EnumDescriptor() ([]byte, []int) {
    89  	return file_go_chromium_org_luci_analysis_proto_config_project_config_proto_rawDescGZIP(), []int{0}
    90  }
    91  
    92  // This enum represents the Buganizer priorities.
    93  // It is equivalent to the one in Buganizer API.
    94  type BuganizerPriority int32
    95  
    96  const (
    97  	// Priority unspecified, Do not use this value.
    98  	BuganizerPriority_BUGANIZER_PRIORITY_UNSPECIFIED BuganizerPriority = 0
    99  	// P0, Highest priority.
   100  	BuganizerPriority_P0 BuganizerPriority = 1
   101  	BuganizerPriority_P1 BuganizerPriority = 2
   102  	BuganizerPriority_P2 BuganizerPriority = 3
   103  	BuganizerPriority_P3 BuganizerPriority = 4
   104  	BuganizerPriority_P4 BuganizerPriority = 5
   105  )
   106  
   107  // Enum value maps for BuganizerPriority.
   108  var (
   109  	BuganizerPriority_name = map[int32]string{
   110  		0: "BUGANIZER_PRIORITY_UNSPECIFIED",
   111  		1: "P0",
   112  		2: "P1",
   113  		3: "P2",
   114  		4: "P3",
   115  		5: "P4",
   116  	}
   117  	BuganizerPriority_value = map[string]int32{
   118  		"BUGANIZER_PRIORITY_UNSPECIFIED": 0,
   119  		"P0":                             1,
   120  		"P1":                             2,
   121  		"P2":                             3,
   122  		"P3":                             4,
   123  		"P4":                             5,
   124  	}
   125  )
   126  
   127  func (x BuganizerPriority) Enum() *BuganizerPriority {
   128  	p := new(BuganizerPriority)
   129  	*p = x
   130  	return p
   131  }
   132  
   133  func (x BuganizerPriority) String() string {
   134  	return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))
   135  }
   136  
   137  func (BuganizerPriority) Descriptor() protoreflect.EnumDescriptor {
   138  	return file_go_chromium_org_luci_analysis_proto_config_project_config_proto_enumTypes[1].Descriptor()
   139  }
   140  
   141  func (BuganizerPriority) Type() protoreflect.EnumType {
   142  	return &file_go_chromium_org_luci_analysis_proto_config_project_config_proto_enumTypes[1]
   143  }
   144  
   145  func (x BuganizerPriority) Number() protoreflect.EnumNumber {
   146  	return protoreflect.EnumNumber(x)
   147  }
   148  
   149  // Deprecated: Use BuganizerPriority.Descriptor instead.
   150  func (BuganizerPriority) EnumDescriptor() ([]byte, []int) {
   151  	return file_go_chromium_org_luci_analysis_proto_config_project_config_proto_rawDescGZIP(), []int{1}
   152  }
   153  
   154  // ProjectConfig is the project-specific configuration data for LUCI Analysis.
   155  type ProjectConfig struct {
   156  	state         protoimpl.MessageState
   157  	sizeCache     protoimpl.SizeCache
   158  	unknownFields protoimpl.UnknownFields
   159  
   160  	// The project metadata (eg. display name).
   161  	ProjectMetadata *ProjectMetadata `protobuf:"bytes,6,opt,name=project_metadata,json=projectMetadata,proto3" json:"project_metadata,omitempty"`
   162  	// The last time this project configuration was updated.
   163  	// LUCI Analysis sets and stores this value internally. Do not set
   164  	// in your project's configuration file, it will be ignored.
   165  	LastUpdated *timestamppb.Timestamp `protobuf:"bytes,4,opt,name=last_updated,json=lastUpdated,proto3" json:"last_updated,omitempty"`
   166  	// Configuration for how to cluster test results.
   167  	Clustering *Clustering `protobuf:"bytes,5,opt,name=clustering,proto3" json:"clustering,omitempty"`
   168  	// Configuration for automatic bug management.
   169  	BugManagement *BugManagement `protobuf:"bytes,9,opt,name=bug_management,json=bugManagement,proto3" json:"bug_management,omitempty"`
   170  	// Configuration related to metrics in LUCI Analysis.
   171  	Metrics *Metrics `protobuf:"bytes,11,opt,name=metrics,proto3" json:"metrics,omitempty"`
   172  	// Configuration for when tests are considered stable enough
   173  	// to gate code changes. Only relevant for projects which integrate
   174  	// with the TestVariants.QueryStability RPC to exonerate
   175  	// unstable tests in presubmit.
   176  	TestStabilityCriteria *TestStabilityCriteria `protobuf:"bytes,12,opt,name=test_stability_criteria,json=testStabilityCriteria,proto3" json:"test_stability_criteria,omitempty"`
   177  	// Per realm configurations.
   178  	Realms []*RealmConfig `protobuf:"bytes,3,rep,name=realms,proto3" json:"realms,omitempty"`
   179  	// Deprecated. No longer has any effect. Retained for textproto
   180  	// compatibility only. Use bug_management.default_bug_system instead.
   181  	BugSystem BugSystem `protobuf:"varint,7,opt,name=bug_system,json=bugSystem,proto3,enum=luci.analysis.config.BugSystem" json:"bug_system,omitempty"`
   182  	// Deprecated. No longer has any effect. Retained for textproto
   183  	// compatibility only. Use bug_management.monorail instead.
   184  	Monorail *MonorailProject `protobuf:"bytes,1,opt,name=monorail,proto3" json:"monorail,omitempty"`
   185  	// Deprecated. No longer has any effect. Retained for textproto
   186  	// compatibility only. Use bug_management.buganizer instead.
   187  	Buganizer *BuganizerProject `protobuf:"bytes,8,opt,name=buganizer,proto3" json:"buganizer,omitempty"`
   188  	// Deprecated. No longer has any effect. Retained for textproto
   189  	// compatibility only. Use bug_management.policies instead.
   190  	BugFilingThreshold *ImpactThreshold `protobuf:"bytes,2,opt,name=bug_filing_threshold,json=bugFilingThreshold,proto3" json:"bug_filing_threshold,omitempty"`
   191  	// Deprecated. No longer has any effect. Retained for textproto
   192  	// compatibility only. Use bug_management.policies instead.
   193  	BugFilingThresholds []*ImpactMetricThreshold `protobuf:"bytes,10,rep,name=bug_filing_thresholds,json=bugFilingThresholds,proto3" json:"bug_filing_thresholds,omitempty"`
   194  }
   195  
   196  func (x *ProjectConfig) Reset() {
   197  	*x = ProjectConfig{}
   198  	if protoimpl.UnsafeEnabled {
   199  		mi := &file_go_chromium_org_luci_analysis_proto_config_project_config_proto_msgTypes[0]
   200  		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
   201  		ms.StoreMessageInfo(mi)
   202  	}
   203  }
   204  
   205  func (x *ProjectConfig) String() string {
   206  	return protoimpl.X.MessageStringOf(x)
   207  }
   208  
   209  func (*ProjectConfig) ProtoMessage() {}
   210  
   211  func (x *ProjectConfig) ProtoReflect() protoreflect.Message {
   212  	mi := &file_go_chromium_org_luci_analysis_proto_config_project_config_proto_msgTypes[0]
   213  	if protoimpl.UnsafeEnabled && x != nil {
   214  		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
   215  		if ms.LoadMessageInfo() == nil {
   216  			ms.StoreMessageInfo(mi)
   217  		}
   218  		return ms
   219  	}
   220  	return mi.MessageOf(x)
   221  }
   222  
   223  // Deprecated: Use ProjectConfig.ProtoReflect.Descriptor instead.
   224  func (*ProjectConfig) Descriptor() ([]byte, []int) {
   225  	return file_go_chromium_org_luci_analysis_proto_config_project_config_proto_rawDescGZIP(), []int{0}
   226  }
   227  
   228  func (x *ProjectConfig) GetProjectMetadata() *ProjectMetadata {
   229  	if x != nil {
   230  		return x.ProjectMetadata
   231  	}
   232  	return nil
   233  }
   234  
   235  func (x *ProjectConfig) GetLastUpdated() *timestamppb.Timestamp {
   236  	if x != nil {
   237  		return x.LastUpdated
   238  	}
   239  	return nil
   240  }
   241  
   242  func (x *ProjectConfig) GetClustering() *Clustering {
   243  	if x != nil {
   244  		return x.Clustering
   245  	}
   246  	return nil
   247  }
   248  
   249  func (x *ProjectConfig) GetBugManagement() *BugManagement {
   250  	if x != nil {
   251  		return x.BugManagement
   252  	}
   253  	return nil
   254  }
   255  
   256  func (x *ProjectConfig) GetMetrics() *Metrics {
   257  	if x != nil {
   258  		return x.Metrics
   259  	}
   260  	return nil
   261  }
   262  
   263  func (x *ProjectConfig) GetTestStabilityCriteria() *TestStabilityCriteria {
   264  	if x != nil {
   265  		return x.TestStabilityCriteria
   266  	}
   267  	return nil
   268  }
   269  
   270  func (x *ProjectConfig) GetRealms() []*RealmConfig {
   271  	if x != nil {
   272  		return x.Realms
   273  	}
   274  	return nil
   275  }
   276  
   277  func (x *ProjectConfig) GetBugSystem() BugSystem {
   278  	if x != nil {
   279  		return x.BugSystem
   280  	}
   281  	return BugSystem_BUG_SYSTEM_UNSPECIFIED
   282  }
   283  
   284  func (x *ProjectConfig) GetMonorail() *MonorailProject {
   285  	if x != nil {
   286  		return x.Monorail
   287  	}
   288  	return nil
   289  }
   290  
   291  func (x *ProjectConfig) GetBuganizer() *BuganizerProject {
   292  	if x != nil {
   293  		return x.Buganizer
   294  	}
   295  	return nil
   296  }
   297  
   298  func (x *ProjectConfig) GetBugFilingThreshold() *ImpactThreshold {
   299  	if x != nil {
   300  		return x.BugFilingThreshold
   301  	}
   302  	return nil
   303  }
   304  
   305  func (x *ProjectConfig) GetBugFilingThresholds() []*ImpactMetricThreshold {
   306  	if x != nil {
   307  		return x.BugFilingThresholds
   308  	}
   309  	return nil
   310  }
   311  
   312  // ProjectMetadata provides data about the project that are mostly used in ui.
   313  type ProjectMetadata struct {
   314  	state         protoimpl.MessageState
   315  	sizeCache     protoimpl.SizeCache
   316  	unknownFields protoimpl.UnknownFields
   317  
   318  	// Indicates the preferred display name for the project in the UI.
   319  	// Deprecated: not used anymore.
   320  	DisplayName string `protobuf:"bytes,1,opt,name=display_name,json=displayName,proto3" json:"display_name,omitempty"`
   321  }
   322  
   323  func (x *ProjectMetadata) Reset() {
   324  	*x = ProjectMetadata{}
   325  	if protoimpl.UnsafeEnabled {
   326  		mi := &file_go_chromium_org_luci_analysis_proto_config_project_config_proto_msgTypes[1]
   327  		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
   328  		ms.StoreMessageInfo(mi)
   329  	}
   330  }
   331  
   332  func (x *ProjectMetadata) String() string {
   333  	return protoimpl.X.MessageStringOf(x)
   334  }
   335  
   336  func (*ProjectMetadata) ProtoMessage() {}
   337  
   338  func (x *ProjectMetadata) ProtoReflect() protoreflect.Message {
   339  	mi := &file_go_chromium_org_luci_analysis_proto_config_project_config_proto_msgTypes[1]
   340  	if protoimpl.UnsafeEnabled && x != nil {
   341  		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
   342  		if ms.LoadMessageInfo() == nil {
   343  			ms.StoreMessageInfo(mi)
   344  		}
   345  		return ms
   346  	}
   347  	return mi.MessageOf(x)
   348  }
   349  
   350  // Deprecated: Use ProjectMetadata.ProtoReflect.Descriptor instead.
   351  func (*ProjectMetadata) Descriptor() ([]byte, []int) {
   352  	return file_go_chromium_org_luci_analysis_proto_config_project_config_proto_rawDescGZIP(), []int{1}
   353  }
   354  
   355  func (x *ProjectMetadata) GetDisplayName() string {
   356  	if x != nil {
   357  		return x.DisplayName
   358  	}
   359  	return ""
   360  }
   361  
   362  // Settings related to metrics used to measure cluster impact.
   363  type Metrics struct {
   364  	state         protoimpl.MessageState
   365  	sizeCache     protoimpl.SizeCache
   366  	unknownFields protoimpl.UnknownFields
   367  
   368  	// Overrides to the default metrics configuration for a project.
   369  	Overrides []*Metrics_MetricOverride `protobuf:"bytes,1,rep,name=overrides,proto3" json:"overrides,omitempty"`
   370  }
   371  
   372  func (x *Metrics) Reset() {
   373  	*x = Metrics{}
   374  	if protoimpl.UnsafeEnabled {
   375  		mi := &file_go_chromium_org_luci_analysis_proto_config_project_config_proto_msgTypes[2]
   376  		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
   377  		ms.StoreMessageInfo(mi)
   378  	}
   379  }
   380  
   381  func (x *Metrics) String() string {
   382  	return protoimpl.X.MessageStringOf(x)
   383  }
   384  
   385  func (*Metrics) ProtoMessage() {}
   386  
   387  func (x *Metrics) ProtoReflect() protoreflect.Message {
   388  	mi := &file_go_chromium_org_luci_analysis_proto_config_project_config_proto_msgTypes[2]
   389  	if protoimpl.UnsafeEnabled && x != nil {
   390  		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
   391  		if ms.LoadMessageInfo() == nil {
   392  			ms.StoreMessageInfo(mi)
   393  		}
   394  		return ms
   395  	}
   396  	return mi.MessageOf(x)
   397  }
   398  
   399  // Deprecated: Use Metrics.ProtoReflect.Descriptor instead.
   400  func (*Metrics) Descriptor() ([]byte, []int) {
   401  	return file_go_chromium_org_luci_analysis_proto_config_project_config_proto_rawDescGZIP(), []int{2}
   402  }
   403  
   404  func (x *Metrics) GetOverrides() []*Metrics_MetricOverride {
   405  	if x != nil {
   406  		return x.Overrides
   407  	}
   408  	return nil
   409  }
   410  
   411  // Settings related to bug management.
   412  type BugManagement struct {
   413  	state         protoimpl.MessageState
   414  	sizeCache     protoimpl.SizeCache
   415  	unknownFields protoimpl.UnknownFields
   416  
   417  	// Disables creation of comments on bugs when LUCI Analysis successfully
   418  	// handles duplicate bugs by merging/updating failure association rules.
   419  	//
   420  	// This setting does not prevent the creation of comments in response
   421  	// to errors handling duplicate bugs.
   422  	DisableDuplicateBugComments bool `protobuf:"varint,1,opt,name=disable_duplicate_bug_comments,json=disableDuplicateBugComments,proto3" json:"disable_duplicate_bug_comments,omitempty"`
   423  	// The set of policies which control the (re-)opening, closure and
   424  	// prioritization of bugs under the control of LUCI Analysis.
   425  	Policies []*BugManagementPolicy `protobuf:"bytes,2,rep,name=policies,proto3" json:"policies,omitempty"`
   426  	// The default bug system to route new bugs to, when the bug system and
   427  	// component could not be automatically detected from a test metadata.
   428  	DefaultBugSystem BugSystem `protobuf:"varint,3,opt,name=default_bug_system,json=defaultBugSystem,proto3,enum=luci.analysis.config.BugSystem" json:"default_bug_system,omitempty"`
   429  	// Buganizer-specific bug filing configuration.
   430  	Buganizer *BuganizerProject `protobuf:"bytes,4,opt,name=buganizer,proto3" json:"buganizer,omitempty"`
   431  	// Monorail-specific bug filing configuration.
   432  	Monorail *MonorailProject `protobuf:"bytes,5,opt,name=monorail,proto3" json:"monorail,omitempty"`
   433  }
   434  
   435  func (x *BugManagement) Reset() {
   436  	*x = BugManagement{}
   437  	if protoimpl.UnsafeEnabled {
   438  		mi := &file_go_chromium_org_luci_analysis_proto_config_project_config_proto_msgTypes[3]
   439  		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
   440  		ms.StoreMessageInfo(mi)
   441  	}
   442  }
   443  
   444  func (x *BugManagement) String() string {
   445  	return protoimpl.X.MessageStringOf(x)
   446  }
   447  
   448  func (*BugManagement) ProtoMessage() {}
   449  
   450  func (x *BugManagement) ProtoReflect() protoreflect.Message {
   451  	mi := &file_go_chromium_org_luci_analysis_proto_config_project_config_proto_msgTypes[3]
   452  	if protoimpl.UnsafeEnabled && x != nil {
   453  		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
   454  		if ms.LoadMessageInfo() == nil {
   455  			ms.StoreMessageInfo(mi)
   456  		}
   457  		return ms
   458  	}
   459  	return mi.MessageOf(x)
   460  }
   461  
   462  // Deprecated: Use BugManagement.ProtoReflect.Descriptor instead.
   463  func (*BugManagement) Descriptor() ([]byte, []int) {
   464  	return file_go_chromium_org_luci_analysis_proto_config_project_config_proto_rawDescGZIP(), []int{3}
   465  }
   466  
   467  func (x *BugManagement) GetDisableDuplicateBugComments() bool {
   468  	if x != nil {
   469  		return x.DisableDuplicateBugComments
   470  	}
   471  	return false
   472  }
   473  
   474  func (x *BugManagement) GetPolicies() []*BugManagementPolicy {
   475  	if x != nil {
   476  		return x.Policies
   477  	}
   478  	return nil
   479  }
   480  
   481  func (x *BugManagement) GetDefaultBugSystem() BugSystem {
   482  	if x != nil {
   483  		return x.DefaultBugSystem
   484  	}
   485  	return BugSystem_BUG_SYSTEM_UNSPECIFIED
   486  }
   487  
   488  func (x *BugManagement) GetBuganizer() *BuganizerProject {
   489  	if x != nil {
   490  		return x.Buganizer
   491  	}
   492  	return nil
   493  }
   494  
   495  func (x *BugManagement) GetMonorail() *MonorailProject {
   496  	if x != nil {
   497  		return x.Monorail
   498  	}
   499  	return nil
   500  }
   501  
   502  // A bug management policy in LUCI Analysis.
   503  //
   504  // Bug management policies control when and how bugs are automatically
   505  // opened, prioritised, and verified as fixed. Each policy has a user-visible
   506  // identity in the UI and can post custom instructions on the bug.
   507  //
   508  // LUCI Analysis avoids filing multiple bugs for the same failures by
   509  // allowing multiple policies to activate on the same failure association
   510  // rule. The bug associated with a rule will only be verified if all policies
   511  // have de-activated.
   512  type BugManagementPolicy struct {
   513  	state         protoimpl.MessageState
   514  	sizeCache     protoimpl.SizeCache
   515  	unknownFields protoimpl.UnknownFields
   516  
   517  	// A unique identifier for the bug management policy.
   518  	//
   519  	// Policies are stateful in that LUCI Analysis tracks which bugs have met the
   520  	// activation condition on the policy (and not since met the deactivation
   521  	// condition).
   522  	//
   523  	// Changing this value changes the identity of the policy and hence results in
   524  	// the activation state for the policy being lost for all bugs.
   525  	//
   526  	// Valid syntax: ^[a-z]([a-z0-9-]{0,62}[a-z0-9])?$. (Syntax designed to comply
   527  	// with google.aip.dev/122 for resource IDs.)
   528  	Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"`
   529  	// The owners of the policy, who can be contacted if there are issues/concerns
   530  	// about the policy. Each item in the list should be an @google.com email
   531  	// address. At least one owner (preferably a group) is required.
   532  	Owners []string `protobuf:"bytes,2,rep,name=owners,proto3" json:"owners,omitempty"`
   533  	// A short one-line description for the problem the policy identifies, which
   534  	// will appear on the UI and in bugs comments. This is a sentence fragment
   535  	// and not a sentence, so please do NOT include a full stop and or starting
   536  	// capital letter.
   537  	//
   538  	// For example, "test variant(s) are being exonerated in presubmit".
   539  	HumanReadableName string `protobuf:"bytes,3,opt,name=human_readable_name,json=humanReadableName,proto3" json:"human_readable_name,omitempty"`
   540  	// The priority of the problem this policy defines.
   541  	//
   542  	// If:
   543  	//   - the priority of the bug associated with a rule
   544  	//     differs from this priority, and
   545  	//   - the policy is activate on the rule (see `metrics`), and
   546  	//   - LUCI Analysis is controlling the priority of the bug
   547  	//     (the "Update bug priority" switch on the rule is enabled),
   548  	//
   549  	// the priority of the bug will be updated to match this priority.
   550  	//
   551  	// Where are there multiple policies active on the same rule,
   552  	// the highest priority (of all active policies) will be used.
   553  	//
   554  	// For monorail projects, the buganizer priority will be converted to the
   555  	// equivalent monorail priority (P0 is converted to Pri-0, P1 to Pri-1,
   556  	// P2 to Pri-2, etc.) until monorail is turned down.
   557  	Priority BuganizerPriority `protobuf:"varint,4,opt,name=priority,proto3,enum=luci.analysis.config.BuganizerPriority" json:"priority,omitempty"`
   558  	// The set of metrics which will control activation of the bug-filing policy.
   559  	// If a policy activates on a suggested cluster, a new bug will be filed.
   560  	// If a policy activates on an existing rule cluster, the bug will be
   561  	// updated.
   562  	//
   563  	// The policy will activate if the activation threshold is met on *ANY*
   564  	// metric, and will de-activate only if the deactivation threshold is met
   565  	// on *ALL* metrics.
   566  	//
   567  	// Activation on suggested clusters will be based on the metric values after
   568  	// excluding failures for which a bug has already been filed. This is to
   569  	// avoid duplicate bug filing.
   570  	Metrics []*BugManagementPolicy_Metric `protobuf:"bytes,5,rep,name=metrics,proto3" json:"metrics,omitempty"`
   571  	// Expanatory text of the problem the policy identified, shown on the
   572  	// user interface when the user requests more information. Required.
   573  	Explanation *BugManagementPolicy_Explanation `protobuf:"bytes,6,opt,name=explanation,proto3" json:"explanation,omitempty"`
   574  	// Settings which affect the contents of a bug for a policy has activated.
   575  	BugTemplate *BugManagementPolicy_BugTemplate `protobuf:"bytes,7,opt,name=bug_template,json=bugTemplate,proto3" json:"bug_template,omitempty"`
   576  }
   577  
   578  func (x *BugManagementPolicy) Reset() {
   579  	*x = BugManagementPolicy{}
   580  	if protoimpl.UnsafeEnabled {
   581  		mi := &file_go_chromium_org_luci_analysis_proto_config_project_config_proto_msgTypes[4]
   582  		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
   583  		ms.StoreMessageInfo(mi)
   584  	}
   585  }
   586  
   587  func (x *BugManagementPolicy) String() string {
   588  	return protoimpl.X.MessageStringOf(x)
   589  }
   590  
   591  func (*BugManagementPolicy) ProtoMessage() {}
   592  
   593  func (x *BugManagementPolicy) ProtoReflect() protoreflect.Message {
   594  	mi := &file_go_chromium_org_luci_analysis_proto_config_project_config_proto_msgTypes[4]
   595  	if protoimpl.UnsafeEnabled && x != nil {
   596  		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
   597  		if ms.LoadMessageInfo() == nil {
   598  			ms.StoreMessageInfo(mi)
   599  		}
   600  		return ms
   601  	}
   602  	return mi.MessageOf(x)
   603  }
   604  
   605  // Deprecated: Use BugManagementPolicy.ProtoReflect.Descriptor instead.
   606  func (*BugManagementPolicy) Descriptor() ([]byte, []int) {
   607  	return file_go_chromium_org_luci_analysis_proto_config_project_config_proto_rawDescGZIP(), []int{4}
   608  }
   609  
   610  func (x *BugManagementPolicy) GetId() string {
   611  	if x != nil {
   612  		return x.Id
   613  	}
   614  	return ""
   615  }
   616  
   617  func (x *BugManagementPolicy) GetOwners() []string {
   618  	if x != nil {
   619  		return x.Owners
   620  	}
   621  	return nil
   622  }
   623  
   624  func (x *BugManagementPolicy) GetHumanReadableName() string {
   625  	if x != nil {
   626  		return x.HumanReadableName
   627  	}
   628  	return ""
   629  }
   630  
   631  func (x *BugManagementPolicy) GetPriority() BuganizerPriority {
   632  	if x != nil {
   633  		return x.Priority
   634  	}
   635  	return BuganizerPriority_BUGANIZER_PRIORITY_UNSPECIFIED
   636  }
   637  
   638  func (x *BugManagementPolicy) GetMetrics() []*BugManagementPolicy_Metric {
   639  	if x != nil {
   640  		return x.Metrics
   641  	}
   642  	return nil
   643  }
   644  
   645  func (x *BugManagementPolicy) GetExplanation() *BugManagementPolicy_Explanation {
   646  	if x != nil {
   647  		return x.Explanation
   648  	}
   649  	return nil
   650  }
   651  
   652  func (x *BugManagementPolicy) GetBugTemplate() *BugManagementPolicy_BugTemplate {
   653  	if x != nil {
   654  		return x.BugTemplate
   655  	}
   656  	return nil
   657  }
   658  
   659  // Deprecated. No longer has any effect. Retained for textproto
   660  // compatibility only.
   661  type ImpactThreshold struct {
   662  	state         protoimpl.MessageState
   663  	sizeCache     protoimpl.SizeCache
   664  	unknownFields protoimpl.UnknownFields
   665  
   666  	TestResultsFailed          *MetricThreshold `protobuf:"bytes,4,opt,name=test_results_failed,json=testResultsFailed,proto3" json:"test_results_failed,omitempty"`
   667  	TestRunsFailed             *MetricThreshold `protobuf:"bytes,5,opt,name=test_runs_failed,json=testRunsFailed,proto3" json:"test_runs_failed,omitempty"`
   668  	PresubmitRunsFailed        *MetricThreshold `protobuf:"bytes,6,opt,name=presubmit_runs_failed,json=presubmitRunsFailed,proto3" json:"presubmit_runs_failed,omitempty"`
   669  	CriticalFailuresExonerated *MetricThreshold `protobuf:"bytes,7,opt,name=critical_failures_exonerated,json=criticalFailuresExonerated,proto3" json:"critical_failures_exonerated,omitempty"`
   670  	UnexpectedFailures_1D      *int64           `protobuf:"varint,1,opt,name=unexpected_failures_1d,json=unexpectedFailures1d,proto3,oneof" json:"unexpected_failures_1d,omitempty"`
   671  	UnexpectedFailures_3D      *int64           `protobuf:"varint,2,opt,name=unexpected_failures_3d,json=unexpectedFailures3d,proto3,oneof" json:"unexpected_failures_3d,omitempty"`
   672  	UnexpectedFailures_7D      *int64           `protobuf:"varint,3,opt,name=unexpected_failures_7d,json=unexpectedFailures7d,proto3,oneof" json:"unexpected_failures_7d,omitempty"`
   673  }
   674  
   675  func (x *ImpactThreshold) Reset() {
   676  	*x = ImpactThreshold{}
   677  	if protoimpl.UnsafeEnabled {
   678  		mi := &file_go_chromium_org_luci_analysis_proto_config_project_config_proto_msgTypes[5]
   679  		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
   680  		ms.StoreMessageInfo(mi)
   681  	}
   682  }
   683  
   684  func (x *ImpactThreshold) String() string {
   685  	return protoimpl.X.MessageStringOf(x)
   686  }
   687  
   688  func (*ImpactThreshold) ProtoMessage() {}
   689  
   690  func (x *ImpactThreshold) ProtoReflect() protoreflect.Message {
   691  	mi := &file_go_chromium_org_luci_analysis_proto_config_project_config_proto_msgTypes[5]
   692  	if protoimpl.UnsafeEnabled && x != nil {
   693  		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
   694  		if ms.LoadMessageInfo() == nil {
   695  			ms.StoreMessageInfo(mi)
   696  		}
   697  		return ms
   698  	}
   699  	return mi.MessageOf(x)
   700  }
   701  
   702  // Deprecated: Use ImpactThreshold.ProtoReflect.Descriptor instead.
   703  func (*ImpactThreshold) Descriptor() ([]byte, []int) {
   704  	return file_go_chromium_org_luci_analysis_proto_config_project_config_proto_rawDescGZIP(), []int{5}
   705  }
   706  
   707  func (x *ImpactThreshold) GetTestResultsFailed() *MetricThreshold {
   708  	if x != nil {
   709  		return x.TestResultsFailed
   710  	}
   711  	return nil
   712  }
   713  
   714  func (x *ImpactThreshold) GetTestRunsFailed() *MetricThreshold {
   715  	if x != nil {
   716  		return x.TestRunsFailed
   717  	}
   718  	return nil
   719  }
   720  
   721  func (x *ImpactThreshold) GetPresubmitRunsFailed() *MetricThreshold {
   722  	if x != nil {
   723  		return x.PresubmitRunsFailed
   724  	}
   725  	return nil
   726  }
   727  
   728  func (x *ImpactThreshold) GetCriticalFailuresExonerated() *MetricThreshold {
   729  	if x != nil {
   730  		return x.CriticalFailuresExonerated
   731  	}
   732  	return nil
   733  }
   734  
   735  func (x *ImpactThreshold) GetUnexpectedFailures_1D() int64 {
   736  	if x != nil && x.UnexpectedFailures_1D != nil {
   737  		return *x.UnexpectedFailures_1D
   738  	}
   739  	return 0
   740  }
   741  
   742  func (x *ImpactThreshold) GetUnexpectedFailures_3D() int64 {
   743  	if x != nil && x.UnexpectedFailures_3D != nil {
   744  		return *x.UnexpectedFailures_3D
   745  	}
   746  	return 0
   747  }
   748  
   749  func (x *ImpactThreshold) GetUnexpectedFailures_7D() int64 {
   750  	if x != nil && x.UnexpectedFailures_7D != nil {
   751  		return *x.UnexpectedFailures_7D
   752  	}
   753  	return 0
   754  }
   755  
   756  // ImpactMetricThreshold specifies a condition on a cluster's impact metric.
   757  type ImpactMetricThreshold struct {
   758  	state         protoimpl.MessageState
   759  	sizeCache     protoimpl.SizeCache
   760  	unknownFields protoimpl.UnknownFields
   761  
   762  	// The id of the impact metric.
   763  	// e.g.
   764  	// human-cls-failed-presubmit: The number of presubmit runs that failed.
   765  	// critical-failures-exonerated: The number of test failures on critical
   766  	//
   767  	//	builders that were exonerated with an
   768  	//	exoneration reason other than NOT_CRITICAL.
   769  	//
   770  	// test-runs-failed: The number of test runs that failed.
   771  	//
   772  	//	A test run (also known as a 'shard' (chromium) or
   773  	//	'task' (Chrome OS)) is considered failed if all tries of
   774  	//	test(s) in it unexpectedly failed. The failed test run is
   775  	//	attributed to the last failure of each of the test(s)
   776  	//	that failed on all tries.
   777  	//
   778  	// failures: The number of test results that were unexpected failures.
   779  	//
   780  	// Full list of available metrics here:
   781  	// https://source.chromium.org/chromium/infra/infra/+/main:go/src/go.chromium.org/luci/analysis/internal/analysis/metrics/metrics.go
   782  	MetricId string `protobuf:"bytes,1,opt,name=metric_id,json=metricId,proto3" json:"metric_id,omitempty"`
   783  	// The thresholds against a metric.
   784  	Threshold *MetricThreshold `protobuf:"bytes,2,opt,name=threshold,proto3" json:"threshold,omitempty"`
   785  }
   786  
   787  func (x *ImpactMetricThreshold) Reset() {
   788  	*x = ImpactMetricThreshold{}
   789  	if protoimpl.UnsafeEnabled {
   790  		mi := &file_go_chromium_org_luci_analysis_proto_config_project_config_proto_msgTypes[6]
   791  		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
   792  		ms.StoreMessageInfo(mi)
   793  	}
   794  }
   795  
   796  func (x *ImpactMetricThreshold) String() string {
   797  	return protoimpl.X.MessageStringOf(x)
   798  }
   799  
   800  func (*ImpactMetricThreshold) ProtoMessage() {}
   801  
   802  func (x *ImpactMetricThreshold) ProtoReflect() protoreflect.Message {
   803  	mi := &file_go_chromium_org_luci_analysis_proto_config_project_config_proto_msgTypes[6]
   804  	if protoimpl.UnsafeEnabled && x != nil {
   805  		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
   806  		if ms.LoadMessageInfo() == nil {
   807  			ms.StoreMessageInfo(mi)
   808  		}
   809  		return ms
   810  	}
   811  	return mi.MessageOf(x)
   812  }
   813  
   814  // Deprecated: Use ImpactMetricThreshold.ProtoReflect.Descriptor instead.
   815  func (*ImpactMetricThreshold) Descriptor() ([]byte, []int) {
   816  	return file_go_chromium_org_luci_analysis_proto_config_project_config_proto_rawDescGZIP(), []int{6}
   817  }
   818  
   819  func (x *ImpactMetricThreshold) GetMetricId() string {
   820  	if x != nil {
   821  		return x.MetricId
   822  	}
   823  	return ""
   824  }
   825  
   826  func (x *ImpactMetricThreshold) GetThreshold() *MetricThreshold {
   827  	if x != nil {
   828  		return x.Threshold
   829  	}
   830  	return nil
   831  }
   832  
   833  // MetricThreshold specifies thresholds for a particular metric.
   834  // The threshold is considered satisfied if any of the individual metric
   835  // thresholds is met or exceeded (i.e. if multiple thresholds are set, they
   836  // are combined using an OR-semantic). If no threshold is set, the threshold
   837  // as a whole is unsatisfiable.
   838  type MetricThreshold struct {
   839  	state         protoimpl.MessageState
   840  	sizeCache     protoimpl.SizeCache
   841  	unknownFields protoimpl.UnknownFields
   842  
   843  	// The threshold for one day.
   844  	OneDay *int64 `protobuf:"varint,1,opt,name=one_day,json=oneDay,proto3,oneof" json:"one_day,omitempty"`
   845  	// The threshold for three day.
   846  	ThreeDay *int64 `protobuf:"varint,2,opt,name=three_day,json=threeDay,proto3,oneof" json:"three_day,omitempty"`
   847  	// The threshold for seven days.
   848  	SevenDay *int64 `protobuf:"varint,3,opt,name=seven_day,json=sevenDay,proto3,oneof" json:"seven_day,omitempty"`
   849  }
   850  
   851  func (x *MetricThreshold) Reset() {
   852  	*x = MetricThreshold{}
   853  	if protoimpl.UnsafeEnabled {
   854  		mi := &file_go_chromium_org_luci_analysis_proto_config_project_config_proto_msgTypes[7]
   855  		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
   856  		ms.StoreMessageInfo(mi)
   857  	}
   858  }
   859  
   860  func (x *MetricThreshold) String() string {
   861  	return protoimpl.X.MessageStringOf(x)
   862  }
   863  
   864  func (*MetricThreshold) ProtoMessage() {}
   865  
   866  func (x *MetricThreshold) ProtoReflect() protoreflect.Message {
   867  	mi := &file_go_chromium_org_luci_analysis_proto_config_project_config_proto_msgTypes[7]
   868  	if protoimpl.UnsafeEnabled && x != nil {
   869  		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
   870  		if ms.LoadMessageInfo() == nil {
   871  			ms.StoreMessageInfo(mi)
   872  		}
   873  		return ms
   874  	}
   875  	return mi.MessageOf(x)
   876  }
   877  
   878  // Deprecated: Use MetricThreshold.ProtoReflect.Descriptor instead.
   879  func (*MetricThreshold) Descriptor() ([]byte, []int) {
   880  	return file_go_chromium_org_luci_analysis_proto_config_project_config_proto_rawDescGZIP(), []int{7}
   881  }
   882  
   883  func (x *MetricThreshold) GetOneDay() int64 {
   884  	if x != nil && x.OneDay != nil {
   885  		return *x.OneDay
   886  	}
   887  	return 0
   888  }
   889  
   890  func (x *MetricThreshold) GetThreeDay() int64 {
   891  	if x != nil && x.ThreeDay != nil {
   892  		return *x.ThreeDay
   893  	}
   894  	return 0
   895  }
   896  
   897  func (x *MetricThreshold) GetSevenDay() int64 {
   898  	if x != nil && x.SevenDay != nil {
   899  		return *x.SevenDay
   900  	}
   901  	return 0
   902  }
   903  
   904  // MonorailProject describes the configuration to use when filing bugs
   905  // into a given monorail project.
   906  type MonorailProject struct {
   907  	state         protoimpl.MessageState
   908  	sizeCache     protoimpl.SizeCache
   909  	unknownFields protoimpl.UnknownFields
   910  
   911  	// The monorail project being described.
   912  	// E.g. "chromium".
   913  	Project string `protobuf:"bytes,1,opt,name=project,proto3" json:"project,omitempty"`
   914  	// The field values to use when creating new bugs.
   915  	// For example, on chromium issue tracker, there is a manadatory
   916  	// issue type field (field 10), which must be set to "Bug".
   917  	DefaultFieldValues []*MonorailFieldValue `protobuf:"bytes,2,rep,name=default_field_values,json=defaultFieldValues,proto3" json:"default_field_values,omitempty"`
   918  	// The ID of the issue's priority field. You can find this by visiting
   919  	// https://monorail-prod.appspot.com/p/<project>/adminLabels, scrolling
   920  	// down to Custom fields and finding the ID of the field you wish to set.
   921  	//
   922  	// This field must support the values: "Pri-0", "Pri-1", "Pri-2", "Pri-3".
   923  	PriorityFieldId int64 `protobuf:"varint,3,opt,name=priority_field_id,json=priorityFieldId,proto3" json:"priority_field_id,omitempty"`
   924  	// Deprecated. No longer has any effect. Retained for textproto
   925  	// compatibility only. Use bug_management.policies instead.
   926  	Priorities []*MonorailPriority `protobuf:"bytes,4,rep,name=priorities,proto3" json:"priorities,omitempty"`
   927  	// Deprecated. No longer has any effect. Retained for textproto
   928  	// compatibility only.
   929  	PriorityHysteresisPercent int64 `protobuf:"varint,5,opt,name=priority_hysteresis_percent,json=priorityHysteresisPercent,proto3" json:"priority_hysteresis_percent,omitempty"`
   930  	// The prefix that should appear when displaying bugs from the
   931  	// given bug tracking system. E.g. "crbug.com" or "fxbug.dev".
   932  	// If no prefix is specified, only the bug number will appear.
   933  	// Otherwise, the supplifed prefix will appear, followed by a
   934  	// forward slash ("/"), followed by the bug number.
   935  	// Valid prefixes match `^[a-z0-9\-.]{0,64}$`.
   936  	DisplayPrefix string `protobuf:"bytes,6,opt,name=display_prefix,json=displayPrefix,proto3" json:"display_prefix,omitempty"`
   937  	// The preferred hostname to use in links to monorail. For example,
   938  	// "bugs.chromium.org" or "bugs.fuchsia.dev".
   939  	MonorailHostname string `protobuf:"bytes,7,opt,name=monorail_hostname,json=monorailHostname,proto3" json:"monorail_hostname,omitempty"`
   940  	// Whether the Restrict-View-Google tag should be omitted on new
   941  	// auto-filed bugs. This makes those bugs publically visible.
   942  	// If unset, defaults to filing with Restrict-View-Google.
   943  	FileWithoutRestrictViewGoogle bool `protobuf:"varint,8,opt,name=file_without_restrict_view_google,json=fileWithoutRestrictViewGoogle,proto3" json:"file_without_restrict_view_google,omitempty"`
   944  }
   945  
   946  func (x *MonorailProject) Reset() {
   947  	*x = MonorailProject{}
   948  	if protoimpl.UnsafeEnabled {
   949  		mi := &file_go_chromium_org_luci_analysis_proto_config_project_config_proto_msgTypes[8]
   950  		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
   951  		ms.StoreMessageInfo(mi)
   952  	}
   953  }
   954  
   955  func (x *MonorailProject) String() string {
   956  	return protoimpl.X.MessageStringOf(x)
   957  }
   958  
   959  func (*MonorailProject) ProtoMessage() {}
   960  
   961  func (x *MonorailProject) ProtoReflect() protoreflect.Message {
   962  	mi := &file_go_chromium_org_luci_analysis_proto_config_project_config_proto_msgTypes[8]
   963  	if protoimpl.UnsafeEnabled && x != nil {
   964  		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
   965  		if ms.LoadMessageInfo() == nil {
   966  			ms.StoreMessageInfo(mi)
   967  		}
   968  		return ms
   969  	}
   970  	return mi.MessageOf(x)
   971  }
   972  
   973  // Deprecated: Use MonorailProject.ProtoReflect.Descriptor instead.
   974  func (*MonorailProject) Descriptor() ([]byte, []int) {
   975  	return file_go_chromium_org_luci_analysis_proto_config_project_config_proto_rawDescGZIP(), []int{8}
   976  }
   977  
   978  func (x *MonorailProject) GetProject() string {
   979  	if x != nil {
   980  		return x.Project
   981  	}
   982  	return ""
   983  }
   984  
   985  func (x *MonorailProject) GetDefaultFieldValues() []*MonorailFieldValue {
   986  	if x != nil {
   987  		return x.DefaultFieldValues
   988  	}
   989  	return nil
   990  }
   991  
   992  func (x *MonorailProject) GetPriorityFieldId() int64 {
   993  	if x != nil {
   994  		return x.PriorityFieldId
   995  	}
   996  	return 0
   997  }
   998  
   999  func (x *MonorailProject) GetPriorities() []*MonorailPriority {
  1000  	if x != nil {
  1001  		return x.Priorities
  1002  	}
  1003  	return nil
  1004  }
  1005  
  1006  func (x *MonorailProject) GetPriorityHysteresisPercent() int64 {
  1007  	if x != nil {
  1008  		return x.PriorityHysteresisPercent
  1009  	}
  1010  	return 0
  1011  }
  1012  
  1013  func (x *MonorailProject) GetDisplayPrefix() string {
  1014  	if x != nil {
  1015  		return x.DisplayPrefix
  1016  	}
  1017  	return ""
  1018  }
  1019  
  1020  func (x *MonorailProject) GetMonorailHostname() string {
  1021  	if x != nil {
  1022  		return x.MonorailHostname
  1023  	}
  1024  	return ""
  1025  }
  1026  
  1027  func (x *MonorailProject) GetFileWithoutRestrictViewGoogle() bool {
  1028  	if x != nil {
  1029  		return x.FileWithoutRestrictViewGoogle
  1030  	}
  1031  	return false
  1032  }
  1033  
  1034  // MonorailFieldValue describes a monorail field/value pair.
  1035  type MonorailFieldValue struct {
  1036  	state         protoimpl.MessageState
  1037  	sizeCache     protoimpl.SizeCache
  1038  	unknownFields protoimpl.UnknownFields
  1039  
  1040  	// The ID of the field to set. You can find this by visiting
  1041  	// https://monorail-prod.appspot.com/p/<project>/adminLabels, scrolling
  1042  	// down to Custom fields and finding the ID of the field you wish to set.
  1043  	FieldId int64 `protobuf:"varint,1,opt,name=field_id,json=fieldId,proto3" json:"field_id,omitempty"`
  1044  	// The field value. Values are encoded according to the field type:
  1045  	//   - Enumeration types: the string enumeration value (e.g. "Bug").
  1046  	//   - Integer types: the integer, converted to a string (e.g. "1052").
  1047  	//   - String types: the value, included verbatim.
  1048  	//   - User types: the user's resource name (e.g. "users/2627516260").
  1049  	//     User IDs can be identified by looking at the people listing for a
  1050  	//     project:  https://monorail-prod.appspot.com/p/<project>/people/list.
  1051  	//     The User ID is included in the URL as u=<number> when clicking into
  1052  	//     the page for a particular user. For example, "user/3816576959" is
  1053  	//     https://monorail-prod.appspot.com/p/chromium/people/detail?u=3816576959.
  1054  	//   - Date types: the number of seconds since epoch, as a string
  1055  	//     (e.g. "1609459200" for 1 January 2021).
  1056  	//   - URL type: the URL value, as a string (e.g. "https://www.google.com/").
  1057  	//
  1058  	// The source of truth for mapping of field types to values is as
  1059  	// defined in the Monorail v3 API, found here:
  1060  	// https://source.chromium.org/chromium/infra/infra/+/main:appengine/monorail/api/v3/api_proto/issue_objects.proto?q=%22message%20FieldValue%22
  1061  	Value string `protobuf:"bytes,2,opt,name=value,proto3" json:"value,omitempty"`
  1062  }
  1063  
  1064  func (x *MonorailFieldValue) Reset() {
  1065  	*x = MonorailFieldValue{}
  1066  	if protoimpl.UnsafeEnabled {
  1067  		mi := &file_go_chromium_org_luci_analysis_proto_config_project_config_proto_msgTypes[9]
  1068  		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
  1069  		ms.StoreMessageInfo(mi)
  1070  	}
  1071  }
  1072  
  1073  func (x *MonorailFieldValue) String() string {
  1074  	return protoimpl.X.MessageStringOf(x)
  1075  }
  1076  
  1077  func (*MonorailFieldValue) ProtoMessage() {}
  1078  
  1079  func (x *MonorailFieldValue) ProtoReflect() protoreflect.Message {
  1080  	mi := &file_go_chromium_org_luci_analysis_proto_config_project_config_proto_msgTypes[9]
  1081  	if protoimpl.UnsafeEnabled && x != nil {
  1082  		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
  1083  		if ms.LoadMessageInfo() == nil {
  1084  			ms.StoreMessageInfo(mi)
  1085  		}
  1086  		return ms
  1087  	}
  1088  	return mi.MessageOf(x)
  1089  }
  1090  
  1091  // Deprecated: Use MonorailFieldValue.ProtoReflect.Descriptor instead.
  1092  func (*MonorailFieldValue) Descriptor() ([]byte, []int) {
  1093  	return file_go_chromium_org_luci_analysis_proto_config_project_config_proto_rawDescGZIP(), []int{9}
  1094  }
  1095  
  1096  func (x *MonorailFieldValue) GetFieldId() int64 {
  1097  	if x != nil {
  1098  		return x.FieldId
  1099  	}
  1100  	return 0
  1101  }
  1102  
  1103  func (x *MonorailFieldValue) GetValue() string {
  1104  	if x != nil {
  1105  		return x.Value
  1106  	}
  1107  	return ""
  1108  }
  1109  
  1110  // Deprecated. No longer has any effect. Retained for textproto
  1111  // compatibility only.
  1112  type MonorailPriority struct {
  1113  	state         protoimpl.MessageState
  1114  	sizeCache     protoimpl.SizeCache
  1115  	unknownFields protoimpl.UnknownFields
  1116  
  1117  	Priority   string                   `protobuf:"bytes,1,opt,name=priority,proto3" json:"priority,omitempty"`
  1118  	Threshold  *ImpactThreshold         `protobuf:"bytes,2,opt,name=threshold,proto3" json:"threshold,omitempty"`
  1119  	Thresholds []*ImpactMetricThreshold `protobuf:"bytes,3,rep,name=thresholds,proto3" json:"thresholds,omitempty"`
  1120  }
  1121  
  1122  func (x *MonorailPriority) Reset() {
  1123  	*x = MonorailPriority{}
  1124  	if protoimpl.UnsafeEnabled {
  1125  		mi := &file_go_chromium_org_luci_analysis_proto_config_project_config_proto_msgTypes[10]
  1126  		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
  1127  		ms.StoreMessageInfo(mi)
  1128  	}
  1129  }
  1130  
  1131  func (x *MonorailPriority) String() string {
  1132  	return protoimpl.X.MessageStringOf(x)
  1133  }
  1134  
  1135  func (*MonorailPriority) ProtoMessage() {}
  1136  
  1137  func (x *MonorailPriority) ProtoReflect() protoreflect.Message {
  1138  	mi := &file_go_chromium_org_luci_analysis_proto_config_project_config_proto_msgTypes[10]
  1139  	if protoimpl.UnsafeEnabled && x != nil {
  1140  		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
  1141  		if ms.LoadMessageInfo() == nil {
  1142  			ms.StoreMessageInfo(mi)
  1143  		}
  1144  		return ms
  1145  	}
  1146  	return mi.MessageOf(x)
  1147  }
  1148  
  1149  // Deprecated: Use MonorailPriority.ProtoReflect.Descriptor instead.
  1150  func (*MonorailPriority) Descriptor() ([]byte, []int) {
  1151  	return file_go_chromium_org_luci_analysis_proto_config_project_config_proto_rawDescGZIP(), []int{10}
  1152  }
  1153  
  1154  func (x *MonorailPriority) GetPriority() string {
  1155  	if x != nil {
  1156  		return x.Priority
  1157  	}
  1158  	return ""
  1159  }
  1160  
  1161  func (x *MonorailPriority) GetThreshold() *ImpactThreshold {
  1162  	if x != nil {
  1163  		return x.Threshold
  1164  	}
  1165  	return nil
  1166  }
  1167  
  1168  func (x *MonorailPriority) GetThresholds() []*ImpactMetricThreshold {
  1169  	if x != nil {
  1170  		return x.Thresholds
  1171  	}
  1172  	return nil
  1173  }
  1174  
  1175  // Configurations per realm.
  1176  type RealmConfig struct {
  1177  	state         protoimpl.MessageState
  1178  	sizeCache     protoimpl.SizeCache
  1179  	unknownFields protoimpl.UnknownFields
  1180  
  1181  	// Name of the realm.
  1182  	//
  1183  	// Must match `^[a-z0-9_\.\-/]{1,400}$`.
  1184  	// Must not contain the project part. I.e. for "chromium:ci" realm the value
  1185  	// here must be "ci".
  1186  	Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"`
  1187  	// Test variant analysis configurations for the realm.
  1188  	TestVariantAnalysis *TestVariantAnalysisConfig `protobuf:"bytes,2,opt,name=test_variant_analysis,json=testVariantAnalysis,proto3" json:"test_variant_analysis,omitempty"`
  1189  }
  1190  
  1191  func (x *RealmConfig) Reset() {
  1192  	*x = RealmConfig{}
  1193  	if protoimpl.UnsafeEnabled {
  1194  		mi := &file_go_chromium_org_luci_analysis_proto_config_project_config_proto_msgTypes[11]
  1195  		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
  1196  		ms.StoreMessageInfo(mi)
  1197  	}
  1198  }
  1199  
  1200  func (x *RealmConfig) String() string {
  1201  	return protoimpl.X.MessageStringOf(x)
  1202  }
  1203  
  1204  func (*RealmConfig) ProtoMessage() {}
  1205  
  1206  func (x *RealmConfig) ProtoReflect() protoreflect.Message {
  1207  	mi := &file_go_chromium_org_luci_analysis_proto_config_project_config_proto_msgTypes[11]
  1208  	if protoimpl.UnsafeEnabled && x != nil {
  1209  		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
  1210  		if ms.LoadMessageInfo() == nil {
  1211  			ms.StoreMessageInfo(mi)
  1212  		}
  1213  		return ms
  1214  	}
  1215  	return mi.MessageOf(x)
  1216  }
  1217  
  1218  // Deprecated: Use RealmConfig.ProtoReflect.Descriptor instead.
  1219  func (*RealmConfig) Descriptor() ([]byte, []int) {
  1220  	return file_go_chromium_org_luci_analysis_proto_config_project_config_proto_rawDescGZIP(), []int{11}
  1221  }
  1222  
  1223  func (x *RealmConfig) GetName() string {
  1224  	if x != nil {
  1225  		return x.Name
  1226  	}
  1227  	return ""
  1228  }
  1229  
  1230  func (x *RealmConfig) GetTestVariantAnalysis() *TestVariantAnalysisConfig {
  1231  	if x != nil {
  1232  		return x.TestVariantAnalysis
  1233  	}
  1234  	return nil
  1235  }
  1236  
  1237  // Configuration for how test results are clustered.
  1238  type Clustering struct {
  1239  	state         protoimpl.MessageState
  1240  	sizeCache     protoimpl.SizeCache
  1241  	unknownFields protoimpl.UnknownFields
  1242  
  1243  	// Rules used to cluster test results by test name.
  1244  	// The order of rules matters; the first matching rule will be used
  1245  	// to cluster a given test result.
  1246  	//
  1247  	// If no rule matches, the test results will be clustered on the
  1248  	// full test name. This corresponds approximately to the rule:
  1249  	//
  1250  	//	{
  1251  	//	  name: "Full test name"
  1252  	//	  pattern: "^(?P<testname>.*)$"
  1253  	//	  like_template: "${testname}"
  1254  	//	}
  1255  	TestNameRules []*TestNameClusteringRule `protobuf:"bytes,1,rep,name=test_name_rules,json=testNameRules,proto3" json:"test_name_rules,omitempty"`
  1256  	// Regular expressions used to mask out part of a failure reason
  1257  	// prior to clustering.
  1258  	//
  1259  	// The process of generating the clustering key is:
  1260  	//  1. All '%', '_' and '\' characters in the failure reason are
  1261  	//     escaped to generate a SQL LIKE expression that matches the
  1262  	//     failure reason literally.
  1263  	//  2. Regular expressions are run over the escaped failure reason
  1264  	//     one by one to identify parts of the failure reason to mask
  1265  	//     out (replace by a SQL LIKE wildcard match).
  1266  	//  3. The clustering key is used in the failure association rule
  1267  	//     of a newly field bug, or hashed to generate the clustering
  1268  	//     key.
  1269  	//
  1270  	// For regular expression run against the failure reason,
  1271  	// the part of the reason that matches the first (capturing)
  1272  	// subexpression is masked out in the reason cluster.
  1273  	// All non-overlapping matches are replaced.
  1274  	//
  1275  	// For example, given the masking expression:
  1276  	// "^\\[Fixture failure\\] (\\w+):"
  1277  	// The failure reason:
  1278  	// `[Fixture failure] myFixture: some_error`
  1279  	// will be escaped to (in step 1):
  1280  	// `[Fixture failure] myFixture: some\_error`
  1281  	// and will yield the following output after masking (step 2):
  1282  	// `[Fixture failure] %: some\_error`
  1283  	//
  1284  	// Masking expressions are applied in the order that they appear
  1285  	// in the list.
  1286  	ReasonMaskPatterns []string `protobuf:"bytes,2,rep,name=reason_mask_patterns,json=reasonMaskPatterns,proto3" json:"reason_mask_patterns,omitempty"`
  1287  }
  1288  
  1289  func (x *Clustering) Reset() {
  1290  	*x = Clustering{}
  1291  	if protoimpl.UnsafeEnabled {
  1292  		mi := &file_go_chromium_org_luci_analysis_proto_config_project_config_proto_msgTypes[12]
  1293  		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
  1294  		ms.StoreMessageInfo(mi)
  1295  	}
  1296  }
  1297  
  1298  func (x *Clustering) String() string {
  1299  	return protoimpl.X.MessageStringOf(x)
  1300  }
  1301  
  1302  func (*Clustering) ProtoMessage() {}
  1303  
  1304  func (x *Clustering) ProtoReflect() protoreflect.Message {
  1305  	mi := &file_go_chromium_org_luci_analysis_proto_config_project_config_proto_msgTypes[12]
  1306  	if protoimpl.UnsafeEnabled && x != nil {
  1307  		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
  1308  		if ms.LoadMessageInfo() == nil {
  1309  			ms.StoreMessageInfo(mi)
  1310  		}
  1311  		return ms
  1312  	}
  1313  	return mi.MessageOf(x)
  1314  }
  1315  
  1316  // Deprecated: Use Clustering.ProtoReflect.Descriptor instead.
  1317  func (*Clustering) Descriptor() ([]byte, []int) {
  1318  	return file_go_chromium_org_luci_analysis_proto_config_project_config_proto_rawDescGZIP(), []int{12}
  1319  }
  1320  
  1321  func (x *Clustering) GetTestNameRules() []*TestNameClusteringRule {
  1322  	if x != nil {
  1323  		return x.TestNameRules
  1324  	}
  1325  	return nil
  1326  }
  1327  
  1328  func (x *Clustering) GetReasonMaskPatterns() []string {
  1329  	if x != nil {
  1330  		return x.ReasonMaskPatterns
  1331  	}
  1332  	return nil
  1333  }
  1334  
  1335  // A rule used to cluster a test result by test name.
  1336  type TestNameClusteringRule struct {
  1337  	state         protoimpl.MessageState
  1338  	sizeCache     protoimpl.SizeCache
  1339  	unknownFields protoimpl.UnknownFields
  1340  
  1341  	// A human-readable name for the rule. This should be unique for each rule.
  1342  	// This may be used by LUCI Analysis to explain why it chose to cluster the
  1343  	// test name in this way.
  1344  	Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"`
  1345  	// The regular expression describing which test names should be clustered
  1346  	// by this rule.
  1347  	//
  1348  	// Example.
  1349  	//
  1350  	//	Assume our project uploads google test (gtest) results with the test
  1351  	//	name prefix "gtest://".
  1352  	//	If want to cluster value-parameterized google tests
  1353  	//	together based on the test suite and test case name (ignoring
  1354  	//	the value parameter), we may use a pattern like:
  1355  	//	  "^gtest://(\w+/)?(?P<testcase>\w+\.\w+)/\w+$"
  1356  	//
  1357  	//	This will allow us to cluster test names like:
  1358  	//	  "gtest://InstantiationOne/ColorSpaceTest.testNullTransform/0"
  1359  	//	  "gtest://InstantiationOne/ColorSpaceTest.testNullTransform/1"
  1360  	//	  "gtest://InstantiationTwo/ColorSpaceTest.testNullTransform/0"
  1361  	//	together.
  1362  	//
  1363  	//	See https://github.com/google/googletest/blob/main/docs/advanced.md#how-to-write-value-parameterized-tests
  1364  	//	to understand value-parameterised google tests.
  1365  	//
  1366  	// Use ?P<name> to name capture groups, so their values can be used in
  1367  	// like_template below.
  1368  	Pattern string `protobuf:"bytes,2,opt,name=pattern,proto3" json:"pattern,omitempty"`
  1369  	// The template used to generate a LIKE expression on test names
  1370  	// that defines the test name cluster identified by this rule.
  1371  	//
  1372  	// This like expression has two purposes:
  1373  	// (1) If the test name cluster is large enough to justify the
  1374  	//
  1375  	//	creation of a bug cluster, the like expression is used to
  1376  	//	generate a failure association rule of the following form:
  1377  	//	   test LIKE "<evaluated like_template>"
  1378  	//
  1379  	// (2) A hash of the expression is used as the clustering key for the
  1380  	//
  1381  	//	test name-based suggested cluster. This generally has the desired
  1382  	//	clustering behaviour, i.e. the parts of the test name which
  1383  	//	are important enough to included in the LIKE expression for (1)
  1384  	//	are also those on which clustering should occur.
  1385  	//
  1386  	// As is usual for LIKE expressions, the template can contain
  1387  	// the following operators to do wildcard matching:
  1388  	// * '%' for wildcard match of an arbitrary number of characters, and
  1389  	// * '_' for single character wildcard match.
  1390  	//
  1391  	// To match literal '%' or '_', escape the operator with a '\',
  1392  	// i.e. use "\%" or "\_" to match literal '%' and '_' respectively.
  1393  	// To match literal '\', you should use "\\".
  1394  	//
  1395  	// The template can refer to parts of the test name matched by
  1396  	// the rule pattern using ${name}, where name refers to the capture
  1397  	// group (see pattern). To insert the literal '$', the sequence '$$'
  1398  	// should be used.
  1399  	//
  1400  	// Example.
  1401  	//
  1402  	//	Assume our project uploads google test (gtest) results with the test
  1403  	//	name prefix "gtest://". Further assume we used the pattern:
  1404  	//	  "^gtest://(\w+/)?(?P<testcase>\w+\.\w+)/\w+$"
  1405  	//
  1406  	//	We might use the following like_template:
  1407  	//	  "gtest://%${testcase}%"
  1408  	//
  1409  	//	When instantiated for a value-parameterised test, e.g.
  1410  	//	"gtest://InstantiationOne/ColorSpaceTest.testNullTransform/0",
  1411  	//	the result would be a failure association rule like:
  1412  	//	  test LIKE "gtest://%ColorSpaceTest.testNullTransform%"
  1413  	//
  1414  	//	Note the use of ${testcase} to refer to the testname capture group
  1415  	//	specified in the pattern example.
  1416  	//
  1417  	//	See https://github.com/google/googletest/blob/main/docs/advanced.md#how-to-write-value-parameterized-tests
  1418  	//	to understand value-parameterised google tests.
  1419  	//
  1420  	// It is known that not all clusters can be precisely matched by
  1421  	// a LIKE expression. Nonetheless, LUCI Analysis prefers LIKE expressions
  1422  	// as they are easier to comprehend and modify by users, and in
  1423  	// most cases, the added precision is not required.
  1424  	//
  1425  	// As such, your rule should try to ensure the generated LIKE statement
  1426  	// captures your clustering logic as best it can. Your LIKE expression
  1427  	// MUST match all test names matched by your regex pattern, and MAY
  1428  	// capture additional test names (though this is preferably minimised,
  1429  	// to reduce differences between the suggested clusters and eventual
  1430  	// bug clusters).
  1431  	//
  1432  	// LUCI Analysis will automatically escape any '%' '_' and '\' in parts of
  1433  	// the matched test name before substitution to ensure captured parts
  1434  	// of the test name are matched literally and not interpreted.
  1435  	LikeTemplate string `protobuf:"bytes,3,opt,name=like_template,json=likeTemplate,proto3" json:"like_template,omitempty"`
  1436  }
  1437  
  1438  func (x *TestNameClusteringRule) Reset() {
  1439  	*x = TestNameClusteringRule{}
  1440  	if protoimpl.UnsafeEnabled {
  1441  		mi := &file_go_chromium_org_luci_analysis_proto_config_project_config_proto_msgTypes[13]
  1442  		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
  1443  		ms.StoreMessageInfo(mi)
  1444  	}
  1445  }
  1446  
  1447  func (x *TestNameClusteringRule) String() string {
  1448  	return protoimpl.X.MessageStringOf(x)
  1449  }
  1450  
  1451  func (*TestNameClusteringRule) ProtoMessage() {}
  1452  
  1453  func (x *TestNameClusteringRule) ProtoReflect() protoreflect.Message {
  1454  	mi := &file_go_chromium_org_luci_analysis_proto_config_project_config_proto_msgTypes[13]
  1455  	if protoimpl.UnsafeEnabled && x != nil {
  1456  		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
  1457  		if ms.LoadMessageInfo() == nil {
  1458  			ms.StoreMessageInfo(mi)
  1459  		}
  1460  		return ms
  1461  	}
  1462  	return mi.MessageOf(x)
  1463  }
  1464  
  1465  // Deprecated: Use TestNameClusteringRule.ProtoReflect.Descriptor instead.
  1466  func (*TestNameClusteringRule) Descriptor() ([]byte, []int) {
  1467  	return file_go_chromium_org_luci_analysis_proto_config_project_config_proto_rawDescGZIP(), []int{13}
  1468  }
  1469  
  1470  func (x *TestNameClusteringRule) GetName() string {
  1471  	if x != nil {
  1472  		return x.Name
  1473  	}
  1474  	return ""
  1475  }
  1476  
  1477  func (x *TestNameClusteringRule) GetPattern() string {
  1478  	if x != nil {
  1479  		return x.Pattern
  1480  	}
  1481  	return ""
  1482  }
  1483  
  1484  func (x *TestNameClusteringRule) GetLikeTemplate() string {
  1485  	if x != nil {
  1486  		return x.LikeTemplate
  1487  	}
  1488  	return ""
  1489  }
  1490  
  1491  // Defines the required details for a Buganizer component.
  1492  type BuganizerComponent struct {
  1493  	state         protoimpl.MessageState
  1494  	sizeCache     protoimpl.SizeCache
  1495  	unknownFields protoimpl.UnknownFields
  1496  
  1497  	// The id of the component that we will use to file bugs in.
  1498  	Id int64 `protobuf:"varint,1,opt,name=id,proto3" json:"id,omitempty"`
  1499  }
  1500  
  1501  func (x *BuganizerComponent) Reset() {
  1502  	*x = BuganizerComponent{}
  1503  	if protoimpl.UnsafeEnabled {
  1504  		mi := &file_go_chromium_org_luci_analysis_proto_config_project_config_proto_msgTypes[14]
  1505  		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
  1506  		ms.StoreMessageInfo(mi)
  1507  	}
  1508  }
  1509  
  1510  func (x *BuganizerComponent) String() string {
  1511  	return protoimpl.X.MessageStringOf(x)
  1512  }
  1513  
  1514  func (*BuganizerComponent) ProtoMessage() {}
  1515  
  1516  func (x *BuganizerComponent) ProtoReflect() protoreflect.Message {
  1517  	mi := &file_go_chromium_org_luci_analysis_proto_config_project_config_proto_msgTypes[14]
  1518  	if protoimpl.UnsafeEnabled && x != nil {
  1519  		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
  1520  		if ms.LoadMessageInfo() == nil {
  1521  			ms.StoreMessageInfo(mi)
  1522  		}
  1523  		return ms
  1524  	}
  1525  	return mi.MessageOf(x)
  1526  }
  1527  
  1528  // Deprecated: Use BuganizerComponent.ProtoReflect.Descriptor instead.
  1529  func (*BuganizerComponent) Descriptor() ([]byte, []int) {
  1530  	return file_go_chromium_org_luci_analysis_proto_config_project_config_proto_rawDescGZIP(), []int{14}
  1531  }
  1532  
  1533  func (x *BuganizerComponent) GetId() int64 {
  1534  	if x != nil {
  1535  		return x.Id
  1536  	}
  1537  	return 0
  1538  }
  1539  
  1540  // The Buganizer configuration, this should only be
  1541  // used when the bug tracking system ins Buganizer.
  1542  type BuganizerProject struct {
  1543  	state         protoimpl.MessageState
  1544  	sizeCache     protoimpl.SizeCache
  1545  	unknownFields protoimpl.UnknownFields
  1546  
  1547  	// The default Buganizer component.
  1548  	// This component will be used if we failed to find
  1549  	// a component for a cluster.
  1550  	DefaultComponent *BuganizerComponent `protobuf:"bytes,1,opt,name=default_component,json=defaultComponent,proto3" json:"default_component,omitempty"`
  1551  	// Deprecated. No longer has any effect. Retained for textproto
  1552  	// compatibility only.
  1553  	PriorityHysteresisPercent int64 `protobuf:"varint,2,opt,name=priority_hysteresis_percent,json=priorityHysteresisPercent,proto3" json:"priority_hysteresis_percent,omitempty"`
  1554  	// Deprecated. No longer has any effect. Retained for textproto
  1555  	// compatibility only. Use bug_management.policies instead.
  1556  	PriorityMappings []*BuganizerProject_PriorityMapping `protobuf:"bytes,3,rep,name=priority_mappings,json=priorityMappings,proto3" json:"priority_mappings,omitempty"`
  1557  	// Whether the LIMIT_VIEW_TRUSTED access level should be omitted
  1558  	// on new auto-filed bugs and LIMIT_NONE access level should be set.
  1559  	// This makes those bugs visible to all those who can see bugs
  1560  	// in a given component.
  1561  	FileWithoutLimitViewTrusted bool `protobuf:"varint,4,opt,name=file_without_limit_view_trusted,json=fileWithoutLimitViewTrusted,proto3" json:"file_without_limit_view_trusted,omitempty"`
  1562  }
  1563  
  1564  func (x *BuganizerProject) Reset() {
  1565  	*x = BuganizerProject{}
  1566  	if protoimpl.UnsafeEnabled {
  1567  		mi := &file_go_chromium_org_luci_analysis_proto_config_project_config_proto_msgTypes[15]
  1568  		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
  1569  		ms.StoreMessageInfo(mi)
  1570  	}
  1571  }
  1572  
  1573  func (x *BuganizerProject) String() string {
  1574  	return protoimpl.X.MessageStringOf(x)
  1575  }
  1576  
  1577  func (*BuganizerProject) ProtoMessage() {}
  1578  
  1579  func (x *BuganizerProject) ProtoReflect() protoreflect.Message {
  1580  	mi := &file_go_chromium_org_luci_analysis_proto_config_project_config_proto_msgTypes[15]
  1581  	if protoimpl.UnsafeEnabled && x != nil {
  1582  		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
  1583  		if ms.LoadMessageInfo() == nil {
  1584  			ms.StoreMessageInfo(mi)
  1585  		}
  1586  		return ms
  1587  	}
  1588  	return mi.MessageOf(x)
  1589  }
  1590  
  1591  // Deprecated: Use BuganizerProject.ProtoReflect.Descriptor instead.
  1592  func (*BuganizerProject) Descriptor() ([]byte, []int) {
  1593  	return file_go_chromium_org_luci_analysis_proto_config_project_config_proto_rawDescGZIP(), []int{15}
  1594  }
  1595  
  1596  func (x *BuganizerProject) GetDefaultComponent() *BuganizerComponent {
  1597  	if x != nil {
  1598  		return x.DefaultComponent
  1599  	}
  1600  	return nil
  1601  }
  1602  
  1603  func (x *BuganizerProject) GetPriorityHysteresisPercent() int64 {
  1604  	if x != nil {
  1605  		return x.PriorityHysteresisPercent
  1606  	}
  1607  	return 0
  1608  }
  1609  
  1610  func (x *BuganizerProject) GetPriorityMappings() []*BuganizerProject_PriorityMapping {
  1611  	if x != nil {
  1612  		return x.PriorityMappings
  1613  	}
  1614  	return nil
  1615  }
  1616  
  1617  func (x *BuganizerProject) GetFileWithoutLimitViewTrusted() bool {
  1618  	if x != nil {
  1619  		return x.FileWithoutLimitViewTrusted
  1620  	}
  1621  	return false
  1622  }
  1623  
  1624  // Criteria used to determine test stability. This criteria is used
  1625  // to inform test exoneration in presubmit via the
  1626  // TestVariants.QueryStability RPC.
  1627  //
  1628  // Criteria is applied using a data source which contains
  1629  // the last 14 days' of test result data for all test variants,
  1630  // with certain filterings applied.
  1631  //
  1632  // See go/luci-exoneration-v2 as well each criteria below for more details.
  1633  type TestStabilityCriteria struct {
  1634  	state         protoimpl.MessageState
  1635  	sizeCache     protoimpl.SizeCache
  1636  	unknownFields protoimpl.UnknownFields
  1637  
  1638  	// The failure rate criteria to apply. Mandatory.
  1639  	FailureRate *TestStabilityCriteria_FailureRateCriteria `protobuf:"bytes,1,opt,name=failure_rate,json=failureRate,proto3" json:"failure_rate,omitempty"`
  1640  	// The flake rate criteria to apply. Mandatory.
  1641  	FlakeRate *TestStabilityCriteria_FlakeRateCriteria `protobuf:"bytes,2,opt,name=flake_rate,json=flakeRate,proto3" json:"flake_rate,omitempty"`
  1642  }
  1643  
  1644  func (x *TestStabilityCriteria) Reset() {
  1645  	*x = TestStabilityCriteria{}
  1646  	if protoimpl.UnsafeEnabled {
  1647  		mi := &file_go_chromium_org_luci_analysis_proto_config_project_config_proto_msgTypes[16]
  1648  		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
  1649  		ms.StoreMessageInfo(mi)
  1650  	}
  1651  }
  1652  
  1653  func (x *TestStabilityCriteria) String() string {
  1654  	return protoimpl.X.MessageStringOf(x)
  1655  }
  1656  
  1657  func (*TestStabilityCriteria) ProtoMessage() {}
  1658  
  1659  func (x *TestStabilityCriteria) ProtoReflect() protoreflect.Message {
  1660  	mi := &file_go_chromium_org_luci_analysis_proto_config_project_config_proto_msgTypes[16]
  1661  	if protoimpl.UnsafeEnabled && x != nil {
  1662  		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
  1663  		if ms.LoadMessageInfo() == nil {
  1664  			ms.StoreMessageInfo(mi)
  1665  		}
  1666  		return ms
  1667  	}
  1668  	return mi.MessageOf(x)
  1669  }
  1670  
  1671  // Deprecated: Use TestStabilityCriteria.ProtoReflect.Descriptor instead.
  1672  func (*TestStabilityCriteria) Descriptor() ([]byte, []int) {
  1673  	return file_go_chromium_org_luci_analysis_proto_config_project_config_proto_rawDescGZIP(), []int{16}
  1674  }
  1675  
  1676  func (x *TestStabilityCriteria) GetFailureRate() *TestStabilityCriteria_FailureRateCriteria {
  1677  	if x != nil {
  1678  		return x.FailureRate
  1679  	}
  1680  	return nil
  1681  }
  1682  
  1683  func (x *TestStabilityCriteria) GetFlakeRate() *TestStabilityCriteria_FlakeRateCriteria {
  1684  	if x != nil {
  1685  		return x.FlakeRate
  1686  	}
  1687  	return nil
  1688  }
  1689  
  1690  type Metrics_MetricOverride struct {
  1691  	state         protoimpl.MessageState
  1692  	sizeCache     protoimpl.SizeCache
  1693  	unknownFields protoimpl.UnknownFields
  1694  
  1695  	// The id of the impact metric.
  1696  	//
  1697  	// Full list of available metrics here:
  1698  	// https://source.chromium.org/chromium/infra/infra/+/main:go/src/go.chromium.org/luci/analysis/internal/analysis/metrics/metrics.go
  1699  	MetricId string `protobuf:"bytes,1,opt,name=metric_id,json=metricId,proto3" json:"metric_id,omitempty"`
  1700  	// Whether the metric should be selected by default.
  1701  	IsDefault *bool `protobuf:"varint,2,opt,name=is_default,json=isDefault,proto3,oneof" json:"is_default,omitempty"`
  1702  	// Controls the default sort order between metrics. By default,
  1703  	// a list will sort by the metric with the highest sort priority,
  1704  	// followed by the metric with second highest sort priority,
  1705  	// and so on.
  1706  	SortPriority *int32 `protobuf:"varint,3,opt,name=sort_priority,json=sortPriority,proto3,oneof" json:"sort_priority,omitempty"`
  1707  }
  1708  
  1709  func (x *Metrics_MetricOverride) Reset() {
  1710  	*x = Metrics_MetricOverride{}
  1711  	if protoimpl.UnsafeEnabled {
  1712  		mi := &file_go_chromium_org_luci_analysis_proto_config_project_config_proto_msgTypes[17]
  1713  		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
  1714  		ms.StoreMessageInfo(mi)
  1715  	}
  1716  }
  1717  
  1718  func (x *Metrics_MetricOverride) String() string {
  1719  	return protoimpl.X.MessageStringOf(x)
  1720  }
  1721  
  1722  func (*Metrics_MetricOverride) ProtoMessage() {}
  1723  
  1724  func (x *Metrics_MetricOverride) ProtoReflect() protoreflect.Message {
  1725  	mi := &file_go_chromium_org_luci_analysis_proto_config_project_config_proto_msgTypes[17]
  1726  	if protoimpl.UnsafeEnabled && x != nil {
  1727  		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
  1728  		if ms.LoadMessageInfo() == nil {
  1729  			ms.StoreMessageInfo(mi)
  1730  		}
  1731  		return ms
  1732  	}
  1733  	return mi.MessageOf(x)
  1734  }
  1735  
  1736  // Deprecated: Use Metrics_MetricOverride.ProtoReflect.Descriptor instead.
  1737  func (*Metrics_MetricOverride) Descriptor() ([]byte, []int) {
  1738  	return file_go_chromium_org_luci_analysis_proto_config_project_config_proto_rawDescGZIP(), []int{2, 0}
  1739  }
  1740  
  1741  func (x *Metrics_MetricOverride) GetMetricId() string {
  1742  	if x != nil {
  1743  		return x.MetricId
  1744  	}
  1745  	return ""
  1746  }
  1747  
  1748  func (x *Metrics_MetricOverride) GetIsDefault() bool {
  1749  	if x != nil && x.IsDefault != nil {
  1750  		return *x.IsDefault
  1751  	}
  1752  	return false
  1753  }
  1754  
  1755  func (x *Metrics_MetricOverride) GetSortPriority() int32 {
  1756  	if x != nil && x.SortPriority != nil {
  1757  		return *x.SortPriority
  1758  	}
  1759  	return 0
  1760  }
  1761  
  1762  // A metric used to control activation of a bug-filing policy.
  1763  type BugManagementPolicy_Metric struct {
  1764  	state         protoimpl.MessageState
  1765  	sizeCache     protoimpl.SizeCache
  1766  	unknownFields protoimpl.UnknownFields
  1767  
  1768  	// The identifier of the metric.
  1769  	//
  1770  	// Full list of available metrics here:
  1771  	// https://source.chromium.org/chromium/infra/infra/+/main:go/src/go.chromium.org/luci/analysis/internal/analysis/metrics/metrics.go
  1772  	MetricId string `protobuf:"bytes,1,opt,name=metric_id,json=metricId,proto3" json:"metric_id,omitempty"`
  1773  	// The level at which the policy activates. Activation occurs if the
  1774  	// cluster impact meets or exceeds this threshold.
  1775  	// MUST imply deactivation_threshold.
  1776  	ActivationThreshold *MetricThreshold `protobuf:"bytes,2,opt,name=activation_threshold,json=activationThreshold,proto3" json:"activation_threshold,omitempty"`
  1777  	// The minimum metric level at which the policy remains active.
  1778  	// Deactivation occcurs if the cluster impact is below the de-activation
  1779  	// threshold. Deactivation_threshold should be set significantly lower
  1780  	// than activation_threshold to prevent policies repeatedly activating
  1781  	// and deactivating due to noise in the data, e.g. less tests executed
  1782  	// on weekends.
  1783  	DeactivationThreshold *MetricThreshold `protobuf:"bytes,3,opt,name=deactivation_threshold,json=deactivationThreshold,proto3" json:"deactivation_threshold,omitempty"`
  1784  }
  1785  
  1786  func (x *BugManagementPolicy_Metric) Reset() {
  1787  	*x = BugManagementPolicy_Metric{}
  1788  	if protoimpl.UnsafeEnabled {
  1789  		mi := &file_go_chromium_org_luci_analysis_proto_config_project_config_proto_msgTypes[18]
  1790  		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
  1791  		ms.StoreMessageInfo(mi)
  1792  	}
  1793  }
  1794  
  1795  func (x *BugManagementPolicy_Metric) String() string {
  1796  	return protoimpl.X.MessageStringOf(x)
  1797  }
  1798  
  1799  func (*BugManagementPolicy_Metric) ProtoMessage() {}
  1800  
  1801  func (x *BugManagementPolicy_Metric) ProtoReflect() protoreflect.Message {
  1802  	mi := &file_go_chromium_org_luci_analysis_proto_config_project_config_proto_msgTypes[18]
  1803  	if protoimpl.UnsafeEnabled && x != nil {
  1804  		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
  1805  		if ms.LoadMessageInfo() == nil {
  1806  			ms.StoreMessageInfo(mi)
  1807  		}
  1808  		return ms
  1809  	}
  1810  	return mi.MessageOf(x)
  1811  }
  1812  
  1813  // Deprecated: Use BugManagementPolicy_Metric.ProtoReflect.Descriptor instead.
  1814  func (*BugManagementPolicy_Metric) Descriptor() ([]byte, []int) {
  1815  	return file_go_chromium_org_luci_analysis_proto_config_project_config_proto_rawDescGZIP(), []int{4, 0}
  1816  }
  1817  
  1818  func (x *BugManagementPolicy_Metric) GetMetricId() string {
  1819  	if x != nil {
  1820  		return x.MetricId
  1821  	}
  1822  	return ""
  1823  }
  1824  
  1825  func (x *BugManagementPolicy_Metric) GetActivationThreshold() *MetricThreshold {
  1826  	if x != nil {
  1827  		return x.ActivationThreshold
  1828  	}
  1829  	return nil
  1830  }
  1831  
  1832  func (x *BugManagementPolicy_Metric) GetDeactivationThreshold() *MetricThreshold {
  1833  	if x != nil {
  1834  		return x.DeactivationThreshold
  1835  	}
  1836  	return nil
  1837  }
  1838  
  1839  // Content displayed on the user interface, to explain the problem and
  1840  // guide a developer to fix it.
  1841  type BugManagementPolicy_Explanation struct {
  1842  	state         protoimpl.MessageState
  1843  	sizeCache     protoimpl.SizeCache
  1844  	unknownFields protoimpl.UnknownFields
  1845  
  1846  	// A longer human-readable description of the problem this policy
  1847  	// has identified, in HTML.
  1848  	//
  1849  	// For example, "Test variant(s) in this cluster are being exonerated
  1850  	// (ignored) in presubmit because they are too flaky or failing. This
  1851  	// means they are no longer effective at preventing the breakage of
  1852  	// the functionality the test(s) cover.".
  1853  	//
  1854  	// MUST be sanitised by UI before rendering. Sanitisation is only
  1855  	// required to support simple uses of the following tags: ul, li, a.
  1856  	ProblemHtml string `protobuf:"bytes,1,opt,name=problem_html,json=problemHtml,proto3" json:"problem_html,omitempty"`
  1857  	// A description of how a human should go about trying to fix the
  1858  	// problem, in HTML.
  1859  	//
  1860  	// For example, "<ul>
  1861  	// <li>View recent failures</li>
  1862  	// <li><a href="http://goto.google.com/demote-from-cq">Demote</a> the test from CQ</li>
  1863  	// </ul>"
  1864  	//
  1865  	// MUST be sanitised by UI before rendering. Sanitisation is only
  1866  	// required to support simple uses of the following tags: ul, li, a.
  1867  	ActionHtml string `protobuf:"bytes,2,opt,name=action_html,json=actionHtml,proto3" json:"action_html,omitempty"`
  1868  }
  1869  
  1870  func (x *BugManagementPolicy_Explanation) Reset() {
  1871  	*x = BugManagementPolicy_Explanation{}
  1872  	if protoimpl.UnsafeEnabled {
  1873  		mi := &file_go_chromium_org_luci_analysis_proto_config_project_config_proto_msgTypes[19]
  1874  		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
  1875  		ms.StoreMessageInfo(mi)
  1876  	}
  1877  }
  1878  
  1879  func (x *BugManagementPolicy_Explanation) String() string {
  1880  	return protoimpl.X.MessageStringOf(x)
  1881  }
  1882  
  1883  func (*BugManagementPolicy_Explanation) ProtoMessage() {}
  1884  
  1885  func (x *BugManagementPolicy_Explanation) ProtoReflect() protoreflect.Message {
  1886  	mi := &file_go_chromium_org_luci_analysis_proto_config_project_config_proto_msgTypes[19]
  1887  	if protoimpl.UnsafeEnabled && x != nil {
  1888  		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
  1889  		if ms.LoadMessageInfo() == nil {
  1890  			ms.StoreMessageInfo(mi)
  1891  		}
  1892  		return ms
  1893  	}
  1894  	return mi.MessageOf(x)
  1895  }
  1896  
  1897  // Deprecated: Use BugManagementPolicy_Explanation.ProtoReflect.Descriptor instead.
  1898  func (*BugManagementPolicy_Explanation) Descriptor() ([]byte, []int) {
  1899  	return file_go_chromium_org_luci_analysis_proto_config_project_config_proto_rawDescGZIP(), []int{4, 1}
  1900  }
  1901  
  1902  func (x *BugManagementPolicy_Explanation) GetProblemHtml() string {
  1903  	if x != nil {
  1904  		return x.ProblemHtml
  1905  	}
  1906  	return ""
  1907  }
  1908  
  1909  func (x *BugManagementPolicy_Explanation) GetActionHtml() string {
  1910  	if x != nil {
  1911  		return x.ActionHtml
  1912  	}
  1913  	return ""
  1914  }
  1915  
  1916  // Settings which affect the contents of a bug for a policy has activated.
  1917  type BugManagementPolicy_BugTemplate struct {
  1918  	state         protoimpl.MessageState
  1919  	sizeCache     protoimpl.SizeCache
  1920  	unknownFields protoimpl.UnknownFields
  1921  
  1922  	// Text to be included in the bug comment advising of the activation of the
  1923  	// the policy. Leave blank to post no comment.
  1924  	//
  1925  	// The text here will be interpreted as a template by the golang
  1926  	// template/text library (https://pkg.go.dev/text/template). The following
  1927  	// fields are available:
  1928  	//   - RuleURL (string): The URL of the rule page.
  1929  	//   - BugID (BugID): The system-specific bug identifier. This type
  1930  	//     exposes the following methods with no arguments:
  1931  	//   - IsBuganizer returns (bool) indicating if the bug is a buganizer bug.
  1932  	//   - IsMonorail returns (bool) indicating if the bug is a monorail bug.
  1933  	//   - MonorailProject returns (string, error) indicating the monorail
  1934  	//     project, if the bug is a monorail bug, and errors otherwise.
  1935  	//   - MonorailBugID returns (string, error) indicating the monorail
  1936  	//     bug ID, if the bug is a monorail bug, and errors otherwise.
  1937  	//   - BuganizerBugID returns (string, error) indicating the buganizer
  1938  	//     bug ID, if the bug is a buganizer bug, and errors otherwise.
  1939  	//
  1940  	// Model usage of BugID in a template:
  1941  	// ```
  1942  	// {{if .BugID.IsBuganizer}}Buganizer bug: {{.BugID.BuganizerBugID}}{{end}}
  1943  	// {{if .BugID.IsMonorail}}Monorail bug: {{.BugID.MonorailProject}}/{{.BugID.MonorailBugID}}{{end}}
  1944  	// ```
  1945  	//
  1946  	// As for functions, only the standard global functions are available, see:
  1947  	// https://pkg.go.dev/text/template#hdr-Functions
  1948  	CommentTemplate string `protobuf:"bytes,1,opt,name=comment_template,json=commentTemplate,proto3" json:"comment_template,omitempty"`
  1949  	// Bug content options that are specific to Google issue tracker (Buganizer).
  1950  	Buganizer *BugManagementPolicy_BugTemplate_Buganizer `protobuf:"bytes,2,opt,name=buganizer,proto3" json:"buganizer,omitempty"`
  1951  	// Bug content options that are specific to monorail.
  1952  	Monorail *BugManagementPolicy_BugTemplate_Monorail `protobuf:"bytes,3,opt,name=monorail,proto3" json:"monorail,omitempty"`
  1953  }
  1954  
  1955  func (x *BugManagementPolicy_BugTemplate) Reset() {
  1956  	*x = BugManagementPolicy_BugTemplate{}
  1957  	if protoimpl.UnsafeEnabled {
  1958  		mi := &file_go_chromium_org_luci_analysis_proto_config_project_config_proto_msgTypes[20]
  1959  		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
  1960  		ms.StoreMessageInfo(mi)
  1961  	}
  1962  }
  1963  
  1964  func (x *BugManagementPolicy_BugTemplate) String() string {
  1965  	return protoimpl.X.MessageStringOf(x)
  1966  }
  1967  
  1968  func (*BugManagementPolicy_BugTemplate) ProtoMessage() {}
  1969  
  1970  func (x *BugManagementPolicy_BugTemplate) ProtoReflect() protoreflect.Message {
  1971  	mi := &file_go_chromium_org_luci_analysis_proto_config_project_config_proto_msgTypes[20]
  1972  	if protoimpl.UnsafeEnabled && x != nil {
  1973  		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
  1974  		if ms.LoadMessageInfo() == nil {
  1975  			ms.StoreMessageInfo(mi)
  1976  		}
  1977  		return ms
  1978  	}
  1979  	return mi.MessageOf(x)
  1980  }
  1981  
  1982  // Deprecated: Use BugManagementPolicy_BugTemplate.ProtoReflect.Descriptor instead.
  1983  func (*BugManagementPolicy_BugTemplate) Descriptor() ([]byte, []int) {
  1984  	return file_go_chromium_org_luci_analysis_proto_config_project_config_proto_rawDescGZIP(), []int{4, 2}
  1985  }
  1986  
  1987  func (x *BugManagementPolicy_BugTemplate) GetCommentTemplate() string {
  1988  	if x != nil {
  1989  		return x.CommentTemplate
  1990  	}
  1991  	return ""
  1992  }
  1993  
  1994  func (x *BugManagementPolicy_BugTemplate) GetBuganizer() *BugManagementPolicy_BugTemplate_Buganizer {
  1995  	if x != nil {
  1996  		return x.Buganizer
  1997  	}
  1998  	return nil
  1999  }
  2000  
  2001  func (x *BugManagementPolicy_BugTemplate) GetMonorail() *BugManagementPolicy_BugTemplate_Monorail {
  2002  	if x != nil {
  2003  		return x.Monorail
  2004  	}
  2005  	return nil
  2006  }
  2007  
  2008  // Policy configuration that is specific to Google issue tracker (Buganizer).
  2009  type BugManagementPolicy_BugTemplate_Buganizer struct {
  2010  	state         protoimpl.MessageState
  2011  	sizeCache     protoimpl.SizeCache
  2012  	unknownFields protoimpl.UnknownFields
  2013  
  2014  	// The numeric ID of the buganizer hotlist to add the issue to. Optional.
  2015  	// The bug is added to the hostlist when the policy transitions to
  2016  	// activated. The issue is not removed from the hotlist if the policy is
  2017  	// deactivated, to avoid excessive bug updates.
  2018  	Hotlists []int64 `protobuf:"varint,1,rep,packed,name=hotlists,proto3" json:"hotlists,omitempty"`
  2019  }
  2020  
  2021  func (x *BugManagementPolicy_BugTemplate_Buganizer) Reset() {
  2022  	*x = BugManagementPolicy_BugTemplate_Buganizer{}
  2023  	if protoimpl.UnsafeEnabled {
  2024  		mi := &file_go_chromium_org_luci_analysis_proto_config_project_config_proto_msgTypes[21]
  2025  		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
  2026  		ms.StoreMessageInfo(mi)
  2027  	}
  2028  }
  2029  
  2030  func (x *BugManagementPolicy_BugTemplate_Buganizer) String() string {
  2031  	return protoimpl.X.MessageStringOf(x)
  2032  }
  2033  
  2034  func (*BugManagementPolicy_BugTemplate_Buganizer) ProtoMessage() {}
  2035  
  2036  func (x *BugManagementPolicy_BugTemplate_Buganizer) ProtoReflect() protoreflect.Message {
  2037  	mi := &file_go_chromium_org_luci_analysis_proto_config_project_config_proto_msgTypes[21]
  2038  	if protoimpl.UnsafeEnabled && x != nil {
  2039  		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
  2040  		if ms.LoadMessageInfo() == nil {
  2041  			ms.StoreMessageInfo(mi)
  2042  		}
  2043  		return ms
  2044  	}
  2045  	return mi.MessageOf(x)
  2046  }
  2047  
  2048  // Deprecated: Use BugManagementPolicy_BugTemplate_Buganizer.ProtoReflect.Descriptor instead.
  2049  func (*BugManagementPolicy_BugTemplate_Buganizer) Descriptor() ([]byte, []int) {
  2050  	return file_go_chromium_org_luci_analysis_proto_config_project_config_proto_rawDescGZIP(), []int{4, 2, 0}
  2051  }
  2052  
  2053  func (x *BugManagementPolicy_BugTemplate_Buganizer) GetHotlists() []int64 {
  2054  	if x != nil {
  2055  		return x.Hotlists
  2056  	}
  2057  	return nil
  2058  }
  2059  
  2060  // Policy configuration that is specific to monorail issue tracker.
  2061  type BugManagementPolicy_BugTemplate_Monorail struct {
  2062  	state         protoimpl.MessageState
  2063  	sizeCache     protoimpl.SizeCache
  2064  	unknownFields protoimpl.UnknownFields
  2065  
  2066  	// The labels to apply to the bug.
  2067  	Labels []string `protobuf:"bytes,1,rep,name=labels,proto3" json:"labels,omitempty"`
  2068  }
  2069  
  2070  func (x *BugManagementPolicy_BugTemplate_Monorail) Reset() {
  2071  	*x = BugManagementPolicy_BugTemplate_Monorail{}
  2072  	if protoimpl.UnsafeEnabled {
  2073  		mi := &file_go_chromium_org_luci_analysis_proto_config_project_config_proto_msgTypes[22]
  2074  		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
  2075  		ms.StoreMessageInfo(mi)
  2076  	}
  2077  }
  2078  
  2079  func (x *BugManagementPolicy_BugTemplate_Monorail) String() string {
  2080  	return protoimpl.X.MessageStringOf(x)
  2081  }
  2082  
  2083  func (*BugManagementPolicy_BugTemplate_Monorail) ProtoMessage() {}
  2084  
  2085  func (x *BugManagementPolicy_BugTemplate_Monorail) ProtoReflect() protoreflect.Message {
  2086  	mi := &file_go_chromium_org_luci_analysis_proto_config_project_config_proto_msgTypes[22]
  2087  	if protoimpl.UnsafeEnabled && x != nil {
  2088  		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
  2089  		if ms.LoadMessageInfo() == nil {
  2090  			ms.StoreMessageInfo(mi)
  2091  		}
  2092  		return ms
  2093  	}
  2094  	return mi.MessageOf(x)
  2095  }
  2096  
  2097  // Deprecated: Use BugManagementPolicy_BugTemplate_Monorail.ProtoReflect.Descriptor instead.
  2098  func (*BugManagementPolicy_BugTemplate_Monorail) Descriptor() ([]byte, []int) {
  2099  	return file_go_chromium_org_luci_analysis_proto_config_project_config_proto_rawDescGZIP(), []int{4, 2, 1}
  2100  }
  2101  
  2102  func (x *BugManagementPolicy_BugTemplate_Monorail) GetLabels() []string {
  2103  	if x != nil {
  2104  		return x.Labels
  2105  	}
  2106  	return nil
  2107  }
  2108  
  2109  // Deprecated. No longer has any effect. Retained for textproto
  2110  // compatibility only.
  2111  type BuganizerProject_PriorityMapping struct {
  2112  	state         protoimpl.MessageState
  2113  	sizeCache     protoimpl.SizeCache
  2114  	unknownFields protoimpl.UnknownFields
  2115  
  2116  	Priority   BuganizerPriority        `protobuf:"varint,1,opt,name=priority,proto3,enum=luci.analysis.config.BuganizerPriority" json:"priority,omitempty"`
  2117  	Threshold  *ImpactThreshold         `protobuf:"bytes,2,opt,name=threshold,proto3" json:"threshold,omitempty"`
  2118  	Thresholds []*ImpactMetricThreshold `protobuf:"bytes,3,rep,name=thresholds,proto3" json:"thresholds,omitempty"`
  2119  }
  2120  
  2121  func (x *BuganizerProject_PriorityMapping) Reset() {
  2122  	*x = BuganizerProject_PriorityMapping{}
  2123  	if protoimpl.UnsafeEnabled {
  2124  		mi := &file_go_chromium_org_luci_analysis_proto_config_project_config_proto_msgTypes[23]
  2125  		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
  2126  		ms.StoreMessageInfo(mi)
  2127  	}
  2128  }
  2129  
  2130  func (x *BuganizerProject_PriorityMapping) String() string {
  2131  	return protoimpl.X.MessageStringOf(x)
  2132  }
  2133  
  2134  func (*BuganizerProject_PriorityMapping) ProtoMessage() {}
  2135  
  2136  func (x *BuganizerProject_PriorityMapping) ProtoReflect() protoreflect.Message {
  2137  	mi := &file_go_chromium_org_luci_analysis_proto_config_project_config_proto_msgTypes[23]
  2138  	if protoimpl.UnsafeEnabled && x != nil {
  2139  		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
  2140  		if ms.LoadMessageInfo() == nil {
  2141  			ms.StoreMessageInfo(mi)
  2142  		}
  2143  		return ms
  2144  	}
  2145  	return mi.MessageOf(x)
  2146  }
  2147  
  2148  // Deprecated: Use BuganizerProject_PriorityMapping.ProtoReflect.Descriptor instead.
  2149  func (*BuganizerProject_PriorityMapping) Descriptor() ([]byte, []int) {
  2150  	return file_go_chromium_org_luci_analysis_proto_config_project_config_proto_rawDescGZIP(), []int{15, 0}
  2151  }
  2152  
  2153  func (x *BuganizerProject_PriorityMapping) GetPriority() BuganizerPriority {
  2154  	if x != nil {
  2155  		return x.Priority
  2156  	}
  2157  	return BuganizerPriority_BUGANIZER_PRIORITY_UNSPECIFIED
  2158  }
  2159  
  2160  func (x *BuganizerProject_PriorityMapping) GetThreshold() *ImpactThreshold {
  2161  	if x != nil {
  2162  		return x.Threshold
  2163  	}
  2164  	return nil
  2165  }
  2166  
  2167  func (x *BuganizerProject_PriorityMapping) GetThresholds() []*ImpactMetricThreshold {
  2168  	if x != nil {
  2169  		return x.Thresholds
  2170  	}
  2171  	return nil
  2172  }
  2173  
  2174  // The failure rate criteria detects consistently failing
  2175  // and highly flaky tests (e.g. 95%+ failing) by looking for
  2176  // a high number of failures at the queried position of the
  2177  // test's history.
  2178  //
  2179  // The criteria obtains from the last 14 days' of filtered test data
  2180  // a set of (up to) 20 test runs centered on the queried commit
  2181  // position (10 prior and 10 after) and applies criteria
  2182  // to this in various ways.
  2183  // The 20 test runs are sorted by commit position and then time.
  2184  //
  2185  // See go/luci-exoneration-v2 for more detail.
  2186  type TestStabilityCriteria_FailureRateCriteria struct {
  2187  	state         protoimpl.MessageState
  2188  	sizeCache     protoimpl.SizeCache
  2189  	unknownFields protoimpl.UnknownFields
  2190  
  2191  	// The number of unexpected test runs that must be
  2192  	// found in a sliding window of size 10 containing the
  2193  	// queried position to begin exoneration.
  2194  	// 6 is a good starting value.
  2195  	//
  2196  	// The criteria is applied over sliding windows of size
  2197  	// 10 around the query position. Assuming the full 20 test
  2198  	// runs are obtained, this means 11 window positions are considered.
  2199  	// If any window satisifes the threshold, the criteria is met
  2200  	// and the test is considered unstable.
  2201  	//
  2202  	// In the event that 10 test runs cannot be found in the last
  2203  	// 14 days of test history, a window sized to the available
  2204  	// test runs is used but the criteria is not scaled.
  2205  	FailureThreshold int32 `protobuf:"varint,1,opt,name=failure_threshold,json=failureThreshold,proto3" json:"failure_threshold,omitempty"`
  2206  	// The number of consecutive unexpected test runs, which if
  2207  	// present at the leading or trailing part of the (up to) 20
  2208  	// test verdicts, will trigger exoneration.
  2209  	// 3 is a good starting value.
  2210  	//
  2211  	// The consecutive failures must also touch the query position.
  2212  	//
  2213  	// This is designed to create a fast path to exoneration for
  2214  	// 100% failing tests which produce a strong and consistent
  2215  	// failing signal, leveraging the statistical significance
  2216  	// of consecutive failures. If this threshold is met,
  2217  	// the failure_threshold above does NOT need to be met.
  2218  	//
  2219  	// E.g. the following scenario WILL trigger this criteria for
  2220  	// a threshold of four or less.
  2221  	//
  2222  	// History: >F F F F< P P P P P P P
  2223  	//
  2224  	//	^
  2225  	//	Query position
  2226  	//
  2227  	// The following scenario WILL NOT trigger this criteria:
  2228  	//
  2229  	// History:>P F F F F< P P P P P P P
  2230  	//
  2231  	//	^
  2232  	//	Query position
  2233  	//
  2234  	// (N.B. Direction of history is irrelevant as criteria is
  2235  	// applied symmetrically. Either the left or right could
  2236  	// represent 'later' by commit position.)
  2237  	ConsecutiveFailureThreshold int32 `protobuf:"varint,2,opt,name=consecutive_failure_threshold,json=consecutiveFailureThreshold,proto3" json:"consecutive_failure_threshold,omitempty"`
  2238  }
  2239  
  2240  func (x *TestStabilityCriteria_FailureRateCriteria) Reset() {
  2241  	*x = TestStabilityCriteria_FailureRateCriteria{}
  2242  	if protoimpl.UnsafeEnabled {
  2243  		mi := &file_go_chromium_org_luci_analysis_proto_config_project_config_proto_msgTypes[24]
  2244  		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
  2245  		ms.StoreMessageInfo(mi)
  2246  	}
  2247  }
  2248  
  2249  func (x *TestStabilityCriteria_FailureRateCriteria) String() string {
  2250  	return protoimpl.X.MessageStringOf(x)
  2251  }
  2252  
  2253  func (*TestStabilityCriteria_FailureRateCriteria) ProtoMessage() {}
  2254  
  2255  func (x *TestStabilityCriteria_FailureRateCriteria) ProtoReflect() protoreflect.Message {
  2256  	mi := &file_go_chromium_org_luci_analysis_proto_config_project_config_proto_msgTypes[24]
  2257  	if protoimpl.UnsafeEnabled && x != nil {
  2258  		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
  2259  		if ms.LoadMessageInfo() == nil {
  2260  			ms.StoreMessageInfo(mi)
  2261  		}
  2262  		return ms
  2263  	}
  2264  	return mi.MessageOf(x)
  2265  }
  2266  
  2267  // Deprecated: Use TestStabilityCriteria_FailureRateCriteria.ProtoReflect.Descriptor instead.
  2268  func (*TestStabilityCriteria_FailureRateCriteria) Descriptor() ([]byte, []int) {
  2269  	return file_go_chromium_org_luci_analysis_proto_config_project_config_proto_rawDescGZIP(), []int{16, 0}
  2270  }
  2271  
  2272  func (x *TestStabilityCriteria_FailureRateCriteria) GetFailureThreshold() int32 {
  2273  	if x != nil {
  2274  		return x.FailureThreshold
  2275  	}
  2276  	return 0
  2277  }
  2278  
  2279  func (x *TestStabilityCriteria_FailureRateCriteria) GetConsecutiveFailureThreshold() int32 {
  2280  	if x != nil {
  2281  		return x.ConsecutiveFailureThreshold
  2282  	}
  2283  	return 0
  2284  }
  2285  
  2286  // The flake rate criteria detects flaky tests by looking for
  2287  // examples where a test has obtained expected and unexpected
  2288  // test runs for the same sources under test.
  2289  //
  2290  // If there are more flaky source verdicts found than a threshold,
  2291  // the test is considered flaky.
  2292  //
  2293  // The analysis window is all source verdicts for 7 days' worth
  2294  // of commit positions either side of the queried position.
  2295  // The conversion between time and commit position is discussed
  2296  // in go/luci-exoneration-v2.
  2297  //
  2298  // In the event that an unsatisfactory number of source positions
  2299  // are found using this method, the window is enlarged to possibly
  2300  // include any verdict in the last 14 days. This is to improve
  2301  // detection performance on tests with a low volume of results.
  2302  type TestStabilityCriteria_FlakeRateCriteria struct {
  2303  	state         protoimpl.MessageState
  2304  	sizeCache     protoimpl.SizeCache
  2305  	unknownFields protoimpl.UnknownFields
  2306  
  2307  	// The minimum number of source verdicts desired
  2308  	// for the analysis window.
  2309  	//
  2310  	// As standard, all source verdicts for sources
  2311  	// +/- 7 days from the queried position are used.
  2312  	//
  2313  	// However, if the number of verdicts is not equal
  2314  	// to or greater than min_window, all source verdicts
  2315  	// from the last 14 days will be used. This is designed
  2316  	// to prioritise adequate flake detection performance
  2317  	// for test variants with low result volumes, at the
  2318  	// cost of data recency.
  2319  	//
  2320  	// If the number of source verdicts in the last 14 days
  2321  	// is less than min_window, then whatever source verdicts
  2322  	// are available are still used.
  2323  	//
  2324  	// 100 is a good starting value.
  2325  	MinWindow int32 `protobuf:"varint,1,opt,name=min_window,json=minWindow,proto3" json:"min_window,omitempty"`
  2326  	// The minimum number of flaky source verdicts required
  2327  	// to trigger the criteria. 2 is a good starting value.
  2328  	FlakeThreshold int32 `protobuf:"varint,2,opt,name=flake_threshold,json=flakeThreshold,proto3" json:"flake_threshold,omitempty"`
  2329  	// The minimum flake rate required to trigger the criteria,
  2330  	// as a proportion of all source verdicts. This must be a
  2331  	// value between 0.0 and 1.0.
  2332  	// 0.01 (1%) is a good starting value.
  2333  	//
  2334  	// Both flake_threshold AND the flake_rate_threshold must be met
  2335  	// for a test to be considered unstable.
  2336  	//
  2337  	// Note that not even the most flaky (50% flaky) test would
  2338  	// be expected to produce more than a 25% flake rate if
  2339  	// failures are retried once. This is because its expected
  2340  	// outcomes are:
  2341  	// - Pass on first try = 50%
  2342  	// - Fail on first try, pass on second try = 25% (flaky)
  2343  	// - Fail on both tries = 25%
  2344  	FlakeRateThreshold float64 `protobuf:"fixed64,3,opt,name=flake_rate_threshold,json=flakeRateThreshold,proto3" json:"flake_rate_threshold,omitempty"`
  2345  }
  2346  
  2347  func (x *TestStabilityCriteria_FlakeRateCriteria) Reset() {
  2348  	*x = TestStabilityCriteria_FlakeRateCriteria{}
  2349  	if protoimpl.UnsafeEnabled {
  2350  		mi := &file_go_chromium_org_luci_analysis_proto_config_project_config_proto_msgTypes[25]
  2351  		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
  2352  		ms.StoreMessageInfo(mi)
  2353  	}
  2354  }
  2355  
  2356  func (x *TestStabilityCriteria_FlakeRateCriteria) String() string {
  2357  	return protoimpl.X.MessageStringOf(x)
  2358  }
  2359  
  2360  func (*TestStabilityCriteria_FlakeRateCriteria) ProtoMessage() {}
  2361  
  2362  func (x *TestStabilityCriteria_FlakeRateCriteria) ProtoReflect() protoreflect.Message {
  2363  	mi := &file_go_chromium_org_luci_analysis_proto_config_project_config_proto_msgTypes[25]
  2364  	if protoimpl.UnsafeEnabled && x != nil {
  2365  		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
  2366  		if ms.LoadMessageInfo() == nil {
  2367  			ms.StoreMessageInfo(mi)
  2368  		}
  2369  		return ms
  2370  	}
  2371  	return mi.MessageOf(x)
  2372  }
  2373  
  2374  // Deprecated: Use TestStabilityCriteria_FlakeRateCriteria.ProtoReflect.Descriptor instead.
  2375  func (*TestStabilityCriteria_FlakeRateCriteria) Descriptor() ([]byte, []int) {
  2376  	return file_go_chromium_org_luci_analysis_proto_config_project_config_proto_rawDescGZIP(), []int{16, 1}
  2377  }
  2378  
  2379  func (x *TestStabilityCriteria_FlakeRateCriteria) GetMinWindow() int32 {
  2380  	if x != nil {
  2381  		return x.MinWindow
  2382  	}
  2383  	return 0
  2384  }
  2385  
  2386  func (x *TestStabilityCriteria_FlakeRateCriteria) GetFlakeThreshold() int32 {
  2387  	if x != nil {
  2388  		return x.FlakeThreshold
  2389  	}
  2390  	return 0
  2391  }
  2392  
  2393  func (x *TestStabilityCriteria_FlakeRateCriteria) GetFlakeRateThreshold() float64 {
  2394  	if x != nil {
  2395  		return x.FlakeRateThreshold
  2396  	}
  2397  	return 0
  2398  }
  2399  
  2400  var File_go_chromium_org_luci_analysis_proto_config_project_config_proto protoreflect.FileDescriptor
  2401  
  2402  var file_go_chromium_org_luci_analysis_proto_config_project_config_proto_rawDesc = []byte{
  2403  	0x0a, 0x3f, 0x67, 0x6f, 0x2e, 0x63, 0x68, 0x72, 0x6f, 0x6d, 0x69, 0x75, 0x6d, 0x2e, 0x6f, 0x72,
  2404  	0x67, 0x2f, 0x6c, 0x75, 0x63, 0x69, 0x2f, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x73, 0x69, 0x73, 0x2f,
  2405  	0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x70, 0x72, 0x6f,
  2406  	0x6a, 0x65, 0x63, 0x74, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x70, 0x72, 0x6f, 0x74,
  2407  	0x6f, 0x12, 0x14, 0x6c, 0x75, 0x63, 0x69, 0x2e, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x73, 0x69, 0x73,
  2408  	0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x1a, 0x1f, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f,
  2409  	0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61,
  2410  	0x6d, 0x70, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x4d, 0x67, 0x6f, 0x2e, 0x63, 0x68, 0x72,
  2411  	0x6f, 0x6d, 0x69, 0x75, 0x6d, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x6c, 0x75, 0x63, 0x69, 0x2f, 0x61,
  2412  	0x6e, 0x61, 0x6c, 0x79, 0x73, 0x69, 0x73, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x63, 0x6f,
  2413  	0x6e, 0x66, 0x69, 0x67, 0x2f, 0x74, 0x65, 0x73, 0x74, 0x5f, 0x76, 0x61, 0x72, 0x69, 0x61, 0x6e,
  2414  	0x74, 0x5f, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x73, 0x69, 0x73, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69,
  2415  	0x67, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x8a, 0x07, 0x0a, 0x0d, 0x50, 0x72, 0x6f, 0x6a,
  2416  	0x65, 0x63, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x50, 0x0a, 0x10, 0x70, 0x72, 0x6f,
  2417  	0x6a, 0x65, 0x63, 0x74, 0x5f, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x06, 0x20,
  2418  	0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x6c, 0x75, 0x63, 0x69, 0x2e, 0x61, 0x6e, 0x61, 0x6c, 0x79,
  2419  	0x73, 0x69, 0x73, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x50, 0x72, 0x6f, 0x6a, 0x65,
  2420  	0x63, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x0f, 0x70, 0x72, 0x6f, 0x6a,
  2421  	0x65, 0x63, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x3d, 0x0a, 0x0c, 0x6c,
  2422  	0x61, 0x73, 0x74, 0x5f, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28,
  2423  	0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f,
  2424  	0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0b, 0x6c,
  2425  	0x61, 0x73, 0x74, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x12, 0x40, 0x0a, 0x0a, 0x63, 0x6c,
  2426  	0x75, 0x73, 0x74, 0x65, 0x72, 0x69, 0x6e, 0x67, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20,
  2427  	0x2e, 0x6c, 0x75, 0x63, 0x69, 0x2e, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x73, 0x69, 0x73, 0x2e, 0x63,
  2428  	0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x69, 0x6e, 0x67,
  2429  	0x52, 0x0a, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x69, 0x6e, 0x67, 0x12, 0x4a, 0x0a, 0x0e,
  2430  	0x62, 0x75, 0x67, 0x5f, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x09,
  2431  	0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x6c, 0x75, 0x63, 0x69, 0x2e, 0x61, 0x6e, 0x61, 0x6c,
  2432  	0x79, 0x73, 0x69, 0x73, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x42, 0x75, 0x67, 0x4d,
  2433  	0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x0d, 0x62, 0x75, 0x67, 0x4d, 0x61,
  2434  	0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x37, 0x0a, 0x07, 0x6d, 0x65, 0x74, 0x72,
  2435  	0x69, 0x63, 0x73, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x6c, 0x75, 0x63, 0x69,
  2436  	0x2e, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x73, 0x69, 0x73, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67,
  2437  	0x2e, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x52, 0x07, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63,
  2438  	0x73, 0x12, 0x63, 0x0a, 0x17, 0x74, 0x65, 0x73, 0x74, 0x5f, 0x73, 0x74, 0x61, 0x62, 0x69, 0x6c,
  2439  	0x69, 0x74, 0x79, 0x5f, 0x63, 0x72, 0x69, 0x74, 0x65, 0x72, 0x69, 0x61, 0x18, 0x0c, 0x20, 0x01,
  2440  	0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x6c, 0x75, 0x63, 0x69, 0x2e, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x73,
  2441  	0x69, 0x73, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x53, 0x74,
  2442  	0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x43, 0x72, 0x69, 0x74, 0x65, 0x72, 0x69, 0x61, 0x52,
  2443  	0x15, 0x74, 0x65, 0x73, 0x74, 0x53, 0x74, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x43, 0x72,
  2444  	0x69, 0x74, 0x65, 0x72, 0x69, 0x61, 0x12, 0x39, 0x0a, 0x06, 0x72, 0x65, 0x61, 0x6c, 0x6d, 0x73,
  2445  	0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x6c, 0x75, 0x63, 0x69, 0x2e, 0x61, 0x6e,
  2446  	0x61, 0x6c, 0x79, 0x73, 0x69, 0x73, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x52, 0x65,
  2447  	0x61, 0x6c, 0x6d, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x06, 0x72, 0x65, 0x61, 0x6c, 0x6d,
  2448  	0x73, 0x12, 0x3e, 0x0a, 0x0a, 0x62, 0x75, 0x67, 0x5f, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x18,
  2449  	0x07, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1f, 0x2e, 0x6c, 0x75, 0x63, 0x69, 0x2e, 0x61, 0x6e, 0x61,
  2450  	0x6c, 0x79, 0x73, 0x69, 0x73, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x42, 0x75, 0x67,
  2451  	0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x52, 0x09, 0x62, 0x75, 0x67, 0x53, 0x79, 0x73, 0x74, 0x65,
  2452  	0x6d, 0x12, 0x41, 0x0a, 0x08, 0x6d, 0x6f, 0x6e, 0x6f, 0x72, 0x61, 0x69, 0x6c, 0x18, 0x01, 0x20,
  2453  	0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x6c, 0x75, 0x63, 0x69, 0x2e, 0x61, 0x6e, 0x61, 0x6c, 0x79,
  2454  	0x73, 0x69, 0x73, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x4d, 0x6f, 0x6e, 0x6f, 0x72,
  2455  	0x61, 0x69, 0x6c, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x08, 0x6d, 0x6f, 0x6e, 0x6f,
  2456  	0x72, 0x61, 0x69, 0x6c, 0x12, 0x44, 0x0a, 0x09, 0x62, 0x75, 0x67, 0x61, 0x6e, 0x69, 0x7a, 0x65,
  2457  	0x72, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x6c, 0x75, 0x63, 0x69, 0x2e, 0x61,
  2458  	0x6e, 0x61, 0x6c, 0x79, 0x73, 0x69, 0x73, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x42,
  2459  	0x75, 0x67, 0x61, 0x6e, 0x69, 0x7a, 0x65, 0x72, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x52,
  2460  	0x09, 0x62, 0x75, 0x67, 0x61, 0x6e, 0x69, 0x7a, 0x65, 0x72, 0x12, 0x57, 0x0a, 0x14, 0x62, 0x75,
  2461  	0x67, 0x5f, 0x66, 0x69, 0x6c, 0x69, 0x6e, 0x67, 0x5f, 0x74, 0x68, 0x72, 0x65, 0x73, 0x68, 0x6f,
  2462  	0x6c, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x6c, 0x75, 0x63, 0x69, 0x2e,
  2463  	0x61, 0x6e, 0x61, 0x6c, 0x79, 0x73, 0x69, 0x73, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e,
  2464  	0x49, 0x6d, 0x70, 0x61, 0x63, 0x74, 0x54, 0x68, 0x72, 0x65, 0x73, 0x68, 0x6f, 0x6c, 0x64, 0x52,
  2465  	0x12, 0x62, 0x75, 0x67, 0x46, 0x69, 0x6c, 0x69, 0x6e, 0x67, 0x54, 0x68, 0x72, 0x65, 0x73, 0x68,
  2466  	0x6f, 0x6c, 0x64, 0x12, 0x5f, 0x0a, 0x15, 0x62, 0x75, 0x67, 0x5f, 0x66, 0x69, 0x6c, 0x69, 0x6e,
  2467  	0x67, 0x5f, 0x74, 0x68, 0x72, 0x65, 0x73, 0x68, 0x6f, 0x6c, 0x64, 0x73, 0x18, 0x0a, 0x20, 0x03,
  2468  	0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x6c, 0x75, 0x63, 0x69, 0x2e, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x73,
  2469  	0x69, 0x73, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x49, 0x6d, 0x70, 0x61, 0x63, 0x74,
  2470  	0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x54, 0x68, 0x72, 0x65, 0x73, 0x68, 0x6f, 0x6c, 0x64, 0x52,
  2471  	0x13, 0x62, 0x75, 0x67, 0x46, 0x69, 0x6c, 0x69, 0x6e, 0x67, 0x54, 0x68, 0x72, 0x65, 0x73, 0x68,
  2472  	0x6f, 0x6c, 0x64, 0x73, 0x22, 0x34, 0x0a, 0x0f, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x4d,
  2473  	0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x21, 0x0a, 0x0c, 0x64, 0x69, 0x73, 0x70, 0x6c,
  2474  	0x61, 0x79, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64,
  2475  	0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0xf4, 0x01, 0x0a, 0x07, 0x4d,
  2476  	0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x12, 0x4a, 0x0a, 0x09, 0x6f, 0x76, 0x65, 0x72, 0x72, 0x69,
  2477  	0x64, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x6c, 0x75, 0x63, 0x69,
  2478  	0x2e, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x73, 0x69, 0x73, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67,
  2479  	0x2e, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x2e, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x4f,
  2480  	0x76, 0x65, 0x72, 0x72, 0x69, 0x64, 0x65, 0x52, 0x09, 0x6f, 0x76, 0x65, 0x72, 0x72, 0x69, 0x64,
  2481  	0x65, 0x73, 0x1a, 0x9c, 0x01, 0x0a, 0x0e, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x4f, 0x76, 0x65,
  2482  	0x72, 0x72, 0x69, 0x64, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x5f,
  2483  	0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63,
  2484  	0x49, 0x64, 0x12, 0x22, 0x0a, 0x0a, 0x69, 0x73, 0x5f, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74,
  2485  	0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x48, 0x00, 0x52, 0x09, 0x69, 0x73, 0x44, 0x65, 0x66, 0x61,
  2486  	0x75, 0x6c, 0x74, 0x88, 0x01, 0x01, 0x12, 0x28, 0x0a, 0x0d, 0x73, 0x6f, 0x72, 0x74, 0x5f, 0x70,
  2487  	0x72, 0x69, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x48, 0x01, 0x52,
  2488  	0x0c, 0x73, 0x6f, 0x72, 0x74, 0x50, 0x72, 0x69, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x88, 0x01, 0x01,
  2489  	0x42, 0x0d, 0x0a, 0x0b, 0x5f, 0x69, 0x73, 0x5f, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x42,
  2490  	0x10, 0x0a, 0x0e, 0x5f, 0x73, 0x6f, 0x72, 0x74, 0x5f, 0x70, 0x72, 0x69, 0x6f, 0x72, 0x69, 0x74,
  2491  	0x79, 0x22, 0xf3, 0x02, 0x0a, 0x0d, 0x42, 0x75, 0x67, 0x4d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d,
  2492  	0x65, 0x6e, 0x74, 0x12, 0x43, 0x0a, 0x1e, 0x64, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x64,
  2493  	0x75, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x65, 0x5f, 0x62, 0x75, 0x67, 0x5f, 0x63, 0x6f, 0x6d,
  2494  	0x6d, 0x65, 0x6e, 0x74, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x1b, 0x64, 0x69, 0x73,
  2495  	0x61, 0x62, 0x6c, 0x65, 0x44, 0x75, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x65, 0x42, 0x75, 0x67,
  2496  	0x43, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x45, 0x0a, 0x08, 0x70, 0x6f, 0x6c, 0x69,
  2497  	0x63, 0x69, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x6c, 0x75, 0x63,
  2498  	0x69, 0x2e, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x73, 0x69, 0x73, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69,
  2499  	0x67, 0x2e, 0x42, 0x75, 0x67, 0x4d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x50,
  2500  	0x6f, 0x6c, 0x69, 0x63, 0x79, 0x52, 0x08, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x69, 0x65, 0x73, 0x12,
  2501  	0x4d, 0x0a, 0x12, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x5f, 0x62, 0x75, 0x67, 0x5f, 0x73,
  2502  	0x79, 0x73, 0x74, 0x65, 0x6d, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1f, 0x2e, 0x6c, 0x75,
  2503  	0x63, 0x69, 0x2e, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x73, 0x69, 0x73, 0x2e, 0x63, 0x6f, 0x6e, 0x66,
  2504  	0x69, 0x67, 0x2e, 0x42, 0x75, 0x67, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x52, 0x10, 0x64, 0x65,
  2505  	0x66, 0x61, 0x75, 0x6c, 0x74, 0x42, 0x75, 0x67, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x12, 0x44,
  2506  	0x0a, 0x09, 0x62, 0x75, 0x67, 0x61, 0x6e, 0x69, 0x7a, 0x65, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28,
  2507  	0x0b, 0x32, 0x26, 0x2e, 0x6c, 0x75, 0x63, 0x69, 0x2e, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x73, 0x69,
  2508  	0x73, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x42, 0x75, 0x67, 0x61, 0x6e, 0x69, 0x7a,
  2509  	0x65, 0x72, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x09, 0x62, 0x75, 0x67, 0x61, 0x6e,
  2510  	0x69, 0x7a, 0x65, 0x72, 0x12, 0x41, 0x0a, 0x08, 0x6d, 0x6f, 0x6e, 0x6f, 0x72, 0x61, 0x69, 0x6c,
  2511  	0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x6c, 0x75, 0x63, 0x69, 0x2e, 0x61, 0x6e,
  2512  	0x61, 0x6c, 0x79, 0x73, 0x69, 0x73, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x4d, 0x6f,
  2513  	0x6e, 0x6f, 0x72, 0x61, 0x69, 0x6c, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x08, 0x6d,
  2514  	0x6f, 0x6e, 0x6f, 0x72, 0x61, 0x69, 0x6c, 0x22, 0xa7, 0x08, 0x0a, 0x13, 0x42, 0x75, 0x67, 0x4d,
  2515  	0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x12,
  2516  	0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12,
  2517  	0x16, 0x0a, 0x06, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52,
  2518  	0x06, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x73, 0x12, 0x2e, 0x0a, 0x13, 0x68, 0x75, 0x6d, 0x61, 0x6e,
  2519  	0x5f, 0x72, 0x65, 0x61, 0x64, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03,
  2520  	0x20, 0x01, 0x28, 0x09, 0x52, 0x11, 0x68, 0x75, 0x6d, 0x61, 0x6e, 0x52, 0x65, 0x61, 0x64, 0x61,
  2521  	0x62, 0x6c, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x43, 0x0a, 0x08, 0x70, 0x72, 0x69, 0x6f, 0x72,
  2522  	0x69, 0x74, 0x79, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x27, 0x2e, 0x6c, 0x75, 0x63, 0x69,
  2523  	0x2e, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x73, 0x69, 0x73, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67,
  2524  	0x2e, 0x42, 0x75, 0x67, 0x61, 0x6e, 0x69, 0x7a, 0x65, 0x72, 0x50, 0x72, 0x69, 0x6f, 0x72, 0x69,
  2525  	0x74, 0x79, 0x52, 0x08, 0x70, 0x72, 0x69, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x12, 0x4a, 0x0a, 0x07,
  2526  	0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x30, 0x2e,
  2527  	0x6c, 0x75, 0x63, 0x69, 0x2e, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x73, 0x69, 0x73, 0x2e, 0x63, 0x6f,
  2528  	0x6e, 0x66, 0x69, 0x67, 0x2e, 0x42, 0x75, 0x67, 0x4d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65,
  2529  	0x6e, 0x74, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x52,
  2530  	0x07, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x12, 0x57, 0x0a, 0x0b, 0x65, 0x78, 0x70, 0x6c,
  2531  	0x61, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x35, 0x2e,
  2532  	0x6c, 0x75, 0x63, 0x69, 0x2e, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x73, 0x69, 0x73, 0x2e, 0x63, 0x6f,
  2533  	0x6e, 0x66, 0x69, 0x67, 0x2e, 0x42, 0x75, 0x67, 0x4d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65,
  2534  	0x6e, 0x74, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x45, 0x78, 0x70, 0x6c, 0x61, 0x6e, 0x61,
  2535  	0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0b, 0x65, 0x78, 0x70, 0x6c, 0x61, 0x6e, 0x61, 0x74, 0x69, 0x6f,
  2536  	0x6e, 0x12, 0x58, 0x0a, 0x0c, 0x62, 0x75, 0x67, 0x5f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74,
  2537  	0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x35, 0x2e, 0x6c, 0x75, 0x63, 0x69, 0x2e, 0x61,
  2538  	0x6e, 0x61, 0x6c, 0x79, 0x73, 0x69, 0x73, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x42,
  2539  	0x75, 0x67, 0x4d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x50, 0x6f, 0x6c, 0x69,
  2540  	0x63, 0x79, 0x2e, 0x42, 0x75, 0x67, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x0b,
  2541  	0x62, 0x75, 0x67, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x1a, 0xdd, 0x01, 0x0a, 0x06,
  2542  	0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x12, 0x1b, 0x0a, 0x09, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63,
  2543  	0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x72, 0x69,
  2544  	0x63, 0x49, 0x64, 0x12, 0x58, 0x0a, 0x14, 0x61, 0x63, 0x74, 0x69, 0x76, 0x61, 0x74, 0x69, 0x6f,
  2545  	0x6e, 0x5f, 0x74, 0x68, 0x72, 0x65, 0x73, 0x68, 0x6f, 0x6c, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28,
  2546  	0x0b, 0x32, 0x25, 0x2e, 0x6c, 0x75, 0x63, 0x69, 0x2e, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x73, 0x69,
  2547  	0x73, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x54,
  2548  	0x68, 0x72, 0x65, 0x73, 0x68, 0x6f, 0x6c, 0x64, 0x52, 0x13, 0x61, 0x63, 0x74, 0x69, 0x76, 0x61,
  2549  	0x74, 0x69, 0x6f, 0x6e, 0x54, 0x68, 0x72, 0x65, 0x73, 0x68, 0x6f, 0x6c, 0x64, 0x12, 0x5c, 0x0a,
  2550  	0x16, 0x64, 0x65, 0x61, 0x63, 0x74, 0x69, 0x76, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x74, 0x68,
  2551  	0x72, 0x65, 0x73, 0x68, 0x6f, 0x6c, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e,
  2552  	0x6c, 0x75, 0x63, 0x69, 0x2e, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x73, 0x69, 0x73, 0x2e, 0x63, 0x6f,
  2553  	0x6e, 0x66, 0x69, 0x67, 0x2e, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x54, 0x68, 0x72, 0x65, 0x73,
  2554  	0x68, 0x6f, 0x6c, 0x64, 0x52, 0x15, 0x64, 0x65, 0x61, 0x63, 0x74, 0x69, 0x76, 0x61, 0x74, 0x69,
  2555  	0x6f, 0x6e, 0x54, 0x68, 0x72, 0x65, 0x73, 0x68, 0x6f, 0x6c, 0x64, 0x1a, 0x51, 0x0a, 0x0b, 0x45,
  2556  	0x78, 0x70, 0x6c, 0x61, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x21, 0x0a, 0x0c, 0x70, 0x72,
  2557  	0x6f, 0x62, 0x6c, 0x65, 0x6d, 0x5f, 0x68, 0x74, 0x6d, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09,
  2558  	0x52, 0x0b, 0x70, 0x72, 0x6f, 0x62, 0x6c, 0x65, 0x6d, 0x48, 0x74, 0x6d, 0x6c, 0x12, 0x1f, 0x0a,
  2559  	0x0b, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x68, 0x74, 0x6d, 0x6c, 0x18, 0x02, 0x20, 0x01,
  2560  	0x28, 0x09, 0x52, 0x0a, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x74, 0x6d, 0x6c, 0x1a, 0xc0,
  2561  	0x02, 0x0a, 0x0b, 0x42, 0x75, 0x67, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x12, 0x29,
  2562  	0x0a, 0x10, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61,
  2563  	0x74, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e,
  2564  	0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x12, 0x5d, 0x0a, 0x09, 0x62, 0x75, 0x67,
  2565  	0x61, 0x6e, 0x69, 0x7a, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3f, 0x2e, 0x6c,
  2566  	0x75, 0x63, 0x69, 0x2e, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x73, 0x69, 0x73, 0x2e, 0x63, 0x6f, 0x6e,
  2567  	0x66, 0x69, 0x67, 0x2e, 0x42, 0x75, 0x67, 0x4d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e,
  2568  	0x74, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x42, 0x75, 0x67, 0x54, 0x65, 0x6d, 0x70, 0x6c,
  2569  	0x61, 0x74, 0x65, 0x2e, 0x42, 0x75, 0x67, 0x61, 0x6e, 0x69, 0x7a, 0x65, 0x72, 0x52, 0x09, 0x62,
  2570  	0x75, 0x67, 0x61, 0x6e, 0x69, 0x7a, 0x65, 0x72, 0x12, 0x5a, 0x0a, 0x08, 0x6d, 0x6f, 0x6e, 0x6f,
  2571  	0x72, 0x61, 0x69, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3e, 0x2e, 0x6c, 0x75, 0x63,
  2572  	0x69, 0x2e, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x73, 0x69, 0x73, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69,
  2573  	0x67, 0x2e, 0x42, 0x75, 0x67, 0x4d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x50,
  2574  	0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x42, 0x75, 0x67, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74,
  2575  	0x65, 0x2e, 0x4d, 0x6f, 0x6e, 0x6f, 0x72, 0x61, 0x69, 0x6c, 0x52, 0x08, 0x6d, 0x6f, 0x6e, 0x6f,
  2576  	0x72, 0x61, 0x69, 0x6c, 0x1a, 0x27, 0x0a, 0x09, 0x42, 0x75, 0x67, 0x61, 0x6e, 0x69, 0x7a, 0x65,
  2577  	0x72, 0x12, 0x1a, 0x0a, 0x08, 0x68, 0x6f, 0x74, 0x6c, 0x69, 0x73, 0x74, 0x73, 0x18, 0x01, 0x20,
  2578  	0x03, 0x28, 0x03, 0x52, 0x08, 0x68, 0x6f, 0x74, 0x6c, 0x69, 0x73, 0x74, 0x73, 0x1a, 0x22, 0x0a,
  2579  	0x08, 0x4d, 0x6f, 0x6e, 0x6f, 0x72, 0x61, 0x69, 0x6c, 0x12, 0x16, 0x0a, 0x06, 0x6c, 0x61, 0x62,
  2580  	0x65, 0x6c, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c,
  2581  	0x73, 0x22, 0xff, 0x04, 0x0a, 0x0f, 0x49, 0x6d, 0x70, 0x61, 0x63, 0x74, 0x54, 0x68, 0x72, 0x65,
  2582  	0x73, 0x68, 0x6f, 0x6c, 0x64, 0x12, 0x55, 0x0a, 0x13, 0x74, 0x65, 0x73, 0x74, 0x5f, 0x72, 0x65,
  2583  	0x73, 0x75, 0x6c, 0x74, 0x73, 0x5f, 0x66, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x18, 0x04, 0x20, 0x01,
  2584  	0x28, 0x0b, 0x32, 0x25, 0x2e, 0x6c, 0x75, 0x63, 0x69, 0x2e, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x73,
  2585  	0x69, 0x73, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63,
  2586  	0x54, 0x68, 0x72, 0x65, 0x73, 0x68, 0x6f, 0x6c, 0x64, 0x52, 0x11, 0x74, 0x65, 0x73, 0x74, 0x52,
  2587  	0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x46, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x12, 0x4f, 0x0a, 0x10,
  2588  	0x74, 0x65, 0x73, 0x74, 0x5f, 0x72, 0x75, 0x6e, 0x73, 0x5f, 0x66, 0x61, 0x69, 0x6c, 0x65, 0x64,
  2589  	0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x6c, 0x75, 0x63, 0x69, 0x2e, 0x61, 0x6e,
  2590  	0x61, 0x6c, 0x79, 0x73, 0x69, 0x73, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x4d, 0x65,
  2591  	0x74, 0x72, 0x69, 0x63, 0x54, 0x68, 0x72, 0x65, 0x73, 0x68, 0x6f, 0x6c, 0x64, 0x52, 0x0e, 0x74,
  2592  	0x65, 0x73, 0x74, 0x52, 0x75, 0x6e, 0x73, 0x46, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x12, 0x59, 0x0a,
  2593  	0x15, 0x70, 0x72, 0x65, 0x73, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x5f, 0x72, 0x75, 0x6e, 0x73, 0x5f,
  2594  	0x66, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x6c,
  2595  	0x75, 0x63, 0x69, 0x2e, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x73, 0x69, 0x73, 0x2e, 0x63, 0x6f, 0x6e,
  2596  	0x66, 0x69, 0x67, 0x2e, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x54, 0x68, 0x72, 0x65, 0x73, 0x68,
  2597  	0x6f, 0x6c, 0x64, 0x52, 0x13, 0x70, 0x72, 0x65, 0x73, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x52, 0x75,
  2598  	0x6e, 0x73, 0x46, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x12, 0x67, 0x0a, 0x1c, 0x63, 0x72, 0x69, 0x74,
  2599  	0x69, 0x63, 0x61, 0x6c, 0x5f, 0x66, 0x61, 0x69, 0x6c, 0x75, 0x72, 0x65, 0x73, 0x5f, 0x65, 0x78,
  2600  	0x6f, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25,
  2601  	0x2e, 0x6c, 0x75, 0x63, 0x69, 0x2e, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x73, 0x69, 0x73, 0x2e, 0x63,
  2602  	0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x54, 0x68, 0x72, 0x65,
  2603  	0x73, 0x68, 0x6f, 0x6c, 0x64, 0x52, 0x1a, 0x63, 0x72, 0x69, 0x74, 0x69, 0x63, 0x61, 0x6c, 0x46,
  2604  	0x61, 0x69, 0x6c, 0x75, 0x72, 0x65, 0x73, 0x45, 0x78, 0x6f, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65,
  2605  	0x64, 0x12, 0x39, 0x0a, 0x16, 0x75, 0x6e, 0x65, 0x78, 0x70, 0x65, 0x63, 0x74, 0x65, 0x64, 0x5f,
  2606  	0x66, 0x61, 0x69, 0x6c, 0x75, 0x72, 0x65, 0x73, 0x5f, 0x31, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28,
  2607  	0x03, 0x48, 0x00, 0x52, 0x14, 0x75, 0x6e, 0x65, 0x78, 0x70, 0x65, 0x63, 0x74, 0x65, 0x64, 0x46,
  2608  	0x61, 0x69, 0x6c, 0x75, 0x72, 0x65, 0x73, 0x31, 0x64, 0x88, 0x01, 0x01, 0x12, 0x39, 0x0a, 0x16,
  2609  	0x75, 0x6e, 0x65, 0x78, 0x70, 0x65, 0x63, 0x74, 0x65, 0x64, 0x5f, 0x66, 0x61, 0x69, 0x6c, 0x75,
  2610  	0x72, 0x65, 0x73, 0x5f, 0x33, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x48, 0x01, 0x52, 0x14,
  2611  	0x75, 0x6e, 0x65, 0x78, 0x70, 0x65, 0x63, 0x74, 0x65, 0x64, 0x46, 0x61, 0x69, 0x6c, 0x75, 0x72,
  2612  	0x65, 0x73, 0x33, 0x64, 0x88, 0x01, 0x01, 0x12, 0x39, 0x0a, 0x16, 0x75, 0x6e, 0x65, 0x78, 0x70,
  2613  	0x65, 0x63, 0x74, 0x65, 0x64, 0x5f, 0x66, 0x61, 0x69, 0x6c, 0x75, 0x72, 0x65, 0x73, 0x5f, 0x37,
  2614  	0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x48, 0x02, 0x52, 0x14, 0x75, 0x6e, 0x65, 0x78, 0x70,
  2615  	0x65, 0x63, 0x74, 0x65, 0x64, 0x46, 0x61, 0x69, 0x6c, 0x75, 0x72, 0x65, 0x73, 0x37, 0x64, 0x88,
  2616  	0x01, 0x01, 0x42, 0x19, 0x0a, 0x17, 0x5f, 0x75, 0x6e, 0x65, 0x78, 0x70, 0x65, 0x63, 0x74, 0x65,
  2617  	0x64, 0x5f, 0x66, 0x61, 0x69, 0x6c, 0x75, 0x72, 0x65, 0x73, 0x5f, 0x31, 0x64, 0x42, 0x19, 0x0a,
  2618  	0x17, 0x5f, 0x75, 0x6e, 0x65, 0x78, 0x70, 0x65, 0x63, 0x74, 0x65, 0x64, 0x5f, 0x66, 0x61, 0x69,
  2619  	0x6c, 0x75, 0x72, 0x65, 0x73, 0x5f, 0x33, 0x64, 0x42, 0x19, 0x0a, 0x17, 0x5f, 0x75, 0x6e, 0x65,
  2620  	0x78, 0x70, 0x65, 0x63, 0x74, 0x65, 0x64, 0x5f, 0x66, 0x61, 0x69, 0x6c, 0x75, 0x72, 0x65, 0x73,
  2621  	0x5f, 0x37, 0x64, 0x22, 0x79, 0x0a, 0x15, 0x49, 0x6d, 0x70, 0x61, 0x63, 0x74, 0x4d, 0x65, 0x74,
  2622  	0x72, 0x69, 0x63, 0x54, 0x68, 0x72, 0x65, 0x73, 0x68, 0x6f, 0x6c, 0x64, 0x12, 0x1b, 0x0a, 0x09,
  2623  	0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52,
  2624  	0x08, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x49, 0x64, 0x12, 0x43, 0x0a, 0x09, 0x74, 0x68, 0x72,
  2625  	0x65, 0x73, 0x68, 0x6f, 0x6c, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x6c,
  2626  	0x75, 0x63, 0x69, 0x2e, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x73, 0x69, 0x73, 0x2e, 0x63, 0x6f, 0x6e,
  2627  	0x66, 0x69, 0x67, 0x2e, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x54, 0x68, 0x72, 0x65, 0x73, 0x68,
  2628  	0x6f, 0x6c, 0x64, 0x52, 0x09, 0x74, 0x68, 0x72, 0x65, 0x73, 0x68, 0x6f, 0x6c, 0x64, 0x22, 0x9b,
  2629  	0x01, 0x0a, 0x0f, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x54, 0x68, 0x72, 0x65, 0x73, 0x68, 0x6f,
  2630  	0x6c, 0x64, 0x12, 0x1c, 0x0a, 0x07, 0x6f, 0x6e, 0x65, 0x5f, 0x64, 0x61, 0x79, 0x18, 0x01, 0x20,
  2631  	0x01, 0x28, 0x03, 0x48, 0x00, 0x52, 0x06, 0x6f, 0x6e, 0x65, 0x44, 0x61, 0x79, 0x88, 0x01, 0x01,
  2632  	0x12, 0x20, 0x0a, 0x09, 0x74, 0x68, 0x72, 0x65, 0x65, 0x5f, 0x64, 0x61, 0x79, 0x18, 0x02, 0x20,
  2633  	0x01, 0x28, 0x03, 0x48, 0x01, 0x52, 0x08, 0x74, 0x68, 0x72, 0x65, 0x65, 0x44, 0x61, 0x79, 0x88,
  2634  	0x01, 0x01, 0x12, 0x20, 0x0a, 0x09, 0x73, 0x65, 0x76, 0x65, 0x6e, 0x5f, 0x64, 0x61, 0x79, 0x18,
  2635  	0x03, 0x20, 0x01, 0x28, 0x03, 0x48, 0x02, 0x52, 0x08, 0x73, 0x65, 0x76, 0x65, 0x6e, 0x44, 0x61,
  2636  	0x79, 0x88, 0x01, 0x01, 0x42, 0x0a, 0x0a, 0x08, 0x5f, 0x6f, 0x6e, 0x65, 0x5f, 0x64, 0x61, 0x79,
  2637  	0x42, 0x0c, 0x0a, 0x0a, 0x5f, 0x74, 0x68, 0x72, 0x65, 0x65, 0x5f, 0x64, 0x61, 0x79, 0x42, 0x0c,
  2638  	0x0a, 0x0a, 0x5f, 0x73, 0x65, 0x76, 0x65, 0x6e, 0x5f, 0x64, 0x61, 0x79, 0x22, 0xd9, 0x03, 0x0a,
  2639  	0x0f, 0x4d, 0x6f, 0x6e, 0x6f, 0x72, 0x61, 0x69, 0x6c, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74,
  2640  	0x12, 0x18, 0x0a, 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28,
  2641  	0x09, 0x52, 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x5a, 0x0a, 0x14, 0x64, 0x65,
  2642  	0x66, 0x61, 0x75, 0x6c, 0x74, 0x5f, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x5f, 0x76, 0x61, 0x6c, 0x75,
  2643  	0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x6c, 0x75, 0x63, 0x69, 0x2e,
  2644  	0x61, 0x6e, 0x61, 0x6c, 0x79, 0x73, 0x69, 0x73, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e,
  2645  	0x4d, 0x6f, 0x6e, 0x6f, 0x72, 0x61, 0x69, 0x6c, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x56, 0x61, 0x6c,
  2646  	0x75, 0x65, 0x52, 0x12, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x46, 0x69, 0x65, 0x6c, 0x64,
  2647  	0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x12, 0x2a, 0x0a, 0x11, 0x70, 0x72, 0x69, 0x6f, 0x72, 0x69,
  2648  	0x74, 0x79, 0x5f, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28,
  2649  	0x03, 0x52, 0x0f, 0x70, 0x72, 0x69, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x46, 0x69, 0x65, 0x6c, 0x64,
  2650  	0x49, 0x64, 0x12, 0x46, 0x0a, 0x0a, 0x70, 0x72, 0x69, 0x6f, 0x72, 0x69, 0x74, 0x69, 0x65, 0x73,
  2651  	0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x6c, 0x75, 0x63, 0x69, 0x2e, 0x61, 0x6e,
  2652  	0x61, 0x6c, 0x79, 0x73, 0x69, 0x73, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x4d, 0x6f,
  2653  	0x6e, 0x6f, 0x72, 0x61, 0x69, 0x6c, 0x50, 0x72, 0x69, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x52, 0x0a,
  2654  	0x70, 0x72, 0x69, 0x6f, 0x72, 0x69, 0x74, 0x69, 0x65, 0x73, 0x12, 0x3e, 0x0a, 0x1b, 0x70, 0x72,
  2655  	0x69, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x5f, 0x68, 0x79, 0x73, 0x74, 0x65, 0x72, 0x65, 0x73, 0x69,
  2656  	0x73, 0x5f, 0x70, 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52,
  2657  	0x19, 0x70, 0x72, 0x69, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x48, 0x79, 0x73, 0x74, 0x65, 0x72, 0x65,
  2658  	0x73, 0x69, 0x73, 0x50, 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, 0x12, 0x25, 0x0a, 0x0e, 0x64, 0x69,
  2659  	0x73, 0x70, 0x6c, 0x61, 0x79, 0x5f, 0x70, 0x72, 0x65, 0x66, 0x69, 0x78, 0x18, 0x06, 0x20, 0x01,
  2660  	0x28, 0x09, 0x52, 0x0d, 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x50, 0x72, 0x65, 0x66, 0x69,
  2661  	0x78, 0x12, 0x2b, 0x0a, 0x11, 0x6d, 0x6f, 0x6e, 0x6f, 0x72, 0x61, 0x69, 0x6c, 0x5f, 0x68, 0x6f,
  2662  	0x73, 0x74, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x10, 0x6d, 0x6f,
  2663  	0x6e, 0x6f, 0x72, 0x61, 0x69, 0x6c, 0x48, 0x6f, 0x73, 0x74, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x48,
  2664  	0x0a, 0x21, 0x66, 0x69, 0x6c, 0x65, 0x5f, 0x77, 0x69, 0x74, 0x68, 0x6f, 0x75, 0x74, 0x5f, 0x72,
  2665  	0x65, 0x73, 0x74, 0x72, 0x69, 0x63, 0x74, 0x5f, 0x76, 0x69, 0x65, 0x77, 0x5f, 0x67, 0x6f, 0x6f,
  2666  	0x67, 0x6c, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x08, 0x52, 0x1d, 0x66, 0x69, 0x6c, 0x65, 0x57,
  2667  	0x69, 0x74, 0x68, 0x6f, 0x75, 0x74, 0x52, 0x65, 0x73, 0x74, 0x72, 0x69, 0x63, 0x74, 0x56, 0x69,
  2668  	0x65, 0x77, 0x47, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x22, 0x45, 0x0a, 0x12, 0x4d, 0x6f, 0x6e, 0x6f,
  2669  	0x72, 0x61, 0x69, 0x6c, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x19,
  2670  	0x0a, 0x08, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03,
  2671  	0x52, 0x07, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x49, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c,
  2672  	0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22,
  2673  	0xc0, 0x01, 0x0a, 0x10, 0x4d, 0x6f, 0x6e, 0x6f, 0x72, 0x61, 0x69, 0x6c, 0x50, 0x72, 0x69, 0x6f,
  2674  	0x72, 0x69, 0x74, 0x79, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x72, 0x69, 0x6f, 0x72, 0x69, 0x74, 0x79,
  2675  	0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x70, 0x72, 0x69, 0x6f, 0x72, 0x69, 0x74, 0x79,
  2676  	0x12, 0x43, 0x0a, 0x09, 0x74, 0x68, 0x72, 0x65, 0x73, 0x68, 0x6f, 0x6c, 0x64, 0x18, 0x02, 0x20,
  2677  	0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x6c, 0x75, 0x63, 0x69, 0x2e, 0x61, 0x6e, 0x61, 0x6c, 0x79,
  2678  	0x73, 0x69, 0x73, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x49, 0x6d, 0x70, 0x61, 0x63,
  2679  	0x74, 0x54, 0x68, 0x72, 0x65, 0x73, 0x68, 0x6f, 0x6c, 0x64, 0x52, 0x09, 0x74, 0x68, 0x72, 0x65,
  2680  	0x73, 0x68, 0x6f, 0x6c, 0x64, 0x12, 0x4b, 0x0a, 0x0a, 0x74, 0x68, 0x72, 0x65, 0x73, 0x68, 0x6f,
  2681  	0x6c, 0x64, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x6c, 0x75, 0x63, 0x69,
  2682  	0x2e, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x73, 0x69, 0x73, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67,
  2683  	0x2e, 0x49, 0x6d, 0x70, 0x61, 0x63, 0x74, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x54, 0x68, 0x72,
  2684  	0x65, 0x73, 0x68, 0x6f, 0x6c, 0x64, 0x52, 0x0a, 0x74, 0x68, 0x72, 0x65, 0x73, 0x68, 0x6f, 0x6c,
  2685  	0x64, 0x73, 0x22, 0x86, 0x01, 0x0a, 0x0b, 0x52, 0x65, 0x61, 0x6c, 0x6d, 0x43, 0x6f, 0x6e, 0x66,
  2686  	0x69, 0x67, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09,
  2687  	0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x63, 0x0a, 0x15, 0x74, 0x65, 0x73, 0x74, 0x5f, 0x76,
  2688  	0x61, 0x72, 0x69, 0x61, 0x6e, 0x74, 0x5f, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x73, 0x69, 0x73, 0x18,
  2689  	0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x6c, 0x75, 0x63, 0x69, 0x2e, 0x61, 0x6e, 0x61,
  2690  	0x6c, 0x79, 0x73, 0x69, 0x73, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x54, 0x65, 0x73,
  2691  	0x74, 0x56, 0x61, 0x72, 0x69, 0x61, 0x6e, 0x74, 0x41, 0x6e, 0x61, 0x6c, 0x79, 0x73, 0x69, 0x73,
  2692  	0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x13, 0x74, 0x65, 0x73, 0x74, 0x56, 0x61, 0x72, 0x69,
  2693  	0x61, 0x6e, 0x74, 0x41, 0x6e, 0x61, 0x6c, 0x79, 0x73, 0x69, 0x73, 0x22, 0x94, 0x01, 0x0a, 0x0a,
  2694  	0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x69, 0x6e, 0x67, 0x12, 0x54, 0x0a, 0x0f, 0x74, 0x65,
  2695  	0x73, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x5f, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x18, 0x01, 0x20,
  2696  	0x03, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x6c, 0x75, 0x63, 0x69, 0x2e, 0x61, 0x6e, 0x61, 0x6c, 0x79,
  2697  	0x73, 0x69, 0x73, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x4e,
  2698  	0x61, 0x6d, 0x65, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x69, 0x6e, 0x67, 0x52, 0x75, 0x6c,
  2699  	0x65, 0x52, 0x0d, 0x74, 0x65, 0x73, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x52, 0x75, 0x6c, 0x65, 0x73,
  2700  	0x12, 0x30, 0x0a, 0x14, 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x5f, 0x6d, 0x61, 0x73, 0x6b, 0x5f,
  2701  	0x70, 0x61, 0x74, 0x74, 0x65, 0x72, 0x6e, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x12,
  2702  	0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x4d, 0x61, 0x73, 0x6b, 0x50, 0x61, 0x74, 0x74, 0x65, 0x72,
  2703  	0x6e, 0x73, 0x22, 0x6b, 0x0a, 0x16, 0x54, 0x65, 0x73, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x43, 0x6c,
  2704  	0x75, 0x73, 0x74, 0x65, 0x72, 0x69, 0x6e, 0x67, 0x52, 0x75, 0x6c, 0x65, 0x12, 0x12, 0x0a, 0x04,
  2705  	0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65,
  2706  	0x12, 0x18, 0x0a, 0x07, 0x70, 0x61, 0x74, 0x74, 0x65, 0x72, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28,
  2707  	0x09, 0x52, 0x07, 0x70, 0x61, 0x74, 0x74, 0x65, 0x72, 0x6e, 0x12, 0x23, 0x0a, 0x0d, 0x6c, 0x69,
  2708  	0x6b, 0x65, 0x5f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28,
  2709  	0x09, 0x52, 0x0c, 0x6c, 0x69, 0x6b, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x22,
  2710  	0x24, 0x0a, 0x12, 0x42, 0x75, 0x67, 0x61, 0x6e, 0x69, 0x7a, 0x65, 0x72, 0x43, 0x6f, 0x6d, 0x70,
  2711  	0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28,
  2712  	0x03, 0x52, 0x02, 0x69, 0x64, 0x22, 0xbf, 0x04, 0x0a, 0x10, 0x42, 0x75, 0x67, 0x61, 0x6e, 0x69,
  2713  	0x7a, 0x65, 0x72, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x55, 0x0a, 0x11, 0x64, 0x65,
  2714  	0x66, 0x61, 0x75, 0x6c, 0x74, 0x5f, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x18,
  2715  	0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x6c, 0x75, 0x63, 0x69, 0x2e, 0x61, 0x6e, 0x61,
  2716  	0x6c, 0x79, 0x73, 0x69, 0x73, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x42, 0x75, 0x67,
  2717  	0x61, 0x6e, 0x69, 0x7a, 0x65, 0x72, 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x52,
  2718  	0x10, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e,
  2719  	0x74, 0x12, 0x3e, 0x0a, 0x1b, 0x70, 0x72, 0x69, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x5f, 0x68, 0x79,
  2720  	0x73, 0x74, 0x65, 0x72, 0x65, 0x73, 0x69, 0x73, 0x5f, 0x70, 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74,
  2721  	0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x19, 0x70, 0x72, 0x69, 0x6f, 0x72, 0x69, 0x74, 0x79,
  2722  	0x48, 0x79, 0x73, 0x74, 0x65, 0x72, 0x65, 0x73, 0x69, 0x73, 0x50, 0x65, 0x72, 0x63, 0x65, 0x6e,
  2723  	0x74, 0x12, 0x63, 0x0a, 0x11, 0x70, 0x72, 0x69, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x5f, 0x6d, 0x61,
  2724  	0x70, 0x70, 0x69, 0x6e, 0x67, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x36, 0x2e, 0x6c,
  2725  	0x75, 0x63, 0x69, 0x2e, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x73, 0x69, 0x73, 0x2e, 0x63, 0x6f, 0x6e,
  2726  	0x66, 0x69, 0x67, 0x2e, 0x42, 0x75, 0x67, 0x61, 0x6e, 0x69, 0x7a, 0x65, 0x72, 0x50, 0x72, 0x6f,
  2727  	0x6a, 0x65, 0x63, 0x74, 0x2e, 0x50, 0x72, 0x69, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x4d, 0x61, 0x70,
  2728  	0x70, 0x69, 0x6e, 0x67, 0x52, 0x10, 0x70, 0x72, 0x69, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x4d, 0x61,
  2729  	0x70, 0x70, 0x69, 0x6e, 0x67, 0x73, 0x12, 0x44, 0x0a, 0x1f, 0x66, 0x69, 0x6c, 0x65, 0x5f, 0x77,
  2730  	0x69, 0x74, 0x68, 0x6f, 0x75, 0x74, 0x5f, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x5f, 0x76, 0x69, 0x65,
  2731  	0x77, 0x5f, 0x74, 0x72, 0x75, 0x73, 0x74, 0x65, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52,
  2732  	0x1b, 0x66, 0x69, 0x6c, 0x65, 0x57, 0x69, 0x74, 0x68, 0x6f, 0x75, 0x74, 0x4c, 0x69, 0x6d, 0x69,
  2733  	0x74, 0x56, 0x69, 0x65, 0x77, 0x54, 0x72, 0x75, 0x73, 0x74, 0x65, 0x64, 0x1a, 0xe8, 0x01, 0x0a,
  2734  	0x0f, 0x50, 0x72, 0x69, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x4d, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67,
  2735  	0x12, 0x43, 0x0a, 0x08, 0x70, 0x72, 0x69, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x18, 0x01, 0x20, 0x01,
  2736  	0x28, 0x0e, 0x32, 0x27, 0x2e, 0x6c, 0x75, 0x63, 0x69, 0x2e, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x73,
  2737  	0x69, 0x73, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x42, 0x75, 0x67, 0x61, 0x6e, 0x69,
  2738  	0x7a, 0x65, 0x72, 0x50, 0x72, 0x69, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x52, 0x08, 0x70, 0x72, 0x69,
  2739  	0x6f, 0x72, 0x69, 0x74, 0x79, 0x12, 0x43, 0x0a, 0x09, 0x74, 0x68, 0x72, 0x65, 0x73, 0x68, 0x6f,
  2740  	0x6c, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x6c, 0x75, 0x63, 0x69, 0x2e,
  2741  	0x61, 0x6e, 0x61, 0x6c, 0x79, 0x73, 0x69, 0x73, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e,
  2742  	0x49, 0x6d, 0x70, 0x61, 0x63, 0x74, 0x54, 0x68, 0x72, 0x65, 0x73, 0x68, 0x6f, 0x6c, 0x64, 0x52,
  2743  	0x09, 0x74, 0x68, 0x72, 0x65, 0x73, 0x68, 0x6f, 0x6c, 0x64, 0x12, 0x4b, 0x0a, 0x0a, 0x74, 0x68,
  2744  	0x72, 0x65, 0x73, 0x68, 0x6f, 0x6c, 0x64, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2b,
  2745  	0x2e, 0x6c, 0x75, 0x63, 0x69, 0x2e, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x73, 0x69, 0x73, 0x2e, 0x63,
  2746  	0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x49, 0x6d, 0x70, 0x61, 0x63, 0x74, 0x4d, 0x65, 0x74, 0x72,
  2747  	0x69, 0x63, 0x54, 0x68, 0x72, 0x65, 0x73, 0x68, 0x6f, 0x6c, 0x64, 0x52, 0x0a, 0x74, 0x68, 0x72,
  2748  	0x65, 0x73, 0x68, 0x6f, 0x6c, 0x64, 0x73, 0x22, 0xf2, 0x03, 0x0a, 0x15, 0x54, 0x65, 0x73, 0x74,
  2749  	0x53, 0x74, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x43, 0x72, 0x69, 0x74, 0x65, 0x72, 0x69,
  2750  	0x61, 0x12, 0x62, 0x0a, 0x0c, 0x66, 0x61, 0x69, 0x6c, 0x75, 0x72, 0x65, 0x5f, 0x72, 0x61, 0x74,
  2751  	0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3f, 0x2e, 0x6c, 0x75, 0x63, 0x69, 0x2e, 0x61,
  2752  	0x6e, 0x61, 0x6c, 0x79, 0x73, 0x69, 0x73, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x54,
  2753  	0x65, 0x73, 0x74, 0x53, 0x74, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x43, 0x72, 0x69, 0x74,
  2754  	0x65, 0x72, 0x69, 0x61, 0x2e, 0x46, 0x61, 0x69, 0x6c, 0x75, 0x72, 0x65, 0x52, 0x61, 0x74, 0x65,
  2755  	0x43, 0x72, 0x69, 0x74, 0x65, 0x72, 0x69, 0x61, 0x52, 0x0b, 0x66, 0x61, 0x69, 0x6c, 0x75, 0x72,
  2756  	0x65, 0x52, 0x61, 0x74, 0x65, 0x12, 0x5c, 0x0a, 0x0a, 0x66, 0x6c, 0x61, 0x6b, 0x65, 0x5f, 0x72,
  2757  	0x61, 0x74, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3d, 0x2e, 0x6c, 0x75, 0x63, 0x69,
  2758  	0x2e, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x73, 0x69, 0x73, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67,
  2759  	0x2e, 0x54, 0x65, 0x73, 0x74, 0x53, 0x74, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x43, 0x72,
  2760  	0x69, 0x74, 0x65, 0x72, 0x69, 0x61, 0x2e, 0x46, 0x6c, 0x61, 0x6b, 0x65, 0x52, 0x61, 0x74, 0x65,
  2761  	0x43, 0x72, 0x69, 0x74, 0x65, 0x72, 0x69, 0x61, 0x52, 0x09, 0x66, 0x6c, 0x61, 0x6b, 0x65, 0x52,
  2762  	0x61, 0x74, 0x65, 0x1a, 0x86, 0x01, 0x0a, 0x13, 0x46, 0x61, 0x69, 0x6c, 0x75, 0x72, 0x65, 0x52,
  2763  	0x61, 0x74, 0x65, 0x43, 0x72, 0x69, 0x74, 0x65, 0x72, 0x69, 0x61, 0x12, 0x2b, 0x0a, 0x11, 0x66,
  2764  	0x61, 0x69, 0x6c, 0x75, 0x72, 0x65, 0x5f, 0x74, 0x68, 0x72, 0x65, 0x73, 0x68, 0x6f, 0x6c, 0x64,
  2765  	0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x10, 0x66, 0x61, 0x69, 0x6c, 0x75, 0x72, 0x65, 0x54,
  2766  	0x68, 0x72, 0x65, 0x73, 0x68, 0x6f, 0x6c, 0x64, 0x12, 0x42, 0x0a, 0x1d, 0x63, 0x6f, 0x6e, 0x73,
  2767  	0x65, 0x63, 0x75, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x66, 0x61, 0x69, 0x6c, 0x75, 0x72, 0x65, 0x5f,
  2768  	0x74, 0x68, 0x72, 0x65, 0x73, 0x68, 0x6f, 0x6c, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52,
  2769  	0x1b, 0x63, 0x6f, 0x6e, 0x73, 0x65, 0x63, 0x75, 0x74, 0x69, 0x76, 0x65, 0x46, 0x61, 0x69, 0x6c,
  2770  	0x75, 0x72, 0x65, 0x54, 0x68, 0x72, 0x65, 0x73, 0x68, 0x6f, 0x6c, 0x64, 0x1a, 0x8d, 0x01, 0x0a,
  2771  	0x11, 0x46, 0x6c, 0x61, 0x6b, 0x65, 0x52, 0x61, 0x74, 0x65, 0x43, 0x72, 0x69, 0x74, 0x65, 0x72,
  2772  	0x69, 0x61, 0x12, 0x1d, 0x0a, 0x0a, 0x6d, 0x69, 0x6e, 0x5f, 0x77, 0x69, 0x6e, 0x64, 0x6f, 0x77,
  2773  	0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x6d, 0x69, 0x6e, 0x57, 0x69, 0x6e, 0x64, 0x6f,
  2774  	0x77, 0x12, 0x27, 0x0a, 0x0f, 0x66, 0x6c, 0x61, 0x6b, 0x65, 0x5f, 0x74, 0x68, 0x72, 0x65, 0x73,
  2775  	0x68, 0x6f, 0x6c, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0e, 0x66, 0x6c, 0x61, 0x6b,
  2776  	0x65, 0x54, 0x68, 0x72, 0x65, 0x73, 0x68, 0x6f, 0x6c, 0x64, 0x12, 0x30, 0x0a, 0x14, 0x66, 0x6c,
  2777  	0x61, 0x6b, 0x65, 0x5f, 0x72, 0x61, 0x74, 0x65, 0x5f, 0x74, 0x68, 0x72, 0x65, 0x73, 0x68, 0x6f,
  2778  	0x6c, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x01, 0x52, 0x12, 0x66, 0x6c, 0x61, 0x6b, 0x65, 0x52,
  2779  	0x61, 0x74, 0x65, 0x54, 0x68, 0x72, 0x65, 0x73, 0x68, 0x6f, 0x6c, 0x64, 0x2a, 0x44, 0x0a, 0x09,
  2780  	0x42, 0x75, 0x67, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x12, 0x1a, 0x0a, 0x16, 0x42, 0x55, 0x47,
  2781  	0x5f, 0x53, 0x59, 0x53, 0x54, 0x45, 0x4d, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46,
  2782  	0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x0c, 0x0a, 0x08, 0x4d, 0x4f, 0x4e, 0x4f, 0x52, 0x41, 0x49,
  2783  	0x4c, 0x10, 0x01, 0x12, 0x0d, 0x0a, 0x09, 0x42, 0x55, 0x47, 0x41, 0x4e, 0x49, 0x5a, 0x45, 0x52,
  2784  	0x10, 0x02, 0x2a, 0x5f, 0x0a, 0x11, 0x42, 0x75, 0x67, 0x61, 0x6e, 0x69, 0x7a, 0x65, 0x72, 0x50,
  2785  	0x72, 0x69, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x12, 0x22, 0x0a, 0x1e, 0x42, 0x55, 0x47, 0x41, 0x4e,
  2786  	0x49, 0x5a, 0x45, 0x52, 0x5f, 0x50, 0x52, 0x49, 0x4f, 0x52, 0x49, 0x54, 0x59, 0x5f, 0x55, 0x4e,
  2787  	0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x06, 0x0a, 0x02, 0x50,
  2788  	0x30, 0x10, 0x01, 0x12, 0x06, 0x0a, 0x02, 0x50, 0x31, 0x10, 0x02, 0x12, 0x06, 0x0a, 0x02, 0x50,
  2789  	0x32, 0x10, 0x03, 0x12, 0x06, 0x0a, 0x02, 0x50, 0x33, 0x10, 0x04, 0x12, 0x06, 0x0a, 0x02, 0x50,
  2790  	0x34, 0x10, 0x05, 0x42, 0x35, 0x5a, 0x33, 0x67, 0x6f, 0x2e, 0x63, 0x68, 0x72, 0x6f, 0x6d, 0x69,
  2791  	0x75, 0x6d, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x6c, 0x75, 0x63, 0x69, 0x2f, 0x61, 0x6e, 0x61, 0x6c,
  2792  	0x79, 0x73, 0x69, 0x73, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69,
  2793  	0x67, 0x3b, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x70, 0x62, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74,
  2794  	0x6f, 0x33,
  2795  }
  2796  
  2797  var (
  2798  	file_go_chromium_org_luci_analysis_proto_config_project_config_proto_rawDescOnce sync.Once
  2799  	file_go_chromium_org_luci_analysis_proto_config_project_config_proto_rawDescData = file_go_chromium_org_luci_analysis_proto_config_project_config_proto_rawDesc
  2800  )
  2801  
  2802  func file_go_chromium_org_luci_analysis_proto_config_project_config_proto_rawDescGZIP() []byte {
  2803  	file_go_chromium_org_luci_analysis_proto_config_project_config_proto_rawDescOnce.Do(func() {
  2804  		file_go_chromium_org_luci_analysis_proto_config_project_config_proto_rawDescData = protoimpl.X.CompressGZIP(file_go_chromium_org_luci_analysis_proto_config_project_config_proto_rawDescData)
  2805  	})
  2806  	return file_go_chromium_org_luci_analysis_proto_config_project_config_proto_rawDescData
  2807  }
  2808  
  2809  var file_go_chromium_org_luci_analysis_proto_config_project_config_proto_enumTypes = make([]protoimpl.EnumInfo, 2)
  2810  var file_go_chromium_org_luci_analysis_proto_config_project_config_proto_msgTypes = make([]protoimpl.MessageInfo, 26)
  2811  var file_go_chromium_org_luci_analysis_proto_config_project_config_proto_goTypes = []interface{}{
  2812  	(BugSystem)(0),                                    // 0: luci.analysis.config.BugSystem
  2813  	(BuganizerPriority)(0),                            // 1: luci.analysis.config.BuganizerPriority
  2814  	(*ProjectConfig)(nil),                             // 2: luci.analysis.config.ProjectConfig
  2815  	(*ProjectMetadata)(nil),                           // 3: luci.analysis.config.ProjectMetadata
  2816  	(*Metrics)(nil),                                   // 4: luci.analysis.config.Metrics
  2817  	(*BugManagement)(nil),                             // 5: luci.analysis.config.BugManagement
  2818  	(*BugManagementPolicy)(nil),                       // 6: luci.analysis.config.BugManagementPolicy
  2819  	(*ImpactThreshold)(nil),                           // 7: luci.analysis.config.ImpactThreshold
  2820  	(*ImpactMetricThreshold)(nil),                     // 8: luci.analysis.config.ImpactMetricThreshold
  2821  	(*MetricThreshold)(nil),                           // 9: luci.analysis.config.MetricThreshold
  2822  	(*MonorailProject)(nil),                           // 10: luci.analysis.config.MonorailProject
  2823  	(*MonorailFieldValue)(nil),                        // 11: luci.analysis.config.MonorailFieldValue
  2824  	(*MonorailPriority)(nil),                          // 12: luci.analysis.config.MonorailPriority
  2825  	(*RealmConfig)(nil),                               // 13: luci.analysis.config.RealmConfig
  2826  	(*Clustering)(nil),                                // 14: luci.analysis.config.Clustering
  2827  	(*TestNameClusteringRule)(nil),                    // 15: luci.analysis.config.TestNameClusteringRule
  2828  	(*BuganizerComponent)(nil),                        // 16: luci.analysis.config.BuganizerComponent
  2829  	(*BuganizerProject)(nil),                          // 17: luci.analysis.config.BuganizerProject
  2830  	(*TestStabilityCriteria)(nil),                     // 18: luci.analysis.config.TestStabilityCriteria
  2831  	(*Metrics_MetricOverride)(nil),                    // 19: luci.analysis.config.Metrics.MetricOverride
  2832  	(*BugManagementPolicy_Metric)(nil),                // 20: luci.analysis.config.BugManagementPolicy.Metric
  2833  	(*BugManagementPolicy_Explanation)(nil),           // 21: luci.analysis.config.BugManagementPolicy.Explanation
  2834  	(*BugManagementPolicy_BugTemplate)(nil),           // 22: luci.analysis.config.BugManagementPolicy.BugTemplate
  2835  	(*BugManagementPolicy_BugTemplate_Buganizer)(nil), // 23: luci.analysis.config.BugManagementPolicy.BugTemplate.Buganizer
  2836  	(*BugManagementPolicy_BugTemplate_Monorail)(nil),  // 24: luci.analysis.config.BugManagementPolicy.BugTemplate.Monorail
  2837  	(*BuganizerProject_PriorityMapping)(nil),          // 25: luci.analysis.config.BuganizerProject.PriorityMapping
  2838  	(*TestStabilityCriteria_FailureRateCriteria)(nil), // 26: luci.analysis.config.TestStabilityCriteria.FailureRateCriteria
  2839  	(*TestStabilityCriteria_FlakeRateCriteria)(nil),   // 27: luci.analysis.config.TestStabilityCriteria.FlakeRateCriteria
  2840  	(*timestamppb.Timestamp)(nil),                     // 28: google.protobuf.Timestamp
  2841  	(*TestVariantAnalysisConfig)(nil),                 // 29: luci.analysis.config.TestVariantAnalysisConfig
  2842  }
  2843  var file_go_chromium_org_luci_analysis_proto_config_project_config_proto_depIdxs = []int32{
  2844  	3,  // 0: luci.analysis.config.ProjectConfig.project_metadata:type_name -> luci.analysis.config.ProjectMetadata
  2845  	28, // 1: luci.analysis.config.ProjectConfig.last_updated:type_name -> google.protobuf.Timestamp
  2846  	14, // 2: luci.analysis.config.ProjectConfig.clustering:type_name -> luci.analysis.config.Clustering
  2847  	5,  // 3: luci.analysis.config.ProjectConfig.bug_management:type_name -> luci.analysis.config.BugManagement
  2848  	4,  // 4: luci.analysis.config.ProjectConfig.metrics:type_name -> luci.analysis.config.Metrics
  2849  	18, // 5: luci.analysis.config.ProjectConfig.test_stability_criteria:type_name -> luci.analysis.config.TestStabilityCriteria
  2850  	13, // 6: luci.analysis.config.ProjectConfig.realms:type_name -> luci.analysis.config.RealmConfig
  2851  	0,  // 7: luci.analysis.config.ProjectConfig.bug_system:type_name -> luci.analysis.config.BugSystem
  2852  	10, // 8: luci.analysis.config.ProjectConfig.monorail:type_name -> luci.analysis.config.MonorailProject
  2853  	17, // 9: luci.analysis.config.ProjectConfig.buganizer:type_name -> luci.analysis.config.BuganizerProject
  2854  	7,  // 10: luci.analysis.config.ProjectConfig.bug_filing_threshold:type_name -> luci.analysis.config.ImpactThreshold
  2855  	8,  // 11: luci.analysis.config.ProjectConfig.bug_filing_thresholds:type_name -> luci.analysis.config.ImpactMetricThreshold
  2856  	19, // 12: luci.analysis.config.Metrics.overrides:type_name -> luci.analysis.config.Metrics.MetricOverride
  2857  	6,  // 13: luci.analysis.config.BugManagement.policies:type_name -> luci.analysis.config.BugManagementPolicy
  2858  	0,  // 14: luci.analysis.config.BugManagement.default_bug_system:type_name -> luci.analysis.config.BugSystem
  2859  	17, // 15: luci.analysis.config.BugManagement.buganizer:type_name -> luci.analysis.config.BuganizerProject
  2860  	10, // 16: luci.analysis.config.BugManagement.monorail:type_name -> luci.analysis.config.MonorailProject
  2861  	1,  // 17: luci.analysis.config.BugManagementPolicy.priority:type_name -> luci.analysis.config.BuganizerPriority
  2862  	20, // 18: luci.analysis.config.BugManagementPolicy.metrics:type_name -> luci.analysis.config.BugManagementPolicy.Metric
  2863  	21, // 19: luci.analysis.config.BugManagementPolicy.explanation:type_name -> luci.analysis.config.BugManagementPolicy.Explanation
  2864  	22, // 20: luci.analysis.config.BugManagementPolicy.bug_template:type_name -> luci.analysis.config.BugManagementPolicy.BugTemplate
  2865  	9,  // 21: luci.analysis.config.ImpactThreshold.test_results_failed:type_name -> luci.analysis.config.MetricThreshold
  2866  	9,  // 22: luci.analysis.config.ImpactThreshold.test_runs_failed:type_name -> luci.analysis.config.MetricThreshold
  2867  	9,  // 23: luci.analysis.config.ImpactThreshold.presubmit_runs_failed:type_name -> luci.analysis.config.MetricThreshold
  2868  	9,  // 24: luci.analysis.config.ImpactThreshold.critical_failures_exonerated:type_name -> luci.analysis.config.MetricThreshold
  2869  	9,  // 25: luci.analysis.config.ImpactMetricThreshold.threshold:type_name -> luci.analysis.config.MetricThreshold
  2870  	11, // 26: luci.analysis.config.MonorailProject.default_field_values:type_name -> luci.analysis.config.MonorailFieldValue
  2871  	12, // 27: luci.analysis.config.MonorailProject.priorities:type_name -> luci.analysis.config.MonorailPriority
  2872  	7,  // 28: luci.analysis.config.MonorailPriority.threshold:type_name -> luci.analysis.config.ImpactThreshold
  2873  	8,  // 29: luci.analysis.config.MonorailPriority.thresholds:type_name -> luci.analysis.config.ImpactMetricThreshold
  2874  	29, // 30: luci.analysis.config.RealmConfig.test_variant_analysis:type_name -> luci.analysis.config.TestVariantAnalysisConfig
  2875  	15, // 31: luci.analysis.config.Clustering.test_name_rules:type_name -> luci.analysis.config.TestNameClusteringRule
  2876  	16, // 32: luci.analysis.config.BuganizerProject.default_component:type_name -> luci.analysis.config.BuganizerComponent
  2877  	25, // 33: luci.analysis.config.BuganizerProject.priority_mappings:type_name -> luci.analysis.config.BuganizerProject.PriorityMapping
  2878  	26, // 34: luci.analysis.config.TestStabilityCriteria.failure_rate:type_name -> luci.analysis.config.TestStabilityCriteria.FailureRateCriteria
  2879  	27, // 35: luci.analysis.config.TestStabilityCriteria.flake_rate:type_name -> luci.analysis.config.TestStabilityCriteria.FlakeRateCriteria
  2880  	9,  // 36: luci.analysis.config.BugManagementPolicy.Metric.activation_threshold:type_name -> luci.analysis.config.MetricThreshold
  2881  	9,  // 37: luci.analysis.config.BugManagementPolicy.Metric.deactivation_threshold:type_name -> luci.analysis.config.MetricThreshold
  2882  	23, // 38: luci.analysis.config.BugManagementPolicy.BugTemplate.buganizer:type_name -> luci.analysis.config.BugManagementPolicy.BugTemplate.Buganizer
  2883  	24, // 39: luci.analysis.config.BugManagementPolicy.BugTemplate.monorail:type_name -> luci.analysis.config.BugManagementPolicy.BugTemplate.Monorail
  2884  	1,  // 40: luci.analysis.config.BuganizerProject.PriorityMapping.priority:type_name -> luci.analysis.config.BuganizerPriority
  2885  	7,  // 41: luci.analysis.config.BuganizerProject.PriorityMapping.threshold:type_name -> luci.analysis.config.ImpactThreshold
  2886  	8,  // 42: luci.analysis.config.BuganizerProject.PriorityMapping.thresholds:type_name -> luci.analysis.config.ImpactMetricThreshold
  2887  	43, // [43:43] is the sub-list for method output_type
  2888  	43, // [43:43] is the sub-list for method input_type
  2889  	43, // [43:43] is the sub-list for extension type_name
  2890  	43, // [43:43] is the sub-list for extension extendee
  2891  	0,  // [0:43] is the sub-list for field type_name
  2892  }
  2893  
  2894  func init() { file_go_chromium_org_luci_analysis_proto_config_project_config_proto_init() }
  2895  func file_go_chromium_org_luci_analysis_proto_config_project_config_proto_init() {
  2896  	if File_go_chromium_org_luci_analysis_proto_config_project_config_proto != nil {
  2897  		return
  2898  	}
  2899  	file_go_chromium_org_luci_analysis_proto_config_test_variant_analysis_config_proto_init()
  2900  	if !protoimpl.UnsafeEnabled {
  2901  		file_go_chromium_org_luci_analysis_proto_config_project_config_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} {
  2902  			switch v := v.(*ProjectConfig); i {
  2903  			case 0:
  2904  				return &v.state
  2905  			case 1:
  2906  				return &v.sizeCache
  2907  			case 2:
  2908  				return &v.unknownFields
  2909  			default:
  2910  				return nil
  2911  			}
  2912  		}
  2913  		file_go_chromium_org_luci_analysis_proto_config_project_config_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} {
  2914  			switch v := v.(*ProjectMetadata); i {
  2915  			case 0:
  2916  				return &v.state
  2917  			case 1:
  2918  				return &v.sizeCache
  2919  			case 2:
  2920  				return &v.unknownFields
  2921  			default:
  2922  				return nil
  2923  			}
  2924  		}
  2925  		file_go_chromium_org_luci_analysis_proto_config_project_config_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} {
  2926  			switch v := v.(*Metrics); i {
  2927  			case 0:
  2928  				return &v.state
  2929  			case 1:
  2930  				return &v.sizeCache
  2931  			case 2:
  2932  				return &v.unknownFields
  2933  			default:
  2934  				return nil
  2935  			}
  2936  		}
  2937  		file_go_chromium_org_luci_analysis_proto_config_project_config_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} {
  2938  			switch v := v.(*BugManagement); i {
  2939  			case 0:
  2940  				return &v.state
  2941  			case 1:
  2942  				return &v.sizeCache
  2943  			case 2:
  2944  				return &v.unknownFields
  2945  			default:
  2946  				return nil
  2947  			}
  2948  		}
  2949  		file_go_chromium_org_luci_analysis_proto_config_project_config_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} {
  2950  			switch v := v.(*BugManagementPolicy); i {
  2951  			case 0:
  2952  				return &v.state
  2953  			case 1:
  2954  				return &v.sizeCache
  2955  			case 2:
  2956  				return &v.unknownFields
  2957  			default:
  2958  				return nil
  2959  			}
  2960  		}
  2961  		file_go_chromium_org_luci_analysis_proto_config_project_config_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} {
  2962  			switch v := v.(*ImpactThreshold); i {
  2963  			case 0:
  2964  				return &v.state
  2965  			case 1:
  2966  				return &v.sizeCache
  2967  			case 2:
  2968  				return &v.unknownFields
  2969  			default:
  2970  				return nil
  2971  			}
  2972  		}
  2973  		file_go_chromium_org_luci_analysis_proto_config_project_config_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} {
  2974  			switch v := v.(*ImpactMetricThreshold); i {
  2975  			case 0:
  2976  				return &v.state
  2977  			case 1:
  2978  				return &v.sizeCache
  2979  			case 2:
  2980  				return &v.unknownFields
  2981  			default:
  2982  				return nil
  2983  			}
  2984  		}
  2985  		file_go_chromium_org_luci_analysis_proto_config_project_config_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} {
  2986  			switch v := v.(*MetricThreshold); i {
  2987  			case 0:
  2988  				return &v.state
  2989  			case 1:
  2990  				return &v.sizeCache
  2991  			case 2:
  2992  				return &v.unknownFields
  2993  			default:
  2994  				return nil
  2995  			}
  2996  		}
  2997  		file_go_chromium_org_luci_analysis_proto_config_project_config_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} {
  2998  			switch v := v.(*MonorailProject); i {
  2999  			case 0:
  3000  				return &v.state
  3001  			case 1:
  3002  				return &v.sizeCache
  3003  			case 2:
  3004  				return &v.unknownFields
  3005  			default:
  3006  				return nil
  3007  			}
  3008  		}
  3009  		file_go_chromium_org_luci_analysis_proto_config_project_config_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} {
  3010  			switch v := v.(*MonorailFieldValue); i {
  3011  			case 0:
  3012  				return &v.state
  3013  			case 1:
  3014  				return &v.sizeCache
  3015  			case 2:
  3016  				return &v.unknownFields
  3017  			default:
  3018  				return nil
  3019  			}
  3020  		}
  3021  		file_go_chromium_org_luci_analysis_proto_config_project_config_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} {
  3022  			switch v := v.(*MonorailPriority); i {
  3023  			case 0:
  3024  				return &v.state
  3025  			case 1:
  3026  				return &v.sizeCache
  3027  			case 2:
  3028  				return &v.unknownFields
  3029  			default:
  3030  				return nil
  3031  			}
  3032  		}
  3033  		file_go_chromium_org_luci_analysis_proto_config_project_config_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} {
  3034  			switch v := v.(*RealmConfig); i {
  3035  			case 0:
  3036  				return &v.state
  3037  			case 1:
  3038  				return &v.sizeCache
  3039  			case 2:
  3040  				return &v.unknownFields
  3041  			default:
  3042  				return nil
  3043  			}
  3044  		}
  3045  		file_go_chromium_org_luci_analysis_proto_config_project_config_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} {
  3046  			switch v := v.(*Clustering); i {
  3047  			case 0:
  3048  				return &v.state
  3049  			case 1:
  3050  				return &v.sizeCache
  3051  			case 2:
  3052  				return &v.unknownFields
  3053  			default:
  3054  				return nil
  3055  			}
  3056  		}
  3057  		file_go_chromium_org_luci_analysis_proto_config_project_config_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} {
  3058  			switch v := v.(*TestNameClusteringRule); i {
  3059  			case 0:
  3060  				return &v.state
  3061  			case 1:
  3062  				return &v.sizeCache
  3063  			case 2:
  3064  				return &v.unknownFields
  3065  			default:
  3066  				return nil
  3067  			}
  3068  		}
  3069  		file_go_chromium_org_luci_analysis_proto_config_project_config_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} {
  3070  			switch v := v.(*BuganizerComponent); i {
  3071  			case 0:
  3072  				return &v.state
  3073  			case 1:
  3074  				return &v.sizeCache
  3075  			case 2:
  3076  				return &v.unknownFields
  3077  			default:
  3078  				return nil
  3079  			}
  3080  		}
  3081  		file_go_chromium_org_luci_analysis_proto_config_project_config_proto_msgTypes[15].Exporter = func(v interface{}, i int) interface{} {
  3082  			switch v := v.(*BuganizerProject); i {
  3083  			case 0:
  3084  				return &v.state
  3085  			case 1:
  3086  				return &v.sizeCache
  3087  			case 2:
  3088  				return &v.unknownFields
  3089  			default:
  3090  				return nil
  3091  			}
  3092  		}
  3093  		file_go_chromium_org_luci_analysis_proto_config_project_config_proto_msgTypes[16].Exporter = func(v interface{}, i int) interface{} {
  3094  			switch v := v.(*TestStabilityCriteria); i {
  3095  			case 0:
  3096  				return &v.state
  3097  			case 1:
  3098  				return &v.sizeCache
  3099  			case 2:
  3100  				return &v.unknownFields
  3101  			default:
  3102  				return nil
  3103  			}
  3104  		}
  3105  		file_go_chromium_org_luci_analysis_proto_config_project_config_proto_msgTypes[17].Exporter = func(v interface{}, i int) interface{} {
  3106  			switch v := v.(*Metrics_MetricOverride); i {
  3107  			case 0:
  3108  				return &v.state
  3109  			case 1:
  3110  				return &v.sizeCache
  3111  			case 2:
  3112  				return &v.unknownFields
  3113  			default:
  3114  				return nil
  3115  			}
  3116  		}
  3117  		file_go_chromium_org_luci_analysis_proto_config_project_config_proto_msgTypes[18].Exporter = func(v interface{}, i int) interface{} {
  3118  			switch v := v.(*BugManagementPolicy_Metric); i {
  3119  			case 0:
  3120  				return &v.state
  3121  			case 1:
  3122  				return &v.sizeCache
  3123  			case 2:
  3124  				return &v.unknownFields
  3125  			default:
  3126  				return nil
  3127  			}
  3128  		}
  3129  		file_go_chromium_org_luci_analysis_proto_config_project_config_proto_msgTypes[19].Exporter = func(v interface{}, i int) interface{} {
  3130  			switch v := v.(*BugManagementPolicy_Explanation); i {
  3131  			case 0:
  3132  				return &v.state
  3133  			case 1:
  3134  				return &v.sizeCache
  3135  			case 2:
  3136  				return &v.unknownFields
  3137  			default:
  3138  				return nil
  3139  			}
  3140  		}
  3141  		file_go_chromium_org_luci_analysis_proto_config_project_config_proto_msgTypes[20].Exporter = func(v interface{}, i int) interface{} {
  3142  			switch v := v.(*BugManagementPolicy_BugTemplate); i {
  3143  			case 0:
  3144  				return &v.state
  3145  			case 1:
  3146  				return &v.sizeCache
  3147  			case 2:
  3148  				return &v.unknownFields
  3149  			default:
  3150  				return nil
  3151  			}
  3152  		}
  3153  		file_go_chromium_org_luci_analysis_proto_config_project_config_proto_msgTypes[21].Exporter = func(v interface{}, i int) interface{} {
  3154  			switch v := v.(*BugManagementPolicy_BugTemplate_Buganizer); i {
  3155  			case 0:
  3156  				return &v.state
  3157  			case 1:
  3158  				return &v.sizeCache
  3159  			case 2:
  3160  				return &v.unknownFields
  3161  			default:
  3162  				return nil
  3163  			}
  3164  		}
  3165  		file_go_chromium_org_luci_analysis_proto_config_project_config_proto_msgTypes[22].Exporter = func(v interface{}, i int) interface{} {
  3166  			switch v := v.(*BugManagementPolicy_BugTemplate_Monorail); i {
  3167  			case 0:
  3168  				return &v.state
  3169  			case 1:
  3170  				return &v.sizeCache
  3171  			case 2:
  3172  				return &v.unknownFields
  3173  			default:
  3174  				return nil
  3175  			}
  3176  		}
  3177  		file_go_chromium_org_luci_analysis_proto_config_project_config_proto_msgTypes[23].Exporter = func(v interface{}, i int) interface{} {
  3178  			switch v := v.(*BuganizerProject_PriorityMapping); i {
  3179  			case 0:
  3180  				return &v.state
  3181  			case 1:
  3182  				return &v.sizeCache
  3183  			case 2:
  3184  				return &v.unknownFields
  3185  			default:
  3186  				return nil
  3187  			}
  3188  		}
  3189  		file_go_chromium_org_luci_analysis_proto_config_project_config_proto_msgTypes[24].Exporter = func(v interface{}, i int) interface{} {
  3190  			switch v := v.(*TestStabilityCriteria_FailureRateCriteria); i {
  3191  			case 0:
  3192  				return &v.state
  3193  			case 1:
  3194  				return &v.sizeCache
  3195  			case 2:
  3196  				return &v.unknownFields
  3197  			default:
  3198  				return nil
  3199  			}
  3200  		}
  3201  		file_go_chromium_org_luci_analysis_proto_config_project_config_proto_msgTypes[25].Exporter = func(v interface{}, i int) interface{} {
  3202  			switch v := v.(*TestStabilityCriteria_FlakeRateCriteria); i {
  3203  			case 0:
  3204  				return &v.state
  3205  			case 1:
  3206  				return &v.sizeCache
  3207  			case 2:
  3208  				return &v.unknownFields
  3209  			default:
  3210  				return nil
  3211  			}
  3212  		}
  3213  	}
  3214  	file_go_chromium_org_luci_analysis_proto_config_project_config_proto_msgTypes[5].OneofWrappers = []interface{}{}
  3215  	file_go_chromium_org_luci_analysis_proto_config_project_config_proto_msgTypes[7].OneofWrappers = []interface{}{}
  3216  	file_go_chromium_org_luci_analysis_proto_config_project_config_proto_msgTypes[17].OneofWrappers = []interface{}{}
  3217  	type x struct{}
  3218  	out := protoimpl.TypeBuilder{
  3219  		File: protoimpl.DescBuilder{
  3220  			GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
  3221  			RawDescriptor: file_go_chromium_org_luci_analysis_proto_config_project_config_proto_rawDesc,
  3222  			NumEnums:      2,
  3223  			NumMessages:   26,
  3224  			NumExtensions: 0,
  3225  			NumServices:   0,
  3226  		},
  3227  		GoTypes:           file_go_chromium_org_luci_analysis_proto_config_project_config_proto_goTypes,
  3228  		DependencyIndexes: file_go_chromium_org_luci_analysis_proto_config_project_config_proto_depIdxs,
  3229  		EnumInfos:         file_go_chromium_org_luci_analysis_proto_config_project_config_proto_enumTypes,
  3230  		MessageInfos:      file_go_chromium_org_luci_analysis_proto_config_project_config_proto_msgTypes,
  3231  	}.Build()
  3232  	File_go_chromium_org_luci_analysis_proto_config_project_config_proto = out.File
  3233  	file_go_chromium_org_luci_analysis_proto_config_project_config_proto_rawDesc = nil
  3234  	file_go_chromium_org_luci_analysis_proto_config_project_config_proto_goTypes = nil
  3235  	file_go_chromium_org_luci_analysis_proto_config_project_config_proto_depIdxs = nil
  3236  }