| // Code generated by protoc-gen-go. DO NOT EDIT. |
| // source: chromiumos/bot_scaling.proto |
| |
| package chromiumos |
| |
| import ( |
| fmt "fmt" |
| proto "github.com/golang/protobuf/proto" |
| math "math" |
| ) |
| |
| // Reference imports to suppress errors if they are not otherwise used. |
| var _ = proto.Marshal |
| var _ = fmt.Errorf |
| var _ = math.Inf |
| |
| // This is a compile-time assertion to ensure that this generated file |
| // is compatible with the proto package it is being compiled against. |
| // A compilation error at this line likely means your copy of the |
| // proto package needs to be updated. |
| const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package |
| |
| // Specifies mode for a bot policy |
| type BotPolicy_Mode int32 |
| |
| const ( |
| BotPolicy_UNKNOWN_MODE BotPolicy_Mode = 0 |
| // Collect stats only for a bot group. |
| BotPolicy_MONITORED BotPolicy_Mode = 1 |
| // Generate configuration updates for bot group. |
| BotPolicy_CONFIGURED BotPolicy_Mode = 2 |
| ) |
| |
| var BotPolicy_Mode_name = map[int32]string{ |
| 0: "UNKNOWN_MODE", |
| 1: "MONITORED", |
| 2: "CONFIGURED", |
| } |
| |
| var BotPolicy_Mode_value = map[string]int32{ |
| "UNKNOWN_MODE": 0, |
| "MONITORED": 1, |
| "CONFIGURED": 2, |
| } |
| |
| func (x BotPolicy_Mode) String() string { |
| return proto.EnumName(BotPolicy_Mode_name, int32(x)) |
| } |
| |
| func (BotPolicy_Mode) EnumDescriptor() ([]byte, []int) { |
| return fileDescriptor_dbe70eabfd64e7ef, []int{2, 0} |
| } |
| |
| // Specifies mode for a bot scaling |
| type BotPolicy_BotScalingMode int32 |
| |
| const ( |
| BotPolicy_UNKNOWN_SCALING_MODE BotPolicy_BotScalingMode = 0 |
| // Scale up or down bots by the step size associated with bot group.. |
| BotPolicy_STEPPED BotPolicy_BotScalingMode = 1 |
| // Scale up or down bots by the demand on the bot group. |
| // For use on smaller bot groups that are susceptible to smaller increases. |
| BotPolicy_DEMAND BotPolicy_BotScalingMode = 2 |
| ) |
| |
| var BotPolicy_BotScalingMode_name = map[int32]string{ |
| 0: "UNKNOWN_SCALING_MODE", |
| 1: "STEPPED", |
| 2: "DEMAND", |
| } |
| |
| var BotPolicy_BotScalingMode_value = map[string]int32{ |
| "UNKNOWN_SCALING_MODE": 0, |
| "STEPPED": 1, |
| "DEMAND": 2, |
| } |
| |
| func (x BotPolicy_BotScalingMode) String() string { |
| return proto.EnumName(BotPolicy_BotScalingMode_name, int32(x)) |
| } |
| |
| func (BotPolicy_BotScalingMode) EnumDescriptor() ([]byte, []int) { |
| return fileDescriptor_dbe70eabfd64e7ef, []int{2, 1} |
| } |
| |
| // Specifies if there has been a change since the last iteration. |
| type ScalingAction_Actionable int32 |
| |
| const ( |
| ScalingAction_UNSPECIFIED ScalingAction_Actionable = 0 |
| // There is a change since last time. |
| ScalingAction_YES ScalingAction_Actionable = 1 |
| // There is no change since last time. |
| ScalingAction_NO ScalingAction_Actionable = 2 |
| ) |
| |
| var ScalingAction_Actionable_name = map[int32]string{ |
| 0: "UNSPECIFIED", |
| 1: "YES", |
| 2: "NO", |
| } |
| |
| var ScalingAction_Actionable_value = map[string]int32{ |
| "UNSPECIFIED": 0, |
| "YES": 1, |
| "NO": 2, |
| } |
| |
| func (x ScalingAction_Actionable) String() string { |
| return proto.EnumName(ScalingAction_Actionable_name, int32(x)) |
| } |
| |
| func (ScalingAction_Actionable) EnumDescriptor() ([]byte, []int) { |
| return fileDescriptor_dbe70eabfd64e7ef, []int{4, 0} |
| } |
| |
| // Defines a type of bot associated with a bot group. |
| type BotType struct { |
| // The string bot "shirt size" to be requested for the group. |
| BotSize string `protobuf:"bytes,1,opt,name=bot_size,json=botSize,proto3" json:"bot_size,omitempty"` |
| // The number of cores per bot. Will be used to limit quota usage. |
| CoresPerBot float32 `protobuf:"fixed32,2,opt,name=cores_per_bot,json=coresPerBot,proto3" json:"cores_per_bot,omitempty"` |
| // Estimated hourly cost. |
| HourlyCost float32 `protobuf:"fixed32,3,opt,name=hourly_cost,json=hourlyCost,proto3" json:"hourly_cost,omitempty"` |
| // Amount of memory in GB allocated to bot. |
| MemoryGb float32 `protobuf:"fixed32,4,opt,name=memory_gb,json=memoryGb,proto3" json:"memory_gb,omitempty"` |
| XXX_NoUnkeyedLiteral struct{} `json:"-"` |
| XXX_unrecognized []byte `json:"-"` |
| XXX_sizecache int32 `json:"-"` |
| } |
| |
| func (m *BotType) Reset() { *m = BotType{} } |
| func (m *BotType) String() string { return proto.CompactTextString(m) } |
| func (*BotType) ProtoMessage() {} |
| func (*BotType) Descriptor() ([]byte, []int) { |
| return fileDescriptor_dbe70eabfd64e7ef, []int{0} |
| } |
| |
| func (m *BotType) XXX_Unmarshal(b []byte) error { |
| return xxx_messageInfo_BotType.Unmarshal(m, b) |
| } |
| func (m *BotType) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { |
| return xxx_messageInfo_BotType.Marshal(b, m, deterministic) |
| } |
| func (m *BotType) XXX_Merge(src proto.Message) { |
| xxx_messageInfo_BotType.Merge(m, src) |
| } |
| func (m *BotType) XXX_Size() int { |
| return xxx_messageInfo_BotType.Size(m) |
| } |
| func (m *BotType) XXX_DiscardUnknown() { |
| xxx_messageInfo_BotType.DiscardUnknown(m) |
| } |
| |
| var xxx_messageInfo_BotType proto.InternalMessageInfo |
| |
| func (m *BotType) GetBotSize() string { |
| if m != nil { |
| return m.BotSize |
| } |
| return "" |
| } |
| |
| func (m *BotType) GetCoresPerBot() float32 { |
| if m != nil { |
| return m.CoresPerBot |
| } |
| return 0 |
| } |
| |
| func (m *BotType) GetHourlyCost() float32 { |
| if m != nil { |
| return m.HourlyCost |
| } |
| return 0 |
| } |
| |
| func (m *BotType) GetMemoryGb() float32 { |
| if m != nil { |
| return m.MemoryGb |
| } |
| return 0 |
| } |
| |
| // Defines Swarming dimensions associated with a bot group. |
| type SwarmingDimension struct { |
| // Dimesion name |
| Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` |
| // Dimension value |
| Value string `protobuf:"bytes,2,opt,name=value,proto3" json:"value,omitempty"` |
| // Dimension multiple values |
| Values []string `protobuf:"bytes,3,rep,name=values,proto3" json:"values,omitempty"` |
| XXX_NoUnkeyedLiteral struct{} `json:"-"` |
| XXX_unrecognized []byte `json:"-"` |
| XXX_sizecache int32 `json:"-"` |
| } |
| |
| func (m *SwarmingDimension) Reset() { *m = SwarmingDimension{} } |
| func (m *SwarmingDimension) String() string { return proto.CompactTextString(m) } |
| func (*SwarmingDimension) ProtoMessage() {} |
| func (*SwarmingDimension) Descriptor() ([]byte, []int) { |
| return fileDescriptor_dbe70eabfd64e7ef, []int{1} |
| } |
| |
| func (m *SwarmingDimension) XXX_Unmarshal(b []byte) error { |
| return xxx_messageInfo_SwarmingDimension.Unmarshal(m, b) |
| } |
| func (m *SwarmingDimension) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { |
| return xxx_messageInfo_SwarmingDimension.Marshal(b, m, deterministic) |
| } |
| func (m *SwarmingDimension) XXX_Merge(src proto.Message) { |
| xxx_messageInfo_SwarmingDimension.Merge(m, src) |
| } |
| func (m *SwarmingDimension) XXX_Size() int { |
| return xxx_messageInfo_SwarmingDimension.Size(m) |
| } |
| func (m *SwarmingDimension) XXX_DiscardUnknown() { |
| xxx_messageInfo_SwarmingDimension.DiscardUnknown(m) |
| } |
| |
| var xxx_messageInfo_SwarmingDimension proto.InternalMessageInfo |
| |
| func (m *SwarmingDimension) GetName() string { |
| if m != nil { |
| return m.Name |
| } |
| return "" |
| } |
| |
| func (m *SwarmingDimension) GetValue() string { |
| if m != nil { |
| return m.Value |
| } |
| return "" |
| } |
| |
| func (m *SwarmingDimension) GetValues() []string { |
| if m != nil { |
| return m.Values |
| } |
| return nil |
| } |
| |
| // Bot Policy to apply to a bot group. |
| type BotPolicy struct { |
| // Bot group controlled by this policy, like, 'cq', 'postsubmit',... |
| BotGroup string `protobuf:"bytes,1,opt,name=bot_group,json=botGroup,proto3" json:"bot_group,omitempty"` |
| // The type of bot to be requested. |
| BotType *BotType `protobuf:"bytes,2,opt,name=bot_type,json=botType,proto3" json:"bot_type,omitempty"` |
| ScalingRestriction *BotPolicy_ScalingRestriction `protobuf:"bytes,3,opt,name=scaling_restriction,json=scalingRestriction,proto3" json:"scaling_restriction,omitempty"` |
| RegionRestrictions []*BotPolicy_RegionRestriction `protobuf:"bytes,4,rep,name=region_restrictions,json=regionRestrictions,proto3" json:"region_restrictions,omitempty"` |
| // A set of dimensions used to validate current Swarming allocations. |
| SwarmingDimensions []*SwarmingDimension `protobuf:"bytes,5,rep,name=swarming_dimensions,json=swarmingDimensions,proto3" json:"swarming_dimensions,omitempty"` |
| // Set whether a bot group should be configured or only monitored. |
| PolicyMode BotPolicy_Mode `protobuf:"varint,6,opt,name=policy_mode,json=policyMode,proto3,enum=chromiumos.BotPolicy_Mode" json:"policy_mode,omitempty"` |
| // Number of hours to lookback for Swarming stats. |
| LookbackHours int32 `protobuf:"zigzag32,7,opt,name=lookback_hours,json=lookbackHours,proto3" json:"lookback_hours,omitempty"` |
| // Set the scaling approach for the bot group being monitored. |
| ScalingMode BotPolicy_BotScalingMode `protobuf:"varint,8,opt,name=scaling_mode,json=scalingMode,proto3,enum=chromiumos.BotPolicy_BotScalingMode" json:"scaling_mode,omitempty"` |
| // Swarming instance name: chromeos-swarming.appspot.com |
| SwarmingInstance string `protobuf:"bytes,9,opt,name=swarming_instance,json=swarmingInstance,proto3" json:"swarming_instance,omitempty"` |
| // Application namespace within Swarming instance. |
| Application string `protobuf:"bytes,10,opt,name=application,proto3" json:"application,omitempty"` |
| XXX_NoUnkeyedLiteral struct{} `json:"-"` |
| XXX_unrecognized []byte `json:"-"` |
| XXX_sizecache int32 `json:"-"` |
| } |
| |
| func (m *BotPolicy) Reset() { *m = BotPolicy{} } |
| func (m *BotPolicy) String() string { return proto.CompactTextString(m) } |
| func (*BotPolicy) ProtoMessage() {} |
| func (*BotPolicy) Descriptor() ([]byte, []int) { |
| return fileDescriptor_dbe70eabfd64e7ef, []int{2} |
| } |
| |
| func (m *BotPolicy) XXX_Unmarshal(b []byte) error { |
| return xxx_messageInfo_BotPolicy.Unmarshal(m, b) |
| } |
| func (m *BotPolicy) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { |
| return xxx_messageInfo_BotPolicy.Marshal(b, m, deterministic) |
| } |
| func (m *BotPolicy) XXX_Merge(src proto.Message) { |
| xxx_messageInfo_BotPolicy.Merge(m, src) |
| } |
| func (m *BotPolicy) XXX_Size() int { |
| return xxx_messageInfo_BotPolicy.Size(m) |
| } |
| func (m *BotPolicy) XXX_DiscardUnknown() { |
| xxx_messageInfo_BotPolicy.DiscardUnknown(m) |
| } |
| |
| var xxx_messageInfo_BotPolicy proto.InternalMessageInfo |
| |
| func (m *BotPolicy) GetBotGroup() string { |
| if m != nil { |
| return m.BotGroup |
| } |
| return "" |
| } |
| |
| func (m *BotPolicy) GetBotType() *BotType { |
| if m != nil { |
| return m.BotType |
| } |
| return nil |
| } |
| |
| func (m *BotPolicy) GetScalingRestriction() *BotPolicy_ScalingRestriction { |
| if m != nil { |
| return m.ScalingRestriction |
| } |
| return nil |
| } |
| |
| func (m *BotPolicy) GetRegionRestrictions() []*BotPolicy_RegionRestriction { |
| if m != nil { |
| return m.RegionRestrictions |
| } |
| return nil |
| } |
| |
| func (m *BotPolicy) GetSwarmingDimensions() []*SwarmingDimension { |
| if m != nil { |
| return m.SwarmingDimensions |
| } |
| return nil |
| } |
| |
| func (m *BotPolicy) GetPolicyMode() BotPolicy_Mode { |
| if m != nil { |
| return m.PolicyMode |
| } |
| return BotPolicy_UNKNOWN_MODE |
| } |
| |
| func (m *BotPolicy) GetLookbackHours() int32 { |
| if m != nil { |
| return m.LookbackHours |
| } |
| return 0 |
| } |
| |
| func (m *BotPolicy) GetScalingMode() BotPolicy_BotScalingMode { |
| if m != nil { |
| return m.ScalingMode |
| } |
| return BotPolicy_UNKNOWN_SCALING_MODE |
| } |
| |
| func (m *BotPolicy) GetSwarmingInstance() string { |
| if m != nil { |
| return m.SwarmingInstance |
| } |
| return "" |
| } |
| |
| func (m *BotPolicy) GetApplication() string { |
| if m != nil { |
| return m.Application |
| } |
| return "" |
| } |
| |
| // Scaling restriction specifies the limits on how the group can be |
| // expanded or reduced. |
| type BotPolicy_ScalingRestriction struct { |
| // Hard limit on the maximum number of bots to request. |
| BotCeiling int32 `protobuf:"varint,1,opt,name=bot_ceiling,json=botCeiling,proto3" json:"bot_ceiling,omitempty"` |
| // Hard limit on the minimum number of bots to request. |
| BotFloor int32 `protobuf:"varint,2,opt,name=bot_floor,json=botFloor,proto3" json:"bot_floor,omitempty"` |
| // Soft limit on the number of idle bots to maintain. |
| MinIdle int32 `protobuf:"varint,3,opt,name=min_idle,json=minIdle,proto3" json:"min_idle,omitempty"` |
| // Hard minimum limit on the absolute delta between request amount and |
| // existing bot count. |
| StepSize int32 `protobuf:"varint,4,opt,name=step_size,json=stepSize,proto3" json:"step_size,omitempty"` |
| // Static number to request when demand is not accessible. |
| BotFallback int32 `protobuf:"varint,5,opt,name=bot_fallback,json=botFallback,proto3" json:"bot_fallback,omitempty"` |
| XXX_NoUnkeyedLiteral struct{} `json:"-"` |
| XXX_unrecognized []byte `json:"-"` |
| XXX_sizecache int32 `json:"-"` |
| } |
| |
| func (m *BotPolicy_ScalingRestriction) Reset() { *m = BotPolicy_ScalingRestriction{} } |
| func (m *BotPolicy_ScalingRestriction) String() string { return proto.CompactTextString(m) } |
| func (*BotPolicy_ScalingRestriction) ProtoMessage() {} |
| func (*BotPolicy_ScalingRestriction) Descriptor() ([]byte, []int) { |
| return fileDescriptor_dbe70eabfd64e7ef, []int{2, 0} |
| } |
| |
| func (m *BotPolicy_ScalingRestriction) XXX_Unmarshal(b []byte) error { |
| return xxx_messageInfo_BotPolicy_ScalingRestriction.Unmarshal(m, b) |
| } |
| func (m *BotPolicy_ScalingRestriction) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { |
| return xxx_messageInfo_BotPolicy_ScalingRestriction.Marshal(b, m, deterministic) |
| } |
| func (m *BotPolicy_ScalingRestriction) XXX_Merge(src proto.Message) { |
| xxx_messageInfo_BotPolicy_ScalingRestriction.Merge(m, src) |
| } |
| func (m *BotPolicy_ScalingRestriction) XXX_Size() int { |
| return xxx_messageInfo_BotPolicy_ScalingRestriction.Size(m) |
| } |
| func (m *BotPolicy_ScalingRestriction) XXX_DiscardUnknown() { |
| xxx_messageInfo_BotPolicy_ScalingRestriction.DiscardUnknown(m) |
| } |
| |
| var xxx_messageInfo_BotPolicy_ScalingRestriction proto.InternalMessageInfo |
| |
| func (m *BotPolicy_ScalingRestriction) GetBotCeiling() int32 { |
| if m != nil { |
| return m.BotCeiling |
| } |
| return 0 |
| } |
| |
| func (m *BotPolicy_ScalingRestriction) GetBotFloor() int32 { |
| if m != nil { |
| return m.BotFloor |
| } |
| return 0 |
| } |
| |
| func (m *BotPolicy_ScalingRestriction) GetMinIdle() int32 { |
| if m != nil { |
| return m.MinIdle |
| } |
| return 0 |
| } |
| |
| func (m *BotPolicy_ScalingRestriction) GetStepSize() int32 { |
| if m != nil { |
| return m.StepSize |
| } |
| return 0 |
| } |
| |
| func (m *BotPolicy_ScalingRestriction) GetBotFallback() int32 { |
| if m != nil { |
| return m.BotFallback |
| } |
| return 0 |
| } |
| |
| // A set of restrictions on the regions and how to distribute bots |
| // between them. |
| type BotPolicy_RegionRestriction struct { |
| // Region of the bot sub-group. |
| Region string `protobuf:"bytes,1,opt,name=region,proto3" json:"region,omitempty"` |
| // Specific prefix of the bot sub-group. |
| Prefix string `protobuf:"bytes,2,opt,name=prefix,proto3" json:"prefix,omitempty"` |
| // Weight to be applied to this sub-group. The number of bots requested |
| // from each region will be proportional to the weight unless a |
| // quota limit is violated. |
| Weight float32 `protobuf:"fixed32,3,opt,name=weight,proto3" json:"weight,omitempty"` |
| XXX_NoUnkeyedLiteral struct{} `json:"-"` |
| XXX_unrecognized []byte `json:"-"` |
| XXX_sizecache int32 `json:"-"` |
| } |
| |
| func (m *BotPolicy_RegionRestriction) Reset() { *m = BotPolicy_RegionRestriction{} } |
| func (m *BotPolicy_RegionRestriction) String() string { return proto.CompactTextString(m) } |
| func (*BotPolicy_RegionRestriction) ProtoMessage() {} |
| func (*BotPolicy_RegionRestriction) Descriptor() ([]byte, []int) { |
| return fileDescriptor_dbe70eabfd64e7ef, []int{2, 1} |
| } |
| |
| func (m *BotPolicy_RegionRestriction) XXX_Unmarshal(b []byte) error { |
| return xxx_messageInfo_BotPolicy_RegionRestriction.Unmarshal(m, b) |
| } |
| func (m *BotPolicy_RegionRestriction) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { |
| return xxx_messageInfo_BotPolicy_RegionRestriction.Marshal(b, m, deterministic) |
| } |
| func (m *BotPolicy_RegionRestriction) XXX_Merge(src proto.Message) { |
| xxx_messageInfo_BotPolicy_RegionRestriction.Merge(m, src) |
| } |
| func (m *BotPolicy_RegionRestriction) XXX_Size() int { |
| return xxx_messageInfo_BotPolicy_RegionRestriction.Size(m) |
| } |
| func (m *BotPolicy_RegionRestriction) XXX_DiscardUnknown() { |
| xxx_messageInfo_BotPolicy_RegionRestriction.DiscardUnknown(m) |
| } |
| |
| var xxx_messageInfo_BotPolicy_RegionRestriction proto.InternalMessageInfo |
| |
| func (m *BotPolicy_RegionRestriction) GetRegion() string { |
| if m != nil { |
| return m.Region |
| } |
| return "" |
| } |
| |
| func (m *BotPolicy_RegionRestriction) GetPrefix() string { |
| if m != nil { |
| return m.Prefix |
| } |
| return "" |
| } |
| |
| func (m *BotPolicy_RegionRestriction) GetWeight() float32 { |
| if m != nil { |
| return m.Weight |
| } |
| return 0 |
| } |
| |
| // Configures the root message. |
| type BotPolicyCfg struct { |
| // All bot policies. |
| BotPolicies []*BotPolicy `protobuf:"bytes,1,rep,name=bot_policies,json=botPolicies,proto3" json:"bot_policies,omitempty"` |
| XXX_NoUnkeyedLiteral struct{} `json:"-"` |
| XXX_unrecognized []byte `json:"-"` |
| XXX_sizecache int32 `json:"-"` |
| } |
| |
| func (m *BotPolicyCfg) Reset() { *m = BotPolicyCfg{} } |
| func (m *BotPolicyCfg) String() string { return proto.CompactTextString(m) } |
| func (*BotPolicyCfg) ProtoMessage() {} |
| func (*BotPolicyCfg) Descriptor() ([]byte, []int) { |
| return fileDescriptor_dbe70eabfd64e7ef, []int{3} |
| } |
| |
| func (m *BotPolicyCfg) XXX_Unmarshal(b []byte) error { |
| return xxx_messageInfo_BotPolicyCfg.Unmarshal(m, b) |
| } |
| func (m *BotPolicyCfg) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { |
| return xxx_messageInfo_BotPolicyCfg.Marshal(b, m, deterministic) |
| } |
| func (m *BotPolicyCfg) XXX_Merge(src proto.Message) { |
| xxx_messageInfo_BotPolicyCfg.Merge(m, src) |
| } |
| func (m *BotPolicyCfg) XXX_Size() int { |
| return xxx_messageInfo_BotPolicyCfg.Size(m) |
| } |
| func (m *BotPolicyCfg) XXX_DiscardUnknown() { |
| xxx_messageInfo_BotPolicyCfg.DiscardUnknown(m) |
| } |
| |
| var xxx_messageInfo_BotPolicyCfg proto.InternalMessageInfo |
| |
| func (m *BotPolicyCfg) GetBotPolicies() []*BotPolicy { |
| if m != nil { |
| return m.BotPolicies |
| } |
| return nil |
| } |
| |
| // Scaling Action that resulted because of bot demand. |
| type ScalingAction struct { |
| // Bot group modified by the action. Should be the same as BotPolicy. |
| BotGroup string `protobuf:"bytes,1,opt,name=bot_group,json=botGroup,proto3" json:"bot_group,omitempty"` |
| // The type of bot requested. Should be the same as BotPolicy. |
| BotType *BotType `protobuf:"bytes,2,opt,name=bot_type,json=botType,proto3" json:"bot_type,omitempty"` |
| // Whether there has been a change in the number of bots requested |
| // for this bot group. See step_size for more info. |
| Actionable ScalingAction_Actionable `protobuf:"varint,3,opt,name=actionable,proto3,enum=chromiumos.ScalingAction_Actionable" json:"actionable,omitempty"` |
| // Total number of bots requested for the group. |
| BotsRequested int32 `protobuf:"varint,4,opt,name=bots_requested,json=botsRequested,proto3" json:"bots_requested,omitempty"` |
| RegionalActions []*ScalingAction_RegionalAction `protobuf:"bytes,5,rep,name=regional_actions,json=regionalActions,proto3" json:"regional_actions,omitempty"` |
| // Estimated savings based on current run. |
| // Based on current number of bots compared against the max. |
| EstimatedSavings float32 `protobuf:"fixed32,6,opt,name=estimated_savings,json=estimatedSavings,proto3" json:"estimated_savings,omitempty"` |
| // Minimum number of bots to keep alive for bot group. |
| // Repeated for display/reporting purposes |
| BotMin int32 `protobuf:"varint,7,opt,name=bot_min,json=botMin,proto3" json:"bot_min,omitempty"` |
| // Hard limit on the maximum number of bots that can be requested. |
| // Repeated for display/reporting purposes |
| BotMax int32 `protobuf:"varint,8,opt,name=bot_max,json=botMax,proto3" json:"bot_max,omitempty"` |
| // Application namespace within Swarming instance. |
| Application string `protobuf:"bytes,9,opt,name=application,proto3" json:"application,omitempty"` |
| XXX_NoUnkeyedLiteral struct{} `json:"-"` |
| XXX_unrecognized []byte `json:"-"` |
| XXX_sizecache int32 `json:"-"` |
| } |
| |
| func (m *ScalingAction) Reset() { *m = ScalingAction{} } |
| func (m *ScalingAction) String() string { return proto.CompactTextString(m) } |
| func (*ScalingAction) ProtoMessage() {} |
| func (*ScalingAction) Descriptor() ([]byte, []int) { |
| return fileDescriptor_dbe70eabfd64e7ef, []int{4} |
| } |
| |
| func (m *ScalingAction) XXX_Unmarshal(b []byte) error { |
| return xxx_messageInfo_ScalingAction.Unmarshal(m, b) |
| } |
| func (m *ScalingAction) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { |
| return xxx_messageInfo_ScalingAction.Marshal(b, m, deterministic) |
| } |
| func (m *ScalingAction) XXX_Merge(src proto.Message) { |
| xxx_messageInfo_ScalingAction.Merge(m, src) |
| } |
| func (m *ScalingAction) XXX_Size() int { |
| return xxx_messageInfo_ScalingAction.Size(m) |
| } |
| func (m *ScalingAction) XXX_DiscardUnknown() { |
| xxx_messageInfo_ScalingAction.DiscardUnknown(m) |
| } |
| |
| var xxx_messageInfo_ScalingAction proto.InternalMessageInfo |
| |
| func (m *ScalingAction) GetBotGroup() string { |
| if m != nil { |
| return m.BotGroup |
| } |
| return "" |
| } |
| |
| func (m *ScalingAction) GetBotType() *BotType { |
| if m != nil { |
| return m.BotType |
| } |
| return nil |
| } |
| |
| func (m *ScalingAction) GetActionable() ScalingAction_Actionable { |
| if m != nil { |
| return m.Actionable |
| } |
| return ScalingAction_UNSPECIFIED |
| } |
| |
| func (m *ScalingAction) GetBotsRequested() int32 { |
| if m != nil { |
| return m.BotsRequested |
| } |
| return 0 |
| } |
| |
| func (m *ScalingAction) GetRegionalActions() []*ScalingAction_RegionalAction { |
| if m != nil { |
| return m.RegionalActions |
| } |
| return nil |
| } |
| |
| func (m *ScalingAction) GetEstimatedSavings() float32 { |
| if m != nil { |
| return m.EstimatedSavings |
| } |
| return 0 |
| } |
| |
| func (m *ScalingAction) GetBotMin() int32 { |
| if m != nil { |
| return m.BotMin |
| } |
| return 0 |
| } |
| |
| func (m *ScalingAction) GetBotMax() int32 { |
| if m != nil { |
| return m.BotMax |
| } |
| return 0 |
| } |
| |
| func (m *ScalingAction) GetApplication() string { |
| if m != nil { |
| return m.Application |
| } |
| return "" |
| } |
| |
| // How the bot requests are distributed between regions & prefixes. |
| type ScalingAction_RegionalAction struct { |
| // Region of the bot sub-group. |
| Region string `protobuf:"bytes,1,opt,name=region,proto3" json:"region,omitempty"` |
| // Specific prefix of the bot sub-group. |
| Prefix string `protobuf:"bytes,2,opt,name=prefix,proto3" json:"prefix,omitempty"` |
| // Number of bots requested from the sub-group. |
| BotsRequested int32 `protobuf:"varint,3,opt,name=bots_requested,json=botsRequested,proto3" json:"bots_requested,omitempty"` |
| XXX_NoUnkeyedLiteral struct{} `json:"-"` |
| XXX_unrecognized []byte `json:"-"` |
| XXX_sizecache int32 `json:"-"` |
| } |
| |
| func (m *ScalingAction_RegionalAction) Reset() { *m = ScalingAction_RegionalAction{} } |
| func (m *ScalingAction_RegionalAction) String() string { return proto.CompactTextString(m) } |
| func (*ScalingAction_RegionalAction) ProtoMessage() {} |
| func (*ScalingAction_RegionalAction) Descriptor() ([]byte, []int) { |
| return fileDescriptor_dbe70eabfd64e7ef, []int{4, 0} |
| } |
| |
| func (m *ScalingAction_RegionalAction) XXX_Unmarshal(b []byte) error { |
| return xxx_messageInfo_ScalingAction_RegionalAction.Unmarshal(m, b) |
| } |
| func (m *ScalingAction_RegionalAction) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { |
| return xxx_messageInfo_ScalingAction_RegionalAction.Marshal(b, m, deterministic) |
| } |
| func (m *ScalingAction_RegionalAction) XXX_Merge(src proto.Message) { |
| xxx_messageInfo_ScalingAction_RegionalAction.Merge(m, src) |
| } |
| func (m *ScalingAction_RegionalAction) XXX_Size() int { |
| return xxx_messageInfo_ScalingAction_RegionalAction.Size(m) |
| } |
| func (m *ScalingAction_RegionalAction) XXX_DiscardUnknown() { |
| xxx_messageInfo_ScalingAction_RegionalAction.DiscardUnknown(m) |
| } |
| |
| var xxx_messageInfo_ScalingAction_RegionalAction proto.InternalMessageInfo |
| |
| func (m *ScalingAction_RegionalAction) GetRegion() string { |
| if m != nil { |
| return m.Region |
| } |
| return "" |
| } |
| |
| func (m *ScalingAction_RegionalAction) GetPrefix() string { |
| if m != nil { |
| return m.Prefix |
| } |
| return "" |
| } |
| |
| func (m *ScalingAction_RegionalAction) GetBotsRequested() int32 { |
| if m != nil { |
| return m.BotsRequested |
| } |
| return 0 |
| } |
| |
| // Resource utilization based on regional assignment. |
| type ResourceUtilization struct { |
| // Region of the bot sub-group. |
| Region string `protobuf:"bytes,1,opt,name=region,proto3" json:"region,omitempty"` |
| // Number of VMs allocated across all bot groups. |
| Vms int32 `protobuf:"varint,2,opt,name=vms,proto3" json:"vms,omitempty"` |
| // Number of CPUs allocated across all bot groups. |
| Cpus float32 `protobuf:"fixed32,3,opt,name=cpus,proto3" json:"cpus,omitempty"` |
| // Amount of memory in GB allocated across all bot groups. |
| MemoryGb float32 `protobuf:"fixed32,4,opt,name=memory_gb,json=memoryGb,proto3" json:"memory_gb,omitempty"` |
| // Amount of disk in GB allocated across all bot groups. |
| DiskGb float32 `protobuf:"fixed32,5,opt,name=disk_gb,json=diskGb,proto3" json:"disk_gb,omitempty"` |
| // NUmber of CPUs that could be allocated based on max values. |
| MaxCpus float32 `protobuf:"fixed32,6,opt,name=max_cpus,json=maxCpus,proto3" json:"max_cpus,omitempty"` |
| XXX_NoUnkeyedLiteral struct{} `json:"-"` |
| XXX_unrecognized []byte `json:"-"` |
| XXX_sizecache int32 `json:"-"` |
| } |
| |
| func (m *ResourceUtilization) Reset() { *m = ResourceUtilization{} } |
| func (m *ResourceUtilization) String() string { return proto.CompactTextString(m) } |
| func (*ResourceUtilization) ProtoMessage() {} |
| func (*ResourceUtilization) Descriptor() ([]byte, []int) { |
| return fileDescriptor_dbe70eabfd64e7ef, []int{5} |
| } |
| |
| func (m *ResourceUtilization) XXX_Unmarshal(b []byte) error { |
| return xxx_messageInfo_ResourceUtilization.Unmarshal(m, b) |
| } |
| func (m *ResourceUtilization) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { |
| return xxx_messageInfo_ResourceUtilization.Marshal(b, m, deterministic) |
| } |
| func (m *ResourceUtilization) XXX_Merge(src proto.Message) { |
| xxx_messageInfo_ResourceUtilization.Merge(m, src) |
| } |
| func (m *ResourceUtilization) XXX_Size() int { |
| return xxx_messageInfo_ResourceUtilization.Size(m) |
| } |
| func (m *ResourceUtilization) XXX_DiscardUnknown() { |
| xxx_messageInfo_ResourceUtilization.DiscardUnknown(m) |
| } |
| |
| var xxx_messageInfo_ResourceUtilization proto.InternalMessageInfo |
| |
| func (m *ResourceUtilization) GetRegion() string { |
| if m != nil { |
| return m.Region |
| } |
| return "" |
| } |
| |
| func (m *ResourceUtilization) GetVms() int32 { |
| if m != nil { |
| return m.Vms |
| } |
| return 0 |
| } |
| |
| func (m *ResourceUtilization) GetCpus() float32 { |
| if m != nil { |
| return m.Cpus |
| } |
| return 0 |
| } |
| |
| func (m *ResourceUtilization) GetMemoryGb() float32 { |
| if m != nil { |
| return m.MemoryGb |
| } |
| return 0 |
| } |
| |
| func (m *ResourceUtilization) GetDiskGb() float32 { |
| if m != nil { |
| return m.DiskGb |
| } |
| return 0 |
| } |
| |
| func (m *ResourceUtilization) GetMaxCpus() float32 { |
| if m != nil { |
| return m.MaxCpus |
| } |
| return 0 |
| } |
| |
| // Application utilization, per application at a |
| // regional assignment. |
| type ApplicationUtilization struct { |
| // Application namespace to associate resources. |
| Application string `protobuf:"bytes,1,opt,name=application,proto3" json:"application,omitempty"` |
| ResourceUtilization []*ResourceUtilization `protobuf:"bytes,2,rep,name=resource_utilization,json=resourceUtilization,proto3" json:"resource_utilization,omitempty"` |
| XXX_NoUnkeyedLiteral struct{} `json:"-"` |
| XXX_unrecognized []byte `json:"-"` |
| XXX_sizecache int32 `json:"-"` |
| } |
| |
| func (m *ApplicationUtilization) Reset() { *m = ApplicationUtilization{} } |
| func (m *ApplicationUtilization) String() string { return proto.CompactTextString(m) } |
| func (*ApplicationUtilization) ProtoMessage() {} |
| func (*ApplicationUtilization) Descriptor() ([]byte, []int) { |
| return fileDescriptor_dbe70eabfd64e7ef, []int{6} |
| } |
| |
| func (m *ApplicationUtilization) XXX_Unmarshal(b []byte) error { |
| return xxx_messageInfo_ApplicationUtilization.Unmarshal(m, b) |
| } |
| func (m *ApplicationUtilization) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { |
| return xxx_messageInfo_ApplicationUtilization.Marshal(b, m, deterministic) |
| } |
| func (m *ApplicationUtilization) XXX_Merge(src proto.Message) { |
| xxx_messageInfo_ApplicationUtilization.Merge(m, src) |
| } |
| func (m *ApplicationUtilization) XXX_Size() int { |
| return xxx_messageInfo_ApplicationUtilization.Size(m) |
| } |
| func (m *ApplicationUtilization) XXX_DiscardUnknown() { |
| xxx_messageInfo_ApplicationUtilization.DiscardUnknown(m) |
| } |
| |
| var xxx_messageInfo_ApplicationUtilization proto.InternalMessageInfo |
| |
| func (m *ApplicationUtilization) GetApplication() string { |
| if m != nil { |
| return m.Application |
| } |
| return "" |
| } |
| |
| func (m *ApplicationUtilization) GetResourceUtilization() []*ResourceUtilization { |
| if m != nil { |
| return m.ResourceUtilization |
| } |
| return nil |
| } |
| |
| // All the actions that will be executed by RoboCrop. |
| type RoboCropAction struct { |
| // List of an action per bot group scaled by RoboCrop. |
| ScalingActions []*ScalingAction `protobuf:"bytes,1,rep,name=scaling_actions,json=scalingActions,proto3" json:"scaling_actions,omitempty"` |
| ResourceUtilization []*ResourceUtilization `protobuf:"bytes,2,rep,name=resource_utilization,json=resourceUtilization,proto3" json:"resource_utilization,omitempty"` |
| ApplResourceUtilization []*ApplicationUtilization `protobuf:"bytes,3,rep,name=appl_resource_utilization,json=applResourceUtilization,proto3" json:"appl_resource_utilization,omitempty"` |
| XXX_NoUnkeyedLiteral struct{} `json:"-"` |
| XXX_unrecognized []byte `json:"-"` |
| XXX_sizecache int32 `json:"-"` |
| } |
| |
| func (m *RoboCropAction) Reset() { *m = RoboCropAction{} } |
| func (m *RoboCropAction) String() string { return proto.CompactTextString(m) } |
| func (*RoboCropAction) ProtoMessage() {} |
| func (*RoboCropAction) Descriptor() ([]byte, []int) { |
| return fileDescriptor_dbe70eabfd64e7ef, []int{7} |
| } |
| |
| func (m *RoboCropAction) XXX_Unmarshal(b []byte) error { |
| return xxx_messageInfo_RoboCropAction.Unmarshal(m, b) |
| } |
| func (m *RoboCropAction) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { |
| return xxx_messageInfo_RoboCropAction.Marshal(b, m, deterministic) |
| } |
| func (m *RoboCropAction) XXX_Merge(src proto.Message) { |
| xxx_messageInfo_RoboCropAction.Merge(m, src) |
| } |
| func (m *RoboCropAction) XXX_Size() int { |
| return xxx_messageInfo_RoboCropAction.Size(m) |
| } |
| func (m *RoboCropAction) XXX_DiscardUnknown() { |
| xxx_messageInfo_RoboCropAction.DiscardUnknown(m) |
| } |
| |
| var xxx_messageInfo_RoboCropAction proto.InternalMessageInfo |
| |
| func (m *RoboCropAction) GetScalingActions() []*ScalingAction { |
| if m != nil { |
| return m.ScalingActions |
| } |
| return nil |
| } |
| |
| func (m *RoboCropAction) GetResourceUtilization() []*ResourceUtilization { |
| if m != nil { |
| return m.ResourceUtilization |
| } |
| return nil |
| } |
| |
| func (m *RoboCropAction) GetApplResourceUtilization() []*ApplicationUtilization { |
| if m != nil { |
| return m.ApplResourceUtilization |
| } |
| return nil |
| } |
| |
| func init() { |
| proto.RegisterEnum("chromiumos.BotPolicy_Mode", BotPolicy_Mode_name, BotPolicy_Mode_value) |
| proto.RegisterEnum("chromiumos.BotPolicy_BotScalingMode", BotPolicy_BotScalingMode_name, BotPolicy_BotScalingMode_value) |
| proto.RegisterEnum("chromiumos.ScalingAction_Actionable", ScalingAction_Actionable_name, ScalingAction_Actionable_value) |
| proto.RegisterType((*BotType)(nil), "chromiumos.BotType") |
| proto.RegisterType((*SwarmingDimension)(nil), "chromiumos.SwarmingDimension") |
| proto.RegisterType((*BotPolicy)(nil), "chromiumos.BotPolicy") |
| proto.RegisterType((*BotPolicy_ScalingRestriction)(nil), "chromiumos.BotPolicy.ScalingRestriction") |
| proto.RegisterType((*BotPolicy_RegionRestriction)(nil), "chromiumos.BotPolicy.RegionRestriction") |
| proto.RegisterType((*BotPolicyCfg)(nil), "chromiumos.BotPolicyCfg") |
| proto.RegisterType((*ScalingAction)(nil), "chromiumos.ScalingAction") |
| proto.RegisterType((*ScalingAction_RegionalAction)(nil), "chromiumos.ScalingAction.RegionalAction") |
| proto.RegisterType((*ResourceUtilization)(nil), "chromiumos.ResourceUtilization") |
| proto.RegisterType((*ApplicationUtilization)(nil), "chromiumos.ApplicationUtilization") |
| proto.RegisterType((*RoboCropAction)(nil), "chromiumos.RoboCropAction") |
| } |
| |
| func init() { proto.RegisterFile("chromiumos/bot_scaling.proto", fileDescriptor_dbe70eabfd64e7ef) } |
| |
| var fileDescriptor_dbe70eabfd64e7ef = []byte{ |
| // 1085 bytes of a gzipped FileDescriptorProto |
| 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xb4, 0x56, 0xdd, 0x6e, 0x23, 0x35, |
| 0x18, 0xdd, 0xc9, 0x6f, 0xf3, 0xa5, 0x4d, 0x53, 0xa7, 0xec, 0x4e, 0x0b, 0x68, 0xc3, 0x08, 0x44, |
| 0x24, 0xa4, 0x54, 0x2a, 0x08, 0x90, 0xb8, 0x6a, 0x7e, 0x9a, 0x8d, 0xa0, 0x49, 0xe4, 0xb4, 0x82, |
| 0x05, 0x89, 0xd1, 0xcc, 0xc4, 0x9d, 0x5a, 0x9d, 0x19, 0x0f, 0xf6, 0xa4, 0xdb, 0xf6, 0x01, 0x10, |
| 0x57, 0x3c, 0x05, 0xb7, 0xdc, 0xf3, 0x40, 0x3c, 0x08, 0xb2, 0xc7, 0x93, 0xa4, 0x49, 0x76, 0x25, |
| 0x24, 0xb8, 0x9b, 0xef, 0xd8, 0x3e, 0xfe, 0x7c, 0x7c, 0x8e, 0x13, 0xf8, 0xc0, 0xbb, 0xe1, 0x2c, |
| 0xa4, 0xf3, 0x90, 0x89, 0x13, 0x97, 0x25, 0xb6, 0xf0, 0x9c, 0x80, 0x46, 0x7e, 0x3b, 0xe6, 0x2c, |
| 0x61, 0x08, 0x96, 0xa3, 0xd6, 0xaf, 0x06, 0x94, 0x3b, 0x2c, 0xb9, 0x7c, 0x88, 0x09, 0x3a, 0x82, |
| 0x1d, 0x35, 0x99, 0x3e, 0x12, 0xd3, 0x68, 0x1a, 0xad, 0x0a, 0x2e, 0xbb, 0x2c, 0x99, 0xd2, 0x47, |
| 0x82, 0x2c, 0xd8, 0xf3, 0x18, 0x27, 0xc2, 0x8e, 0x09, 0xb7, 0x5d, 0x96, 0x98, 0xb9, 0xa6, 0xd1, |
| 0xca, 0xe1, 0xaa, 0x02, 0x27, 0x84, 0x77, 0x58, 0x82, 0x5e, 0x42, 0xf5, 0x86, 0xcd, 0x79, 0xf0, |
| 0x60, 0x7b, 0x4c, 0x24, 0x66, 0x5e, 0xcd, 0x80, 0x14, 0xea, 0x32, 0x91, 0xa0, 0xf7, 0xa1, 0x12, |
| 0x92, 0x90, 0xf1, 0x07, 0xdb, 0x77, 0xcd, 0x82, 0x1a, 0xde, 0x49, 0x81, 0x81, 0x6b, 0x5d, 0xc1, |
| 0xc1, 0xf4, 0x8d, 0xc3, 0x43, 0x1a, 0xf9, 0x3d, 0x1a, 0x92, 0x48, 0x50, 0x16, 0x21, 0x04, 0x85, |
| 0xc8, 0x09, 0xb3, 0x6e, 0xd4, 0x37, 0x3a, 0x84, 0xe2, 0x9d, 0x13, 0xcc, 0x89, 0x6a, 0xa1, 0x82, |
| 0xd3, 0x02, 0x3d, 0x87, 0x92, 0xfa, 0x10, 0x66, 0xbe, 0x99, 0x6f, 0x55, 0xb0, 0xae, 0xac, 0xbf, |
| 0xcb, 0x50, 0xe9, 0xb0, 0x64, 0xc2, 0x02, 0xea, 0x3d, 0xc8, 0x0e, 0xe4, 0x09, 0x7d, 0xce, 0xe6, |
| 0xb1, 0x26, 0x95, 0x47, 0x1e, 0xc8, 0x1a, 0xb5, 0xd3, 0xe3, 0x27, 0x0f, 0x71, 0xca, 0x5d, 0x3d, |
| 0x6d, 0xb4, 0x97, 0x4a, 0xb5, 0xb5, 0x4a, 0x4a, 0x13, 0x25, 0xd7, 0x6b, 0x68, 0x68, 0x5d, 0x6d, |
| 0x4e, 0x44, 0xc2, 0xa9, 0x97, 0x50, 0x16, 0xa9, 0x73, 0x57, 0x4f, 0x5b, 0x6b, 0x4b, 0xd3, 0x06, |
| 0xda, 0xd3, 0x74, 0x01, 0x5e, 0xce, 0xc7, 0x48, 0x6c, 0x60, 0xe8, 0x07, 0x68, 0x70, 0xe2, 0x53, |
| 0x16, 0xad, 0x32, 0x0b, 0xb3, 0xd0, 0xcc, 0xb7, 0xaa, 0xa7, 0x9f, 0x6e, 0xa7, 0xc6, 0x6a, 0xc1, |
| 0x13, 0x66, 0xbe, 0x0e, 0x09, 0x34, 0x82, 0x86, 0xd0, 0x32, 0xdb, 0xb3, 0x4c, 0x67, 0x61, 0x16, |
| 0x15, 0xf3, 0x87, 0xab, 0xcc, 0x1b, 0xb7, 0x81, 0x91, 0x58, 0x87, 0x04, 0xfa, 0x06, 0xaa, 0xb1, |
| 0xda, 0xdf, 0x0e, 0xd9, 0x8c, 0x98, 0xa5, 0xa6, 0xd1, 0xaa, 0x9d, 0x1e, 0x6f, 0xef, 0xf0, 0x82, |
| 0xcd, 0x08, 0x86, 0x74, 0xba, 0xfc, 0x46, 0x9f, 0x40, 0x2d, 0x60, 0xec, 0xd6, 0x75, 0xbc, 0x5b, |
| 0x5b, 0xfa, 0x44, 0x98, 0xe5, 0xa6, 0xd1, 0x3a, 0xc0, 0x7b, 0x19, 0xfa, 0x4a, 0x82, 0x68, 0x00, |
| 0xbb, 0x99, 0xd0, 0x6a, 0x93, 0x1d, 0xb5, 0xc9, 0xc7, 0xdb, 0x37, 0xe9, 0xb0, 0x44, 0x8b, 0xac, |
| 0xb6, 0xab, 0x8a, 0x65, 0x81, 0x3e, 0x83, 0x83, 0xc5, 0xe1, 0x69, 0x24, 0x12, 0x27, 0xf2, 0x88, |
| 0x59, 0x51, 0x36, 0xa8, 0x67, 0x03, 0x43, 0x8d, 0xa3, 0x26, 0x54, 0x9d, 0x38, 0x0e, 0xa8, 0xe7, |
| 0xa8, 0x6b, 0x05, 0x35, 0x6d, 0x15, 0x3a, 0xfe, 0xd3, 0x00, 0xb4, 0x79, 0xa1, 0x32, 0x07, 0xd2, |
| 0x47, 0x1e, 0xa1, 0x72, 0x44, 0xd9, 0xac, 0x88, 0xc1, 0x65, 0x49, 0x37, 0x45, 0x32, 0x17, 0x5e, |
| 0x07, 0x8c, 0x71, 0xe5, 0xb4, 0xa2, 0x72, 0xe1, 0xb9, 0xac, 0x65, 0x08, 0x43, 0x1a, 0xd9, 0x74, |
| 0x16, 0x10, 0x65, 0xa5, 0x22, 0x2e, 0x87, 0x34, 0x1a, 0xce, 0x02, 0x22, 0xd7, 0x89, 0x84, 0xc4, |
| 0x69, 0x40, 0x0b, 0xe9, 0x3a, 0x09, 0xa8, 0x84, 0x7e, 0x04, 0xbb, 0x8a, 0xd4, 0x09, 0x02, 0xa9, |
| 0x9c, 0x59, 0x54, 0xe3, 0xb2, 0x93, 0x73, 0x0d, 0x1d, 0xff, 0x04, 0x07, 0x1b, 0x26, 0x91, 0xc1, |
| 0x49, 0x6d, 0xa2, 0xf3, 0xa0, 0x2b, 0x89, 0xc7, 0x9c, 0x5c, 0xd3, 0x7b, 0x9d, 0x33, 0x5d, 0x49, |
| 0xfc, 0x0d, 0xa1, 0xfe, 0x4d, 0x16, 0x70, 0x5d, 0x59, 0x5f, 0x41, 0x41, 0x69, 0x5c, 0x87, 0xdd, |
| 0xab, 0xd1, 0xb7, 0xa3, 0xf1, 0xf7, 0x23, 0xfb, 0x62, 0xdc, 0xeb, 0xd7, 0x9f, 0xa1, 0x3d, 0xa8, |
| 0x5c, 0x8c, 0x47, 0xc3, 0xcb, 0x31, 0xee, 0xf7, 0xea, 0x06, 0xaa, 0x01, 0x74, 0xc7, 0xa3, 0xf3, |
| 0xe1, 0xe0, 0x4a, 0xd6, 0x39, 0xab, 0x0b, 0xb5, 0xa7, 0x77, 0x86, 0x4c, 0x38, 0xcc, 0x28, 0xa6, |
| 0xdd, 0xb3, 0xef, 0x86, 0xa3, 0x41, 0x46, 0x55, 0x85, 0xf2, 0xf4, 0xb2, 0x3f, 0x99, 0x28, 0x22, |
| 0x80, 0x52, 0xaf, 0x7f, 0x71, 0x36, 0x92, 0x24, 0xaf, 0x60, 0x77, 0x61, 0x81, 0xee, 0xb5, 0x8f, |
| 0xbe, 0x4e, 0xd5, 0x50, 0x5e, 0xa3, 0x44, 0x98, 0x86, 0xf2, 0xf7, 0x7b, 0x5b, 0x2d, 0xa3, 0x44, |
| 0x9a, 0xe8, 0x99, 0xd6, 0x5f, 0x05, 0xd8, 0xd3, 0xcd, 0x9c, 0xa5, 0x0a, 0xfd, 0xa7, 0x8f, 0x46, |
| 0x0f, 0xc0, 0x51, 0xb4, 0x8e, 0xab, 0x2f, 0x78, 0xcd, 0xc9, 0x4f, 0xf6, 0x6e, 0x9f, 0x2d, 0xe6, |
| 0xe2, 0x95, 0x75, 0x32, 0x38, 0x2e, 0x4b, 0x84, 0xcd, 0xc9, 0x2f, 0x73, 0x22, 0x12, 0x32, 0xd3, |
| 0x76, 0xd8, 0x93, 0x28, 0xce, 0x40, 0x34, 0x85, 0x7a, 0x7a, 0x9b, 0x4e, 0x60, 0x3b, 0xfa, 0x0d, |
| 0x49, 0x93, 0xde, 0x7a, 0xfb, 0x96, 0x58, 0xaf, 0x48, 0x4b, 0xbc, 0xcf, 0x9f, 0xd4, 0x42, 0x86, |
| 0x88, 0x88, 0x84, 0x86, 0x4e, 0x42, 0x66, 0xb6, 0x70, 0xee, 0x68, 0xe4, 0x0b, 0x95, 0xfb, 0x1c, |
| 0xae, 0x2f, 0x06, 0xa6, 0x29, 0x8e, 0x5e, 0x80, 0x3c, 0xb9, 0x1d, 0xd2, 0x48, 0x45, 0xbb, 0x88, |
| 0x4b, 0x2e, 0x4b, 0x2e, 0x68, 0xb4, 0x18, 0x70, 0xee, 0x55, 0x9c, 0xf5, 0x80, 0x73, 0xbf, 0x1e, |
| 0xbb, 0xca, 0x66, 0xec, 0x7c, 0xa8, 0x3d, 0xed, 0xf1, 0x5f, 0x7b, 0x78, 0x53, 0xbe, 0xfc, 0x16, |
| 0xf9, 0xac, 0x36, 0xc0, 0x52, 0x7f, 0xb4, 0x0f, 0xd5, 0xab, 0xd1, 0x74, 0xd2, 0xef, 0x0e, 0xcf, |
| 0x87, 0xfd, 0x5e, 0xfd, 0x19, 0x2a, 0x43, 0xfe, 0x75, 0x7f, 0x5a, 0x37, 0x50, 0x09, 0x72, 0xa3, |
| 0x71, 0x3d, 0x67, 0xfd, 0x61, 0x40, 0x03, 0x13, 0xc1, 0xe6, 0xdc, 0x23, 0x57, 0x09, 0x0d, 0xe8, |
| 0xa3, 0xf3, 0xce, 0xf6, 0xea, 0x90, 0xbf, 0x0b, 0x85, 0x7e, 0x01, 0xe4, 0xa7, 0xfc, 0xbd, 0xf3, |
| 0xe2, 0xb9, 0xd0, 0xd1, 0x52, 0xdf, 0xef, 0xfc, 0xd5, 0x94, 0x32, 0xce, 0xa8, 0xb8, 0x95, 0x43, |
| 0xc5, 0x34, 0x8e, 0xb2, 0x1c, 0xb8, 0xea, 0x19, 0x71, 0xee, 0x6d, 0xc5, 0x96, 0x5e, 0x4e, 0x39, |
| 0x74, 0xee, 0xbb, 0xf1, 0x5c, 0x58, 0xbf, 0x1b, 0xf0, 0xfc, 0x6c, 0xa9, 0xe7, 0x6a, 0xa7, 0x6b, |
| 0xe2, 0x1b, 0x1b, 0xe2, 0x23, 0x0c, 0x87, 0x5c, 0x1f, 0xd1, 0x9e, 0x2f, 0x57, 0x9a, 0x39, 0x65, |
| 0xab, 0x97, 0xab, 0xb6, 0xda, 0x22, 0x05, 0x6e, 0xf0, 0x4d, 0xd0, 0xfa, 0x2d, 0x07, 0x35, 0xcc, |
| 0x5c, 0xd6, 0xe5, 0x2c, 0xd6, 0x37, 0xda, 0x81, 0xfd, 0xec, 0xc9, 0xcf, 0x8c, 0x9b, 0x46, 0xf8, |
| 0xe8, 0xad, 0xc6, 0xc5, 0x35, 0xb1, 0x5a, 0x8a, 0xff, 0xa3, 0x55, 0xf4, 0x33, 0x1c, 0x49, 0x35, |
| 0xec, 0xad, 0xc4, 0x79, 0x45, 0x6c, 0xad, 0x12, 0x6f, 0xd7, 0x19, 0xbf, 0x90, 0x24, 0x5b, 0x36, |
| 0xed, 0x7c, 0xf9, 0xe3, 0x17, 0x3e, 0x5b, 0x10, 0xb4, 0x19, 0xf7, 0x4f, 0x56, 0xfe, 0xca, 0xd1, |
| 0xe8, 0x9a, 0x3b, 0x27, 0xea, 0x4f, 0xdc, 0x89, 0xcf, 0x56, 0x46, 0xdc, 0x92, 0x02, 0x3f, 0xff, |
| 0x27, 0x00, 0x00, 0xff, 0xff, 0x18, 0xd4, 0x9c, 0x43, 0xf9, 0x09, 0x00, 0x00, |
| } |