blob: e7e59650276c67ba769af90e8624188d636fa1e5 [file] [log] [blame]
// Code generated by protoc-gen-go. DO NOT EDIT.
// source: cycler/config.proto
package cycler
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
// Closure of all config for a single cycler run.
type RunConfig struct {
// The runlog configuration.
RunLogConfiguration *RunLogConfiguration `protobuf:"bytes,1,opt,name=run_log_configuration,json=runLogConfiguration,proto3" json:"run_log_configuration,omitempty"`
// The stats configuration for the prefix and the action statistics.
StatsConfiguration *StatsConfiguration `protobuf:"bytes,2,opt,name=stats_configuration,json=statsConfiguration,proto3" json:"stats_configuration,omitempty"`
// Policy effect configuration.
PolicyEffectConfiguration *PolicyEffectConfiguration `protobuf:"bytes,3,opt,name=policy_effect_configuration,json=policyEffectConfiguration,proto3" json:"policy_effect_configuration,omitempty"`
// Must match the command line argument and policy effect as well.
MutationAllowed bool `protobuf:"varint,4,opt,name=mutation_allowed,json=mutationAllowed,proto3" json:"mutation_allowed,omitempty"`
// The bucket to operate on (can be overridden on the command line).
Bucket string `protobuf:"bytes,5,opt,name=bucket,proto3" json:"bucket,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
}
func (m *RunConfig) Reset() { *m = RunConfig{} }
func (m *RunConfig) String() string { return proto.CompactTextString(m) }
func (*RunConfig) ProtoMessage() {}
func (*RunConfig) Descriptor() ([]byte, []int) {
return fileDescriptor_093cc71b7e56221a, []int{0}
}
func (m *RunConfig) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_RunConfig.Unmarshal(m, b)
}
func (m *RunConfig) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
return xxx_messageInfo_RunConfig.Marshal(b, m, deterministic)
}
func (m *RunConfig) XXX_Merge(src proto.Message) {
xxx_messageInfo_RunConfig.Merge(m, src)
}
func (m *RunConfig) XXX_Size() int {
return xxx_messageInfo_RunConfig.Size(m)
}
func (m *RunConfig) XXX_DiscardUnknown() {
xxx_messageInfo_RunConfig.DiscardUnknown(m)
}
var xxx_messageInfo_RunConfig proto.InternalMessageInfo
func (m *RunConfig) GetRunLogConfiguration() *RunLogConfiguration {
if m != nil {
return m.RunLogConfiguration
}
return nil
}
func (m *RunConfig) GetStatsConfiguration() *StatsConfiguration {
if m != nil {
return m.StatsConfiguration
}
return nil
}
func (m *RunConfig) GetPolicyEffectConfiguration() *PolicyEffectConfiguration {
if m != nil {
return m.PolicyEffectConfiguration
}
return nil
}
func (m *RunConfig) GetMutationAllowed() bool {
if m != nil {
return m.MutationAllowed
}
return false
}
func (m *RunConfig) GetBucket() string {
if m != nil {
return m.Bucket
}
return ""
}
// Options for the log generation during a cycler run.
type RunLogConfiguration struct {
// The destination url 'directory' for the logs, can be file:// or gs://.
DestinationUrl string `protobuf:"bytes,1,opt,name=destination_url,json=destinationUrl,proto3" json:"destination_url,omitempty"`
// The rough chunk size in bytes to deliver the logs in (before compression).
ChunkSizeBytes int64 `protobuf:"varint,2,opt,name=chunk_size_bytes,json=chunkSizeBytes,proto3" json:"chunk_size_bytes,omitempty"`
// How many outstanding log messages can we have before blocking producers.
ChannelSize int64 `protobuf:"varint,3,opt,name=channel_size,json=channelSize,proto3" json:"channel_size,omitempty"`
// How many retries we should make to persist logs.
PersistRetries int64 `protobuf:"varint,4,opt,name=persist_retries,json=persistRetries,proto3" json:"persist_retries,omitempty"`
// How many logs we'll allow to fail persistence and still continue.
// Since we do log shipping in goroutines this is also the cap on the number
// of those.
MaxUnpersistedLogs int64 `protobuf:"varint,5,opt,name=max_unpersisted_logs,json=maxUnpersistedLogs,proto3" json:"max_unpersisted_logs,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
}
func (m *RunLogConfiguration) Reset() { *m = RunLogConfiguration{} }
func (m *RunLogConfiguration) String() string { return proto.CompactTextString(m) }
func (*RunLogConfiguration) ProtoMessage() {}
func (*RunLogConfiguration) Descriptor() ([]byte, []int) {
return fileDescriptor_093cc71b7e56221a, []int{1}
}
func (m *RunLogConfiguration) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_RunLogConfiguration.Unmarshal(m, b)
}
func (m *RunLogConfiguration) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
return xxx_messageInfo_RunLogConfiguration.Marshal(b, m, deterministic)
}
func (m *RunLogConfiguration) XXX_Merge(src proto.Message) {
xxx_messageInfo_RunLogConfiguration.Merge(m, src)
}
func (m *RunLogConfiguration) XXX_Size() int {
return xxx_messageInfo_RunLogConfiguration.Size(m)
}
func (m *RunLogConfiguration) XXX_DiscardUnknown() {
xxx_messageInfo_RunLogConfiguration.DiscardUnknown(m)
}
var xxx_messageInfo_RunLogConfiguration proto.InternalMessageInfo
func (m *RunLogConfiguration) GetDestinationUrl() string {
if m != nil {
return m.DestinationUrl
}
return ""
}
func (m *RunLogConfiguration) GetChunkSizeBytes() int64 {
if m != nil {
return m.ChunkSizeBytes
}
return 0
}
func (m *RunLogConfiguration) GetChannelSize() int64 {
if m != nil {
return m.ChannelSize
}
return 0
}
func (m *RunLogConfiguration) GetPersistRetries() int64 {
if m != nil {
return m.PersistRetries
}
return 0
}
func (m *RunLogConfiguration) GetMaxUnpersistedLogs() int64 {
if m != nil {
return m.MaxUnpersistedLogs
}
return 0
}
// Options provided to any run providing stats.
type StatsConfiguration struct {
// When generating a report for a prefix, how deep should the breakdown be.
PrefixReportMaxDepth int64 `protobuf:"varint,1,opt,name=prefix_report_max_depth,json=prefixReportMaxDepth,proto3" json:"prefix_report_max_depth,omitempty"`
// Histogram options for the objects ages.
AgeDaysHistogramOptions *HistogramOptions `protobuf:"bytes,2,opt,name=age_days_histogram_options,json=ageDaysHistogramOptions,proto3" json:"age_days_histogram_options,omitempty"`
// Histogram options for the objects sizes.
SizeBytesHistogramOptions *HistogramOptions `protobuf:"bytes,3,opt,name=size_bytes_histogram_options,json=sizeBytesHistogramOptions,proto3" json:"size_bytes_histogram_options,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
}
func (m *StatsConfiguration) Reset() { *m = StatsConfiguration{} }
func (m *StatsConfiguration) String() string { return proto.CompactTextString(m) }
func (*StatsConfiguration) ProtoMessage() {}
func (*StatsConfiguration) Descriptor() ([]byte, []int) {
return fileDescriptor_093cc71b7e56221a, []int{2}
}
func (m *StatsConfiguration) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_StatsConfiguration.Unmarshal(m, b)
}
func (m *StatsConfiguration) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
return xxx_messageInfo_StatsConfiguration.Marshal(b, m, deterministic)
}
func (m *StatsConfiguration) XXX_Merge(src proto.Message) {
xxx_messageInfo_StatsConfiguration.Merge(m, src)
}
func (m *StatsConfiguration) XXX_Size() int {
return xxx_messageInfo_StatsConfiguration.Size(m)
}
func (m *StatsConfiguration) XXX_DiscardUnknown() {
xxx_messageInfo_StatsConfiguration.DiscardUnknown(m)
}
var xxx_messageInfo_StatsConfiguration proto.InternalMessageInfo
func (m *StatsConfiguration) GetPrefixReportMaxDepth() int64 {
if m != nil {
return m.PrefixReportMaxDepth
}
return 0
}
func (m *StatsConfiguration) GetAgeDaysHistogramOptions() *HistogramOptions {
if m != nil {
return m.AgeDaysHistogramOptions
}
return nil
}
func (m *StatsConfiguration) GetSizeBytesHistogramOptions() *HistogramOptions {
if m != nil {
return m.SizeBytesHistogramOptions
}
return nil
}
// Options for the Histogram generation during a cycler run.
// See definition in: "google.golang.org/grpc/benchmark/stats"
type HistogramOptions struct {
// The number of unique buckets in the histrogram.
NumBuckets int32 `protobuf:"varint,1,opt,name=num_buckets,json=numBuckets,proto3" json:"num_buckets,omitempty"`
// The growth factor of each bucket to the next.
GrowthFactor float64 `protobuf:"fixed64,2,opt,name=growth_factor,json=growthFactor,proto3" json:"growth_factor,omitempty"`
// The base bucket's size.
BaseBucketSize float64 `protobuf:"fixed64,3,opt,name=base_bucket_size,json=baseBucketSize,proto3" json:"base_bucket_size,omitempty"`
// The minimum valued bucket's value.
MinValue int64 `protobuf:"varint,4,opt,name=min_value,json=minValue,proto3" json:"min_value,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
}
func (m *HistogramOptions) Reset() { *m = HistogramOptions{} }
func (m *HistogramOptions) String() string { return proto.CompactTextString(m) }
func (*HistogramOptions) ProtoMessage() {}
func (*HistogramOptions) Descriptor() ([]byte, []int) {
return fileDescriptor_093cc71b7e56221a, []int{3}
}
func (m *HistogramOptions) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_HistogramOptions.Unmarshal(m, b)
}
func (m *HistogramOptions) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
return xxx_messageInfo_HistogramOptions.Marshal(b, m, deterministic)
}
func (m *HistogramOptions) XXX_Merge(src proto.Message) {
xxx_messageInfo_HistogramOptions.Merge(m, src)
}
func (m *HistogramOptions) XXX_Size() int {
return xxx_messageInfo_HistogramOptions.Size(m)
}
func (m *HistogramOptions) XXX_DiscardUnknown() {
xxx_messageInfo_HistogramOptions.DiscardUnknown(m)
}
var xxx_messageInfo_HistogramOptions proto.InternalMessageInfo
func (m *HistogramOptions) GetNumBuckets() int32 {
if m != nil {
return m.NumBuckets
}
return 0
}
func (m *HistogramOptions) GetGrowthFactor() float64 {
if m != nil {
return m.GrowthFactor
}
return 0
}
func (m *HistogramOptions) GetBaseBucketSize() float64 {
if m != nil {
return m.BaseBucketSize
}
return 0
}
func (m *HistogramOptions) GetMinValue() int64 {
if m != nil {
return m.MinValue
}
return 0
}
// A policy effect configuration defines the policy and the resulting effect.
type PolicyEffectConfiguration struct {
// The effect configuration must be one of the following configs.
//
// Types that are valid to be assigned to EffectConfiguration:
// *PolicyEffectConfiguration_Noop
// *PolicyEffectConfiguration_Move
// *PolicyEffectConfiguration_Chill
// *PolicyEffectConfiguration_Duplicate
EffectConfiguration isPolicyEffectConfiguration_EffectConfiguration `protobuf_oneof:"effect_configuration"`
// The policy document to be parsed by rego and executed to determine if an
// effect is going to be taken upon the object.
PolicyDocumentPath string `protobuf:"bytes,5,opt,name=policy_document_path,json=policyDocumentPath,proto3" json:"policy_document_path,omitempty"`
// Constrain the prefix iterators to paths that match the following go regexp.
PrefixRegexp string `protobuf:"bytes,6,opt,name=prefix_regexp,json=prefixRegexp,proto3" json:"prefix_regexp,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
}
func (m *PolicyEffectConfiguration) Reset() { *m = PolicyEffectConfiguration{} }
func (m *PolicyEffectConfiguration) String() string { return proto.CompactTextString(m) }
func (*PolicyEffectConfiguration) ProtoMessage() {}
func (*PolicyEffectConfiguration) Descriptor() ([]byte, []int) {
return fileDescriptor_093cc71b7e56221a, []int{4}
}
func (m *PolicyEffectConfiguration) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_PolicyEffectConfiguration.Unmarshal(m, b)
}
func (m *PolicyEffectConfiguration) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
return xxx_messageInfo_PolicyEffectConfiguration.Marshal(b, m, deterministic)
}
func (m *PolicyEffectConfiguration) XXX_Merge(src proto.Message) {
xxx_messageInfo_PolicyEffectConfiguration.Merge(m, src)
}
func (m *PolicyEffectConfiguration) XXX_Size() int {
return xxx_messageInfo_PolicyEffectConfiguration.Size(m)
}
func (m *PolicyEffectConfiguration) XXX_DiscardUnknown() {
xxx_messageInfo_PolicyEffectConfiguration.DiscardUnknown(m)
}
var xxx_messageInfo_PolicyEffectConfiguration proto.InternalMessageInfo
type isPolicyEffectConfiguration_EffectConfiguration interface {
isPolicyEffectConfiguration_EffectConfiguration()
}
type PolicyEffectConfiguration_Noop struct {
Noop *NoopEffectConfiguration `protobuf:"bytes,1,opt,name=noop,proto3,oneof"`
}
type PolicyEffectConfiguration_Move struct {
Move *MoveEffectConfiguration `protobuf:"bytes,2,opt,name=move,proto3,oneof"`
}
type PolicyEffectConfiguration_Chill struct {
Chill *ChillEffectConfiguration `protobuf:"bytes,3,opt,name=chill,proto3,oneof"`
}
type PolicyEffectConfiguration_Duplicate struct {
Duplicate *DuplicateEffectConfiguration `protobuf:"bytes,4,opt,name=duplicate,proto3,oneof"`
}
func (*PolicyEffectConfiguration_Noop) isPolicyEffectConfiguration_EffectConfiguration() {}
func (*PolicyEffectConfiguration_Move) isPolicyEffectConfiguration_EffectConfiguration() {}
func (*PolicyEffectConfiguration_Chill) isPolicyEffectConfiguration_EffectConfiguration() {}
func (*PolicyEffectConfiguration_Duplicate) isPolicyEffectConfiguration_EffectConfiguration() {}
func (m *PolicyEffectConfiguration) GetEffectConfiguration() isPolicyEffectConfiguration_EffectConfiguration {
if m != nil {
return m.EffectConfiguration
}
return nil
}
func (m *PolicyEffectConfiguration) GetNoop() *NoopEffectConfiguration {
if x, ok := m.GetEffectConfiguration().(*PolicyEffectConfiguration_Noop); ok {
return x.Noop
}
return nil
}
func (m *PolicyEffectConfiguration) GetMove() *MoveEffectConfiguration {
if x, ok := m.GetEffectConfiguration().(*PolicyEffectConfiguration_Move); ok {
return x.Move
}
return nil
}
func (m *PolicyEffectConfiguration) GetChill() *ChillEffectConfiguration {
if x, ok := m.GetEffectConfiguration().(*PolicyEffectConfiguration_Chill); ok {
return x.Chill
}
return nil
}
func (m *PolicyEffectConfiguration) GetDuplicate() *DuplicateEffectConfiguration {
if x, ok := m.GetEffectConfiguration().(*PolicyEffectConfiguration_Duplicate); ok {
return x.Duplicate
}
return nil
}
func (m *PolicyEffectConfiguration) GetPolicyDocumentPath() string {
if m != nil {
return m.PolicyDocumentPath
}
return ""
}
func (m *PolicyEffectConfiguration) GetPrefixRegexp() string {
if m != nil {
return m.PrefixRegexp
}
return ""
}
// XXX_OneofWrappers is for the internal use of the proto package.
func (*PolicyEffectConfiguration) XXX_OneofWrappers() []interface{} {
return []interface{}{
(*PolicyEffectConfiguration_Noop)(nil),
(*PolicyEffectConfiguration_Move)(nil),
(*PolicyEffectConfiguration_Chill)(nil),
(*PolicyEffectConfiguration_Duplicate)(nil),
}
}
func init() {
proto.RegisterType((*RunConfig)(nil), "cycler.RunConfig")
proto.RegisterType((*RunLogConfiguration)(nil), "cycler.RunLogConfiguration")
proto.RegisterType((*StatsConfiguration)(nil), "cycler.StatsConfiguration")
proto.RegisterType((*HistogramOptions)(nil), "cycler.HistogramOptions")
proto.RegisterType((*PolicyEffectConfiguration)(nil), "cycler.PolicyEffectConfiguration")
}
func init() { proto.RegisterFile("cycler/config.proto", fileDescriptor_093cc71b7e56221a) }
var fileDescriptor_093cc71b7e56221a = []byte{
// 698 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x84, 0x54, 0xdb, 0x4e, 0xdb, 0x3c,
0x1c, 0xff, 0x42, 0xa1, 0xa2, 0x2e, 0x5f, 0x41, 0x2e, 0x83, 0x02, 0x93, 0x28, 0xdd, 0xa4, 0x75,
0x37, 0x2d, 0x62, 0x42, 0xda, 0xed, 0x4a, 0x37, 0x21, 0x0d, 0x06, 0x32, 0x62, 0xd2, 0x76, 0x63,
0xb9, 0xa9, 0x9b, 0x58, 0x24, 0x76, 0xe4, 0x03, 0xb4, 0xbc, 0xcc, 0x1e, 0x69, 0x6f, 0xb1, 0x67,
0xd8, 0xcd, 0xa4, 0xc9, 0x76, 0x42, 0xa1, 0x2d, 0xda, 0x5d, 0xfc, 0x3b, 0x45, 0xff, 0x83, 0x0d,
0xea, 0xe1, 0x24, 0x4c, 0xa8, 0xec, 0x86, 0x82, 0x8f, 0x58, 0xd4, 0xc9, 0xa4, 0xd0, 0x02, 0x96,
0x3d, 0xb8, 0x5b, 0x90, 0x74, 0x34, 0xa2, 0xa1, 0xf6, 0x64, 0xeb, 0xe7, 0x12, 0xa8, 0x20, 0xc3,
0x4f, 0x9c, 0x01, 0x5e, 0x80, 0x17, 0xd2, 0x70, 0x9c, 0x88, 0x08, 0xfb, 0x08, 0x23, 0x89, 0x66,
0x82, 0x37, 0x82, 0x66, 0xd0, 0xae, 0x1e, 0xed, 0x75, 0x7c, 0x44, 0x07, 0x19, 0x7e, 0x26, 0xa2,
0x93, 0xc7, 0x12, 0x54, 0x97, 0xf3, 0x20, 0xfc, 0x0c, 0xea, 0x4a, 0x13, 0xad, 0x66, 0xe2, 0x96,
0x5c, 0xdc, 0x6e, 0x11, 0x77, 0x65, 0x25, 0x4f, 0xd3, 0xa0, 0x9a, 0xc3, 0x20, 0x01, 0x7b, 0x99,
0x48, 0x58, 0x38, 0xc1, 0xbe, 0x84, 0x99, 0xd0, 0x92, 0x0b, 0x3d, 0x28, 0x42, 0x2f, 0x9d, 0xf4,
0xa3, 0x53, 0x3e, 0xcd, 0xde, 0xc9, 0x9e, 0xa3, 0xe0, 0x5b, 0xb0, 0x91, 0x1a, 0xed, 0xbe, 0x31,
0x49, 0x12, 0x71, 0x47, 0x87, 0x8d, 0xe5, 0x66, 0xd0, 0x5e, 0x45, 0xeb, 0x05, 0xfe, 0xc1, 0xc3,
0x70, 0x0b, 0x94, 0x07, 0x26, 0xbc, 0xa1, 0xba, 0xb1, 0xd2, 0x0c, 0xda, 0x15, 0x94, 0x9f, 0x5a,
0xbf, 0x02, 0x50, 0x5f, 0xd0, 0x1f, 0xf8, 0x06, 0xac, 0x0f, 0xa9, 0xd2, 0x8c, 0xfb, 0x74, 0x23,
0x13, 0xd7, 0xd5, 0x0a, 0xaa, 0x3d, 0x82, 0xaf, 0x65, 0x02, 0xdb, 0x60, 0x23, 0x8c, 0x0d, 0xbf,
0xc1, 0x8a, 0xdd, 0x53, 0x3c, 0x98, 0x68, 0xaa, 0x5c, 0xc3, 0x4a, 0xa8, 0xe6, 0xf0, 0x2b, 0x76,
0x4f, 0x7b, 0x16, 0x85, 0x07, 0x60, 0x2d, 0x8c, 0x09, 0xe7, 0x34, 0x71, 0x5a, 0xd7, 0x81, 0x12,
0xaa, 0xe6, 0x98, 0xd5, 0xd9, 0xbf, 0x66, 0x54, 0x2a, 0xa6, 0x34, 0x96, 0x54, 0x4b, 0x46, 0x95,
0xab, 0xa7, 0x84, 0x6a, 0x39, 0x8c, 0x3c, 0x0a, 0x0f, 0xc1, 0x66, 0x4a, 0xc6, 0xd8, 0xf0, 0x1c,
0xa7, 0x43, 0xbb, 0x06, 0xca, 0x15, 0x57, 0x42, 0x30, 0x25, 0xe3, 0xeb, 0x29, 0x75, 0x26, 0x22,
0xd5, 0xfa, 0x13, 0x00, 0x38, 0x3f, 0x39, 0x78, 0x0c, 0xb6, 0x33, 0x49, 0x47, 0x6c, 0x8c, 0x25,
0xcd, 0x84, 0xd4, 0xd8, 0xc6, 0x0e, 0x69, 0xa6, 0x63, 0x57, 0x6f, 0x09, 0x6d, 0x7a, 0x1a, 0x39,
0xf6, 0x9c, 0x8c, 0xfb, 0x96, 0x83, 0xd7, 0x60, 0x97, 0x44, 0x14, 0x0f, 0xc9, 0x44, 0xe1, 0x98,
0x29, 0x2d, 0x22, 0x49, 0x52, 0x2c, 0x32, 0x9b, 0xa9, 0xf2, 0x85, 0x69, 0x14, 0xb3, 0x3d, 0x2d,
0x04, 0x17, 0x9e, 0x47, 0xdb, 0x24, 0xa2, 0x7d, 0x32, 0x51, 0xb3, 0x04, 0xfc, 0x06, 0x5e, 0x4e,
0xdb, 0xb8, 0x20, 0xb8, 0xf4, 0x8f, 0xe0, 0x1d, 0x55, 0x74, 0x7b, 0x96, 0x6a, 0xfd, 0x08, 0xc0,
0xc6, 0xdc, 0xff, 0xf6, 0x41, 0x95, 0x9b, 0x14, 0xfb, 0x5d, 0x50, 0xae, 0xe2, 0x15, 0x04, 0xb8,
0x49, 0x7b, 0x1e, 0x81, 0xaf, 0xc0, 0xff, 0x91, 0x14, 0x77, 0x3a, 0xc6, 0x23, 0x12, 0x6a, 0x21,
0x5d, 0x69, 0x01, 0x5a, 0xf3, 0xe0, 0x27, 0x87, 0xd9, 0x15, 0x18, 0x10, 0x45, 0xf3, 0x98, 0xe9,
0x70, 0x03, 0x54, 0xb3, 0xb8, 0xcf, 0x72, 0xf3, 0xdd, 0x03, 0x95, 0x94, 0x71, 0x7c, 0x4b, 0x12,
0x43, 0xf3, 0xc9, 0xae, 0xa6, 0x8c, 0x7f, 0xb5, 0xe7, 0xd6, 0xef, 0x25, 0xb0, 0xf3, 0xec, 0x35,
0x80, 0xc7, 0x60, 0x99, 0x0b, 0x91, 0xe5, 0x77, 0x7b, 0xbf, 0x68, 0xc1, 0x17, 0x21, 0xb2, 0x05,
0xf2, 0xd3, 0xff, 0x90, 0x93, 0x5b, 0x5b, 0x2a, 0x6e, 0x69, 0x3e, 0x92, 0x07, 0xdb, 0xb9, 0xb8,
0xa5, 0xcf, 0xd8, 0xac, 0x1c, 0xbe, 0x07, 0x2b, 0x61, 0xcc, 0x92, 0x24, 0xef, 0x78, 0xb3, 0xf0,
0x9d, 0x58, 0x70, 0xb1, 0xd1, 0x1b, 0x60, 0x1f, 0x54, 0x86, 0x26, 0x4b, 0x58, 0x48, 0xb4, 0x2f,
0xb1, 0x7a, 0xf4, 0xba, 0x70, 0xf7, 0x0b, 0x62, 0x71, 0xc2, 0xd4, 0x68, 0xf7, 0x3b, 0x7f, 0x3c,
0x86, 0x22, 0x34, 0x29, 0xe5, 0x1a, 0x67, 0x44, 0xc7, 0xf9, 0xe5, 0x85, 0x9e, 0xeb, 0xe7, 0xd4,
0x25, 0xd1, 0xb1, 0x9d, 0xd4, 0xc3, 0x22, 0x47, 0x74, 0x9c, 0x35, 0xca, 0x4e, 0xba, 0x56, 0xac,
0xaf, 0xc5, 0x7a, 0x5b, 0x60, 0x73, 0xd1, 0x63, 0xd4, 0x3b, 0xfa, 0x7e, 0x18, 0x89, 0x4e, 0x18,
0x4b, 0x91, 0x32, 0x93, 0x76, 0x84, 0x8c, 0xba, 0xc5, 0x41, 0xa8, 0x2e, 0xe3, 0x23, 0x49, 0xba,
0xee, 0x05, 0xee, 0x46, 0xa2, 0xeb, 0x8b, 0x19, 0x94, 0x1d, 0xf0, 0xee, 0x6f, 0x00, 0x00, 0x00,
0xff, 0xff, 0x72, 0x72, 0xb9, 0xf0, 0xc6, 0x05, 0x00, 0x00,
}