functional-tester/rpcpb: add "etcd-client-tls", "tester-data-dir"

Signed-off-by: Gyuho Lee <gyuhox@gmail.com>
This commit is contained in:
Gyuho Lee 2018-04-05 15:08:05 -07:00
parent 8f71afd6e2
commit 63755e49fc
3 changed files with 535 additions and 185 deletions

View File

@ -17,39 +17,85 @@ package rpcpb
import (
"context"
"fmt"
"net/url"
"time"
"github.com/coreos/etcd/clientv3"
pb "github.com/coreos/etcd/etcdserver/etcdserverpb"
"github.com/coreos/etcd/pkg/transport"
grpc "google.golang.org/grpc"
"google.golang.org/grpc/credentials"
)
var dialOpts = []grpc.DialOption{
grpc.WithInsecure(),
grpc.WithTimeout(5 * time.Second),
grpc.WithBlock(),
}
// DialEtcdGRPCServer creates a raw gRPC connection to an etcd member.
func (m *Member) DialEtcdGRPCServer(opts ...grpc.DialOption) (*grpc.ClientConn, error) {
if m.EtcdClientTLS {
// TODO: support TLS
panic("client TLS not supported yet")
dialOpts := []grpc.DialOption{
grpc.WithTimeout(5 * time.Second),
grpc.WithBlock(),
}
return grpc.Dial(m.EtcdClientEndpoint, append(dialOpts, opts...)...)
secure := false
for _, cu := range m.Etcd.AdvertiseClientURLs {
u, err := url.Parse(cu)
if err != nil {
return nil, err
}
if u.Scheme == "https" { // TODO: handle unix
secure = true
}
}
if secure {
// assume save TLS assets are already stord on disk
tlsInfo := transport.TLSInfo{
CertFile: m.ClientCertPath,
KeyFile: m.ClientKeyPath,
TrustedCAFile: m.ClientTrustedCAPath,
}
tlsConfig, err := tlsInfo.ClientConfig()
if err != nil {
return nil, err
}
creds := credentials.NewTLS(tlsConfig)
dialOpts = append(dialOpts, grpc.WithTransportCredentials(creds))
} else {
dialOpts = append(dialOpts, grpc.WithInsecure())
}
dialOpts = append(dialOpts, opts...)
return grpc.Dial(m.EtcdClientEndpoint, dialOpts...)
}
// CreateEtcdClient creates a client from member.
func (m *Member) CreateEtcdClient(opts ...grpc.DialOption) (*clientv3.Client, error) {
secure := false
for _, cu := range m.Etcd.AdvertiseClientURLs {
u, err := url.Parse(cu)
if err != nil {
return nil, err
}
if u.Scheme == "https" { // TODO: handle unix
secure = true
}
}
cfg := clientv3.Config{
Endpoints: []string{m.EtcdClientEndpoint},
DialTimeout: 5 * time.Second,
DialOptions: opts,
}
if m.EtcdClientTLS {
// TODO: support TLS
panic("client TLS not supported yet")
if secure {
// assume save TLS assets are already stord on disk
tlsInfo := transport.TLSInfo{
CertFile: m.ClientCertPath,
KeyFile: m.ClientKeyPath,
TrustedCAFile: m.ClientTrustedCAPath,
}
tlsConfig, err := tlsInfo.ClientConfig()
if err != nil {
return nil, err
}
cfg.TLS = tlsConfig
}
return clientv3.New(cfg)
}

View File

@ -286,16 +286,22 @@ type Member struct {
Etcd *Etcd `protobuf:"bytes,302,opt,name=Etcd" json:"Etcd,omitempty" yaml:"etcd"`
// ClientCertData contains cert file contents from this member's etcd server.
ClientCertData string `protobuf:"bytes,401,opt,name=ClientCertData,proto3" json:"ClientCertData,omitempty" yaml:"client-cert-data"`
ClientCertPath string `protobuf:"bytes,402,opt,name=ClientCertPath,proto3" json:"ClientCertPath,omitempty" yaml:"client-cert-path"`
// ClientKeyData contains key file contents from this member's etcd server.
ClientKeyData string `protobuf:"bytes,402,opt,name=ClientKeyData,proto3" json:"ClientKeyData,omitempty" yaml:"client-key-data"`
ClientKeyData string `protobuf:"bytes,403,opt,name=ClientKeyData,proto3" json:"ClientKeyData,omitempty" yaml:"client-key-data"`
ClientKeyPath string `protobuf:"bytes,404,opt,name=ClientKeyPath,proto3" json:"ClientKeyPath,omitempty" yaml:"client-key-path"`
// ClientTrustedCAData contains trusted CA file contents from this member's etcd server.
ClientTrustedCAData string `protobuf:"bytes,403,opt,name=ClientTrustedCAData,proto3" json:"ClientTrustedCAData,omitempty" yaml:"client-trusted-ca-data"`
ClientTrustedCAData string `protobuf:"bytes,405,opt,name=ClientTrustedCAData,proto3" json:"ClientTrustedCAData,omitempty" yaml:"client-trusted-ca-data"`
ClientTrustedCAPath string `protobuf:"bytes,406,opt,name=ClientTrustedCAPath,proto3" json:"ClientTrustedCAPath,omitempty" yaml:"client-trusted-ca-path"`
// PeerCertData contains cert file contents from this member's etcd server.
PeerCertData string `protobuf:"bytes,501,opt,name=PeerCertData,proto3" json:"PeerCertData,omitempty" yaml:"peer-cert-data"`
PeerCertPath string `protobuf:"bytes,502,opt,name=PeerCertPath,proto3" json:"PeerCertPath,omitempty" yaml:"peer-cert-path"`
// PeerKeyData contains key file contents from this member's etcd server.
PeerKeyData string `protobuf:"bytes,502,opt,name=PeerKeyData,proto3" json:"PeerKeyData,omitempty" yaml:"peer-key-data"`
PeerKeyData string `protobuf:"bytes,503,opt,name=PeerKeyData,proto3" json:"PeerKeyData,omitempty" yaml:"peer-key-data"`
PeerKeyPath string `protobuf:"bytes,504,opt,name=PeerKeyPath,proto3" json:"PeerKeyPath,omitempty" yaml:"peer-key-path"`
// PeerTrustedCAData contains trusted CA file contents from this member's etcd server.
PeerTrustedCAData string `protobuf:"bytes,503,opt,name=PeerTrustedCAData,proto3" json:"PeerTrustedCAData,omitempty" yaml:"peer-trusted-ca-data"`
PeerTrustedCAData string `protobuf:"bytes,505,opt,name=PeerTrustedCAData,proto3" json:"PeerTrustedCAData,omitempty" yaml:"peer-trusted-ca-data"`
PeerTrustedCAPath string `protobuf:"bytes,506,opt,name=PeerTrustedCAPath,proto3" json:"PeerTrustedCAPath,omitempty" yaml:"peer-trusted-ca-path"`
}
func (m *Member) Reset() { *m = Member{} }
@ -304,8 +310,9 @@ func (*Member) ProtoMessage() {}
func (*Member) Descriptor() ([]byte, []int) { return fileDescriptorRpc, []int{1} }
type Tester struct {
TesterNetwork string `protobuf:"bytes,1,opt,name=TesterNetwork,proto3" json:"TesterNetwork,omitempty" yaml:"tester-network"`
TesterAddr string `protobuf:"bytes,2,opt,name=TesterAddr,proto3" json:"TesterAddr,omitempty" yaml:"tester-addr"`
TesterDataDir string `protobuf:"bytes,1,opt,name=TesterDataDir,proto3" json:"TesterDataDir,omitempty" yaml:"tester-data-dir"`
TesterNetwork string `protobuf:"bytes,2,opt,name=TesterNetwork,proto3" json:"TesterNetwork,omitempty" yaml:"tester-network"`
TesterAddr string `protobuf:"bytes,3,opt,name=TesterAddr,proto3" json:"TesterAddr,omitempty" yaml:"tester-addr"`
// DelayLatencyMsRv is the delay latency in milliseconds,
// to inject to simulated slow network.
DelayLatencyMs uint32 `protobuf:"varint,11,opt,name=DelayLatencyMs,proto3" json:"DelayLatencyMs,omitempty" yaml:"delay-latency-ms"`
@ -877,22 +884,46 @@ func (m *Member) MarshalTo(dAtA []byte) (int, error) {
i = encodeVarintRpc(dAtA, i, uint64(len(m.ClientCertData)))
i += copy(dAtA[i:], m.ClientCertData)
}
if len(m.ClientKeyData) > 0 {
if len(m.ClientCertPath) > 0 {
dAtA[i] = 0x92
i++
dAtA[i] = 0x19
i++
i = encodeVarintRpc(dAtA, i, uint64(len(m.ClientCertPath)))
i += copy(dAtA[i:], m.ClientCertPath)
}
if len(m.ClientKeyData) > 0 {
dAtA[i] = 0x9a
i++
dAtA[i] = 0x19
i++
i = encodeVarintRpc(dAtA, i, uint64(len(m.ClientKeyData)))
i += copy(dAtA[i:], m.ClientKeyData)
}
if len(m.ClientKeyPath) > 0 {
dAtA[i] = 0xa2
i++
dAtA[i] = 0x19
i++
i = encodeVarintRpc(dAtA, i, uint64(len(m.ClientKeyPath)))
i += copy(dAtA[i:], m.ClientKeyPath)
}
if len(m.ClientTrustedCAData) > 0 {
dAtA[i] = 0x9a
dAtA[i] = 0xaa
i++
dAtA[i] = 0x19
i++
i = encodeVarintRpc(dAtA, i, uint64(len(m.ClientTrustedCAData)))
i += copy(dAtA[i:], m.ClientTrustedCAData)
}
if len(m.ClientTrustedCAPath) > 0 {
dAtA[i] = 0xb2
i++
dAtA[i] = 0x19
i++
i = encodeVarintRpc(dAtA, i, uint64(len(m.ClientTrustedCAPath)))
i += copy(dAtA[i:], m.ClientTrustedCAPath)
}
if len(m.PeerCertData) > 0 {
dAtA[i] = 0xaa
i++
@ -901,22 +932,46 @@ func (m *Member) MarshalTo(dAtA []byte) (int, error) {
i = encodeVarintRpc(dAtA, i, uint64(len(m.PeerCertData)))
i += copy(dAtA[i:], m.PeerCertData)
}
if len(m.PeerKeyData) > 0 {
if len(m.PeerCertPath) > 0 {
dAtA[i] = 0xb2
i++
dAtA[i] = 0x1f
i++
i = encodeVarintRpc(dAtA, i, uint64(len(m.PeerCertPath)))
i += copy(dAtA[i:], m.PeerCertPath)
}
if len(m.PeerKeyData) > 0 {
dAtA[i] = 0xba
i++
dAtA[i] = 0x1f
i++
i = encodeVarintRpc(dAtA, i, uint64(len(m.PeerKeyData)))
i += copy(dAtA[i:], m.PeerKeyData)
}
if len(m.PeerKeyPath) > 0 {
dAtA[i] = 0xc2
i++
dAtA[i] = 0x1f
i++
i = encodeVarintRpc(dAtA, i, uint64(len(m.PeerKeyPath)))
i += copy(dAtA[i:], m.PeerKeyPath)
}
if len(m.PeerTrustedCAData) > 0 {
dAtA[i] = 0xba
dAtA[i] = 0xca
i++
dAtA[i] = 0x1f
i++
i = encodeVarintRpc(dAtA, i, uint64(len(m.PeerTrustedCAData)))
i += copy(dAtA[i:], m.PeerTrustedCAData)
}
if len(m.PeerTrustedCAPath) > 0 {
dAtA[i] = 0xd2
i++
dAtA[i] = 0x1f
i++
i = encodeVarintRpc(dAtA, i, uint64(len(m.PeerTrustedCAPath)))
i += copy(dAtA[i:], m.PeerTrustedCAPath)
}
return i, nil
}
@ -935,14 +990,20 @@ func (m *Tester) MarshalTo(dAtA []byte) (int, error) {
_ = i
var l int
_ = l
if len(m.TesterNetwork) > 0 {
if len(m.TesterDataDir) > 0 {
dAtA[i] = 0xa
i++
i = encodeVarintRpc(dAtA, i, uint64(len(m.TesterDataDir)))
i += copy(dAtA[i:], m.TesterDataDir)
}
if len(m.TesterNetwork) > 0 {
dAtA[i] = 0x12
i++
i = encodeVarintRpc(dAtA, i, uint64(len(m.TesterNetwork)))
i += copy(dAtA[i:], m.TesterNetwork)
}
if len(m.TesterAddr) > 0 {
dAtA[i] = 0x12
dAtA[i] = 0x1a
i++
i = encodeVarintRpc(dAtA, i, uint64(len(m.TesterAddr)))
i += copy(dAtA[i:], m.TesterAddr)
@ -1388,32 +1449,60 @@ func (m *Member) Size() (n int) {
if l > 0 {
n += 2 + l + sovRpc(uint64(l))
}
l = len(m.ClientCertPath)
if l > 0 {
n += 2 + l + sovRpc(uint64(l))
}
l = len(m.ClientKeyData)
if l > 0 {
n += 2 + l + sovRpc(uint64(l))
}
l = len(m.ClientKeyPath)
if l > 0 {
n += 2 + l + sovRpc(uint64(l))
}
l = len(m.ClientTrustedCAData)
if l > 0 {
n += 2 + l + sovRpc(uint64(l))
}
l = len(m.ClientTrustedCAPath)
if l > 0 {
n += 2 + l + sovRpc(uint64(l))
}
l = len(m.PeerCertData)
if l > 0 {
n += 2 + l + sovRpc(uint64(l))
}
l = len(m.PeerCertPath)
if l > 0 {
n += 2 + l + sovRpc(uint64(l))
}
l = len(m.PeerKeyData)
if l > 0 {
n += 2 + l + sovRpc(uint64(l))
}
l = len(m.PeerKeyPath)
if l > 0 {
n += 2 + l + sovRpc(uint64(l))
}
l = len(m.PeerTrustedCAData)
if l > 0 {
n += 2 + l + sovRpc(uint64(l))
}
l = len(m.PeerTrustedCAPath)
if l > 0 {
n += 2 + l + sovRpc(uint64(l))
}
return n
}
func (m *Tester) Size() (n int) {
var l int
_ = l
l = len(m.TesterDataDir)
if l > 0 {
n += 1 + l + sovRpc(uint64(l))
}
l = len(m.TesterNetwork)
if l > 0 {
n += 1 + l + sovRpc(uint64(l))
@ -2562,6 +2651,35 @@ func (m *Member) Unmarshal(dAtA []byte) error {
m.ClientCertData = string(dAtA[iNdEx:postIndex])
iNdEx = postIndex
case 402:
if wireType != 2 {
return fmt.Errorf("proto: wrong wireType = %d for field ClientCertPath", wireType)
}
var stringLen uint64
for shift := uint(0); ; shift += 7 {
if shift >= 64 {
return ErrIntOverflowRpc
}
if iNdEx >= l {
return io.ErrUnexpectedEOF
}
b := dAtA[iNdEx]
iNdEx++
stringLen |= (uint64(b) & 0x7F) << shift
if b < 0x80 {
break
}
}
intStringLen := int(stringLen)
if intStringLen < 0 {
return ErrInvalidLengthRpc
}
postIndex := iNdEx + intStringLen
if postIndex > l {
return io.ErrUnexpectedEOF
}
m.ClientCertPath = string(dAtA[iNdEx:postIndex])
iNdEx = postIndex
case 403:
if wireType != 2 {
return fmt.Errorf("proto: wrong wireType = %d for field ClientKeyData", wireType)
}
@ -2590,7 +2708,36 @@ func (m *Member) Unmarshal(dAtA []byte) error {
}
m.ClientKeyData = string(dAtA[iNdEx:postIndex])
iNdEx = postIndex
case 403:
case 404:
if wireType != 2 {
return fmt.Errorf("proto: wrong wireType = %d for field ClientKeyPath", wireType)
}
var stringLen uint64
for shift := uint(0); ; shift += 7 {
if shift >= 64 {
return ErrIntOverflowRpc
}
if iNdEx >= l {
return io.ErrUnexpectedEOF
}
b := dAtA[iNdEx]
iNdEx++
stringLen |= (uint64(b) & 0x7F) << shift
if b < 0x80 {
break
}
}
intStringLen := int(stringLen)
if intStringLen < 0 {
return ErrInvalidLengthRpc
}
postIndex := iNdEx + intStringLen
if postIndex > l {
return io.ErrUnexpectedEOF
}
m.ClientKeyPath = string(dAtA[iNdEx:postIndex])
iNdEx = postIndex
case 405:
if wireType != 2 {
return fmt.Errorf("proto: wrong wireType = %d for field ClientTrustedCAData", wireType)
}
@ -2619,6 +2766,35 @@ func (m *Member) Unmarshal(dAtA []byte) error {
}
m.ClientTrustedCAData = string(dAtA[iNdEx:postIndex])
iNdEx = postIndex
case 406:
if wireType != 2 {
return fmt.Errorf("proto: wrong wireType = %d for field ClientTrustedCAPath", wireType)
}
var stringLen uint64
for shift := uint(0); ; shift += 7 {
if shift >= 64 {
return ErrIntOverflowRpc
}
if iNdEx >= l {
return io.ErrUnexpectedEOF
}
b := dAtA[iNdEx]
iNdEx++
stringLen |= (uint64(b) & 0x7F) << shift
if b < 0x80 {
break
}
}
intStringLen := int(stringLen)
if intStringLen < 0 {
return ErrInvalidLengthRpc
}
postIndex := iNdEx + intStringLen
if postIndex > l {
return io.ErrUnexpectedEOF
}
m.ClientTrustedCAPath = string(dAtA[iNdEx:postIndex])
iNdEx = postIndex
case 501:
if wireType != 2 {
return fmt.Errorf("proto: wrong wireType = %d for field PeerCertData", wireType)
@ -2649,6 +2825,35 @@ func (m *Member) Unmarshal(dAtA []byte) error {
m.PeerCertData = string(dAtA[iNdEx:postIndex])
iNdEx = postIndex
case 502:
if wireType != 2 {
return fmt.Errorf("proto: wrong wireType = %d for field PeerCertPath", wireType)
}
var stringLen uint64
for shift := uint(0); ; shift += 7 {
if shift >= 64 {
return ErrIntOverflowRpc
}
if iNdEx >= l {
return io.ErrUnexpectedEOF
}
b := dAtA[iNdEx]
iNdEx++
stringLen |= (uint64(b) & 0x7F) << shift
if b < 0x80 {
break
}
}
intStringLen := int(stringLen)
if intStringLen < 0 {
return ErrInvalidLengthRpc
}
postIndex := iNdEx + intStringLen
if postIndex > l {
return io.ErrUnexpectedEOF
}
m.PeerCertPath = string(dAtA[iNdEx:postIndex])
iNdEx = postIndex
case 503:
if wireType != 2 {
return fmt.Errorf("proto: wrong wireType = %d for field PeerKeyData", wireType)
}
@ -2677,7 +2882,36 @@ func (m *Member) Unmarshal(dAtA []byte) error {
}
m.PeerKeyData = string(dAtA[iNdEx:postIndex])
iNdEx = postIndex
case 503:
case 504:
if wireType != 2 {
return fmt.Errorf("proto: wrong wireType = %d for field PeerKeyPath", wireType)
}
var stringLen uint64
for shift := uint(0); ; shift += 7 {
if shift >= 64 {
return ErrIntOverflowRpc
}
if iNdEx >= l {
return io.ErrUnexpectedEOF
}
b := dAtA[iNdEx]
iNdEx++
stringLen |= (uint64(b) & 0x7F) << shift
if b < 0x80 {
break
}
}
intStringLen := int(stringLen)
if intStringLen < 0 {
return ErrInvalidLengthRpc
}
postIndex := iNdEx + intStringLen
if postIndex > l {
return io.ErrUnexpectedEOF
}
m.PeerKeyPath = string(dAtA[iNdEx:postIndex])
iNdEx = postIndex
case 505:
if wireType != 2 {
return fmt.Errorf("proto: wrong wireType = %d for field PeerTrustedCAData", wireType)
}
@ -2706,6 +2940,35 @@ func (m *Member) Unmarshal(dAtA []byte) error {
}
m.PeerTrustedCAData = string(dAtA[iNdEx:postIndex])
iNdEx = postIndex
case 506:
if wireType != 2 {
return fmt.Errorf("proto: wrong wireType = %d for field PeerTrustedCAPath", wireType)
}
var stringLen uint64
for shift := uint(0); ; shift += 7 {
if shift >= 64 {
return ErrIntOverflowRpc
}
if iNdEx >= l {
return io.ErrUnexpectedEOF
}
b := dAtA[iNdEx]
iNdEx++
stringLen |= (uint64(b) & 0x7F) << shift
if b < 0x80 {
break
}
}
intStringLen := int(stringLen)
if intStringLen < 0 {
return ErrInvalidLengthRpc
}
postIndex := iNdEx + intStringLen
if postIndex > l {
return io.ErrUnexpectedEOF
}
m.PeerTrustedCAPath = string(dAtA[iNdEx:postIndex])
iNdEx = postIndex
default:
iNdEx = preIndex
skippy, err := skipRpc(dAtA[iNdEx:])
@ -2757,6 +3020,35 @@ func (m *Tester) Unmarshal(dAtA []byte) error {
}
switch fieldNum {
case 1:
if wireType != 2 {
return fmt.Errorf("proto: wrong wireType = %d for field TesterDataDir", wireType)
}
var stringLen uint64
for shift := uint(0); ; shift += 7 {
if shift >= 64 {
return ErrIntOverflowRpc
}
if iNdEx >= l {
return io.ErrUnexpectedEOF
}
b := dAtA[iNdEx]
iNdEx++
stringLen |= (uint64(b) & 0x7F) << shift
if b < 0x80 {
break
}
}
intStringLen := int(stringLen)
if intStringLen < 0 {
return ErrInvalidLengthRpc
}
postIndex := iNdEx + intStringLen
if postIndex > l {
return io.ErrUnexpectedEOF
}
m.TesterDataDir = string(dAtA[iNdEx:postIndex])
iNdEx = postIndex
case 2:
if wireType != 2 {
return fmt.Errorf("proto: wrong wireType = %d for field TesterNetwork", wireType)
}
@ -2785,7 +3077,7 @@ func (m *Tester) Unmarshal(dAtA []byte) error {
}
m.TesterNetwork = string(dAtA[iNdEx:postIndex])
iNdEx = postIndex
case 2:
case 3:
if wireType != 2 {
return fmt.Errorf("proto: wrong wireType = %d for field TesterAddr", wireType)
}
@ -3663,155 +3955,160 @@ var (
func init() { proto.RegisterFile("rpcpb/rpc.proto", fileDescriptorRpc) }
var fileDescriptorRpc = []byte{
// 2390 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x59, 0xdb, 0x76, 0xdb, 0xc6,
0xd5, 0x16, 0x44, 0x4b, 0x96, 0x46, 0x27, 0x6a, 0x64, 0x59, 0xb0, 0x9d, 0x08, 0x32, 0x1c, 0xe7,
0x57, 0xf4, 0x17, 0x72, 0x6b, 0x67, 0xb5, 0xb5, 0x73, 0xb0, 0x29, 0x0a, 0xb6, 0x58, 0x41, 0x24,
0x3d, 0x84, 0x6c, 0xe7, 0x8a, 0x85, 0xc0, 0xa1, 0x88, 0x0a, 0x02, 0x68, 0x60, 0xa8, 0x50, 0x79,
0x81, 0xde, 0xf6, 0x70, 0xd3, 0x87, 0x68, 0xfa, 0x1c, 0x4e, 0x7a, 0x4a, 0xdb, 0xbb, 0x5e, 0xb0,
0xad, 0xbb, 0xfa, 0x02, 0x5c, 0x3d, 0xac, 0xde, 0x75, 0xcd, 0x81, 0xe4, 0x00, 0x24, 0x65, 0xdf,
0x69, 0xf6, 0xfe, 0xbe, 0x0f, 0x33, 0x7b, 0xcf, 0xec, 0xbd, 0x69, 0x83, 0xa5, 0xa8, 0xe9, 0x36,
0x8f, 0xee, 0x44, 0x4d, 0x77, 0xbb, 0x19, 0x85, 0x24, 0x84, 0x53, 0xcc, 0x70, 0xdd, 0x38, 0xf6,
0x48, 0xa3, 0x75, 0xb4, 0xed, 0x86, 0xa7, 0x77, 0x8e, 0xc3, 0xe3, 0xf0, 0x0e, 0xf3, 0x1e, 0xb5,
0xea, 0x6c, 0xc5, 0x16, 0xec, 0x2f, 0xce, 0xd2, 0xff, 0xbb, 0x00, 0x2e, 0x99, 0xc4, 0xad, 0xc1,
0x5b, 0xe0, 0x52, 0xd1, 0x39, 0xc5, 0xaa, 0xb2, 0xa1, 0x6c, 0xce, 0xee, 0x2c, 0x75, 0x3b, 0xda,
0xdc, 0xb9, 0x73, 0xea, 0x3f, 0xd0, 0x03, 0xe7, 0x14, 0xeb, 0x88, 0x39, 0xa1, 0x01, 0x2e, 0xef,
0x3a, 0xc4, 0xd9, 0xf5, 0x22, 0x75, 0x92, 0xe1, 0x56, 0xba, 0x1d, 0x6d, 0x89, 0xe3, 0x6a, 0x0e,
0x71, 0x8c, 0x9a, 0x17, 0xe9, 0xa8, 0x87, 0x81, 0x5b, 0x60, 0xfa, 0x79, 0xce, 0xa2, 0xe8, 0x0c,
0x43, 0xc3, 0x6e, 0x47, 0x5b, 0xe4, 0xe8, 0xcf, 0x1d, 0x9f, 0x83, 0x05, 0x02, 0x96, 0xc0, 0xca,
0x1e, 0x76, 0x22, 0x72, 0x84, 0x1d, 0x52, 0x08, 0x08, 0x8e, 0xce, 0x1c, 0xff, 0x20, 0x56, 0xe7,
0x36, 0x94, 0xcd, 0xcc, 0xce, 0xbb, 0xdd, 0x8e, 0x76, 0x8d, 0x13, 0x1b, 0x3d, 0x90, 0xe1, 0x09,
0x94, 0x8e, 0x46, 0x31, 0x61, 0x01, 0x2c, 0x9b, 0x3e, 0x76, 0x89, 0x17, 0x06, 0xb6, 0x77, 0x8a,
0xc3, 0x16, 0x39, 0x88, 0xd5, 0x79, 0x26, 0x77, 0xa3, 0xdb, 0xd1, 0xd6, 0xb8, 0x1c, 0x16, 0x10,
0x83, 0x70, 0x8c, 0x8e, 0x86, 0x59, 0xb0, 0x00, 0xb2, 0x96, 0x17, 0x13, 0x1c, 0xe4, 0x7d, 0x0f,
0x07, 0xe4, 0x10, 0x59, 0xb1, 0xba, 0xba, 0x91, 0xd9, 0x9c, 0x95, 0x37, 0xe6, 0x33, 0x84, 0xe1,
0x32, 0x88, 0xd1, 0x8a, 0xfc, 0x58, 0x47, 0x43, 0x34, 0x88, 0xc0, 0x4a, 0xae, 0x76, 0x86, 0x23,
0xe2, 0xc5, 0x58, 0x52, 0xbb, 0xca, 0xd4, 0x36, 0xba, 0x1d, 0xed, 0x1d, 0xae, 0xe6, 0xf4, 0x40,
0x49, 0xc1, 0x51, 0x64, 0x78, 0x1f, 0x2c, 0xf0, 0x55, 0xae, 0x45, 0x42, 0xdb, 0xaa, 0xa8, 0x6b,
0x1b, 0xca, 0xe6, 0x8c, 0x9c, 0x1b, 0xa7, 0x45, 0x42, 0x83, 0x50, 0x81, 0x24, 0x12, 0xe6, 0xc1,
0x22, 0x37, 0xe4, 0x71, 0x44, 0x8d, 0x0d, 0x55, 0x65, 0x5c, 0x29, 0x42, 0xe2, 0xfb, 0x2e, 0x8e,
0x88, 0xe1, 0xb4, 0x48, 0x43, 0x47, 0x29, 0x0a, 0xfc, 0x58, 0x16, 0x79, 0xec, 0xf9, 0x58, 0xbd,
0xc6, 0xd2, 0x7d, 0xa5, 0xdb, 0xd1, 0xb2, 0x42, 0x84, 0xb2, 0xeb, 0x9e, 0x8f, 0x13, 0x6c, 0x8a,
0x1d, 0xec, 0x7e, 0x1f, 0x9f, 0x33, 0xf2, 0xf5, 0xf4, 0xcd, 0x3a, 0xc1, 0xe7, 0x82, 0x9b, 0x44,
0x42, 0x0b, 0xac, 0x70, 0x83, 0x1d, 0xb5, 0x62, 0x82, 0x6b, 0xf9, 0x1c, 0x13, 0xb8, 0xc1, 0x04,
0xae, 0x77, 0x3b, 0xda, 0x55, 0x2e, 0x40, 0xb8, 0xdb, 0x70, 0x1d, 0xa1, 0x33, 0x8a, 0x46, 0x63,
0xc1, 0xd3, 0x55, 0xc6, 0x38, 0x62, 0x59, 0xd1, 0x58, 0x56, 0xa4, 0x58, 0x88, 0x1c, 0x37, 0x31,
0x8e, 0x44, 0x42, 0x52, 0x14, 0x68, 0x83, 0xe5, 0x7e, 0x8a, 0xfa, 0x3a, 0x1b, 0x4c, 0xe7, 0xfd,
0x6e, 0x47, 0xd3, 0xb9, 0x8e, 0x17, 0x78, 0xc4, 0x73, 0x7c, 0x63, 0x90, 0x65, 0x49, 0x72, 0x58,
0x00, 0x3e, 0x00, 0x73, 0xf4, 0xef, 0x5e, 0x7e, 0x6f, 0xb2, 0x1c, 0xa9, 0xdd, 0x8e, 0x76, 0x85,
0xeb, 0x31, 0xf6, 0x20, 0xc9, 0x32, 0x18, 0x96, 0x01, 0xa4, 0xcb, 0x54, 0x9a, 0x75, 0x26, 0x21,
0x5d, 0x38, 0x26, 0x31, 0x9c, 0xeb, 0x11, 0x5c, 0xf8, 0x09, 0x98, 0x67, 0xd6, 0x5e, 0xb6, 0x6f,
0xb1, 0x78, 0x5f, 0xeb, 0x76, 0xb4, 0x55, 0x59, 0x6b, 0x90, 0xf2, 0x04, 0xbc, 0x77, 0x98, 0x5e,
0xba, 0xdf, 0x63, 0xec, 0xf4, 0x61, 0x06, 0x39, 0x97, 0xc1, 0xf0, 0x00, 0x2c, 0xd3, 0x65, 0x32,
0xdf, 0xb7, 0x99, 0x82, 0xd6, 0xed, 0x68, 0x37, 0x24, 0x85, 0xa1, 0xa4, 0x0f, 0x33, 0xe1, 0x0e,
0x58, 0x2c, 0xf0, 0x54, 0xe4, 0x7d, 0x6a, 0x8f, 0xd4, 0x0f, 0xd2, 0x77, 0xa7, 0x97, 0x2a, 0x97,
0x03, 0x74, 0x94, 0x62, 0xd0, 0x17, 0x9d, 0xb4, 0x54, 0x88, 0x43, 0xb0, 0xba, 0xc5, 0x84, 0xa4,
0x00, 0xa7, 0x84, 0x8c, 0x98, 0xc2, 0x74, 0x34, 0x8a, 0x3c, 0xac, 0x69, 0x87, 0x27, 0x38, 0x50,
0xff, 0xff, 0x4d, 0x9a, 0x84, 0xc2, 0x86, 0x34, 0x19, 0x19, 0x3e, 0x04, 0x0b, 0x95, 0xc0, 0x69,
0xc6, 0x8d, 0x90, 0xe4, 0xc3, 0x56, 0x40, 0xd4, 0x7b, 0xac, 0x16, 0x4a, 0x69, 0x8b, 0x85, 0xdb,
0x70, 0xa9, 0x5f, 0x47, 0x49, 0x3c, 0xb4, 0xc0, 0xf2, 0xd3, 0x56, 0x48, 0x9c, 0x1d, 0xc7, 0x3d,
0xc1, 0x41, 0x6d, 0xe7, 0x9c, 0xe0, 0x58, 0xfd, 0x90, 0x89, 0xac, 0x77, 0x3b, 0xda, 0x75, 0x2e,
0xf2, 0x92, 0x42, 0x8c, 0x23, 0x8e, 0x31, 0x8e, 0x28, 0x48, 0x47, 0xc3, 0x44, 0xda, 0x4a, 0xca,
0x11, 0x7e, 0x16, 0x12, 0xac, 0x3e, 0x4c, 0x97, 0xab, 0x66, 0x84, 0x8d, 0xb3, 0x90, 0x46, 0xa7,
0x87, 0x91, 0x23, 0x12, 0x46, 0x51, 0xab, 0x49, 0xf2, 0x0d, 0xec, 0x9e, 0xa8, 0x8f, 0xd2, 0xd7,
0xb8, 0x1f, 0x11, 0x8e, 0x32, 0x5c, 0x0a, 0x93, 0x22, 0x22, 0x91, 0xf5, 0xee, 0x65, 0x30, 0x7d,
0x80, 0x4f, 0x8f, 0x70, 0x44, 0xaf, 0x34, 0xed, 0x82, 0x66, 0x1b, 0xbb, 0x65, 0x87, 0x34, 0x44,
0x17, 0x94, 0x62, 0x83, 0x89, 0x5b, 0x33, 0x70, 0x1b, 0xbb, 0x46, 0xd3, 0xa1, 0xef, 0x22, 0x01,
0x87, 0xf7, 0xc0, 0x6c, 0xee, 0x98, 0x96, 0xd5, 0x5a, 0x2d, 0x62, 0x2d, 0x6b, 0x76, 0x67, 0xb5,
0xdb, 0xd1, 0x96, 0x45, 0xf5, 0xa5, 0x2e, 0xc3, 0xa9, 0xd5, 0x22, 0x1d, 0x0d, 0x70, 0x34, 0x9e,
0x8f, 0x1d, 0xcf, 0x6f, 0x86, 0x5e, 0x40, 0xf6, 0x6c, 0xbb, 0xcc, 0xc8, 0xf3, 0x8c, 0x2c, 0xc5,
0xb3, 0xde, 0x83, 0x18, 0x0d, 0x42, 0x9a, 0x42, 0x65, 0x98, 0x48, 0xe3, 0xb9, 0xe3, 0xc4, 0x98,
0x36, 0x5b, 0x9c, 0x2e, 0xa0, 0x47, 0x4e, 0x8c, 0x45, 0x6b, 0x16, 0x18, 0xfa, 0x08, 0xe9, 0x09,
0xac, 0xf0, 0x98, 0x9d, 0xb7, 0x9e, 0x7e, 0x84, 0xec, 0xbc, 0x7e, 0x78, 0x2c, 0x8e, 0x2b, 0x83,
0xe1, 0x13, 0xb0, 0x44, 0x97, 0xbc, 0x2a, 0x94, 0xa3, 0xb0, 0x7d, 0xae, 0x7e, 0xa5, 0xb0, 0x44,
0xbc, 0xd3, 0xed, 0x68, 0xaa, 0x24, 0x20, 0xea, 0x49, 0x93, 0x62, 0x74, 0x94, 0x66, 0xc1, 0x1c,
0x58, 0xa0, 0x26, 0xfa, 0x2e, 0xb9, 0xcc, 0xd7, 0x5c, 0x46, 0x7a, 0x7e, 0x4c, 0x86, 0xbd, 0x67,
0x21, 0x92, 0x64, 0xd0, 0xea, 0x36, 0x50, 0x35, 0x83, 0x1a, 0x0b, 0x8a, 0xfa, 0xe5, 0x64, 0xba,
0x24, 0xc8, 0xdb, 0xc1, 0x02, 0xa6, 0xa3, 0x11, 0x5c, 0xf8, 0x1d, 0x3e, 0x10, 0xa9, 0xbf, 0xa2,
0x1a, 0x73, 0x77, 0xe7, 0xb6, 0xd9, 0x5c, 0xb5, 0x4d, 0x6d, 0xf2, 0x58, 0x44, 0x05, 0x75, 0xc4,
0x67, 0xa7, 0x5d, 0xb9, 0x01, 0xd2, 0xe1, 0x47, 0xfd, 0x29, 0x1f, 0x78, 0xc6, 0xb4, 0x51, 0x3a,
0x2a, 0x25, 0x1a, 0x21, 0xe5, 0xd0, 0x68, 0xf4, 0xdb, 0x1b, 0x13, 0xf9, 0x59, 0x26, 0x5d, 0x8c,
0x84, 0x08, 0x2d, 0x8e, 0x5c, 0x23, 0xc9, 0x80, 0xf6, 0x50, 0x43, 0x64, 0x42, 0x3f, 0xe7, 0x42,
0x37, 0xbb, 0x1d, 0xed, 0xdd, 0x84, 0x90, 0x54, 0x23, 0xb9, 0xde, 0x28, 0x3a, 0xfc, 0x74, 0x50,
0xef, 0x99, 0xdc, 0xbf, 0x32, 0xe3, 0x0b, 0x3e, 0x97, 0x49, 0xe0, 0xe1, 0x47, 0xfd, 0x82, 0xcf,
0xe8, 0xff, 0xce, 0x8c, 0xad, 0xf8, 0x9c, 0x2d, 0xa3, 0x61, 0x31, 0x55, 0xf1, 0x99, 0xc4, 0x7f,
0x32, 0x6f, 0x2a, 0xf9, 0x5c, 0x69, 0x98, 0xaa, 0xff, 0x79, 0x1e, 0x4c, 0xdb, 0x98, 0x55, 0xee,
0x87, 0x60, 0x81, 0xff, 0x55, 0xc4, 0xe4, 0xf3, 0x30, 0x3a, 0x19, 0x7e, 0xf5, 0x84, 0xb9, 0x8d,
0x80, 0xfb, 0x75, 0x94, 0xc4, 0xc3, 0xef, 0x02, 0xc0, 0x0d, 0xec, 0xe9, 0xf2, 0x3b, 0x77, 0xb5,
0xdb, 0xd1, 0x60, 0x82, 0xcd, 0x9f, 0xac, 0x84, 0xa4, 0x93, 0xc6, 0x2e, 0xf6, 0x9d, 0x73, 0xcb,
0x21, 0x38, 0x70, 0xcf, 0xc5, 0x98, 0xbb, 0x20, 0x5f, 0x97, 0x1a, 0xf5, 0x1b, 0x3e, 0x07, 0x18,
0xa7, 0x74, 0xd2, 0x48, 0x52, 0xe0, 0x0f, 0x40, 0x36, 0x69, 0x41, 0x67, 0xac, 0x7a, 0x2c, 0xc8,
0xd5, 0x23, 0x2d, 0x63, 0x44, 0x67, 0x3a, 0x1a, 0xe2, 0xc1, 0xcf, 0xc0, 0xea, 0x61, 0xb3, 0xe6,
0x10, 0x5c, 0x4b, 0xed, 0x6b, 0x81, 0x09, 0xde, 0xea, 0x76, 0x34, 0x8d, 0x0b, 0xb6, 0x38, 0xcc,
0x18, 0xde, 0xdf, 0x68, 0x05, 0x1a, 0x23, 0x14, 0xb6, 0x82, 0x9a, 0xe5, 0x9d, 0x7a, 0x44, 0x5d,
0xdd, 0x50, 0x36, 0xa7, 0xe4, 0x18, 0x45, 0xd4, 0x67, 0xf8, 0xd4, 0xa9, 0x23, 0x09, 0x09, 0x1f,
0x81, 0x05, 0xb3, 0xed, 0x91, 0x52, 0x40, 0x4b, 0x5d, 0x2b, 0xc2, 0xea, 0xd5, 0xa1, 0xd2, 0xd0,
0xf6, 0x88, 0x11, 0x06, 0x46, 0x9d, 0x03, 0x68, 0x69, 0x90, 0x09, 0x70, 0x0f, 0x64, 0xf3, 0x61,
0x10, 0xb3, 0xf9, 0xcc, 0x3d, 0xe7, 0xfd, 0x62, 0x2d, 0x5d, 0xa6, 0xdc, 0x01, 0xa2, 0xd7, 0x2b,
0x86, 0x58, 0xf0, 0x3e, 0x98, 0x33, 0x03, 0xe7, 0xc8, 0xc7, 0xe5, 0x66, 0x14, 0xd6, 0xc5, 0x88,
0xbc, 0xd6, 0xed, 0x68, 0x2b, 0x62, 0x27, 0xcc, 0x69, 0x34, 0xa9, 0x97, 0xd6, 0xca, 0x01, 0x16,
0x7e, 0x0c, 0xe6, 0xc5, 0x7e, 0xf2, 0x4e, 0x8c, 0x7b, 0x23, 0xa5, 0x74, 0xf7, 0xc5, 0xee, 0x0d,
0x97, 0xba, 0x75, 0x94, 0x40, 0xd3, 0x8b, 0x22, 0xd6, 0x2c, 0xaa, 0x07, 0x74, 0x94, 0x4c, 0x5d,
0x94, 0x1e, 0x9f, 0x27, 0x84, 0x5d, 0x94, 0x24, 0x85, 0x0e, 0x39, 0xc2, 0x52, 0x69, 0xb4, 0xea,
0x75, 0x1f, 0x8b, 0xf9, 0x51, 0x0a, 0x65, 0x4f, 0x24, 0xe6, 0x80, 0x81, 0x86, 0x60, 0xc0, 0x7d,
0xa9, 0x57, 0xe5, 0xc3, 0xd3, 0x53, 0x27, 0xa8, 0xc5, 0xaa, 0x9e, 0xfe, 0x09, 0x34, 0xe8, 0x55,
0xae, 0xc0, 0xc8, 0xad, 0xaa, 0xc7, 0xa3, 0xa7, 0x42, 0xad, 0x20, 0xc0, 0x51, 0xbf, 0xdd, 0x7e,
0x90, 0xae, 0x96, 0x11, 0xf3, 0xcb, 0x0d, 0x37, 0x45, 0xa1, 0xbf, 0xc9, 0xcc, 0x36, 0xc1, 0x51,
0xe0, 0xf8, 0x7d, 0x19, 0x3e, 0x73, 0x49, 0x1b, 0xc2, 0x02, 0x21, 0x0b, 0x0d, 0xd1, 0x68, 0x7a,
0x2b, 0x24, 0xc2, 0x71, 0x6c, 0x9f, 0x37, 0x71, 0xac, 0x62, 0x76, 0x2c, 0x29, 0xbd, 0x31, 0x73,
0x1a, 0x84, 0x7a, 0x75, 0x24, 0x63, 0xe9, 0x2d, 0xe5, 0xcb, 0x7d, 0x7c, 0x5e, 0xf1, 0xbe, 0xc0,
0xac, 0x91, 0x4e, 0xc9, 0xa1, 0x15, 0x64, 0x5a, 0xdd, 0x62, 0xef, 0x0b, 0x7a, 0x4b, 0x13, 0x04,
0xda, 0xc0, 0x12, 0x06, 0xcb, 0x89, 0x8e, 0xb1, 0x7a, 0xcc, 0x64, 0xa4, 0xb9, 0x26, 0x25, 0x63,
0xf8, 0x14, 0xa6, 0xa3, 0x11, 0x5c, 0xf8, 0x0c, 0x5c, 0x19, 0x58, 0x5b, 0xf5, 0xba, 0xd7, 0x46,
0x4e, 0x70, 0x8c, 0xd5, 0x06, 0xd3, 0xd4, 0xbb, 0x1d, 0x6d, 0x7d, 0x58, 0x93, 0xe1, 0x8c, 0x88,
0x02, 0x75, 0x34, 0x92, 0x0f, 0x7f, 0x08, 0xd6, 0x46, 0xd9, 0xed, 0x76, 0xa0, 0x7a, 0x4c, 0x5a,
0xfa, 0x81, 0x33, 0x46, 0xda, 0x20, 0xed, 0x40, 0x47, 0xe3, 0x64, 0xe8, 0x60, 0xd1, 0x77, 0xd9,
0xed, 0xa0, 0xd4, 0x8c, 0xd5, 0x1f, 0x31, 0x65, 0x29, 0xa5, 0x92, 0x32, 0x69, 0x07, 0x46, 0xd8,
0x8c, 0x75, 0x94, 0x66, 0x0d, 0xd2, 0xc2, 0xdb, 0x59, 0xcc, 0xe7, 0x93, 0xa9, 0xc4, 0xb0, 0xcb,
0x75, 0x78, 0x23, 0x8c, 0xfb, 0x69, 0x11, 0x04, 0xf8, 0x21, 0x98, 0xe5, 0x86, 0xa7, 0xe5, 0x0a,
0x1f, 0x4b, 0xa6, 0xe4, 0x91, 0x4e, 0xb0, 0x5f, 0xd2, 0xaf, 0x0f, 0x80, 0xfa, 0x8f, 0x15, 0x70,
0x19, 0xe1, 0x97, 0x2d, 0x1c, 0x13, 0xb8, 0x0d, 0x66, 0x4b, 0x4d, 0x1c, 0x39, 0xc4, 0x0b, 0x03,
0xd6, 0x59, 0x16, 0xef, 0x66, 0xc5, 0x2c, 0xd1, 0xb7, 0xa3, 0x01, 0x04, 0xde, 0xee, 0x0d, 0xa3,
0x2a, 0x1f, 0x3c, 0x16, 0x04, 0x98, 0x1b, 0x51, 0x6f, 0x52, 0xbd, 0xdd, 0x6b, 0x5f, 0xec, 0xdf,
0x54, 0x06, 0x30, 0x6e, 0x44, 0xc2, 0xa9, 0xbb, 0x60, 0x06, 0xe1, 0xb8, 0x19, 0x06, 0x31, 0x86,
0x2a, 0xb8, 0x5c, 0x69, 0xb9, 0x2e, 0x8e, 0x63, 0xb6, 0x8f, 0x19, 0xd4, 0x5b, 0xc2, 0xab, 0x60,
0x9a, 0xfe, 0xe0, 0x68, 0xc5, 0xbc, 0x79, 0x21, 0xb1, 0x92, 0xf6, 0x92, 0xb9, 0x60, 0x2f, 0x5b,
0x7f, 0x51, 0xa4, 0x33, 0xc2, 0x45, 0x00, 0x8a, 0x21, 0xa9, 0x10, 0x27, 0x22, 0xb8, 0x96, 0x9d,
0x80, 0x57, 0x40, 0x56, 0x4c, 0xdd, 0xcc, 0x46, 0x27, 0xa5, 0xac, 0x02, 0x97, 0xc0, 0x1c, 0xc2,
0x71, 0xdf, 0x30, 0x09, 0xe7, 0xc1, 0xcc, 0xbe, 0xe7, 0xfb, 0x6c, 0x95, 0xa1, 0x6e, 0x5a, 0x30,
0x72, 0x91, 0xdb, 0xf0, 0xce, 0x70, 0xf6, 0x12, 0x55, 0xd9, 0xc5, 0x31, 0x89, 0xc2, 0x73, 0x8a,
0x60, 0xd3, 0x73, 0x76, 0x0a, 0x5e, 0x03, 0xab, 0x3b, 0xbe, 0xe3, 0x9e, 0x34, 0x42, 0x9f, 0xfd,
0x4a, 0x2e, 0x87, 0x11, 0xb1, 0xdb, 0xa8, 0x9d, 0xad, 0xc1, 0x1b, 0x60, 0xed, 0x30, 0x38, 0x1a,
0xe9, 0xc4, 0x70, 0x15, 0x2c, 0xb3, 0xb2, 0x98, 0x30, 0xd7, 0xe1, 0x1a, 0x58, 0x39, 0x0c, 0x6a,
0x43, 0x8e, 0xe3, 0xad, 0x7f, 0xcc, 0xf0, 0xfd, 0x88, 0x8a, 0x4c, 0xf9, 0xfb, 0x05, 0xcb, 0xaa,
0x96, 0x8a, 0x66, 0xf5, 0x71, 0xc9, 0xb2, 0x4a, 0xcf, 0x4d, 0x94, 0x9d, 0x80, 0xdf, 0x02, 0x9b,
0x43, 0xe6, 0xea, 0x61, 0xd1, 0x2e, 0x58, 0x55, 0x1b, 0x15, 0x9e, 0x3c, 0x31, 0x51, 0xb5, 0x52,
0xcc, 0x95, 0x2b, 0x7b, 0x25, 0x9b, 0x87, 0x80, 0xa1, 0x2d, 0x33, 0xb7, 0x6b, 0xa2, 0xec, 0x24,
0x7c, 0x1f, 0xe8, 0x92, 0x61, 0x1c, 0x31, 0xd3, 0x27, 0x3e, 0x3d, 0x2c, 0xa1, 0xc3, 0x83, 0xec,
0x25, 0x16, 0x3b, 0x6a, 0xc8, 0x59, 0x56, 0x76, 0x0a, 0x6e, 0x81, 0xf7, 0x77, 0xac, 0x5c, 0x7e,
0x7f, 0xaf, 0x64, 0x99, 0xd5, 0xb2, 0x69, 0xa2, 0x6a, 0xb9, 0x84, 0xec, 0xaa, 0xfd, 0xa2, 0x8a,
0x5e, 0x24, 0x77, 0x5c, 0x83, 0x39, 0xf0, 0xc9, 0xdb, 0x61, 0xc7, 0xed, 0x06, 0xc3, 0xf7, 0xc0,
0xc6, 0x78, 0x09, 0x71, 0xb6, 0x3a, 0xfc, 0x08, 0x7c, 0xef, 0x4d, 0xa8, 0x71, 0x9f, 0x38, 0xbe,
0xf8, 0x13, 0x22, 0x0a, 0x0d, 0x78, 0x13, 0xbc, 0x3b, 0x1e, 0x45, 0x43, 0xe3, 0xc1, 0xff, 0x03,
0xfa, 0xae, 0x69, 0xe5, 0x3e, 0xbb, 0x38, 0x2c, 0xaf, 0x14, 0xb8, 0x0d, 0x3e, 0x40, 0xb9, 0xe2,
0x6e, 0xe9, 0xa0, 0xfa, 0x16, 0xf8, 0xaf, 0x14, 0xf8, 0x29, 0xb8, 0xff, 0x66, 0xe0, 0xb8, 0x03,
0x7e, 0xad, 0x40, 0x13, 0x3c, 0x7a, 0xeb, 0xef, 0x8d, 0x93, 0xf9, 0xb5, 0x02, 0x6f, 0x82, 0x77,
0x46, 0xf3, 0x45, 0x1e, 0x7e, 0xa3, 0xc0, 0x4d, 0x70, 0xeb, 0xc2, 0x2f, 0x09, 0xe4, 0x6f, 0x15,
0xf8, 0x7d, 0x70, 0xef, 0x22, 0xc8, 0xb8, 0x6d, 0xfc, 0x4e, 0x81, 0x0f, 0xc1, 0x83, 0xb7, 0xf8,
0xc6, 0x38, 0x81, 0xdf, 0x5f, 0x70, 0x0e, 0x91, 0xec, 0x6f, 0xde, 0x7c, 0x0e, 0x81, 0xfc, 0x83,
0x02, 0xd7, 0xc1, 0xb5, 0xd1, 0x10, 0x7a, 0x27, 0xfe, 0xa8, 0xc0, 0xdb, 0x60, 0xe3, 0x42, 0x25,
0x0a, 0xfb, 0x93, 0x02, 0x55, 0xb0, 0x52, 0x2c, 0x55, 0x1f, 0xe7, 0x0a, 0x56, 0xf5, 0x79, 0xc1,
0xde, 0xab, 0x56, 0x6c, 0x64, 0x56, 0x2a, 0xd9, 0x5f, 0x4e, 0xd2, 0xad, 0x24, 0x3c, 0xc5, 0x92,
0x70, 0x56, 0x1f, 0x97, 0x50, 0xd5, 0x2a, 0x3c, 0x33, 0x8b, 0x14, 0xf9, 0xe5, 0x24, 0x5c, 0x02,
0x80, 0xc2, 0xca, 0xa5, 0x42, 0xd1, 0xae, 0x64, 0x7f, 0x92, 0x81, 0x0b, 0x60, 0xc6, 0x7c, 0x61,
0x9b, 0xa8, 0x98, 0xb3, 0xb2, 0xff, 0xcc, 0x6c, 0x85, 0x00, 0x0c, 0xc6, 0x0a, 0x38, 0x0d, 0x26,
0xf7, 0x9f, 0x65, 0x27, 0xe0, 0x2c, 0x98, 0xb2, 0xcc, 0x5c, 0xc5, 0xcc, 0x2a, 0x70, 0x05, 0x2c,
0x99, 0x96, 0x99, 0xb7, 0x0b, 0xa5, 0x62, 0x15, 0x1d, 0x16, 0x8b, 0xac, 0x6e, 0x64, 0xc1, 0xfc,
0xf3, 0x9c, 0x9d, 0xdf, 0xeb, 0x59, 0x32, 0xb4, 0x3e, 0x59, 0xa5, 0xfc, 0x7e, 0x15, 0xe5, 0xf2,
0x26, 0xea, 0x99, 0x2f, 0x51, 0x20, 0x13, 0xea, 0x59, 0xa6, 0xee, 0x3e, 0x04, 0xb3, 0x76, 0xe4,
0x04, 0x71, 0x33, 0x8c, 0x08, 0xbc, 0x2b, 0x2f, 0x16, 0x45, 0xad, 0x17, 0x7d, 0xec, 0xfa, 0x52,
0x7f, 0xcd, 0xdb, 0x89, 0x3e, 0xb1, 0xa9, 0x7c, 0x5b, 0xd9, 0xb9, 0xf2, 0xea, 0x6f, 0xeb, 0x13,
0xaf, 0x5e, 0xaf, 0x2b, 0xdf, 0xbc, 0x5e, 0x57, 0xfe, 0xfa, 0x7a, 0x5d, 0xf9, 0xc5, 0xdf, 0xd7,
0x27, 0x8e, 0xa6, 0xd9, 0xff, 0x2a, 0xdc, 0xfb, 0x5f, 0x00, 0x00, 0x00, 0xff, 0xff, 0x6f, 0x90,
0x3a, 0xc0, 0x9e, 0x18, 0x00, 0x00,
// 2480 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x59, 0x5b, 0x57, 0xdb, 0xd8,
0x15, 0x46, 0x38, 0x30, 0x70, 0xb8, 0x99, 0x43, 0x08, 0x4a, 0x32, 0xc1, 0x44, 0x99, 0xa4, 0x84,
0x56, 0xa4, 0x4d, 0x66, 0xb5, 0x4d, 0xe6, 0x92, 0x18, 0xa3, 0x04, 0x17, 0x61, 0x3b, 0xc7, 0x22,
0xc9, 0x3c, 0xb9, 0x42, 0x3e, 0xc6, 0x2a, 0x42, 0x72, 0xa4, 0x63, 0xc6, 0xcc, 0x1f, 0xe8, 0x6b,
0xef, 0xab, 0x0f, 0x5d, 0xfd, 0x05, 0x9d, 0xfe, 0x8e, 0xcc, 0xf4, 0x36, 0x6d, 0xdf, 0xdd, 0x36,
0x5d, 0xfd, 0x03, 0x5e, 0xbd, 0x4d, 0x9f, 0xba, 0xce, 0xc5, 0xf6, 0x91, 0x6c, 0x43, 0xde, 0x7c,
0xf6, 0xfe, 0xbe, 0x4f, 0xfb, 0xec, 0x2d, 0x9d, 0xbd, 0x0f, 0x80, 0x85, 0xb0, 0xe1, 0x34, 0x0e,
0xee, 0x84, 0x0d, 0x67, 0xb3, 0x11, 0x06, 0x24, 0x80, 0x13, 0xcc, 0x70, 0x45, 0x3f, 0x74, 0x49,
0xbd, 0x79, 0xb0, 0xe9, 0x04, 0xc7, 0x77, 0x0e, 0x83, 0xc3, 0xe0, 0x0e, 0xf3, 0x1e, 0x34, 0x6b,
0x6c, 0xc5, 0x16, 0xec, 0x17, 0x67, 0x69, 0x5f, 0xce, 0x81, 0x0b, 0x06, 0x71, 0xaa, 0xf0, 0x06,
0xb8, 0x50, 0xb0, 0x8f, 0xb1, 0xaa, 0xac, 0x29, 0xeb, 0xd3, 0x5b, 0x0b, 0x9d, 0x76, 0x66, 0xe6,
0xd4, 0x3e, 0xf6, 0x1e, 0x68, 0xbe, 0x7d, 0x8c, 0x35, 0xc4, 0x9c, 0x50, 0x07, 0x6f, 0x6d, 0xdb,
0xc4, 0xde, 0x76, 0x43, 0x75, 0x9c, 0xe1, 0x96, 0x3a, 0xed, 0xcc, 0x02, 0xc7, 0x55, 0x6d, 0x62,
0xeb, 0x55, 0x37, 0xd4, 0x50, 0x17, 0x03, 0x37, 0xc0, 0xe4, 0xf3, 0xac, 0x49, 0xd1, 0x29, 0x86,
0x86, 0x9d, 0x76, 0x66, 0x9e, 0xa3, 0x3f, 0xb6, 0x3d, 0x0e, 0x16, 0x08, 0x58, 0x04, 0x4b, 0x3b,
0xd8, 0x0e, 0xc9, 0x01, 0xb6, 0x49, 0xde, 0x27, 0x38, 0x3c, 0xb1, 0xbd, 0xbd, 0x48, 0x9d, 0x59,
0x53, 0xd6, 0x53, 0x5b, 0xd7, 0x3a, 0xed, 0xcc, 0x65, 0x4e, 0xac, 0x77, 0x41, 0xba, 0x2b, 0x50,
0x1a, 0x1a, 0xc6, 0x84, 0x79, 0xb0, 0x68, 0x78, 0xd8, 0x21, 0x6e, 0xe0, 0x5b, 0xee, 0x31, 0x0e,
0x9a, 0x64, 0x2f, 0x52, 0x67, 0x99, 0xdc, 0xd5, 0x4e, 0x3b, 0xb3, 0xc2, 0xe5, 0xb0, 0x80, 0xe8,
0x84, 0x63, 0x34, 0x34, 0xc8, 0x82, 0x79, 0x90, 0x36, 0xdd, 0x88, 0x60, 0x3f, 0xe7, 0xb9, 0xd8,
0x27, 0xfb, 0xc8, 0x8c, 0xd4, 0xe5, 0xb5, 0xd4, 0xfa, 0xb4, 0x1c, 0x98, 0xc7, 0x10, 0xba, 0xc3,
0x20, 0x7a, 0x33, 0xf4, 0x22, 0x0d, 0x0d, 0xd0, 0x20, 0x02, 0x4b, 0xd9, 0xea, 0x09, 0x0e, 0x89,
0x1b, 0x61, 0x49, 0xed, 0x12, 0x53, 0x5b, 0xeb, 0xb4, 0x33, 0x6f, 0x73, 0x35, 0xbb, 0x0b, 0x8a,
0x0b, 0x0e, 0x23, 0xc3, 0xfb, 0x60, 0x8e, 0xaf, 0xb2, 0x4d, 0x12, 0x58, 0x66, 0x59, 0x5d, 0x59,
0x53, 0xd6, 0xa7, 0xe4, 0xda, 0xd8, 0x4d, 0x12, 0xe8, 0x84, 0x0a, 0xc4, 0x91, 0x30, 0x07, 0xe6,
0xb9, 0x21, 0x87, 0x43, 0x6a, 0xac, 0xab, 0x2a, 0xe3, 0x4a, 0x19, 0x12, 0xcf, 0x77, 0x70, 0x48,
0x74, 0xbb, 0x49, 0xea, 0x1a, 0x4a, 0x50, 0xe0, 0xfb, 0xb2, 0xc8, 0x63, 0xd7, 0xc3, 0xea, 0x65,
0x56, 0xee, 0x8b, 0x9d, 0x76, 0x26, 0x2d, 0x44, 0x28, 0xbb, 0xe6, 0x7a, 0x38, 0xc6, 0xa6, 0xd8,
0x7e, 0xf4, 0xbb, 0xf8, 0x94, 0x91, 0xaf, 0x24, 0xdf, 0xac, 0x23, 0x7c, 0x2a, 0xb8, 0x71, 0x24,
0x34, 0xc1, 0x12, 0x37, 0x58, 0x61, 0x33, 0x22, 0xb8, 0x9a, 0xcb, 0x32, 0x81, 0xab, 0x4c, 0xe0,
0x4a, 0xa7, 0x9d, 0xb9, 0xc4, 0x05, 0x08, 0x77, 0xeb, 0x8e, 0x2d, 0x74, 0x86, 0xd1, 0x68, 0x2e,
0x78, 0xb9, 0x4a, 0x18, 0x87, 0xac, 0x2a, 0x19, 0x56, 0x15, 0x29, 0x17, 0xa2, 0xc6, 0x0d, 0x8c,
0x43, 0x51, 0x90, 0x04, 0x05, 0x5a, 0x60, 0xb1, 0x57, 0xa2, 0x9e, 0xce, 0x1a, 0xd3, 0xb9, 0xd5,
0x69, 0x67, 0x34, 0xae, 0xe3, 0xfa, 0x2e, 0x71, 0x6d, 0x4f, 0xef, 0x57, 0x59, 0x92, 0x1c, 0x14,
0x80, 0x0f, 0xc0, 0x0c, 0xfd, 0xdd, 0xad, 0xef, 0x75, 0x56, 0x23, 0xb5, 0xd3, 0xce, 0x5c, 0xe4,
0x7a, 0x8c, 0xdd, 0x2f, 0xb2, 0x0c, 0x86, 0x25, 0x00, 0xe9, 0x32, 0x51, 0x66, 0x8d, 0x49, 0x48,
0x2f, 0x1c, 0x93, 0x18, 0xac, 0xf5, 0x10, 0x2e, 0xfc, 0x00, 0xcc, 0x32, 0x6b, 0xb7, 0xda, 0x37,
0x58, 0xbe, 0x2f, 0x77, 0xda, 0x99, 0x65, 0x59, 0xab, 0x5f, 0xf2, 0x18, 0xbc, 0xbb, 0x99, 0x6e,
0xb9, 0xdf, 0x61, 0xec, 0xe4, 0x66, 0xfa, 0x35, 0x97, 0xc1, 0x70, 0x0f, 0x2c, 0xd2, 0x65, 0xbc,
0xde, 0x37, 0x99, 0x42, 0xa6, 0xd3, 0xce, 0x5c, 0x95, 0x14, 0x06, 0x8a, 0x3e, 0xc8, 0x84, 0x5b,
0x60, 0x3e, 0xcf, 0x4b, 0x91, 0xf3, 0xa8, 0x3d, 0x54, 0x6f, 0x27, 0xdf, 0x9d, 0x6e, 0xa9, 0x1c,
0x0e, 0xd0, 0x50, 0x82, 0x41, 0xbf, 0xe8, 0xb8, 0xa5, 0x4c, 0x6c, 0x82, 0xd5, 0x0d, 0x26, 0x24,
0x25, 0x38, 0x21, 0xa4, 0x47, 0x14, 0xa6, 0xa1, 0x61, 0xe4, 0x41, 0x4d, 0x2b, 0x38, 0xc2, 0xbe,
0xfa, 0xd5, 0xf3, 0x34, 0x09, 0x85, 0x0d, 0x68, 0x32, 0x32, 0x7c, 0x08, 0xe6, 0xca, 0xbe, 0xdd,
0x88, 0xea, 0x01, 0xc9, 0x05, 0x4d, 0x9f, 0xa8, 0xf7, 0xd8, 0x59, 0x28, 0x95, 0x2d, 0x12, 0x6e,
0xdd, 0xa1, 0x7e, 0x0d, 0xc5, 0xf1, 0xd0, 0x04, 0x8b, 0x4f, 0x9b, 0x01, 0xb1, 0xb7, 0x6c, 0xe7,
0x08, 0xfb, 0xd5, 0xad, 0x53, 0x82, 0x23, 0xf5, 0x5d, 0x26, 0xb2, 0xda, 0x69, 0x67, 0xae, 0x70,
0x91, 0x97, 0x14, 0xa2, 0x1f, 0x70, 0x8c, 0x7e, 0x40, 0x41, 0x1a, 0x1a, 0x24, 0xd2, 0x56, 0x52,
0x0a, 0xf1, 0xb3, 0x80, 0x60, 0xf5, 0x61, 0xf2, 0xb8, 0x6a, 0x84, 0x58, 0x3f, 0x09, 0x68, 0x76,
0xba, 0x18, 0x39, 0x23, 0x41, 0x18, 0x36, 0x1b, 0x24, 0x57, 0xc7, 0xce, 0x91, 0xfa, 0x28, 0xf9,
0x1a, 0xf7, 0x32, 0xc2, 0x51, 0xba, 0x43, 0x61, 0x52, 0x46, 0x24, 0xb2, 0xf6, 0xcb, 0x19, 0x30,
0xb9, 0x87, 0x8f, 0x0f, 0x70, 0x48, 0x5f, 0x69, 0xda, 0x05, 0x8d, 0x16, 0x76, 0x4a, 0x36, 0xa9,
0x8b, 0x2e, 0x28, 0xe5, 0x06, 0x13, 0xa7, 0xaa, 0xe3, 0x16, 0x76, 0xf4, 0x86, 0x4d, 0xbf, 0x8b,
0x18, 0x1c, 0xde, 0x03, 0xd3, 0xd9, 0x43, 0x7a, 0xac, 0x56, 0xab, 0x21, 0x6b, 0x59, 0xd3, 0x5b,
0xcb, 0x9d, 0x76, 0x66, 0x51, 0x9c, 0xbe, 0xd4, 0xa5, 0xdb, 0xd5, 0x6a, 0xa8, 0xa1, 0x3e, 0x8e,
0xe6, 0xf3, 0xb1, 0xed, 0x7a, 0x8d, 0xc0, 0xf5, 0xc9, 0x8e, 0x65, 0x95, 0x18, 0x79, 0x96, 0x91,
0xa5, 0x7c, 0xd6, 0xba, 0x10, 0xbd, 0x4e, 0x48, 0x43, 0xa8, 0x0c, 0x12, 0x69, 0x3e, 0xb7, 0xec,
0x08, 0xd3, 0x66, 0x8b, 0x93, 0x07, 0xe8, 0x81, 0x1d, 0x61, 0xd1, 0x9a, 0x05, 0x86, 0x7e, 0x84,
0x74, 0x07, 0x66, 0x70, 0xc8, 0xf6, 0x5b, 0x4b, 0x7e, 0x84, 0x6c, 0xbf, 0x5e, 0x70, 0x28, 0xb6,
0x2b, 0x83, 0xe1, 0x13, 0xb0, 0x40, 0x97, 0xfc, 0x54, 0x28, 0x85, 0x41, 0xeb, 0x54, 0xfd, 0x4c,
0x61, 0x85, 0x78, 0xbb, 0xd3, 0xce, 0xa8, 0x92, 0x80, 0x38, 0x4f, 0x1a, 0x14, 0xa3, 0xa1, 0x24,
0x0b, 0x66, 0xc1, 0x1c, 0x35, 0xd1, 0xef, 0x92, 0xcb, 0x7c, 0xce, 0x65, 0xa4, 0xcf, 0x8f, 0xc9,
0xb0, 0xef, 0x59, 0x88, 0xc4, 0x19, 0xf4, 0x74, 0xeb, 0xab, 0x1a, 0x7e, 0x95, 0x25, 0x45, 0xfd,
0x74, 0x3c, 0x79, 0x24, 0xc8, 0xe1, 0x60, 0x01, 0xd3, 0xd0, 0x10, 0x2e, 0xfc, 0x06, 0x1f, 0x88,
0xd4, 0x5f, 0x53, 0x8d, 0x99, 0xbb, 0x33, 0x9b, 0x6c, 0xae, 0xda, 0xa4, 0x36, 0x79, 0x2c, 0xa2,
0x82, 0x1a, 0xe2, 0xb3, 0xd3, 0xb6, 0xdc, 0x00, 0xe9, 0xf0, 0xa3, 0xfe, 0x90, 0x0f, 0x3c, 0x23,
0xda, 0x28, 0x1d, 0x95, 0x62, 0x8d, 0x90, 0x72, 0xe2, 0x2a, 0xac, 0x2a, 0x3f, 0x3a, 0x53, 0x85,
0x57, 0x26, 0xc1, 0xa1, 0x39, 0xed, 0x35, 0x49, 0x16, 0xca, 0x8f, 0x53, 0xc9, 0x23, 0x4d, 0x88,
0xd0, 0x23, 0x96, 0x47, 0x12, 0x67, 0xc4, 0x24, 0x58, 0x1c, 0x3f, 0x39, 0x4b, 0x82, 0x87, 0x11,
0x67, 0x40, 0x6b, 0xa0, 0x33, 0xb3, 0x58, 0x7e, 0xca, 0x85, 0xae, 0x77, 0xda, 0x99, 0x6b, 0x31,
0x21, 0xe9, 0xb0, 0xe6, 0x21, 0x0d, 0xa3, 0x0f, 0x51, 0x65, 0xe1, 0xfd, 0xec, 0x0d, 0x54, 0x79,
0x94, 0xc3, 0xe8, 0xf0, 0xc3, 0x7e, 0x3b, 0x63, 0x41, 0xfe, 0x2b, 0x35, 0xba, 0x9f, 0xf1, 0xe0,
0x62, 0x78, 0x99, 0xcf, 0xc2, 0xf9, 0xf7, 0x19, 0x7c, 0x71, 0x78, 0xc8, 0x78, 0xf8, 0x5e, 0xaf,
0x1f, 0xb2, 0xc7, 0xff, 0x27, 0x35, 0xb2, 0x21, 0xf2, 0xa7, 0xcb, 0x68, 0x89, 0xcc, 0x9e, 0xfd,
0xdf, 0xd1, 0x64, 0xf1, 0x21, 0x4b, 0x68, 0x58, 0x48, 0x74, 0x53, 0xf6, 0xfc, 0x2f, 0x53, 0xe7,
0xb5, 0x53, 0x1e, 0xc6, 0x20, 0x75, 0x40, 0x8f, 0x85, 0xf4, 0xbf, 0x73, 0xf5, 0x78, 0x64, 0x83,
0x54, 0xed, 0x17, 0x73, 0x60, 0xd2, 0xc2, 0xac, 0xcb, 0x3e, 0x02, 0x73, 0xfc, 0x57, 0xf7, 0xfe,
0xa1, 0x0c, 0x0c, 0x79, 0xcc, 0xad, 0xf7, 0xaf, 0x21, 0x71, 0x02, 0xed, 0x7f, 0xdc, 0x50, 0xc0,
0xe4, 0xe3, 0x20, 0x3c, 0x12, 0x37, 0x18, 0xa9, 0x4c, 0x42, 0xc1, 0xe7, 0xfe, 0x9e, 0x80, 0xc0,
0xc3, 0x6f, 0x02, 0xc0, 0x0d, 0xec, 0xa0, 0xe6, 0xbb, 0xba, 0xd4, 0x69, 0x67, 0x60, 0x8c, 0xcd,
0x0f, 0x68, 0x09, 0x49, 0xe7, 0xca, 0x6d, 0xec, 0xd9, 0xa7, 0xa6, 0x4d, 0xb0, 0xef, 0x9c, 0x8a,
0x4b, 0xcd, 0x9c, 0xfc, 0x59, 0x57, 0xa9, 0x5f, 0xf7, 0x38, 0x40, 0x3f, 0xa6, 0x73, 0x65, 0x9c,
0x02, 0xbf, 0x03, 0xd2, 0x71, 0x0b, 0x3a, 0x61, 0xbd, 0x62, 0x4e, 0xee, 0x15, 0x49, 0x19, 0x3d,
0x3c, 0xd1, 0xd0, 0x00, 0x0f, 0x7e, 0x04, 0x96, 0xf7, 0x1b, 0x55, 0x9b, 0xe0, 0x6a, 0x22, 0xae,
0x39, 0x26, 0x78, 0xa3, 0xd3, 0xce, 0x64, 0xb8, 0x60, 0x93, 0xc3, 0xf4, 0xc1, 0xf8, 0x86, 0x2b,
0xd0, 0x1c, 0xa1, 0xa0, 0xe9, 0x57, 0x4d, 0xf7, 0xd8, 0x25, 0xea, 0xf2, 0x9a, 0xb2, 0x3e, 0x21,
0xe7, 0x28, 0xa4, 0x3e, 0xdd, 0xa3, 0x4e, 0x0d, 0x49, 0x48, 0x5a, 0x5e, 0xa3, 0xe5, 0x92, 0xa2,
0x4f, 0x1b, 0x5b, 0x33, 0xc4, 0xea, 0xa5, 0x81, 0x46, 0xd0, 0x72, 0x89, 0x1e, 0xf8, 0x7a, 0x8d,
0x03, 0x68, 0x23, 0x90, 0x09, 0x70, 0x07, 0xa4, 0x73, 0x81, 0x1f, 0xb1, 0x69, 0xdc, 0x39, 0xe5,
0xd3, 0xc1, 0x4a, 0xb2, 0x29, 0x39, 0x7d, 0x44, 0x77, 0x32, 0x18, 0x60, 0xc1, 0xfb, 0x60, 0xc6,
0xf0, 0xed, 0x03, 0x0f, 0x97, 0x1a, 0x61, 0x50, 0x13, 0x17, 0xa2, 0x95, 0x4e, 0x3b, 0xb3, 0x24,
0x22, 0x61, 0x4e, 0xbd, 0x41, 0xbd, 0xb4, 0x33, 0xf6, 0xb1, 0xf0, 0x7d, 0x30, 0x2b, 0xe2, 0xc9,
0xd9, 0x11, 0xee, 0x5e, 0x20, 0xa4, 0xaf, 0x51, 0x44, 0xaf, 0x3b, 0xd4, 0xad, 0xa1, 0x18, 0x9a,
0xbe, 0x28, 0x62, 0xcd, 0xb2, 0xba, 0x47, 0x2f, 0x0e, 0x89, 0x17, 0xa5, 0xcb, 0xe7, 0x05, 0x61,
0x2f, 0x4a, 0x9c, 0x42, 0x47, 0x5a, 0x61, 0x29, 0xd7, 0x9b, 0xb5, 0x9a, 0x87, 0xc5, 0x6d, 0x41,
0x4a, 0x65, 0x57, 0x24, 0xe2, 0x80, 0xbe, 0x86, 0x60, 0xc0, 0x5d, 0x69, 0x32, 0xc9, 0x05, 0xc7,
0xc7, 0xb6, 0x5f, 0x8d, 0x54, 0x2d, 0x79, 0xe1, 0xed, 0x4f, 0x26, 0x8e, 0xc0, 0xc8, 0x83, 0x49,
0x97, 0x47, 0x77, 0x85, 0x9a, 0xbe, 0x8f, 0xc3, 0xde, 0x70, 0x75, 0x3b, 0xd9, 0xd5, 0x42, 0xe6,
0x97, 0xc7, 0xab, 0x04, 0x85, 0xde, 0xc0, 0x8d, 0x16, 0xc1, 0xa1, 0x6f, 0x7b, 0x3d, 0x19, 0x3e,
0x61, 0x4b, 0x01, 0x61, 0x81, 0x90, 0x85, 0x06, 0x68, 0xb4, 0xbc, 0x65, 0x12, 0xe2, 0x28, 0xb2,
0x4e, 0x1b, 0x38, 0x52, 0x31, 0xdb, 0x96, 0x54, 0xde, 0x88, 0x39, 0x75, 0x42, 0xbd, 0x1a, 0x92,
0xb1, 0xf4, 0x2d, 0xe5, 0xcb, 0x5d, 0x7c, 0x5a, 0x76, 0x3f, 0xc1, 0x6c, 0x6c, 0x9a, 0x90, 0x53,
0x2b, 0xc8, 0xf4, 0xbc, 0x8d, 0xdc, 0x4f, 0xe8, 0x5b, 0x1a, 0x23, 0xd0, 0x71, 0x25, 0x66, 0x30,
0xed, 0xf0, 0x10, 0xab, 0x87, 0x4c, 0x46, 0x9a, 0x62, 0x13, 0x32, 0xba, 0x47, 0x61, 0x1a, 0x1a,
0xc2, 0x85, 0xcf, 0xc0, 0xc5, 0xbe, 0xb5, 0x59, 0xab, 0xb9, 0x2d, 0x64, 0xfb, 0x87, 0x58, 0xad,
0x33, 0x4d, 0xad, 0xd3, 0xce, 0xac, 0x0e, 0x6a, 0x32, 0x9c, 0x1e, 0x52, 0xa0, 0x86, 0x86, 0xf2,
0xe1, 0x77, 0xc1, 0xca, 0x30, 0xbb, 0xd5, 0xf2, 0x55, 0x97, 0x49, 0x4b, 0xd7, 0xd9, 0x11, 0xd2,
0x3a, 0x69, 0xf9, 0x1a, 0x1a, 0x25, 0x43, 0xc7, 0xc8, 0x9e, 0xcb, 0x6a, 0xf9, 0xc5, 0x46, 0xa4,
0x7e, 0x8f, 0x29, 0x4b, 0x25, 0x95, 0x94, 0x49, 0xcb, 0xd7, 0x83, 0x46, 0xa4, 0xa1, 0x24, 0xab,
0x5f, 0x16, 0xde, 0xdd, 0x23, 0x3e, 0x8d, 0x4e, 0xc4, 0xae, 0x36, 0x5c, 0x87, 0xcf, 0x05, 0x51,
0xaf, 0x2c, 0x82, 0x00, 0xdf, 0x05, 0xd3, 0xdc, 0xf0, 0xb4, 0x54, 0xe6, 0x43, 0xe8, 0x84, 0x3c,
0xc0, 0x0b, 0xf6, 0x4b, 0xfa, 0xf4, 0x3e, 0x50, 0xfb, 0xbe, 0x02, 0xde, 0x42, 0xf8, 0x65, 0x13,
0x47, 0x04, 0x6e, 0x82, 0xe9, 0x62, 0x03, 0x87, 0x36, 0x71, 0x03, 0x9f, 0xf5, 0xa6, 0xf9, 0xbb,
0x69, 0x31, 0x39, 0xf6, 0xec, 0xa8, 0x0f, 0x81, 0x37, 0xbb, 0x57, 0x0f, 0x95, 0x8f, 0x99, 0x73,
0x02, 0xcc, 0x8d, 0xa8, 0x7b, 0x2f, 0xb9, 0xd9, 0x6d, 0x80, 0xac, 0xdf, 0xf4, 0x61, 0xdc, 0x88,
0x84, 0x53, 0x73, 0xc0, 0x14, 0xc2, 0x51, 0x23, 0xf0, 0x23, 0x0c, 0x55, 0xf0, 0x56, 0xb9, 0xe9,
0x38, 0x38, 0x8a, 0x58, 0x1c, 0x53, 0xa8, 0xbb, 0x84, 0x97, 0xc0, 0x24, 0xbd, 0x5e, 0x36, 0x23,
0xde, 0xfa, 0x90, 0x58, 0x49, 0xb1, 0xa4, 0xce, 0x88, 0x65, 0xe3, 0x2f, 0x8a, 0xb4, 0x47, 0x38,
0x0f, 0x40, 0x21, 0x20, 0x65, 0x62, 0x87, 0x04, 0x57, 0xd3, 0x63, 0xf0, 0x22, 0x48, 0x8b, 0x3b,
0x16, 0xb3, 0xd1, 0xb9, 0x38, 0xad, 0xc0, 0x05, 0x30, 0x83, 0x70, 0xd4, 0x33, 0x8c, 0xc3, 0x59,
0x30, 0xb5, 0xeb, 0x7a, 0x1e, 0x5b, 0xa5, 0xa8, 0x9b, 0x1e, 0x18, 0xd9, 0xd0, 0xa9, 0xbb, 0x27,
0x38, 0x7d, 0x81, 0xaa, 0x6c, 0xe3, 0x88, 0x84, 0xc1, 0x29, 0x45, 0xb0, 0xbb, 0x52, 0x7a, 0x02,
0x5e, 0x06, 0xcb, 0x5b, 0x9e, 0xed, 0x1c, 0xd5, 0x03, 0x8f, 0xfd, 0x4d, 0xa4, 0x14, 0x84, 0xc4,
0x6a, 0xa1, 0x56, 0xba, 0x0a, 0xaf, 0x82, 0x95, 0x7d, 0xff, 0x60, 0xa8, 0x13, 0xc3, 0x65, 0xb0,
0xc8, 0x8e, 0xc5, 0x98, 0xb9, 0x06, 0x57, 0xc0, 0xd2, 0xbe, 0x5f, 0x1d, 0x70, 0x1c, 0x6e, 0xfc,
0x63, 0x8a, 0xc7, 0x23, 0x4e, 0x64, 0xca, 0xdf, 0xcd, 0x9b, 0x66, 0xa5, 0x58, 0x30, 0x2a, 0x8f,
0x8b, 0xa6, 0x59, 0x7c, 0x6e, 0xa0, 0xf4, 0x18, 0xfc, 0x1a, 0x58, 0x1f, 0x30, 0x57, 0xf6, 0x0b,
0x56, 0xde, 0xac, 0x58, 0x28, 0xff, 0xe4, 0x89, 0x81, 0x2a, 0xe5, 0x42, 0xb6, 0x54, 0xde, 0x29,
0x5a, 0x3c, 0x05, 0x0c, 0x6d, 0x1a, 0xd9, 0x6d, 0x03, 0xa5, 0xc7, 0xe1, 0x2d, 0xa0, 0x49, 0x86,
0x51, 0xc4, 0x54, 0x8f, 0xf8, 0x74, 0xbf, 0x88, 0xf6, 0xf7, 0xd2, 0x17, 0x58, 0xee, 0xa8, 0x21,
0x6b, 0x9a, 0xe9, 0x09, 0xb8, 0x01, 0x6e, 0x6d, 0x99, 0xd9, 0xdc, 0xee, 0x4e, 0xd1, 0x34, 0x2a,
0x25, 0xc3, 0x40, 0x95, 0x52, 0x11, 0x59, 0x15, 0xeb, 0x45, 0x05, 0xbd, 0x88, 0x47, 0x5c, 0x85,
0x59, 0xf0, 0xc1, 0x9b, 0x61, 0x47, 0x45, 0x83, 0xe1, 0x3b, 0x60, 0x6d, 0xb4, 0x84, 0xd8, 0x5b,
0x0d, 0xbe, 0x07, 0xbe, 0x75, 0x1e, 0x6a, 0xd4, 0x23, 0x0e, 0xcf, 0x7e, 0x84, 0xc8, 0x42, 0x1d,
0x5e, 0x07, 0xd7, 0x46, 0xa3, 0x68, 0x6a, 0x5c, 0xf8, 0x15, 0xa0, 0x6d, 0x1b, 0x66, 0xf6, 0xa3,
0xb3, 0xd3, 0xf2, 0x4a, 0x81, 0x9b, 0xe0, 0x36, 0xca, 0x16, 0xb6, 0x8b, 0x7b, 0x95, 0x37, 0xc0,
0x7f, 0xa6, 0xc0, 0x0f, 0xc1, 0xfd, 0xf3, 0x81, 0xa3, 0x36, 0xf8, 0xb9, 0x02, 0x0d, 0xf0, 0xe8,
0x8d, 0x9f, 0x37, 0x4a, 0xe6, 0x37, 0x0a, 0xbc, 0x0e, 0xde, 0x1e, 0xce, 0x17, 0x75, 0xf8, 0xad,
0x02, 0xd7, 0xc1, 0x8d, 0x33, 0x9f, 0x24, 0x90, 0xbf, 0x53, 0xe0, 0xb7, 0xc1, 0xbd, 0xb3, 0x20,
0xa3, 0xc2, 0xf8, 0xbd, 0x02, 0x1f, 0x82, 0x07, 0x6f, 0xf0, 0x8c, 0x51, 0x02, 0x7f, 0x38, 0x63,
0x1f, 0xa2, 0xd8, 0x5f, 0x9c, 0xbf, 0x0f, 0x81, 0xfc, 0xa3, 0x02, 0x57, 0xc1, 0xe5, 0xe1, 0x10,
0xfa, 0x4e, 0xfc, 0x49, 0x81, 0x37, 0xc1, 0xda, 0x99, 0x4a, 0x14, 0xf6, 0x67, 0x05, 0xaa, 0x60,
0xa9, 0x50, 0xac, 0x3c, 0xce, 0xe6, 0xcd, 0xca, 0xf3, 0xbc, 0xb5, 0x53, 0x29, 0x5b, 0xc8, 0x28,
0x97, 0xd3, 0xbf, 0x1a, 0xa7, 0xa1, 0xc4, 0x3c, 0x85, 0xa2, 0x70, 0x56, 0x1e, 0x17, 0x51, 0xc5,
0xcc, 0x3f, 0x33, 0x0a, 0x14, 0xf9, 0xe9, 0x38, 0x5c, 0x00, 0x80, 0xc2, 0x4a, 0xc5, 0x7c, 0xc1,
0x2a, 0xa7, 0x7f, 0x90, 0x82, 0x73, 0x60, 0xca, 0x78, 0x61, 0x19, 0xa8, 0x90, 0x35, 0xd3, 0xff,
0x4c, 0x6d, 0x04, 0x00, 0xf4, 0xc7, 0x0a, 0x38, 0x09, 0xc6, 0x77, 0x9f, 0xa5, 0xc7, 0xe0, 0x34,
0x98, 0x30, 0x8d, 0x6c, 0xd9, 0x48, 0x2b, 0x70, 0x09, 0x2c, 0x18, 0xa6, 0x91, 0xb3, 0xf2, 0xc5,
0x42, 0x05, 0xed, 0x17, 0x0a, 0xec, 0xdc, 0x48, 0x83, 0xd9, 0xe7, 0x59, 0x2b, 0xb7, 0xd3, 0xb5,
0xa4, 0xe8, 0xf9, 0x64, 0x16, 0x73, 0xbb, 0x15, 0x94, 0xcd, 0x19, 0xa8, 0x6b, 0xbe, 0x40, 0x81,
0x4c, 0xa8, 0x6b, 0x99, 0xb8, 0xfb, 0x10, 0x4c, 0x5b, 0xa1, 0xed, 0x47, 0x8d, 0x20, 0x24, 0xf0,
0xae, 0xbc, 0x98, 0x17, 0x67, 0xbd, 0xe8, 0x63, 0x57, 0x16, 0x7a, 0x6b, 0xde, 0x4e, 0xb4, 0xb1,
0x75, 0xe5, 0xeb, 0xca, 0xd6, 0xc5, 0x57, 0x7f, 0x5b, 0x1d, 0x7b, 0xf5, 0x7a, 0x55, 0xf9, 0xe2,
0xf5, 0xaa, 0xf2, 0xd7, 0xd7, 0xab, 0xca, 0xcf, 0xff, 0xbe, 0x3a, 0x76, 0x30, 0xc9, 0xfe, 0x87,
0x74, 0xef, 0xff, 0x01, 0x00, 0x00, 0xff, 0xff, 0x10, 0x53, 0x17, 0x6b, 0x8c, 0x1a, 0x00, 0x00,
}

View File

@ -103,17 +103,23 @@ message Member {
// ClientCertData contains cert file contents from this member's etcd server.
string ClientCertData = 401 [(gogoproto.moretags) = "yaml:\"client-cert-data\""];
string ClientCertPath = 402 [(gogoproto.moretags) = "yaml:\"client-cert-path\""];
// ClientKeyData contains key file contents from this member's etcd server.
string ClientKeyData = 402 [(gogoproto.moretags) = "yaml:\"client-key-data\""];
string ClientKeyData = 403 [(gogoproto.moretags) = "yaml:\"client-key-data\""];
string ClientKeyPath = 404 [(gogoproto.moretags) = "yaml:\"client-key-path\""];
// ClientTrustedCAData contains trusted CA file contents from this member's etcd server.
string ClientTrustedCAData = 403 [(gogoproto.moretags) = "yaml:\"client-trusted-ca-data\""];
string ClientTrustedCAData = 405 [(gogoproto.moretags) = "yaml:\"client-trusted-ca-data\""];
string ClientTrustedCAPath = 406 [(gogoproto.moretags) = "yaml:\"client-trusted-ca-path\""];
// PeerCertData contains cert file contents from this member's etcd server.
string PeerCertData = 501 [(gogoproto.moretags) = "yaml:\"peer-cert-data\""];
string PeerCertPath = 502 [(gogoproto.moretags) = "yaml:\"peer-cert-path\""];
// PeerKeyData contains key file contents from this member's etcd server.
string PeerKeyData = 502 [(gogoproto.moretags) = "yaml:\"peer-key-data\""];
string PeerKeyData = 503 [(gogoproto.moretags) = "yaml:\"peer-key-data\""];
string PeerKeyPath = 504 [(gogoproto.moretags) = "yaml:\"peer-key-path\""];
// PeerTrustedCAData contains trusted CA file contents from this member's etcd server.
string PeerTrustedCAData = 503 [(gogoproto.moretags) = "yaml:\"peer-trusted-ca-data\""];
string PeerTrustedCAData = 505 [(gogoproto.moretags) = "yaml:\"peer-trusted-ca-data\""];
string PeerTrustedCAPath = 506 [(gogoproto.moretags) = "yaml:\"peer-trusted-ca-path\""];
}
enum FailureCase {
@ -165,8 +171,9 @@ enum StressType {
}
message Tester {
string TesterNetwork = 1 [(gogoproto.moretags) = "yaml:\"tester-network\""];
string TesterAddr = 2 [(gogoproto.moretags) = "yaml:\"tester-addr\""];
string TesterDataDir = 1 [(gogoproto.moretags) = "yaml:\"tester-data-dir\""];
string TesterNetwork = 2 [(gogoproto.moretags) = "yaml:\"tester-network\""];
string TesterAddr = 3 [(gogoproto.moretags) = "yaml:\"tester-addr\""];
// DelayLatencyMsRv is the delay latency in milliseconds,
// to inject to simulated slow network.