From 624e61634ec993bba8434edc18be741c28a1292c Mon Sep 17 00:00:00 2001 From: Gyu-Ho Lee Date: Sat, 24 Sep 2016 11:39:25 -0700 Subject: [PATCH] vendor: update dependencies --- .../coreos/etcd/auth/authpb/auth.pb.go | 38 +- .../coreos/etcd/client/keys.generated.go | 3 +- vendor/github.com/coreos/etcd/client/keys.go | 27 +- .../github.com/coreos/etcd/clientv3/auth.go | 1 + .../coreos/etcd/clientv3/balancer.go | 71 +- .../github.com/coreos/etcd/clientv3/client.go | 73 +- .../github.com/coreos/etcd/clientv3/config.go | 10 +- vendor/github.com/coreos/etcd/clientv3/kv.go | 16 +- .../github.com/coreos/etcd/clientv3/lease.go | 44 +- vendor/github.com/coreos/etcd/clientv3/op.go | 97 +- .../github.com/coreos/etcd/clientv3/watch.go | 63 +- .../etcdserver/api/v3rpc/rpctypes/error.go | 3 + .../etcdserver/etcdserverpb/etcdserver.pb.go | 55 +- .../etcdserverpb/raft_internal.pb.go | 107 +- .../etcd/etcdserver/etcdserverpb/rpc.pb.go | 1180 ++++++++++++----- .../etcd/etcdserver/etcdserverpb/rpc.pb.gw.go | 45 + .../coreos/etcd/mvcc/mvccpb/kv.pb.go | 40 +- .../hashicorp/consul/api/operator.go | 81 ++ .../github.com/samuel/go-zookeeper/zk/conn.go | 240 +++- .../samuel/go-zookeeper/zk/constants.go | 56 +- .../github.com/samuel/go-zookeeper/zk/lock.go | 10 +- .../samuel/go-zookeeper/zk/server_help.go | 62 +- .../samuel/go-zookeeper/zk/structs.go | 11 +- .../spf13/cobra/bash_completions.go | 6 +- vendor/github.com/spf13/cobra/cobra.go | 36 +- vendor/github.com/spf13/cobra/command.go | 95 +- vendor/github.com/spf13/pflag/bool.go | 7 +- vendor/github.com/spf13/pflag/count.go | 7 +- vendor/github.com/spf13/pflag/flag.go | 14 +- vendor/github.com/spf13/pflag/float32.go | 7 +- vendor/github.com/spf13/pflag/float64.go | 7 +- vendor/github.com/spf13/pflag/int.go | 7 +- vendor/github.com/spf13/pflag/int32.go | 7 +- vendor/github.com/spf13/pflag/int64.go | 7 +- vendor/github.com/spf13/pflag/int8.go | 7 +- vendor/github.com/spf13/pflag/string.go | 4 +- vendor/github.com/spf13/pflag/string_array.go | 110 ++ vendor/github.com/spf13/pflag/string_slice.go | 18 +- vendor/github.com/spf13/pflag/uint.go | 7 +- vendor/github.com/spf13/pflag/uint16.go | 9 +- vendor/github.com/spf13/pflag/uint32.go | 11 +- vendor/github.com/spf13/pflag/uint64.go | 7 +- vendor/github.com/spf13/pflag/uint8.go | 7 +- .../grpc/transport/http_util.go | 2 +- 44 files changed, 1958 insertions(+), 757 deletions(-) create mode 100644 vendor/github.com/hashicorp/consul/api/operator.go create mode 100644 vendor/github.com/spf13/pflag/string_array.go diff --git a/vendor/github.com/coreos/etcd/auth/authpb/auth.pb.go b/vendor/github.com/coreos/etcd/auth/authpb/auth.pb.go index 448e1eaa..77115771 100644 --- a/vendor/github.com/coreos/etcd/auth/authpb/auth.pb.go +++ b/vendor/github.com/coreos/etcd/auth/authpb/auth.pb.go @@ -798,23 +798,23 @@ var ( ) var fileDescriptorAuth = []byte{ - // 288 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x09, 0x6e, 0x88, 0x02, 0xff, 0x6c, 0x90, 0xc1, 0x4a, 0xc3, 0x30, - 0x1c, 0xc6, 0x9b, 0xb6, 0x1b, 0xed, 0x5f, 0x27, 0x25, 0x0c, 0x0c, 0x13, 0x42, 0xe9, 0xa9, 0x78, - 0xa8, 0xb0, 0x5d, 0xbc, 0x2a, 0xf6, 0x20, 0x78, 0x90, 0x50, 0xf1, 0x28, 0x1d, 0x0d, 0x75, 0x6c, - 0x6d, 0x4a, 0x32, 0x91, 0xbe, 0x89, 0x07, 0x1f, 0x68, 0xc7, 0x3d, 0x82, 0xab, 0x2f, 0x22, 0x4d, - 0x64, 0x43, 0xdc, 0xed, 0xfb, 0xbe, 0xff, 0x97, 0xe4, 0x97, 0x3f, 0x40, 0xfe, 0xb6, 0x7e, 0x4d, - 0x1a, 0x29, 0xd6, 0x02, 0x0f, 0x7b, 0xdd, 0xcc, 0x27, 0xe3, 0x52, 0x94, 0x42, 0x47, 0x57, 0xbd, - 0x32, 0xd3, 0xe8, 0x01, 0xdc, 0x27, 0xc5, 0x25, 0xc6, 0xe0, 0xd6, 0x79, 0xc5, 0x09, 0x0a, 0x51, - 0x7c, 0xca, 0xb4, 0xc6, 0x13, 0xf0, 0x9a, 0x5c, 0xa9, 0x77, 0x21, 0x0b, 0x62, 0xeb, 0x7c, 0xef, - 0xf1, 0x18, 0x06, 0x52, 0xac, 0xb8, 0x22, 0x4e, 0xe8, 0xc4, 0x3e, 0x33, 0x26, 0xfa, 0x44, 0x00, - 0x8f, 0x5c, 0x56, 0x0b, 0xa5, 0x16, 0xa2, 0xc6, 0x33, 0xf0, 0x1a, 0x2e, 0xab, 0xac, 0x6d, 0xcc, - 0xc5, 0x67, 0xd3, 0xf3, 0xc4, 0xd0, 0x24, 0x87, 0x56, 0xd2, 0x8f, 0xd9, 0xbe, 0x88, 0x03, 0x70, - 0x96, 0xbc, 0xfd, 0x7d, 0xb0, 0x97, 0xf8, 0x02, 0x7c, 0x99, 0xd7, 0x25, 0x7f, 0xe1, 0x75, 0x41, - 0x1c, 0x03, 0xa2, 0x83, 0xb4, 0x2e, 0xa2, 0x4b, 0x70, 0xf5, 0x31, 0x0f, 0x5c, 0x96, 0xde, 0xdc, - 0x05, 0x16, 0xf6, 0x61, 0xf0, 0xcc, 0xee, 0xb3, 0x34, 0x40, 0x78, 0x04, 0x7e, 0x1f, 0x1a, 0x6b, - 0x47, 0x19, 0xb8, 0x4c, 0xac, 0xf8, 0xd1, 0xcf, 0x5e, 0xc3, 0x68, 0xc9, 0xdb, 0x03, 0x16, 0xb1, - 0x43, 0x27, 0x3e, 0x99, 0xe2, 0xff, 0xc0, 0xec, 0x6f, 0xf1, 0x96, 0x6c, 0x76, 0xd4, 0xda, 0xee, - 0xa8, 0xb5, 0xe9, 0x28, 0xda, 0x76, 0x14, 0x7d, 0x75, 0x14, 0x7d, 0x7c, 0x53, 0x6b, 0x3e, 0xd4, - 0x3b, 0x9e, 0xfd, 0x04, 0x00, 0x00, 0xff, 0xff, 0xcc, 0x76, 0x8d, 0x4f, 0x8f, 0x01, 0x00, 0x00, + // 280 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x09, 0x6e, 0x88, 0x02, 0xff, 0xe2, 0xe2, 0x4a, 0x2c, 0x2d, 0xc9, + 0xd0, 0x2b, 0x28, 0xca, 0x2f, 0xc9, 0x17, 0x62, 0x03, 0xb1, 0x0b, 0x92, 0xa4, 0x44, 0xd2, 0xf3, + 0xd3, 0xf3, 0xc1, 0x42, 0xfa, 0x20, 0x16, 0x44, 0x56, 0xc9, 0x87, 0x8b, 0x25, 0xb4, 0x38, 0xb5, + 0x48, 0x48, 0x88, 0x8b, 0x25, 0x2f, 0x31, 0x37, 0x55, 0x82, 0x51, 0x81, 0x51, 0x83, 0x27, 0x08, + 0xcc, 0x16, 0x92, 0xe2, 0xe2, 0x28, 0x48, 0x2c, 0x2e, 0x2e, 0xcf, 0x2f, 0x4a, 0x91, 0x60, 0x02, + 0x8b, 0xc3, 0xf9, 0x42, 0x22, 0x5c, 0xac, 0x45, 0xf9, 0x39, 0xa9, 0xc5, 0x12, 0xcc, 0x0a, 0xcc, + 0x1a, 0x9c, 0x41, 0x10, 0x8e, 0xd2, 0x1c, 0x46, 0x2e, 0xae, 0x80, 0xd4, 0xa2, 0xdc, 0xcc, 0xe2, + 0xe2, 0xcc, 0xfc, 0x3c, 0x21, 0x63, 0xa0, 0x01, 0x40, 0x5e, 0x48, 0x65, 0x01, 0xc4, 0x60, 0x3e, + 0x23, 0x71, 0x3d, 0x88, 0x6b, 0xf4, 0x10, 0xaa, 0xf4, 0x40, 0xd2, 0x41, 0x70, 0x85, 0x42, 0x02, + 0x5c, 0xcc, 0xd9, 0xa9, 0x95, 0x50, 0x0b, 0x41, 0x4c, 0x21, 0x69, 0x2e, 0xce, 0xa2, 0xc4, 0xbc, + 0xf4, 0xd4, 0xf8, 0xd4, 0xbc, 0x14, 0xa0, 0x7d, 0x60, 0x87, 0x80, 0x05, 0x5c, 0xf3, 0x52, 0x94, + 0xb4, 0xb8, 0x58, 0xc0, 0xda, 0x38, 0xb8, 0x58, 0x82, 0x5c, 0x1d, 0x5d, 0x04, 0x18, 0x84, 0x38, + 0xb9, 0x58, 0xc3, 0x83, 0x3c, 0x43, 0x5c, 0x05, 0x18, 0x85, 0x78, 0xb9, 0x38, 0x41, 0x82, 0x10, + 0x2e, 0x93, 0x52, 0x08, 0x50, 0x0d, 0xd0, 0x9d, 0x58, 0x3d, 0x6b, 0xc1, 0xc5, 0x0b, 0xb4, 0x0b, + 0xe1, 0x2c, 0xa0, 0x03, 0x98, 0x35, 0xb8, 0x8d, 0x84, 0x30, 0x1d, 0x1c, 0x84, 0xaa, 0xd0, 0x49, + 0xe2, 0xc4, 0x43, 0x39, 0x86, 0x0b, 0x40, 0x7c, 0xe2, 0x91, 0x1c, 0xe3, 0x05, 0x20, 0x7e, 0x00, + 0xc4, 0x33, 0x1e, 0xcb, 0x31, 0x24, 0xb1, 0x81, 0xc3, 0xd8, 0x18, 0x10, 0x00, 0x00, 0xff, 0xff, + 0xcc, 0x76, 0x8d, 0x4f, 0x8f, 0x01, 0x00, 0x00, } diff --git a/vendor/github.com/coreos/etcd/client/keys.generated.go b/vendor/github.com/coreos/etcd/client/keys.generated.go index 748283aa..16f10301 100644 --- a/vendor/github.com/coreos/etcd/client/keys.generated.go +++ b/vendor/github.com/coreos/etcd/client/keys.generated.go @@ -8,10 +8,11 @@ package client import ( "errors" "fmt" - codec1978 "github.com/ugorji/go/codec" "reflect" "runtime" time "time" + + codec1978 "github.com/ugorji/go/codec" ) const ( diff --git a/vendor/github.com/coreos/etcd/client/keys.go b/vendor/github.com/coreos/etcd/client/keys.go index 62d5d506..b74b9e0a 100644 --- a/vendor/github.com/coreos/etcd/client/keys.go +++ b/vendor/github.com/coreos/etcd/client/keys.go @@ -191,6 +191,10 @@ type SetOptions struct { // Dir specifies whether or not this Node should be created as a directory. Dir bool + + // NoValueOnSuccess specifies whether the response contains the current value of the Node. + // If set, the response will only contain the current value when the request fails. + NoValueOnSuccess bool } type GetOptions struct { @@ -335,6 +339,7 @@ func (k *httpKeysAPI) Set(ctx context.Context, key, val string, opts *SetOptions act.TTL = opts.TTL act.Refresh = opts.Refresh act.Dir = opts.Dir + act.NoValueOnSuccess = opts.NoValueOnSuccess } doCtx := ctx @@ -523,15 +528,16 @@ func (w *waitAction) HTTPRequest(ep url.URL) *http.Request { } type setAction struct { - Prefix string - Key string - Value string - PrevValue string - PrevIndex uint64 - PrevExist PrevExistType - TTL time.Duration - Refresh bool - Dir bool + Prefix string + Key string + Value string + PrevValue string + PrevIndex uint64 + PrevExist PrevExistType + TTL time.Duration + Refresh bool + Dir bool + NoValueOnSuccess bool } func (a *setAction) HTTPRequest(ep url.URL) *http.Request { @@ -565,6 +571,9 @@ func (a *setAction) HTTPRequest(ep url.URL) *http.Request { if a.Refresh { form.Add("refresh", "true") } + if a.NoValueOnSuccess { + params.Set("noValueOnSuccess", strconv.FormatBool(a.NoValueOnSuccess)) + } u.RawQuery = params.Encode() body := strings.NewReader(form.Encode()) diff --git a/vendor/github.com/coreos/etcd/clientv3/auth.go b/vendor/github.com/coreos/etcd/clientv3/auth.go index 8c3c047f..9d981cfb 100644 --- a/vendor/github.com/coreos/etcd/clientv3/auth.go +++ b/vendor/github.com/coreos/etcd/clientv3/auth.go @@ -43,6 +43,7 @@ type ( AuthRoleListResponse pb.AuthRoleListResponse PermissionType authpb.Permission_Type + Permission authpb.Permission ) const ( diff --git a/vendor/github.com/coreos/etcd/clientv3/balancer.go b/vendor/github.com/coreos/etcd/clientv3/balancer.go index b7fba6a2..011f6cf0 100644 --- a/vendor/github.com/coreos/etcd/clientv3/balancer.go +++ b/vendor/github.com/coreos/etcd/clientv3/balancer.go @@ -42,9 +42,16 @@ type simpleBalancer struct { // upc closes when upEps transitions from empty to non-zero or the balancer closes. upc chan struct{} + // grpc issues TLS cert checks using the string passed into dial so + // that string must be the host. To recover the full scheme://host URL, + // have a map from hosts to the original endpoint. + host2ep map[string]string + // pinAddr is the currently pinned address; set to the empty string on // intialization and shutdown. pinAddr string + + closed bool } func newSimpleBalancer(eps []string) *simpleBalancer { @@ -60,6 +67,7 @@ func newSimpleBalancer(eps []string) *simpleBalancer { readyc: make(chan struct{}), upEps: make(map[string]struct{}), upc: make(chan struct{}), + host2ep: getHost2ep(eps), } return sb } @@ -72,17 +80,70 @@ func (b *simpleBalancer) ConnectNotify() <-chan struct{} { return b.upc } +func (b *simpleBalancer) getEndpoint(host string) string { + b.mu.Lock() + defer b.mu.Unlock() + return b.host2ep[host] +} + +func getHost2ep(eps []string) map[string]string { + hm := make(map[string]string, len(eps)) + for i := range eps { + _, host, _ := parseEndpoint(eps[i]) + hm[host] = eps[i] + } + return hm +} + +func (b *simpleBalancer) updateAddrs(eps []string) { + np := getHost2ep(eps) + + b.mu.Lock() + defer b.mu.Unlock() + + match := len(np) == len(b.host2ep) + for k, v := range np { + if b.host2ep[k] != v { + match = false + break + } + } + if match { + // same endpoints, so no need to update address + return + } + + b.host2ep = np + + addrs := make([]grpc.Address, 0, len(eps)) + for i := range eps { + addrs = append(addrs, grpc.Address{Addr: getHost(eps[i])}) + } + b.addrs = addrs + b.notifyCh <- addrs +} + func (b *simpleBalancer) Up(addr grpc.Address) func(error) { b.mu.Lock() + defer b.mu.Unlock() + + // gRPC might call Up after it called Close. We add this check + // to "fix" it up at application layer. Or our simplerBalancer + // might panic since b.upc is closed. + if b.closed { + return func(err error) {} + } + if len(b.upEps) == 0 { // notify waiting Get()s and pin first connected address close(b.upc) b.pinAddr = addr.Addr } b.upEps[addr.Addr] = struct{}{} - b.mu.Unlock() + // notify client that a connection is up b.readyOnce.Do(func() { close(b.readyc) }) + return func(err error) { b.mu.Lock() delete(b.upEps, addr.Addr) @@ -128,13 +189,19 @@ func (b *simpleBalancer) Notify() <-chan []grpc.Address { return b.notifyCh } func (b *simpleBalancer) Close() error { b.mu.Lock() + defer b.mu.Unlock() + // In case gRPC calls close twice. TODO: remove the checking + // when we are sure that gRPC wont call close twice. + if b.closed { + return nil + } + b.closed = true close(b.notifyCh) // terminate all waiting Get()s b.pinAddr = "" if len(b.upEps) == 0 { close(b.upc) } - b.mu.Unlock() return nil } diff --git a/vendor/github.com/coreos/etcd/clientv3/client.go b/vendor/github.com/coreos/etcd/clientv3/client.go index 1ca94eb6..d8b04a43 100644 --- a/vendor/github.com/coreos/etcd/clientv3/client.go +++ b/vendor/github.com/coreos/etcd/clientv3/client.go @@ -99,6 +99,44 @@ func (c *Client) Ctx() context.Context { return c.ctx } // Endpoints lists the registered endpoints for the client. func (c *Client) Endpoints() []string { return c.cfg.Endpoints } +// SetEndpoints updates client's endpoints. +func (c *Client) SetEndpoints(eps ...string) { + c.cfg.Endpoints = eps + c.balancer.updateAddrs(eps) +} + +// Sync synchronizes client's endpoints with the known endpoints from the etcd membership. +func (c *Client) Sync(ctx context.Context) error { + mresp, err := c.MemberList(ctx) + if err != nil { + return err + } + var eps []string + for _, m := range mresp.Members { + eps = append(eps, m.ClientURLs...) + } + c.SetEndpoints(eps...) + return nil +} + +func (c *Client) autoSync() { + if c.cfg.AutoSyncInterval == time.Duration(0) { + return + } + + for { + select { + case <-c.ctx.Done(): + return + case <-time.After(c.cfg.AutoSyncInterval): + ctx, _ := context.WithTimeout(c.ctx, 5*time.Second) + if err := c.Sync(ctx); err != nil && err != c.ctx.Err() { + logger.Println("Auto sync endpoints failed:", err) + } + } + } +} + type authTokenCredential struct { token string } @@ -113,19 +151,31 @@ func (cred authTokenCredential) GetRequestMetadata(ctx context.Context, s ...str }, nil } -func (c *Client) dialTarget(endpoint string) (proto string, host string, creds *credentials.TransportCredentials) { +func parseEndpoint(endpoint string) (proto string, host string, scheme bool) { proto = "tcp" host = endpoint - creds = c.creds url, uerr := url.Parse(endpoint) if uerr != nil || !strings.Contains(endpoint, "://") { return } + scheme = true + // strip scheme:// prefix since grpc dials by host host = url.Host switch url.Scheme { + case "http", "https": case "unix": proto = "unix" + default: + proto, host = "", "" + } + return +} + +func (c *Client) processCreds(protocol string) (creds *credentials.TransportCredentials) { + creds = c.creds + switch protocol { + case "unix": case "http": creds = nil case "https": @@ -136,7 +186,7 @@ func (c *Client) dialTarget(endpoint string) (proto string, host string, creds * emptyCreds := credentials.NewTLS(tlsconfig) creds = &emptyCreds default: - return "", "", nil + creds = nil } return } @@ -148,17 +198,8 @@ func (c *Client) dialSetupOpts(endpoint string, dopts ...grpc.DialOption) (opts } opts = append(opts, dopts...) - // grpc issues TLS cert checks using the string passed into dial so - // that string must be the host. To recover the full scheme://host URL, - // have a map from hosts to the original endpoint. - host2ep := make(map[string]string) - for i := range c.cfg.Endpoints { - _, host, _ := c.dialTarget(c.cfg.Endpoints[i]) - host2ep[host] = c.cfg.Endpoints[i] - } - f := func(host string, t time.Duration) (net.Conn, error) { - proto, host, _ := c.dialTarget(host2ep[host]) + proto, host, _ := parseEndpoint(c.balancer.getEndpoint(host)) if proto == "" { return nil, fmt.Errorf("unknown scheme for %q", host) } @@ -171,7 +212,10 @@ func (c *Client) dialSetupOpts(endpoint string, dopts ...grpc.DialOption) (opts } opts = append(opts, grpc.WithDialer(f)) - _, _, creds := c.dialTarget(endpoint) + creds := c.creds + if proto, _, scheme := parseEndpoint(endpoint); scheme { + creds = c.processCreds(proto) + } if creds != nil { opts = append(opts, grpc.WithTransportCredentials(*creds)) } else { @@ -280,6 +324,7 @@ func newClient(cfg *Config) (*Client, error) { logger.Set(log.New(ioutil.Discard, "", 0)) } + go client.autoSync() return client, nil } diff --git a/vendor/github.com/coreos/etcd/clientv3/config.go b/vendor/github.com/coreos/etcd/clientv3/config.go index 066b41ec..4f92d7d2 100644 --- a/vendor/github.com/coreos/etcd/clientv3/config.go +++ b/vendor/github.com/coreos/etcd/clientv3/config.go @@ -28,6 +28,10 @@ type Config struct { // Endpoints is a list of URLs Endpoints []string + // AutoSyncInterval is the interval to update endpoints with its latest members. + // 0 disables auto-sync. By default auto-sync is disabled. + AutoSyncInterval time.Duration + // DialTimeout is the timeout for failing to establish a connection. DialTimeout time.Duration @@ -46,6 +50,7 @@ type Config struct { type yamlConfig struct { Endpoints []string `json:"endpoints"` + AutoSyncInterval time.Duration `json:"auto-sync-interval"` DialTimeout time.Duration `json:"dial-timeout"` InsecureTransport bool `json:"insecure-transport"` InsecureSkipTLSVerify bool `json:"insecure-skip-tls-verify"` @@ -68,8 +73,9 @@ func configFromFile(fpath string) (*Config, error) { } cfg := &Config{ - Endpoints: yc.Endpoints, - DialTimeout: yc.DialTimeout, + Endpoints: yc.Endpoints, + AutoSyncInterval: yc.AutoSyncInterval, + DialTimeout: yc.DialTimeout, } if yc.InsecureTransport { diff --git a/vendor/github.com/coreos/etcd/clientv3/kv.go b/vendor/github.com/coreos/etcd/clientv3/kv.go index a2bebe2a..834b17d3 100644 --- a/vendor/github.com/coreos/etcd/clientv3/kv.go +++ b/vendor/github.com/coreos/etcd/clientv3/kv.go @@ -141,21 +141,7 @@ func (kv *kv) do(ctx context.Context, op Op) (OpResponse, error) { // TODO: handle other ops case tRange: var resp *pb.RangeResponse - r := &pb.RangeRequest{ - Key: op.key, - RangeEnd: op.end, - Limit: op.limit, - Revision: op.rev, - Serializable: op.serializable, - KeysOnly: op.keysOnly, - CountOnly: op.countOnly, - } - if op.sort != nil { - r.SortOrder = pb.RangeRequest_SortOrder(op.sort.Order) - r.SortTarget = pb.RangeRequest_SortTarget(op.sort.Target) - } - - resp, err = kv.remote.Range(ctx, r, grpc.FailFast(false)) + resp, err = kv.remote.Range(ctx, op.toRangeRequest(), grpc.FailFast(false)) if err == nil { return OpResponse{get: (*GetResponse)(resp)}, nil } diff --git a/vendor/github.com/coreos/etcd/clientv3/lease.go b/vendor/github.com/coreos/etcd/clientv3/lease.go index e532ed46..ed8bb0a5 100644 --- a/vendor/github.com/coreos/etcd/clientv3/lease.go +++ b/vendor/github.com/coreos/etcd/clientv3/lease.go @@ -44,6 +44,21 @@ type LeaseKeepAliveResponse struct { TTL int64 } +// LeaseTimeToLiveResponse is used to convert the protobuf lease timetolive response. +type LeaseTimeToLiveResponse struct { + *pb.ResponseHeader + ID LeaseID `json:"id"` + + // TTL is the remaining TTL in seconds for the lease; the lease will expire in under TTL+1 seconds. + TTL int64 `json:"ttl"` + + // GrantedTTL is the initial granted time in seconds upon lease creation/renewal. + GrantedTTL int64 `json:"granted-ttl"` + + // Keys is the list of keys attached to this lease. + Keys [][]byte `json:"keys"` +} + const ( // defaultTTL is the assumed lease TTL used for the first keepalive // deadline before the actual TTL is known to the client. @@ -61,6 +76,9 @@ type Lease interface { // Revoke revokes the given lease. Revoke(ctx context.Context, id LeaseID) (*LeaseRevokeResponse, error) + // TimeToLive retrieves the lease information of the given lease ID. + TimeToLive(ctx context.Context, id LeaseID, opts ...LeaseOption) (*LeaseTimeToLiveResponse, error) + // KeepAlive keeps the given lease alive forever. KeepAlive(ctx context.Context, id LeaseID) (<-chan *LeaseKeepAliveResponse, error) @@ -141,7 +159,7 @@ func (l *lessor) Grant(ctx context.Context, ttl int64) (*LeaseGrantResponse, err return gresp, nil } if isHaltErr(cctx, err) { - return nil, toErr(ctx, err) + return nil, toErr(cctx, err) } if nerr := l.newStream(); nerr != nil { return nil, nerr @@ -170,6 +188,30 @@ func (l *lessor) Revoke(ctx context.Context, id LeaseID) (*LeaseRevokeResponse, } } +func (l *lessor) TimeToLive(ctx context.Context, id LeaseID, opts ...LeaseOption) (*LeaseTimeToLiveResponse, error) { + cctx, cancel := context.WithCancel(ctx) + done := cancelWhenStop(cancel, l.stopCtx.Done()) + defer close(done) + + for { + r := toLeaseTimeToLiveRequest(id, opts...) + resp, err := l.remote.LeaseTimeToLive(cctx, r) + if err == nil { + gresp := &LeaseTimeToLiveResponse{ + ResponseHeader: resp.GetHeader(), + ID: LeaseID(resp.ID), + TTL: resp.TTL, + GrantedTTL: resp.GrantedTTL, + Keys: resp.Keys, + } + return gresp, nil + } + if isHaltErr(cctx, err) { + return nil, toErr(cctx, err) + } + } +} + func (l *lessor) KeepAlive(ctx context.Context, id LeaseID) (<-chan *LeaseKeepAliveResponse, error) { ch := make(chan *LeaseKeepAliveResponse, leaseResponseChSize) diff --git a/vendor/github.com/coreos/etcd/clientv3/op.go b/vendor/github.com/coreos/etcd/clientv3/op.go index cadea1f8..b0f24b30 100644 --- a/vendor/github.com/coreos/etcd/clientv3/op.go +++ b/vendor/github.com/coreos/etcd/clientv3/op.go @@ -41,6 +41,10 @@ type Op struct { serializable bool keysOnly bool countOnly bool + minModRev int64 + maxModRev int64 + minCreateRev int64 + maxCreateRev int64 // for range, watch rev int64 @@ -61,29 +65,39 @@ type Op struct { leaseID LeaseID } +func (op Op) toRangeRequest() *pb.RangeRequest { + if op.t != tRange { + panic("op.t != tRange") + } + r := &pb.RangeRequest{ + Key: op.key, + RangeEnd: op.end, + Limit: op.limit, + Revision: op.rev, + Serializable: op.serializable, + KeysOnly: op.keysOnly, + CountOnly: op.countOnly, + MinModRevision: op.minModRev, + MaxModRevision: op.maxModRev, + MinCreateRevision: op.minCreateRev, + MaxCreateRevision: op.maxCreateRev, + } + if op.sort != nil { + r.SortOrder = pb.RangeRequest_SortOrder(op.sort.Order) + r.SortTarget = pb.RangeRequest_SortTarget(op.sort.Target) + } + return r +} + func (op Op) toRequestOp() *pb.RequestOp { switch op.t { case tRange: - r := &pb.RangeRequest{ - Key: op.key, - RangeEnd: op.end, - Limit: op.limit, - Revision: op.rev, - Serializable: op.serializable, - KeysOnly: op.keysOnly, - CountOnly: op.countOnly, - } - if op.sort != nil { - r.SortOrder = pb.RangeRequest_SortOrder(op.sort.Order) - r.SortTarget = pb.RangeRequest_SortTarget(op.sort.Target) - } - return &pb.RequestOp{Request: &pb.RequestOp_RequestRange{RequestRange: r}} + return &pb.RequestOp{Request: &pb.RequestOp_RequestRange{RequestRange: op.toRangeRequest()}} case tPut: r := &pb.PutRequest{Key: op.key, Value: op.val, Lease: int64(op.leaseID), PrevKv: op.prevKV} return &pb.RequestOp{Request: &pb.RequestOp_RequestPut{RequestPut: r}} case tDeleteRange: r := &pb.DeleteRangeRequest{Key: op.key, RangeEnd: op.end, PrevKv: op.prevKV} - return &pb.RequestOp{Request: &pb.RequestOp_RequestDeleteRange{RequestDeleteRange: r}} default: panic("Unknown Op") @@ -116,6 +130,10 @@ func OpDelete(key string, opts ...OpOption) Op { panic("unexpected serializable in delete") case ret.countOnly: panic("unexpected countOnly in delete") + case ret.minModRev != 0, ret.maxModRev != 0: + panic("unexpected mod revision filter in delete") + case ret.minCreateRev != 0, ret.maxCreateRev != 0: + panic("unexpected create revision filter in delete") case ret.filterDelete, ret.filterPut: panic("unexpected filter in delete") case ret.createdNotify: @@ -140,6 +158,10 @@ func OpPut(key, val string, opts ...OpOption) Op { panic("unexpected serializable in put") case ret.countOnly: panic("unexpected countOnly in put") + case ret.minModRev != 0, ret.maxModRev != 0: + panic("unexpected mod revision filter in put") + case ret.minCreateRev != 0, ret.maxCreateRev != 0: + panic("unexpected create revision filter in put") case ret.filterDelete, ret.filterPut: panic("unexpected filter in put") case ret.createdNotify: @@ -162,6 +184,10 @@ func opWatch(key string, opts ...OpOption) Op { panic("unexpected serializable in watch") case ret.countOnly: panic("unexpected countOnly in watch") + case ret.minModRev != 0, ret.maxModRev != 0: + panic("unexpected mod revision filter in watch") + case ret.minCreateRev != 0, ret.maxCreateRev != 0: + panic("unexpected create revision filter in watch") } return ret } @@ -264,6 +290,18 @@ func WithCountOnly() OpOption { return func(op *Op) { op.countOnly = true } } +// WithMinModRev filters out keys for Get with modification revisions less than the given revision. +func WithMinModRev(rev int64) OpOption { return func(op *Op) { op.minModRev = rev } } + +// WithMaxModRev filters out keys for Get with modification revisions greater than the given revision. +func WithMaxModRev(rev int64) OpOption { return func(op *Op) { op.maxModRev = rev } } + +// WithMinCreateRev filters out keys for Get with creation revisions less than the given revision. +func WithMinCreateRev(rev int64) OpOption { return func(op *Op) { op.minCreateRev = rev } } + +// WithMaxCreateRev filters out keys for Get with creation revisions greater than the given revision. +func WithMaxCreateRev(rev int64) OpOption { return func(op *Op) { op.maxCreateRev = rev } } + // WithFirstCreate gets the key with the oldest creation revision in the request range. func WithFirstCreate() []OpOption { return withTop(SortByCreateRevision, SortAscend) } @@ -320,3 +358,32 @@ func WithPrevKV() OpOption { op.prevKV = true } } + +// LeaseOp represents an Operation that lease can execute. +type LeaseOp struct { + id LeaseID + + // for TimeToLive + attachedKeys bool +} + +// LeaseOption configures lease operations. +type LeaseOption func(*LeaseOp) + +func (op *LeaseOp) applyOpts(opts []LeaseOption) { + for _, opt := range opts { + opt(op) + } +} + +// WithAttachedKeys requests lease timetolive API to return +// attached keys of given lease ID. +func WithAttachedKeys() LeaseOption { + return func(op *LeaseOp) { op.attachedKeys = true } +} + +func toLeaseTimeToLiveRequest(id LeaseID, opts ...LeaseOption) *pb.LeaseTimeToLiveRequest { + ret := &LeaseOp{id: id} + ret.applyOpts(opts) + return &pb.LeaseTimeToLiveRequest{ID: int64(id), Keys: ret.attachedKeys} +} diff --git a/vendor/github.com/coreos/etcd/clientv3/watch.go b/vendor/github.com/coreos/etcd/clientv3/watch.go index 6dd14905..28eb491e 100644 --- a/vendor/github.com/coreos/etcd/clientv3/watch.go +++ b/vendor/github.com/coreos/etcd/clientv3/watch.go @@ -131,6 +131,8 @@ type watchGrpcStream struct { donec chan struct{} // errc transmits errors from grpc Recv to the watch stream reconn logic errc chan error + // closingc gets the watcherStream of closing watchers + closingc chan *watcherStream // the error that closed the watch stream closeErr error @@ -203,11 +205,12 @@ func (w *watcher) newWatcherGrpcStream(inctx context.Context) *watchGrpcStream { cancel: cancel, streams: make(map[int64]*watcherStream), - respc: make(chan *pb.WatchResponse), - reqc: make(chan *watchRequest), - stopc: make(chan struct{}), - donec: make(chan struct{}), - errc: make(chan error, 1), + respc: make(chan *pb.WatchResponse), + reqc: make(chan *watchRequest), + stopc: make(chan struct{}), + donec: make(chan struct{}), + errc: make(chan error, 1), + closingc: make(chan *watcherStream), } go wgs.run() return wgs @@ -268,7 +271,6 @@ func (w *watcher) Watch(ctx context.Context, key string, opts ...OpOption) Watch case reqc <- wr: ok = true case <-wr.ctx.Done(): - wgs.stopIfEmpty() case <-donec: if wgs.closeErr != nil { closeCh <- WatchResponse{closeErr: wgs.closeErr} @@ -378,15 +380,19 @@ func (w *watchGrpcStream) addStream(resp *pb.WatchResponse, pendingReq *watchReq go w.serveStream(ws) } -// closeStream closes the watcher resources and removes it -func (w *watchGrpcStream) closeStream(ws *watcherStream) { +func (w *watchGrpcStream) closeStream(ws *watcherStream) bool { w.mu.Lock() // cancels request stream; subscriber receives nil channel close(ws.initReq.retc) // close subscriber's channel close(ws.outc) delete(w.streams, ws.id) + empty := len(w.streams) == 0 + if empty && w.stopc != nil { + w.stopc = nil + } w.mu.Unlock() + return empty } // run is the root of the goroutines for managing a watcher client @@ -477,7 +483,7 @@ func (w *watchGrpcStream) run() { // watch client failed to recv; spawn another if possible // TODO report watch client errors from errc? case err := <-w.errc: - if toErr(w.ctx, err) == v3rpc.ErrNoLeader { + if isHaltErr(w.ctx, err) || toErr(w.ctx, err) == v3rpc.ErrNoLeader { closeErr = err return } @@ -491,6 +497,10 @@ func (w *watchGrpcStream) run() { cancelSet = make(map[int64]struct{}) case <-stopc: return + case ws := <-w.closingc: + if w.closeStream(ws) { + return + } } // send failed; queue for retry @@ -553,6 +563,15 @@ func (w *watchGrpcStream) serveWatchClient(wc pb.Watch_WatchClient) { // serveStream forwards watch responses from run() to the subscriber func (w *watchGrpcStream) serveStream(ws *watcherStream) { + defer func() { + // signal that this watcherStream is finished + select { + case w.closingc <- ws: + case <-w.donec: + w.closeStream(ws) + } + }() + var closeErr error emptyWr := &WatchResponse{} wrs := []*WatchResponse{} @@ -641,20 +660,9 @@ func (w *watchGrpcStream) serveStream(ws *watcherStream) { } } - w.closeStream(ws) - w.stopIfEmpty() // lazily send cancel message if events on missing id } -func (wgs *watchGrpcStream) stopIfEmpty() { - wgs.mu.Lock() - if len(wgs.streams) == 0 && wgs.stopc != nil { - close(wgs.stopc) - wgs.stopc = nil - } - wgs.mu.Unlock() -} - func (w *watchGrpcStream) newWatchClient() (pb.Watch_WatchClient, error) { ws, rerr := w.resume() if rerr != nil { @@ -708,6 +716,10 @@ func (w *watchGrpcStream) resumeWatchers(wc pb.Watch_WatchClient) error { w.mu.RUnlock() for _, ws := range streams { + // drain recvc so no old WatchResponses (e.g., Created messages) + // are processed while resuming + ws.drain() + // pause serveStream ws.resumec <- -1 @@ -740,6 +752,17 @@ func (w *watchGrpcStream) resumeWatchers(wc pb.Watch_WatchClient) error { return nil } +// drain removes all buffered WatchResponses from the stream's receive channel. +func (ws *watcherStream) drain() { + for { + select { + case <-ws.recvc: + default: + return + } + } +} + // toPB converts an internal watch request structure to its protobuf messagefunc (wr *watchRequest) func (wr *watchRequest) toPB() *pb.WatchRequest { req := &pb.WatchCreateRequest{ diff --git a/vendor/github.com/coreos/etcd/etcdserver/api/v3rpc/rpctypes/error.go b/vendor/github.com/coreos/etcd/etcdserver/api/v3rpc/rpctypes/error.go index 7461a84c..183a04f3 100644 --- a/vendor/github.com/coreos/etcd/etcdserver/api/v3rpc/rpctypes/error.go +++ b/vendor/github.com/coreos/etcd/etcdserver/api/v3rpc/rpctypes/error.go @@ -56,6 +56,7 @@ var ( ErrGRPCStopped = grpc.Errorf(codes.Unavailable, "etcdserver: server stopped") ErrGRPCTimeout = grpc.Errorf(codes.Unavailable, "etcdserver: request timed out") ErrGRPCTimeoutDueToLeaderFail = grpc.Errorf(codes.Unavailable, "etcdserver: request timed out, possibly due to previous leader failure") + ErrGRPCUnhealthy = grpc.Errorf(codes.Unavailable, "etcdserver: unhealthy cluster") errStringToError = map[string]error{ grpc.ErrorDesc(ErrGRPCEmptyKey): ErrGRPCEmptyKey, @@ -93,6 +94,7 @@ var ( grpc.ErrorDesc(ErrGRPCStopped): ErrGRPCStopped, grpc.ErrorDesc(ErrGRPCTimeout): ErrGRPCTimeout, grpc.ErrorDesc(ErrGRPCTimeoutDueToLeaderFail): ErrGRPCTimeoutDueToLeaderFail, + grpc.ErrorDesc(ErrGRPCUnhealthy): ErrGRPCUnhealthy, } // client-side error @@ -131,6 +133,7 @@ var ( ErrStopped = Error(ErrGRPCStopped) ErrTimeout = Error(ErrGRPCTimeout) ErrTimeoutDueToLeaderFail = Error(ErrGRPCTimeoutDueToLeaderFail) + ErrUnhealthy = Error(ErrGRPCUnhealthy) ) // EtcdError defines gRPC server errors. diff --git a/vendor/github.com/coreos/etcd/etcdserver/etcdserverpb/etcdserver.pb.go b/vendor/github.com/coreos/etcd/etcdserver/etcdserverpb/etcdserver.pb.go index 746e9a11..81008b4c 100644 --- a/vendor/github.com/coreos/etcd/etcdserver/etcdserverpb/etcdserver.pb.go +++ b/vendor/github.com/coreos/etcd/etcdserver/etcdserverpb/etcdserver.pb.go @@ -45,6 +45,8 @@ LeaseRevokeResponse LeaseKeepAliveRequest LeaseKeepAliveResponse + LeaseTimeToLiveRequest + LeaseTimeToLiveResponse Member MemberAddRequest MemberAddResponse @@ -1011,31 +1013,30 @@ var ( ) var fileDescriptorEtcdserver = []byte{ - // 404 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x09, 0x6e, 0x88, 0x02, 0xff, 0x5c, 0x92, 0x41, 0x6e, 0x13, 0x31, - 0x14, 0x86, 0xe3, 0xc4, 0x99, 0x64, 0x4c, 0x81, 0x62, 0x45, 0xe8, 0xa9, 0x42, 0x43, 0x14, 0xb1, - 0xc8, 0x0a, 0xee, 0x50, 0xd2, 0x45, 0x24, 0x8a, 0x4a, 0x8a, 0xca, 0xda, 0x64, 0x1e, 0x8d, 0xa5, - 0xcc, 0x78, 0x6a, 0xbf, 0x19, 0x72, 0x03, 0xae, 0xc0, 0x91, 0xb2, 0xe4, 0x04, 0x08, 0xc2, 0x45, - 0x90, 0x3d, 0x9d, 0x60, 0xba, 0xb3, 0xbe, 0xff, 0xf7, 0xef, 0xdf, 0xf6, 0x13, 0xa7, 0x48, 0xeb, - 0xdc, 0xa1, 0x6d, 0xd0, 0xbe, 0xae, 0xac, 0x21, 0x23, 0x4f, 0xfe, 0x91, 0xea, 0xf3, 0xd9, 0xe4, - 0xd6, 0xdc, 0x9a, 0x20, 0xbc, 0xf1, 0xab, 0xd6, 0x33, 0xfb, 0xc6, 0xc5, 0x68, 0x85, 0x77, 0x35, - 0x3a, 0x92, 0x13, 0xd1, 0x5f, 0x2e, 0x80, 0x4d, 0xd9, 0x9c, 0x9f, 0xf3, 0xfd, 0xcf, 0x97, 0xbd, - 0x55, 0x5f, 0x2f, 0xe4, 0x0b, 0x91, 0x5c, 0x22, 0x6d, 0x4c, 0x0e, 0xfd, 0x29, 0x9b, 0xa7, 0xf7, - 0x4a, 0x52, 0x04, 0x26, 0x41, 0xf0, 0x2b, 0x45, 0x1b, 0x18, 0x44, 0x1a, 0xaf, 0x14, 0x6d, 0xe4, - 0x73, 0x31, 0xb8, 0x51, 0x5b, 0xe0, 0x91, 0x30, 0x68, 0xd4, 0xd6, 0xf3, 0x85, 0xb6, 0x30, 0x9c, - 0xb2, 0xf9, 0xb8, 0xe3, 0xb9, 0xb6, 0x72, 0x26, 0xd2, 0x2b, 0x8b, 0xcd, 0x8d, 0xda, 0xd6, 0x08, - 0x49, 0xb4, 0x2b, 0xad, 0x3a, 0xdc, 0x79, 0x96, 0x65, 0x8e, 0x3b, 0x18, 0x45, 0x45, 0x83, 0x27, - 0xe0, 0xce, 0x73, 0xb1, 0xd3, 0x8e, 0x60, 0x7c, 0x3c, 0x85, 0xb5, 0x9e, 0x80, 0xe5, 0x2b, 0x21, - 0x2e, 0x76, 0x95, 0xb6, 0x8a, 0xb4, 0x29, 0x21, 0x9d, 0xb2, 0xf9, 0xe0, 0x3e, 0x48, 0xe0, 0x91, - 0xfb, 0xbb, 0x7d, 0x52, 0x9a, 0x40, 0x44, 0x55, 0xf9, 0x57, 0xa5, 0x49, 0x9e, 0x89, 0xe1, 0xb5, - 0x2e, 0xd7, 0x08, 0x8f, 0xa2, 0x0e, 0x43, 0xe7, 0x91, 0x3f, 0x7f, 0x85, 0xeb, 0xda, 0x3a, 0xdd, - 0x20, 0x9c, 0x44, 0x5b, 0x53, 0xdb, 0x61, 0xff, 0xa6, 0xd7, 0xc6, 0x12, 0xe6, 0xf0, 0x38, 0x32, - 0x24, 0x2e, 0x30, 0xaf, 0x7e, 0xa8, 0x8d, 0xad, 0x0b, 0x78, 0x12, 0xab, 0x77, 0x81, 0xf9, 0x56, - 0x1f, 0x75, 0x81, 0xf0, 0x34, 0x6a, 0xcd, 0x49, 0x17, 0x6d, 0x2a, 0x59, 0x54, 0x05, 0x9c, 0xfe, - 0x97, 0x1a, 0x98, 0xcc, 0xfc, 0x47, 0x7f, 0xb1, 0xe8, 0x36, 0xf0, 0x2c, 0x7a, 0x95, 0x91, 0x6d, - 0xe1, 0xec, 0x9d, 0x18, 0x5f, 0x22, 0xa9, 0x5c, 0x91, 0xf2, 0x49, 0xef, 0x4d, 0x8e, 0x0f, 0xa6, - 0x21, 0x29, 0x03, 0xf3, 0x37, 0x7c, 0xbb, 0xad, 0x1d, 0xa1, 0x5d, 0x2e, 0xc2, 0x50, 0x1c, 0x7f, - 0x61, 0xdd, 0xe1, 0xf3, 0xc9, 0xfe, 0x77, 0xd6, 0xdb, 0x1f, 0x32, 0xf6, 0xe3, 0x90, 0xb1, 0x5f, - 0x87, 0x8c, 0x7d, 0xff, 0x93, 0xf5, 0xfe, 0x06, 0x00, 0x00, 0xff, 0xff, 0x80, 0x62, 0xfc, 0x40, - 0xa4, 0x02, 0x00, 0x00, + // 396 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x09, 0x6e, 0x88, 0x02, 0xff, 0x5c, 0x92, 0x4f, 0xae, 0xd3, 0x30, + 0x10, 0xc6, 0x9b, 0xc4, 0x4d, 0x1b, 0xf3, 0x80, 0x87, 0x55, 0xa1, 0xd1, 0x13, 0x0a, 0xa8, 0x62, + 0xc1, 0x0a, 0xee, 0xf0, 0x68, 0x17, 0x95, 0x00, 0x95, 0x16, 0xc1, 0xda, 0x24, 0x43, 0x6b, 0xa9, + 0x89, 0x53, 0xdb, 0x09, 0xbd, 0x01, 0x57, 0xe0, 0x48, 0x5d, 0x72, 0x02, 0xc4, 0x9f, 0x8b, 0x60, + 0xbb, 0x4d, 0x31, 0x2c, 0x2c, 0x45, 0xbf, 0xef, 0x9b, 0xf1, 0xe7, 0x99, 0xd0, 0x6b, 0x34, 0x45, + 0xa9, 0x51, 0x75, 0xa8, 0x9e, 0x37, 0x4a, 0x1a, 0xc9, 0xae, 0xfe, 0x92, 0xe6, 0xe3, 0xcd, 0x64, + 0x23, 0x37, 0xd2, 0x0b, 0x2f, 0xdc, 0xd7, 0xc9, 0x33, 0xfd, 0x42, 0xe8, 0x68, 0x85, 0xfb, 0x16, + 0xb5, 0x61, 0x13, 0x1a, 0x2f, 0x66, 0x10, 0x3d, 0x89, 0x9e, 0x91, 0x5b, 0x72, 0xfc, 0xfe, 0x78, + 0xb0, 0x8a, 0xc5, 0x8c, 0x3d, 0xa2, 0xe9, 0x6b, 0x34, 0x5b, 0x59, 0x42, 0x6c, 0x95, 0xec, 0xac, + 0xa4, 0x95, 0x67, 0x0c, 0x28, 0x59, 0x72, 0xb3, 0x85, 0x24, 0xd0, 0x48, 0x63, 0x09, 0x7b, 0x48, + 0x93, 0xf7, 0x7c, 0x07, 0x24, 0x10, 0x92, 0x8e, 0xef, 0x1c, 0x9f, 0x09, 0x05, 0x43, 0xcb, 0xc7, + 0x3d, 0x2f, 0x85, 0x62, 0x53, 0x9a, 0x2d, 0x15, 0x76, 0xb6, 0xa6, 0x45, 0x48, 0x83, 0xaa, 0xac, + 0xe9, 0x71, 0xef, 0x59, 0xd4, 0x25, 0x1e, 0x60, 0x14, 0x04, 0xf5, 0x1e, 0x8f, 0x7b, 0xcf, 0xfc, + 0x20, 0xb4, 0x81, 0xf1, 0xe5, 0x96, 0xe8, 0xe4, 0xf1, 0x98, 0x3d, 0xa5, 0x74, 0x7e, 0x68, 0x84, + 0xe2, 0x46, 0xc8, 0x1a, 0x32, 0x6b, 0x4a, 0xce, 0x8d, 0x28, 0x5e, 0xb8, 0x7b, 0xdb, 0x07, 0x2e, + 0x0c, 0xd0, 0x20, 0x2a, 0xf9, 0x6c, 0x09, 0xbb, 0xa1, 0xc3, 0xb5, 0xa8, 0x0b, 0x84, 0x3b, 0x41, + 0x86, 0xa1, 0x76, 0xc8, 0xdd, 0xbf, 0xc2, 0xa2, 0x55, 0x5a, 0x74, 0x08, 0x57, 0x41, 0x69, 0xa6, + 0x7a, 0xec, 0x66, 0xba, 0x96, 0xca, 0x60, 0x09, 0x77, 0x03, 0x43, 0xaa, 0x3d, 0x73, 0xea, 0xdb, + 0x56, 0xaa, 0xb6, 0x82, 0x7b, 0xa1, 0xba, 0xf7, 0xcc, 0xa5, 0x7a, 0x27, 0x2a, 0x84, 0xfb, 0x41, + 0x6a, 0x62, 0x2c, 0xf1, 0x5d, 0x8d, 0x42, 0x5e, 0xc1, 0xf5, 0x3f, 0x5d, 0x3d, 0x63, 0xb9, 0x5b, + 0xf4, 0x27, 0x85, 0x7a, 0x0b, 0x0f, 0x82, 0xa9, 0x8c, 0xd4, 0x09, 0x4e, 0x5f, 0xd1, 0xb1, 0xdd, + 0x33, 0x2f, 0xb9, 0xe1, 0xae, 0xd3, 0x1b, 0x59, 0xe2, 0x7f, 0x7f, 0x43, 0x5a, 0x7b, 0xe6, 0x5e, + 0xf8, 0x72, 0xd7, 0x6a, 0x83, 0xca, 0x1a, 0xe2, 0x70, 0x0b, 0x45, 0x8f, 0x6f, 0x27, 0xc7, 0x9f, + 0xf9, 0xe0, 0xf8, 0x2b, 0x8f, 0xbe, 0xd9, 0xf3, 0xc3, 0x9e, 0xaf, 0xbf, 0xf3, 0xc1, 0x9f, 0x00, + 0x00, 0x00, 0xff, 0xff, 0x80, 0x62, 0xfc, 0x40, 0xa4, 0x02, 0x00, 0x00, } diff --git a/vendor/github.com/coreos/etcd/etcdserver/etcdserverpb/raft_internal.pb.go b/vendor/github.com/coreos/etcd/etcdserver/etcdserverpb/raft_internal.pb.go index f032279b..84c114ff 100644 --- a/vendor/github.com/coreos/etcd/etcdserver/etcdserverpb/raft_internal.pb.go +++ b/vendor/github.com/coreos/etcd/etcdserver/etcdserverpb/raft_internal.pb.go @@ -2035,58 +2035,57 @@ var ( ) var fileDescriptorRaftInternal = []byte{ - // 837 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x09, 0x6e, 0x88, 0x02, 0xff, 0x7c, 0x96, 0xdd, 0x52, 0xd3, 0x40, - 0x14, 0xc7, 0x69, 0xf9, 0xec, 0xb6, 0x54, 0x5c, 0x40, 0xd7, 0x32, 0x53, 0xa1, 0x8c, 0x8a, 0x5f, - 0xe8, 0x94, 0x07, 0xd0, 0x4a, 0x19, 0x60, 0x86, 0x61, 0x98, 0x0c, 0xce, 0x38, 0xe3, 0x45, 0x5c, - 0x9a, 0x43, 0x1b, 0x49, 0x93, 0xb8, 0xd9, 0x56, 0x7c, 0x13, 0x1f, 0xc3, 0xaf, 0x87, 0xe0, 0xc2, - 0x0f, 0xd4, 0x17, 0x50, 0xbc, 0xf1, 0xca, 0x1b, 0x7d, 0x00, 0x67, 0x3f, 0x92, 0x34, 0x6d, 0xca, - 0x5d, 0x72, 0xce, 0xff, 0xfc, 0xce, 0xd9, 0xec, 0x7f, 0xbb, 0x45, 0xb3, 0x8c, 0x1e, 0x72, 0xd3, - 0x76, 0x39, 0x30, 0x97, 0x3a, 0xab, 0x3e, 0xf3, 0xb8, 0x87, 0x0b, 0xc0, 0x1b, 0x56, 0x00, 0xac, - 0x0b, 0xcc, 0x3f, 0x28, 0xcd, 0x35, 0xbd, 0xa6, 0x27, 0x13, 0xf7, 0xc4, 0x93, 0xd2, 0x94, 0x66, - 0x62, 0x8d, 0x8e, 0xe4, 0x98, 0xdf, 0x50, 0x8f, 0x95, 0x67, 0x68, 0xda, 0x80, 0x17, 0x1d, 0x08, - 0xf8, 0x16, 0x50, 0x0b, 0x18, 0x2e, 0xa2, 0xec, 0x76, 0x9d, 0x64, 0x16, 0x33, 0x2b, 0x63, 0x46, - 0xd6, 0xae, 0xe3, 0x12, 0x9a, 0xea, 0x04, 0xa2, 0x65, 0x1b, 0x48, 0x76, 0x31, 0xb3, 0x92, 0x33, - 0xa2, 0x77, 0xbc, 0x8c, 0xa6, 0x69, 0x87, 0xb7, 0x4c, 0x06, 0x5d, 0x3b, 0xb0, 0x3d, 0x97, 0x8c, - 0xca, 0xb2, 0x82, 0x08, 0x1a, 0x3a, 0x56, 0xf9, 0x53, 0x44, 0xb3, 0xdb, 0x7a, 0x6a, 0x83, 0x1e, - 0x72, 0xdd, 0x6e, 0xa0, 0xd1, 0x35, 0x94, 0xed, 0x56, 0x65, 0x8b, 0x7c, 0x75, 0x7e, 0xb5, 0x77, - 0x5d, 0xab, 0xba, 0xc4, 0xc8, 0x76, 0xab, 0xf8, 0x3e, 0x1a, 0x67, 0xd4, 0x6d, 0x82, 0xec, 0x95, - 0xaf, 0x96, 0xfa, 0x94, 0x22, 0x15, 0xca, 0x95, 0x10, 0xdf, 0x42, 0xa3, 0x7e, 0x87, 0x93, 0x31, - 0xa9, 0x27, 0x49, 0xfd, 0x5e, 0x27, 0x9c, 0xc7, 0x10, 0x22, 0xbc, 0x8e, 0x0a, 0x16, 0x38, 0xc0, - 0xc1, 0x54, 0x4d, 0xc6, 0x65, 0xd1, 0x62, 0xb2, 0xa8, 0x2e, 0x15, 0x89, 0x56, 0x79, 0x2b, 0x8e, - 0x89, 0x86, 0xfc, 0xd8, 0x25, 0x13, 0x69, 0x0d, 0xf7, 0x8f, 0xdd, 0xa8, 0x21, 0x3f, 0x76, 0xf1, - 0x03, 0x84, 0x1a, 0x5e, 0xdb, 0xa7, 0x0d, 0x2e, 0xbe, 0xdf, 0xa4, 0x2c, 0xb9, 0x9a, 0x2c, 0x59, - 0x8f, 0xf2, 0x61, 0x65, 0x4f, 0x09, 0x7e, 0x88, 0xf2, 0x0e, 0xd0, 0x00, 0xcc, 0x26, 0xa3, 0x2e, - 0x27, 0x53, 0x69, 0x84, 0x1d, 0x21, 0xd8, 0x14, 0xf9, 0x88, 0xe0, 0x44, 0x21, 0xb1, 0x66, 0x45, - 0x60, 0xd0, 0xf5, 0x8e, 0x80, 0xe4, 0xd2, 0xd6, 0x2c, 0x11, 0x86, 0x14, 0x44, 0x6b, 0x76, 0xe2, - 0x98, 0xd8, 0x16, 0xea, 0x50, 0xd6, 0x26, 0x28, 0x6d, 0x5b, 0x6a, 0x22, 0x15, 0x6d, 0x8b, 0x14, - 0xe2, 0x35, 0x34, 0xd1, 0x92, 0x96, 0x23, 0x96, 0x2c, 0x59, 0x48, 0xdd, 0x73, 0xe5, 0x4a, 0x43, - 0x4b, 0x71, 0x0d, 0xe5, 0xa5, 0xe3, 0xc0, 0xa5, 0x07, 0x0e, 0x90, 0xdf, 0xa9, 0x1f, 0xac, 0xd6, - 0xe1, 0xad, 0x0d, 0x29, 0x88, 0x96, 0x4b, 0xa3, 0x10, 0xae, 0x23, 0xe9, 0x4f, 0xd3, 0xb2, 0x03, - 0xc9, 0xf8, 0x3b, 0x99, 0xb6, 0x5e, 0xc1, 0xa8, 0x2b, 0x45, 0xb4, 0x5e, 0x1a, 0xc7, 0xf0, 0xae, - 0xa2, 0x80, 0xcb, 0xed, 0x06, 0xe5, 0x40, 0xfe, 0x29, 0xca, 0xcd, 0x24, 0x25, 0xf4, 0x7d, 0xad, - 0x47, 0x1a, 0xe2, 0x12, 0xf5, 0x78, 0x43, 0x1f, 0x25, 0x71, 0xb6, 0x4c, 0x6a, 0x59, 0xe4, 0xe3, - 0xd4, 0xb0, 0xb1, 0x1e, 0x07, 0xc0, 0x6a, 0x96, 0x95, 0x18, 0x4b, 0xc7, 0xf0, 0x2e, 0x9a, 0x89, - 0x31, 0xca, 0x93, 0xe4, 0x93, 0x22, 0x2d, 0xa7, 0x93, 0xb4, 0x99, 0x35, 0xac, 0x48, 0x13, 0xe1, - 0xe4, 0x58, 0x4d, 0xe0, 0xe4, 0xf3, 0xb9, 0x63, 0x6d, 0x02, 0x1f, 0x18, 0x6b, 0x13, 0x38, 0x6e, - 0xa2, 0x2b, 0x31, 0xa6, 0xd1, 0x12, 0xa7, 0xc4, 0xf4, 0x69, 0x10, 0xbc, 0xf4, 0x98, 0x45, 0xbe, - 0x28, 0xe4, 0xed, 0x74, 0xe4, 0xba, 0x54, 0xef, 0x69, 0x71, 0x48, 0xbf, 0x44, 0x53, 0xd3, 0xf8, - 0x09, 0x9a, 0xeb, 0x99, 0x57, 0xd8, 0xdb, 0x64, 0x9e, 0x03, 0xe4, 0x54, 0xf5, 0xb8, 0x3e, 0x64, - 0x6c, 0x79, 0x34, 0xbc, 0x78, 0xab, 0x2f, 0xd2, 0xfe, 0x0c, 0x7e, 0x8a, 0xe6, 0x63, 0xb2, 0x3a, - 0x29, 0x0a, 0xfd, 0x55, 0xa1, 0x6f, 0xa4, 0xa3, 0xf5, 0x91, 0xe9, 0x61, 0x63, 0x3a, 0x90, 0xc2, - 0x5b, 0xa8, 0x18, 0xc3, 0x1d, 0x3b, 0xe0, 0xe4, 0x9b, 0xa2, 0x2e, 0xa5, 0x53, 0x77, 0xec, 0x80, - 0x27, 0x7c, 0x14, 0x06, 0x23, 0x92, 0x18, 0x4d, 0x91, 0xbe, 0x0f, 0x25, 0x89, 0xd6, 0x03, 0xa4, - 0x30, 0x18, 0x6d, 0xbd, 0x24, 0x09, 0x47, 0xbe, 0xc9, 0x0d, 0xdb, 0x7a, 0x51, 0xd3, 0xef, 0x48, - 0x1d, 0x8b, 0x1c, 0x29, 0x31, 0xda, 0x91, 0x6f, 0x73, 0xc3, 0x1c, 0x29, 0xaa, 0x52, 0x1c, 0x19, - 0x87, 0x93, 0x63, 0x09, 0x47, 0xbe, 0x3b, 0x77, 0xac, 0x7e, 0x47, 0xea, 0x18, 0x7e, 0x8e, 0x4a, - 0x3d, 0x18, 0x69, 0x14, 0x1f, 0x58, 0xdb, 0x0e, 0xe4, 0x3d, 0xf6, 0x5e, 0x31, 0xef, 0x0c, 0x61, - 0x0a, 0xf9, 0x5e, 0xa4, 0x0e, 0xf9, 0x97, 0x69, 0x7a, 0x1e, 0xb7, 0xd1, 0x42, 0xdc, 0x4b, 0x5b, - 0xa7, 0xa7, 0xd9, 0x07, 0xd5, 0xec, 0x6e, 0x7a, 0x33, 0xe5, 0x92, 0xc1, 0x6e, 0x84, 0x0e, 0x11, - 0x54, 0x2e, 0xa0, 0xe9, 0x8d, 0xb6, 0xcf, 0x5f, 0x19, 0x10, 0xf8, 0x9e, 0x1b, 0x40, 0xc5, 0x47, - 0x0b, 0xe7, 0xfc, 0x10, 0x61, 0x8c, 0xc6, 0xe4, 0xed, 0x9e, 0x91, 0xb7, 0xbb, 0x7c, 0x16, 0xb7, - 0x7e, 0x74, 0x3e, 0xf5, 0xad, 0x1f, 0xbe, 0xe3, 0x25, 0x54, 0x08, 0xec, 0xb6, 0xef, 0x80, 0xc9, - 0xbd, 0x23, 0x50, 0x97, 0x7e, 0xce, 0xc8, 0xab, 0xd8, 0xbe, 0x08, 0x3d, 0x9a, 0x3b, 0xf9, 0x59, - 0x1e, 0x39, 0x39, 0x2b, 0x67, 0x4e, 0xcf, 0xca, 0x99, 0x1f, 0x67, 0xe5, 0xcc, 0xeb, 0x5f, 0xe5, - 0x91, 0x83, 0x09, 0xf9, 0x97, 0x63, 0xed, 0x7f, 0x00, 0x00, 0x00, 0xff, 0xff, 0x02, 0x23, 0xd2, - 0x00, 0xca, 0x08, 0x00, 0x00, + // 831 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x09, 0x6e, 0x88, 0x02, 0xff, 0x7c, 0x56, 0xdb, 0x4e, 0xdb, 0x4a, + 0x14, 0x25, 0xe1, 0x9a, 0x49, 0xc8, 0xe1, 0x0c, 0x70, 0xce, 0x9c, 0x20, 0x71, 0x20, 0xa8, 0xf7, + 0x96, 0x56, 0xf0, 0x01, 0x6d, 0x4a, 0x10, 0x20, 0xa1, 0x0a, 0x59, 0x54, 0xaa, 0xd4, 0x07, 0x77, + 0x88, 0xa7, 0xc1, 0xad, 0x63, 0xbb, 0xf6, 0x84, 0xd2, 0x3f, 0xe9, 0x67, 0xf4, 0xf6, 0x11, 0x3c, + 0xf4, 0x42, 0xdb, 0x1f, 0xe8, 0xe5, 0xa5, 0x4f, 0x7d, 0x69, 0x3f, 0xa0, 0x73, 0xf3, 0xd8, 0x4e, + 0xc6, 0x3c, 0x44, 0xb2, 0xd7, 0xac, 0xbd, 0xd6, 0x1e, 0xef, 0x35, 0x0c, 0x60, 0x36, 0xc2, 0x0f, + 0xa9, 0xed, 0xfa, 0x94, 0x44, 0x3e, 0xf6, 0x56, 0xc3, 0x28, 0xa0, 0x01, 0xac, 0x11, 0xda, 0x71, + 0x62, 0x12, 0x1d, 0x91, 0x28, 0x3c, 0x68, 0xcc, 0x75, 0x83, 0x6e, 0x20, 0x16, 0xae, 0xf3, 0x27, + 0xc9, 0x69, 0xcc, 0xa4, 0x1c, 0x85, 0x54, 0xa2, 0xb0, 0x23, 0x1f, 0x9b, 0x0f, 0xc0, 0xb4, 0x45, + 0x9e, 0xf4, 0x49, 0x4c, 0xb7, 0x09, 0x76, 0x48, 0x04, 0xeb, 0xa0, 0xbc, 0xd3, 0x46, 0xa5, 0xa5, + 0xd2, 0xc5, 0x31, 0xab, 0xec, 0xb6, 0x61, 0x03, 0x4c, 0xf5, 0x63, 0x6e, 0xd9, 0x23, 0xa8, 0xcc, + 0xd0, 0x8a, 0xa5, 0xdf, 0xe1, 0x0a, 0x98, 0xc6, 0x7d, 0x7a, 0x68, 0x47, 0xe4, 0xc8, 0x8d, 0xdd, + 0xc0, 0x47, 0xa3, 0xa2, 0xac, 0xc6, 0x41, 0x4b, 0x61, 0xcd, 0x9f, 0x75, 0x30, 0xbb, 0xa3, 0xba, + 0xb6, 0xd8, 0x16, 0x94, 0xdd, 0x90, 0xd1, 0x39, 0x50, 0x3e, 0x5a, 0x13, 0x16, 0xd5, 0xb5, 0xf9, + 0xd5, 0xec, 0xbe, 0x56, 0x55, 0x89, 0xc5, 0x08, 0xf0, 0x06, 0x18, 0x8f, 0xb0, 0xdf, 0x25, 0xc2, + 0xab, 0xba, 0xd6, 0x18, 0x60, 0xf2, 0xa5, 0x84, 0x2e, 0x89, 0xf0, 0x32, 0x18, 0x0d, 0xfb, 0x14, + 0x8d, 0x09, 0x3e, 0xca, 0xf3, 0xf7, 0xfa, 0x49, 0x3f, 0x16, 0x27, 0xc1, 0x0d, 0x50, 0x73, 0x88, + 0x47, 0x28, 0xb1, 0xa5, 0xc9, 0xb8, 0x28, 0x5a, 0xca, 0x17, 0xb5, 0x05, 0x23, 0x67, 0x55, 0x75, + 0x52, 0x8c, 0x1b, 0xd2, 0x63, 0x1f, 0x4d, 0x98, 0x0c, 0xf7, 0x8f, 0x7d, 0x6d, 0xc8, 0x48, 0xf0, + 0x26, 0x00, 0x9d, 0xa0, 0x17, 0xe2, 0x0e, 0xe5, 0xdf, 0x6f, 0x52, 0x94, 0xfc, 0x9f, 0x2f, 0xd9, + 0xd0, 0xeb, 0x49, 0x65, 0xa6, 0x04, 0xde, 0x02, 0x55, 0x8f, 0xe0, 0x98, 0xd8, 0x5d, 0xd6, 0x31, + 0x45, 0x53, 0x26, 0x85, 0x5d, 0x4e, 0xd8, 0xe2, 0xeb, 0x5a, 0xc1, 0xd3, 0x10, 0xdf, 0xb3, 0x54, + 0x60, 0x63, 0x0c, 0x1e, 0x13, 0x54, 0x31, 0xed, 0x59, 0x48, 0x58, 0x82, 0xa0, 0xf7, 0xec, 0xa5, + 0x18, 0x1f, 0x0b, 0xf6, 0x70, 0xd4, 0x43, 0xc0, 0x34, 0x96, 0x16, 0x5f, 0xd2, 0x63, 0x11, 0x44, + 0xb8, 0x0e, 0x26, 0x0e, 0x45, 0xe4, 0x90, 0x23, 0x4a, 0x16, 0x8c, 0x33, 0x97, 0xa9, 0xb4, 0x14, + 0x15, 0xb6, 0x40, 0x55, 0x24, 0x8e, 0xf8, 0xf8, 0xc0, 0x23, 0xe8, 0x87, 0xf1, 0x83, 0xb5, 0x18, + 0x63, 0x53, 0x10, 0xf4, 0x76, 0xb1, 0x86, 0x60, 0x1b, 0x88, 0x7c, 0xda, 0x8e, 0x1b, 0x0b, 0x8d, + 0x5f, 0x93, 0xa6, 0xfd, 0x72, 0x8d, 0xb6, 0x64, 0xe8, 0xfd, 0xe2, 0x14, 0x83, 0x77, 0xa4, 0x0a, + 0xf1, 0xa9, 0xdb, 0xc1, 0x94, 0xa0, 0xdf, 0x52, 0xe5, 0x52, 0x5e, 0x25, 0xc9, 0x7d, 0x2b, 0x43, + 0x4d, 0xe4, 0x72, 0xf5, 0x70, 0x53, 0x1d, 0x25, 0x7e, 0xb6, 0x6c, 0xec, 0x38, 0xe8, 0xed, 0x54, + 0x51, 0x5b, 0x77, 0xd9, 0x5b, 0xcb, 0x71, 0x72, 0x6d, 0x29, 0x8c, 0xb5, 0x35, 0x93, 0xca, 0xc8, + 0x4c, 0xa2, 0x77, 0x52, 0x69, 0xc5, 0xac, 0xa4, 0xc2, 0xac, 0xc4, 0xea, 0x38, 0x07, 0xe7, 0xdb, + 0xea, 0x12, 0x8a, 0xde, 0x9f, 0xd9, 0xd6, 0x16, 0xa1, 0x43, 0x6d, 0x31, 0x0c, 0x76, 0xc1, 0x7f, + 0xa9, 0x4c, 0xe7, 0x90, 0x9f, 0x12, 0x3b, 0xc4, 0x71, 0xfc, 0x34, 0x88, 0x1c, 0xf4, 0x41, 0x4a, + 0x5e, 0x31, 0x4b, 0x6e, 0x08, 0xf6, 0x9e, 0x22, 0x27, 0xea, 0xff, 0x60, 0xe3, 0x32, 0xbc, 0x07, + 0xe6, 0x32, 0xfd, 0xf2, 0x78, 0xdb, 0x51, 0xc0, 0x86, 0x7c, 0x2a, 0x3d, 0xce, 0x17, 0xb4, 0x2d, + 0x8e, 0x46, 0x90, 0x8e, 0xfa, 0x6f, 0x3c, 0xb8, 0x02, 0xef, 0x83, 0xf9, 0x54, 0x59, 0x9e, 0x14, + 0x29, 0xfd, 0x51, 0x4a, 0x5f, 0x30, 0x4b, 0xab, 0x23, 0x93, 0xd1, 0x86, 0x78, 0x68, 0x09, 0x6e, + 0x83, 0x7a, 0x2a, 0xee, 0xb9, 0x31, 0x45, 0x9f, 0xa4, 0xea, 0xb2, 0x59, 0x75, 0x97, 0x51, 0x72, + 0x39, 0x4a, 0x40, 0xad, 0xc4, 0x5b, 0x93, 0x4a, 0x9f, 0x0b, 0x95, 0xb8, 0xf5, 0x90, 0x52, 0x02, + 0xea, 0xd1, 0x0b, 0x25, 0x9e, 0xc8, 0x17, 0x95, 0xa2, 0xd1, 0xf3, 0x9a, 0xc1, 0x44, 0x2a, 0x4c, + 0x27, 0x52, 0xc8, 0xa8, 0x44, 0xbe, 0xac, 0x14, 0x25, 0x92, 0x57, 0x19, 0x12, 0x99, 0xc2, 0xf9, + 0xb6, 0x78, 0x22, 0x5f, 0x9d, 0xd9, 0xd6, 0x60, 0x22, 0x15, 0x06, 0x1f, 0x81, 0x46, 0x46, 0x46, + 0x04, 0x25, 0x24, 0x51, 0xcf, 0x8d, 0xc5, 0x3d, 0xf6, 0x5a, 0x6a, 0x5e, 0x2d, 0xd0, 0xe4, 0xf4, + 0x3d, 0xcd, 0x4e, 0xf4, 0xff, 0xc5, 0xe6, 0x75, 0xd8, 0x03, 0x0b, 0xa9, 0x97, 0x8a, 0x4e, 0xc6, + 0xec, 0x8d, 0x34, 0xbb, 0x66, 0x36, 0x93, 0x29, 0x19, 0x76, 0x43, 0xb8, 0x80, 0xd0, 0xfc, 0x0b, + 0x4c, 0x6f, 0xf6, 0x42, 0xfa, 0xcc, 0x22, 0x71, 0x18, 0xf8, 0x31, 0x69, 0x86, 0x60, 0xe1, 0x8c, + 0x3f, 0x44, 0x10, 0x82, 0x31, 0x71, 0xbb, 0x97, 0xc4, 0xed, 0x2e, 0x9e, 0xf9, 0xad, 0xaf, 0xcf, + 0xa7, 0xba, 0xf5, 0x93, 0x77, 0xb8, 0x0c, 0x6a, 0xb1, 0xdb, 0x0b, 0xd9, 0x5e, 0x28, 0x33, 0x96, + 0x97, 0x7e, 0xc5, 0xaa, 0x4a, 0x6c, 0x9f, 0x43, 0xb7, 0xe7, 0x4e, 0xbe, 0x2e, 0x8e, 0x9c, 0x7c, + 0x5b, 0x2c, 0x9d, 0xb2, 0xdf, 0x17, 0xf6, 0x7b, 0xfe, 0x7d, 0x71, 0xe4, 0x60, 0x42, 0xfc, 0xcb, + 0xb1, 0xfe, 0x27, 0x00, 0x00, 0xff, 0xff, 0x02, 0x23, 0xd2, 0x00, 0xca, 0x08, 0x00, 0x00, } diff --git a/vendor/github.com/coreos/etcd/etcdserver/etcdserverpb/rpc.pb.go b/vendor/github.com/coreos/etcd/etcdserver/etcdserverpb/rpc.pb.go index afb1d606..6a48b643 100644 --- a/vendor/github.com/coreos/etcd/etcdserver/etcdserverpb/rpc.pb.go +++ b/vendor/github.com/coreos/etcd/etcdserver/etcdserverpb/rpc.pb.go @@ -202,7 +202,7 @@ func (x AlarmRequest_AlarmAction) String() string { return proto.EnumName(AlarmRequest_AlarmAction_name, int32(x)) } func (AlarmRequest_AlarmAction) EnumDescriptor() ([]byte, []int) { - return fileDescriptorRpc, []int{39, 0} + return fileDescriptorRpc, []int{41, 0} } type ResponseHeader struct { @@ -251,6 +251,18 @@ type RangeRequest struct { KeysOnly bool `protobuf:"varint,8,opt,name=keys_only,json=keysOnly,proto3" json:"keys_only,omitempty"` // count_only when set returns only the count of the keys in the range. CountOnly bool `protobuf:"varint,9,opt,name=count_only,json=countOnly,proto3" json:"count_only,omitempty"` + // min_mod_revision is the lower bound for returned key mod revisions; all keys with + // lesser mod revisions will be filtered away. + MinModRevision int64 `protobuf:"varint,10,opt,name=min_mod_revision,json=minModRevision,proto3" json:"min_mod_revision,omitempty"` + // max_mod_revision is the upper bound for returned key mod revisions; all keys with + // greater mod revisions will be filtered away. + MaxModRevision int64 `protobuf:"varint,11,opt,name=max_mod_revision,json=maxModRevision,proto3" json:"max_mod_revision,omitempty"` + // min_create_revision is the lower bound for returned key create revisions; all keys with + // lesser create trevisions will be filtered away. + MinCreateRevision int64 `protobuf:"varint,12,opt,name=min_create_revision,json=minCreateRevision,proto3" json:"min_create_revision,omitempty"` + // max_create_revision is the upper bound for returned key create revisions; all keys with + // greater create revisions will be filtered away. + MaxCreateRevision int64 `protobuf:"varint,13,opt,name=max_create_revision,json=maxCreateRevision,proto3" json:"max_create_revision,omitempty"` } func (m *RangeRequest) Reset() { *m = RangeRequest{} } @@ -1160,6 +1172,8 @@ type WatchCreateRequest struct { // range_end is the end of the range [key, range_end) to watch. If range_end is not given, // only the key argument is watched. If range_end is equal to '\0', all keys greater than // or equal to the key argument are watched. + // If the range_end is one bit larger than the given key, + // then all keys with the prefix (the given key) will be watched. RangeEnd []byte `protobuf:"bytes,2,opt,name=range_end,json=rangeEnd,proto3" json:"range_end,omitempty"` // start_revision is an optional revision to watch from (inclusive). No start_revision is "now". StartRevision int64 `protobuf:"varint,3,opt,name=start_revision,json=startRevision,proto3" json:"start_revision,omitempty"` @@ -1322,6 +1336,42 @@ func (m *LeaseKeepAliveResponse) GetHeader() *ResponseHeader { return nil } +type LeaseTimeToLiveRequest struct { + // ID is the lease ID for the lease. + ID int64 `protobuf:"varint,1,opt,name=ID,json=iD,proto3" json:"ID,omitempty"` + // keys is true to query all the keys attached to this lease. + Keys bool `protobuf:"varint,2,opt,name=keys,proto3" json:"keys,omitempty"` +} + +func (m *LeaseTimeToLiveRequest) Reset() { *m = LeaseTimeToLiveRequest{} } +func (m *LeaseTimeToLiveRequest) String() string { return proto.CompactTextString(m) } +func (*LeaseTimeToLiveRequest) ProtoMessage() {} +func (*LeaseTimeToLiveRequest) Descriptor() ([]byte, []int) { return fileDescriptorRpc, []int{28} } + +type LeaseTimeToLiveResponse struct { + Header *ResponseHeader `protobuf:"bytes,1,opt,name=header" json:"header,omitempty"` + // ID is the lease ID from the keep alive request. + ID int64 `protobuf:"varint,2,opt,name=ID,json=iD,proto3" json:"ID,omitempty"` + // TTL is the remaining TTL in seconds for the lease; the lease will expire in under TTL+1 seconds. + TTL int64 `protobuf:"varint,3,opt,name=TTL,json=tTL,proto3" json:"TTL,omitempty"` + // GrantedTTL is the initial granted time in seconds upon lease creation/renewal. + GrantedTTL int64 `protobuf:"varint,4,opt,name=grantedTTL,proto3" json:"grantedTTL,omitempty"` + // Keys is the list of keys attached to this lease. + Keys [][]byte `protobuf:"bytes,5,rep,name=keys" json:"keys,omitempty"` +} + +func (m *LeaseTimeToLiveResponse) Reset() { *m = LeaseTimeToLiveResponse{} } +func (m *LeaseTimeToLiveResponse) String() string { return proto.CompactTextString(m) } +func (*LeaseTimeToLiveResponse) ProtoMessage() {} +func (*LeaseTimeToLiveResponse) Descriptor() ([]byte, []int) { return fileDescriptorRpc, []int{29} } + +func (m *LeaseTimeToLiveResponse) GetHeader() *ResponseHeader { + if m != nil { + return m.Header + } + return nil +} + type Member struct { // ID is the member ID for this member. ID uint64 `protobuf:"varint,1,opt,name=ID,json=iD,proto3" json:"ID,omitempty"` @@ -1336,7 +1386,7 @@ type Member struct { func (m *Member) Reset() { *m = Member{} } func (m *Member) String() string { return proto.CompactTextString(m) } func (*Member) ProtoMessage() {} -func (*Member) Descriptor() ([]byte, []int) { return fileDescriptorRpc, []int{28} } +func (*Member) Descriptor() ([]byte, []int) { return fileDescriptorRpc, []int{30} } type MemberAddRequest struct { // peerURLs is the list of URLs the added member will use to communicate with the cluster. @@ -1346,7 +1396,7 @@ type MemberAddRequest struct { func (m *MemberAddRequest) Reset() { *m = MemberAddRequest{} } func (m *MemberAddRequest) String() string { return proto.CompactTextString(m) } func (*MemberAddRequest) ProtoMessage() {} -func (*MemberAddRequest) Descriptor() ([]byte, []int) { return fileDescriptorRpc, []int{29} } +func (*MemberAddRequest) Descriptor() ([]byte, []int) { return fileDescriptorRpc, []int{31} } type MemberAddResponse struct { Header *ResponseHeader `protobuf:"bytes,1,opt,name=header" json:"header,omitempty"` @@ -1357,7 +1407,7 @@ type MemberAddResponse struct { func (m *MemberAddResponse) Reset() { *m = MemberAddResponse{} } func (m *MemberAddResponse) String() string { return proto.CompactTextString(m) } func (*MemberAddResponse) ProtoMessage() {} -func (*MemberAddResponse) Descriptor() ([]byte, []int) { return fileDescriptorRpc, []int{30} } +func (*MemberAddResponse) Descriptor() ([]byte, []int) { return fileDescriptorRpc, []int{32} } func (m *MemberAddResponse) GetHeader() *ResponseHeader { if m != nil { @@ -1381,7 +1431,7 @@ type MemberRemoveRequest struct { func (m *MemberRemoveRequest) Reset() { *m = MemberRemoveRequest{} } func (m *MemberRemoveRequest) String() string { return proto.CompactTextString(m) } func (*MemberRemoveRequest) ProtoMessage() {} -func (*MemberRemoveRequest) Descriptor() ([]byte, []int) { return fileDescriptorRpc, []int{31} } +func (*MemberRemoveRequest) Descriptor() ([]byte, []int) { return fileDescriptorRpc, []int{33} } type MemberRemoveResponse struct { Header *ResponseHeader `protobuf:"bytes,1,opt,name=header" json:"header,omitempty"` @@ -1390,7 +1440,7 @@ type MemberRemoveResponse struct { func (m *MemberRemoveResponse) Reset() { *m = MemberRemoveResponse{} } func (m *MemberRemoveResponse) String() string { return proto.CompactTextString(m) } func (*MemberRemoveResponse) ProtoMessage() {} -func (*MemberRemoveResponse) Descriptor() ([]byte, []int) { return fileDescriptorRpc, []int{32} } +func (*MemberRemoveResponse) Descriptor() ([]byte, []int) { return fileDescriptorRpc, []int{34} } func (m *MemberRemoveResponse) GetHeader() *ResponseHeader { if m != nil { @@ -1409,7 +1459,7 @@ type MemberUpdateRequest struct { func (m *MemberUpdateRequest) Reset() { *m = MemberUpdateRequest{} } func (m *MemberUpdateRequest) String() string { return proto.CompactTextString(m) } func (*MemberUpdateRequest) ProtoMessage() {} -func (*MemberUpdateRequest) Descriptor() ([]byte, []int) { return fileDescriptorRpc, []int{33} } +func (*MemberUpdateRequest) Descriptor() ([]byte, []int) { return fileDescriptorRpc, []int{35} } type MemberUpdateResponse struct { Header *ResponseHeader `protobuf:"bytes,1,opt,name=header" json:"header,omitempty"` @@ -1418,7 +1468,7 @@ type MemberUpdateResponse struct { func (m *MemberUpdateResponse) Reset() { *m = MemberUpdateResponse{} } func (m *MemberUpdateResponse) String() string { return proto.CompactTextString(m) } func (*MemberUpdateResponse) ProtoMessage() {} -func (*MemberUpdateResponse) Descriptor() ([]byte, []int) { return fileDescriptorRpc, []int{34} } +func (*MemberUpdateResponse) Descriptor() ([]byte, []int) { return fileDescriptorRpc, []int{36} } func (m *MemberUpdateResponse) GetHeader() *ResponseHeader { if m != nil { @@ -1433,7 +1483,7 @@ type MemberListRequest struct { func (m *MemberListRequest) Reset() { *m = MemberListRequest{} } func (m *MemberListRequest) String() string { return proto.CompactTextString(m) } func (*MemberListRequest) ProtoMessage() {} -func (*MemberListRequest) Descriptor() ([]byte, []int) { return fileDescriptorRpc, []int{35} } +func (*MemberListRequest) Descriptor() ([]byte, []int) { return fileDescriptorRpc, []int{37} } type MemberListResponse struct { Header *ResponseHeader `protobuf:"bytes,1,opt,name=header" json:"header,omitempty"` @@ -1444,7 +1494,7 @@ type MemberListResponse struct { func (m *MemberListResponse) Reset() { *m = MemberListResponse{} } func (m *MemberListResponse) String() string { return proto.CompactTextString(m) } func (*MemberListResponse) ProtoMessage() {} -func (*MemberListResponse) Descriptor() ([]byte, []int) { return fileDescriptorRpc, []int{36} } +func (*MemberListResponse) Descriptor() ([]byte, []int) { return fileDescriptorRpc, []int{38} } func (m *MemberListResponse) GetHeader() *ResponseHeader { if m != nil { @@ -1466,7 +1516,7 @@ type DefragmentRequest struct { func (m *DefragmentRequest) Reset() { *m = DefragmentRequest{} } func (m *DefragmentRequest) String() string { return proto.CompactTextString(m) } func (*DefragmentRequest) ProtoMessage() {} -func (*DefragmentRequest) Descriptor() ([]byte, []int) { return fileDescriptorRpc, []int{37} } +func (*DefragmentRequest) Descriptor() ([]byte, []int) { return fileDescriptorRpc, []int{39} } type DefragmentResponse struct { Header *ResponseHeader `protobuf:"bytes,1,opt,name=header" json:"header,omitempty"` @@ -1475,7 +1525,7 @@ type DefragmentResponse struct { func (m *DefragmentResponse) Reset() { *m = DefragmentResponse{} } func (m *DefragmentResponse) String() string { return proto.CompactTextString(m) } func (*DefragmentResponse) ProtoMessage() {} -func (*DefragmentResponse) Descriptor() ([]byte, []int) { return fileDescriptorRpc, []int{38} } +func (*DefragmentResponse) Descriptor() ([]byte, []int) { return fileDescriptorRpc, []int{40} } func (m *DefragmentResponse) GetHeader() *ResponseHeader { if m != nil { @@ -1499,7 +1549,7 @@ type AlarmRequest struct { func (m *AlarmRequest) Reset() { *m = AlarmRequest{} } func (m *AlarmRequest) String() string { return proto.CompactTextString(m) } func (*AlarmRequest) ProtoMessage() {} -func (*AlarmRequest) Descriptor() ([]byte, []int) { return fileDescriptorRpc, []int{39} } +func (*AlarmRequest) Descriptor() ([]byte, []int) { return fileDescriptorRpc, []int{41} } type AlarmMember struct { // memberID is the ID of the member associated with the raised alarm. @@ -1511,7 +1561,7 @@ type AlarmMember struct { func (m *AlarmMember) Reset() { *m = AlarmMember{} } func (m *AlarmMember) String() string { return proto.CompactTextString(m) } func (*AlarmMember) ProtoMessage() {} -func (*AlarmMember) Descriptor() ([]byte, []int) { return fileDescriptorRpc, []int{40} } +func (*AlarmMember) Descriptor() ([]byte, []int) { return fileDescriptorRpc, []int{42} } type AlarmResponse struct { Header *ResponseHeader `protobuf:"bytes,1,opt,name=header" json:"header,omitempty"` @@ -1522,7 +1572,7 @@ type AlarmResponse struct { func (m *AlarmResponse) Reset() { *m = AlarmResponse{} } func (m *AlarmResponse) String() string { return proto.CompactTextString(m) } func (*AlarmResponse) ProtoMessage() {} -func (*AlarmResponse) Descriptor() ([]byte, []int) { return fileDescriptorRpc, []int{41} } +func (*AlarmResponse) Descriptor() ([]byte, []int) { return fileDescriptorRpc, []int{43} } func (m *AlarmResponse) GetHeader() *ResponseHeader { if m != nil { @@ -1544,7 +1594,7 @@ type StatusRequest struct { func (m *StatusRequest) Reset() { *m = StatusRequest{} } func (m *StatusRequest) String() string { return proto.CompactTextString(m) } func (*StatusRequest) ProtoMessage() {} -func (*StatusRequest) Descriptor() ([]byte, []int) { return fileDescriptorRpc, []int{42} } +func (*StatusRequest) Descriptor() ([]byte, []int) { return fileDescriptorRpc, []int{44} } type StatusResponse struct { Header *ResponseHeader `protobuf:"bytes,1,opt,name=header" json:"header,omitempty"` @@ -1563,7 +1613,7 @@ type StatusResponse struct { func (m *StatusResponse) Reset() { *m = StatusResponse{} } func (m *StatusResponse) String() string { return proto.CompactTextString(m) } func (*StatusResponse) ProtoMessage() {} -func (*StatusResponse) Descriptor() ([]byte, []int) { return fileDescriptorRpc, []int{43} } +func (*StatusResponse) Descriptor() ([]byte, []int) { return fileDescriptorRpc, []int{45} } func (m *StatusResponse) GetHeader() *ResponseHeader { if m != nil { @@ -1578,7 +1628,7 @@ type AuthEnableRequest struct { func (m *AuthEnableRequest) Reset() { *m = AuthEnableRequest{} } func (m *AuthEnableRequest) String() string { return proto.CompactTextString(m) } func (*AuthEnableRequest) ProtoMessage() {} -func (*AuthEnableRequest) Descriptor() ([]byte, []int) { return fileDescriptorRpc, []int{44} } +func (*AuthEnableRequest) Descriptor() ([]byte, []int) { return fileDescriptorRpc, []int{46} } type AuthDisableRequest struct { } @@ -1586,7 +1636,7 @@ type AuthDisableRequest struct { func (m *AuthDisableRequest) Reset() { *m = AuthDisableRequest{} } func (m *AuthDisableRequest) String() string { return proto.CompactTextString(m) } func (*AuthDisableRequest) ProtoMessage() {} -func (*AuthDisableRequest) Descriptor() ([]byte, []int) { return fileDescriptorRpc, []int{45} } +func (*AuthDisableRequest) Descriptor() ([]byte, []int) { return fileDescriptorRpc, []int{47} } type AuthenticateRequest struct { Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` @@ -1596,7 +1646,7 @@ type AuthenticateRequest struct { func (m *AuthenticateRequest) Reset() { *m = AuthenticateRequest{} } func (m *AuthenticateRequest) String() string { return proto.CompactTextString(m) } func (*AuthenticateRequest) ProtoMessage() {} -func (*AuthenticateRequest) Descriptor() ([]byte, []int) { return fileDescriptorRpc, []int{46} } +func (*AuthenticateRequest) Descriptor() ([]byte, []int) { return fileDescriptorRpc, []int{48} } type AuthUserAddRequest struct { Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` @@ -1606,7 +1656,7 @@ type AuthUserAddRequest struct { func (m *AuthUserAddRequest) Reset() { *m = AuthUserAddRequest{} } func (m *AuthUserAddRequest) String() string { return proto.CompactTextString(m) } func (*AuthUserAddRequest) ProtoMessage() {} -func (*AuthUserAddRequest) Descriptor() ([]byte, []int) { return fileDescriptorRpc, []int{47} } +func (*AuthUserAddRequest) Descriptor() ([]byte, []int) { return fileDescriptorRpc, []int{49} } type AuthUserGetRequest struct { Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` @@ -1615,7 +1665,7 @@ type AuthUserGetRequest struct { func (m *AuthUserGetRequest) Reset() { *m = AuthUserGetRequest{} } func (m *AuthUserGetRequest) String() string { return proto.CompactTextString(m) } func (*AuthUserGetRequest) ProtoMessage() {} -func (*AuthUserGetRequest) Descriptor() ([]byte, []int) { return fileDescriptorRpc, []int{48} } +func (*AuthUserGetRequest) Descriptor() ([]byte, []int) { return fileDescriptorRpc, []int{50} } type AuthUserDeleteRequest struct { // name is the name of the user to delete. @@ -1625,7 +1675,7 @@ type AuthUserDeleteRequest struct { func (m *AuthUserDeleteRequest) Reset() { *m = AuthUserDeleteRequest{} } func (m *AuthUserDeleteRequest) String() string { return proto.CompactTextString(m) } func (*AuthUserDeleteRequest) ProtoMessage() {} -func (*AuthUserDeleteRequest) Descriptor() ([]byte, []int) { return fileDescriptorRpc, []int{49} } +func (*AuthUserDeleteRequest) Descriptor() ([]byte, []int) { return fileDescriptorRpc, []int{51} } type AuthUserChangePasswordRequest struct { // name is the name of the user whose password is being changed. @@ -1638,7 +1688,7 @@ func (m *AuthUserChangePasswordRequest) Reset() { *m = AuthUserChangePas func (m *AuthUserChangePasswordRequest) String() string { return proto.CompactTextString(m) } func (*AuthUserChangePasswordRequest) ProtoMessage() {} func (*AuthUserChangePasswordRequest) Descriptor() ([]byte, []int) { - return fileDescriptorRpc, []int{50} + return fileDescriptorRpc, []int{52} } type AuthUserGrantRoleRequest struct { @@ -1651,7 +1701,7 @@ type AuthUserGrantRoleRequest struct { func (m *AuthUserGrantRoleRequest) Reset() { *m = AuthUserGrantRoleRequest{} } func (m *AuthUserGrantRoleRequest) String() string { return proto.CompactTextString(m) } func (*AuthUserGrantRoleRequest) ProtoMessage() {} -func (*AuthUserGrantRoleRequest) Descriptor() ([]byte, []int) { return fileDescriptorRpc, []int{51} } +func (*AuthUserGrantRoleRequest) Descriptor() ([]byte, []int) { return fileDescriptorRpc, []int{53} } type AuthUserRevokeRoleRequest struct { Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` @@ -1661,7 +1711,7 @@ type AuthUserRevokeRoleRequest struct { func (m *AuthUserRevokeRoleRequest) Reset() { *m = AuthUserRevokeRoleRequest{} } func (m *AuthUserRevokeRoleRequest) String() string { return proto.CompactTextString(m) } func (*AuthUserRevokeRoleRequest) ProtoMessage() {} -func (*AuthUserRevokeRoleRequest) Descriptor() ([]byte, []int) { return fileDescriptorRpc, []int{52} } +func (*AuthUserRevokeRoleRequest) Descriptor() ([]byte, []int) { return fileDescriptorRpc, []int{54} } type AuthRoleAddRequest struct { // name is the name of the role to add to the authentication system. @@ -1671,7 +1721,7 @@ type AuthRoleAddRequest struct { func (m *AuthRoleAddRequest) Reset() { *m = AuthRoleAddRequest{} } func (m *AuthRoleAddRequest) String() string { return proto.CompactTextString(m) } func (*AuthRoleAddRequest) ProtoMessage() {} -func (*AuthRoleAddRequest) Descriptor() ([]byte, []int) { return fileDescriptorRpc, []int{53} } +func (*AuthRoleAddRequest) Descriptor() ([]byte, []int) { return fileDescriptorRpc, []int{55} } type AuthRoleGetRequest struct { Role string `protobuf:"bytes,1,opt,name=role,proto3" json:"role,omitempty"` @@ -1680,7 +1730,7 @@ type AuthRoleGetRequest struct { func (m *AuthRoleGetRequest) Reset() { *m = AuthRoleGetRequest{} } func (m *AuthRoleGetRequest) String() string { return proto.CompactTextString(m) } func (*AuthRoleGetRequest) ProtoMessage() {} -func (*AuthRoleGetRequest) Descriptor() ([]byte, []int) { return fileDescriptorRpc, []int{54} } +func (*AuthRoleGetRequest) Descriptor() ([]byte, []int) { return fileDescriptorRpc, []int{56} } type AuthUserListRequest struct { } @@ -1688,7 +1738,7 @@ type AuthUserListRequest struct { func (m *AuthUserListRequest) Reset() { *m = AuthUserListRequest{} } func (m *AuthUserListRequest) String() string { return proto.CompactTextString(m) } func (*AuthUserListRequest) ProtoMessage() {} -func (*AuthUserListRequest) Descriptor() ([]byte, []int) { return fileDescriptorRpc, []int{55} } +func (*AuthUserListRequest) Descriptor() ([]byte, []int) { return fileDescriptorRpc, []int{57} } type AuthRoleListRequest struct { } @@ -1696,7 +1746,7 @@ type AuthRoleListRequest struct { func (m *AuthRoleListRequest) Reset() { *m = AuthRoleListRequest{} } func (m *AuthRoleListRequest) String() string { return proto.CompactTextString(m) } func (*AuthRoleListRequest) ProtoMessage() {} -func (*AuthRoleListRequest) Descriptor() ([]byte, []int) { return fileDescriptorRpc, []int{56} } +func (*AuthRoleListRequest) Descriptor() ([]byte, []int) { return fileDescriptorRpc, []int{58} } type AuthRoleDeleteRequest struct { Role string `protobuf:"bytes,1,opt,name=role,proto3" json:"role,omitempty"` @@ -1705,7 +1755,7 @@ type AuthRoleDeleteRequest struct { func (m *AuthRoleDeleteRequest) Reset() { *m = AuthRoleDeleteRequest{} } func (m *AuthRoleDeleteRequest) String() string { return proto.CompactTextString(m) } func (*AuthRoleDeleteRequest) ProtoMessage() {} -func (*AuthRoleDeleteRequest) Descriptor() ([]byte, []int) { return fileDescriptorRpc, []int{57} } +func (*AuthRoleDeleteRequest) Descriptor() ([]byte, []int) { return fileDescriptorRpc, []int{59} } type AuthRoleGrantPermissionRequest struct { // name is the name of the role which will be granted the permission. @@ -1718,7 +1768,7 @@ func (m *AuthRoleGrantPermissionRequest) Reset() { *m = AuthRoleGrantPer func (m *AuthRoleGrantPermissionRequest) String() string { return proto.CompactTextString(m) } func (*AuthRoleGrantPermissionRequest) ProtoMessage() {} func (*AuthRoleGrantPermissionRequest) Descriptor() ([]byte, []int) { - return fileDescriptorRpc, []int{58} + return fileDescriptorRpc, []int{60} } func (m *AuthRoleGrantPermissionRequest) GetPerm() *authpb.Permission { @@ -1738,7 +1788,7 @@ func (m *AuthRoleRevokePermissionRequest) Reset() { *m = AuthRoleRevokeP func (m *AuthRoleRevokePermissionRequest) String() string { return proto.CompactTextString(m) } func (*AuthRoleRevokePermissionRequest) ProtoMessage() {} func (*AuthRoleRevokePermissionRequest) Descriptor() ([]byte, []int) { - return fileDescriptorRpc, []int{59} + return fileDescriptorRpc, []int{61} } type AuthEnableResponse struct { @@ -1748,7 +1798,7 @@ type AuthEnableResponse struct { func (m *AuthEnableResponse) Reset() { *m = AuthEnableResponse{} } func (m *AuthEnableResponse) String() string { return proto.CompactTextString(m) } func (*AuthEnableResponse) ProtoMessage() {} -func (*AuthEnableResponse) Descriptor() ([]byte, []int) { return fileDescriptorRpc, []int{60} } +func (*AuthEnableResponse) Descriptor() ([]byte, []int) { return fileDescriptorRpc, []int{62} } func (m *AuthEnableResponse) GetHeader() *ResponseHeader { if m != nil { @@ -1764,7 +1814,7 @@ type AuthDisableResponse struct { func (m *AuthDisableResponse) Reset() { *m = AuthDisableResponse{} } func (m *AuthDisableResponse) String() string { return proto.CompactTextString(m) } func (*AuthDisableResponse) ProtoMessage() {} -func (*AuthDisableResponse) Descriptor() ([]byte, []int) { return fileDescriptorRpc, []int{61} } +func (*AuthDisableResponse) Descriptor() ([]byte, []int) { return fileDescriptorRpc, []int{63} } func (m *AuthDisableResponse) GetHeader() *ResponseHeader { if m != nil { @@ -1782,7 +1832,7 @@ type AuthenticateResponse struct { func (m *AuthenticateResponse) Reset() { *m = AuthenticateResponse{} } func (m *AuthenticateResponse) String() string { return proto.CompactTextString(m) } func (*AuthenticateResponse) ProtoMessage() {} -func (*AuthenticateResponse) Descriptor() ([]byte, []int) { return fileDescriptorRpc, []int{62} } +func (*AuthenticateResponse) Descriptor() ([]byte, []int) { return fileDescriptorRpc, []int{64} } func (m *AuthenticateResponse) GetHeader() *ResponseHeader { if m != nil { @@ -1798,7 +1848,7 @@ type AuthUserAddResponse struct { func (m *AuthUserAddResponse) Reset() { *m = AuthUserAddResponse{} } func (m *AuthUserAddResponse) String() string { return proto.CompactTextString(m) } func (*AuthUserAddResponse) ProtoMessage() {} -func (*AuthUserAddResponse) Descriptor() ([]byte, []int) { return fileDescriptorRpc, []int{63} } +func (*AuthUserAddResponse) Descriptor() ([]byte, []int) { return fileDescriptorRpc, []int{65} } func (m *AuthUserAddResponse) GetHeader() *ResponseHeader { if m != nil { @@ -1815,7 +1865,7 @@ type AuthUserGetResponse struct { func (m *AuthUserGetResponse) Reset() { *m = AuthUserGetResponse{} } func (m *AuthUserGetResponse) String() string { return proto.CompactTextString(m) } func (*AuthUserGetResponse) ProtoMessage() {} -func (*AuthUserGetResponse) Descriptor() ([]byte, []int) { return fileDescriptorRpc, []int{64} } +func (*AuthUserGetResponse) Descriptor() ([]byte, []int) { return fileDescriptorRpc, []int{66} } func (m *AuthUserGetResponse) GetHeader() *ResponseHeader { if m != nil { @@ -1831,7 +1881,7 @@ type AuthUserDeleteResponse struct { func (m *AuthUserDeleteResponse) Reset() { *m = AuthUserDeleteResponse{} } func (m *AuthUserDeleteResponse) String() string { return proto.CompactTextString(m) } func (*AuthUserDeleteResponse) ProtoMessage() {} -func (*AuthUserDeleteResponse) Descriptor() ([]byte, []int) { return fileDescriptorRpc, []int{65} } +func (*AuthUserDeleteResponse) Descriptor() ([]byte, []int) { return fileDescriptorRpc, []int{67} } func (m *AuthUserDeleteResponse) GetHeader() *ResponseHeader { if m != nil { @@ -1848,7 +1898,7 @@ func (m *AuthUserChangePasswordResponse) Reset() { *m = AuthUserChangePa func (m *AuthUserChangePasswordResponse) String() string { return proto.CompactTextString(m) } func (*AuthUserChangePasswordResponse) ProtoMessage() {} func (*AuthUserChangePasswordResponse) Descriptor() ([]byte, []int) { - return fileDescriptorRpc, []int{66} + return fileDescriptorRpc, []int{68} } func (m *AuthUserChangePasswordResponse) GetHeader() *ResponseHeader { @@ -1865,7 +1915,7 @@ type AuthUserGrantRoleResponse struct { func (m *AuthUserGrantRoleResponse) Reset() { *m = AuthUserGrantRoleResponse{} } func (m *AuthUserGrantRoleResponse) String() string { return proto.CompactTextString(m) } func (*AuthUserGrantRoleResponse) ProtoMessage() {} -func (*AuthUserGrantRoleResponse) Descriptor() ([]byte, []int) { return fileDescriptorRpc, []int{67} } +func (*AuthUserGrantRoleResponse) Descriptor() ([]byte, []int) { return fileDescriptorRpc, []int{69} } func (m *AuthUserGrantRoleResponse) GetHeader() *ResponseHeader { if m != nil { @@ -1881,7 +1931,7 @@ type AuthUserRevokeRoleResponse struct { func (m *AuthUserRevokeRoleResponse) Reset() { *m = AuthUserRevokeRoleResponse{} } func (m *AuthUserRevokeRoleResponse) String() string { return proto.CompactTextString(m) } func (*AuthUserRevokeRoleResponse) ProtoMessage() {} -func (*AuthUserRevokeRoleResponse) Descriptor() ([]byte, []int) { return fileDescriptorRpc, []int{68} } +func (*AuthUserRevokeRoleResponse) Descriptor() ([]byte, []int) { return fileDescriptorRpc, []int{70} } func (m *AuthUserRevokeRoleResponse) GetHeader() *ResponseHeader { if m != nil { @@ -1897,7 +1947,7 @@ type AuthRoleAddResponse struct { func (m *AuthRoleAddResponse) Reset() { *m = AuthRoleAddResponse{} } func (m *AuthRoleAddResponse) String() string { return proto.CompactTextString(m) } func (*AuthRoleAddResponse) ProtoMessage() {} -func (*AuthRoleAddResponse) Descriptor() ([]byte, []int) { return fileDescriptorRpc, []int{69} } +func (*AuthRoleAddResponse) Descriptor() ([]byte, []int) { return fileDescriptorRpc, []int{71} } func (m *AuthRoleAddResponse) GetHeader() *ResponseHeader { if m != nil { @@ -1914,7 +1964,7 @@ type AuthRoleGetResponse struct { func (m *AuthRoleGetResponse) Reset() { *m = AuthRoleGetResponse{} } func (m *AuthRoleGetResponse) String() string { return proto.CompactTextString(m) } func (*AuthRoleGetResponse) ProtoMessage() {} -func (*AuthRoleGetResponse) Descriptor() ([]byte, []int) { return fileDescriptorRpc, []int{70} } +func (*AuthRoleGetResponse) Descriptor() ([]byte, []int) { return fileDescriptorRpc, []int{72} } func (m *AuthRoleGetResponse) GetHeader() *ResponseHeader { if m != nil { @@ -1938,7 +1988,7 @@ type AuthRoleListResponse struct { func (m *AuthRoleListResponse) Reset() { *m = AuthRoleListResponse{} } func (m *AuthRoleListResponse) String() string { return proto.CompactTextString(m) } func (*AuthRoleListResponse) ProtoMessage() {} -func (*AuthRoleListResponse) Descriptor() ([]byte, []int) { return fileDescriptorRpc, []int{71} } +func (*AuthRoleListResponse) Descriptor() ([]byte, []int) { return fileDescriptorRpc, []int{73} } func (m *AuthRoleListResponse) GetHeader() *ResponseHeader { if m != nil { @@ -1955,7 +2005,7 @@ type AuthUserListResponse struct { func (m *AuthUserListResponse) Reset() { *m = AuthUserListResponse{} } func (m *AuthUserListResponse) String() string { return proto.CompactTextString(m) } func (*AuthUserListResponse) ProtoMessage() {} -func (*AuthUserListResponse) Descriptor() ([]byte, []int) { return fileDescriptorRpc, []int{72} } +func (*AuthUserListResponse) Descriptor() ([]byte, []int) { return fileDescriptorRpc, []int{74} } func (m *AuthUserListResponse) GetHeader() *ResponseHeader { if m != nil { @@ -1971,7 +2021,7 @@ type AuthRoleDeleteResponse struct { func (m *AuthRoleDeleteResponse) Reset() { *m = AuthRoleDeleteResponse{} } func (m *AuthRoleDeleteResponse) String() string { return proto.CompactTextString(m) } func (*AuthRoleDeleteResponse) ProtoMessage() {} -func (*AuthRoleDeleteResponse) Descriptor() ([]byte, []int) { return fileDescriptorRpc, []int{73} } +func (*AuthRoleDeleteResponse) Descriptor() ([]byte, []int) { return fileDescriptorRpc, []int{75} } func (m *AuthRoleDeleteResponse) GetHeader() *ResponseHeader { if m != nil { @@ -1988,7 +2038,7 @@ func (m *AuthRoleGrantPermissionResponse) Reset() { *m = AuthRoleGrantPe func (m *AuthRoleGrantPermissionResponse) String() string { return proto.CompactTextString(m) } func (*AuthRoleGrantPermissionResponse) ProtoMessage() {} func (*AuthRoleGrantPermissionResponse) Descriptor() ([]byte, []int) { - return fileDescriptorRpc, []int{74} + return fileDescriptorRpc, []int{76} } func (m *AuthRoleGrantPermissionResponse) GetHeader() *ResponseHeader { @@ -2006,7 +2056,7 @@ func (m *AuthRoleRevokePermissionResponse) Reset() { *m = AuthRoleRevoke func (m *AuthRoleRevokePermissionResponse) String() string { return proto.CompactTextString(m) } func (*AuthRoleRevokePermissionResponse) ProtoMessage() {} func (*AuthRoleRevokePermissionResponse) Descriptor() ([]byte, []int) { - return fileDescriptorRpc, []int{75} + return fileDescriptorRpc, []int{77} } func (m *AuthRoleRevokePermissionResponse) GetHeader() *ResponseHeader { @@ -2045,6 +2095,8 @@ func init() { proto.RegisterType((*LeaseRevokeResponse)(nil), "etcdserverpb.LeaseRevokeResponse") proto.RegisterType((*LeaseKeepAliveRequest)(nil), "etcdserverpb.LeaseKeepAliveRequest") proto.RegisterType((*LeaseKeepAliveResponse)(nil), "etcdserverpb.LeaseKeepAliveResponse") + proto.RegisterType((*LeaseTimeToLiveRequest)(nil), "etcdserverpb.LeaseTimeToLiveRequest") + proto.RegisterType((*LeaseTimeToLiveResponse)(nil), "etcdserverpb.LeaseTimeToLiveResponse") proto.RegisterType((*Member)(nil), "etcdserverpb.Member") proto.RegisterType((*MemberAddRequest)(nil), "etcdserverpb.MemberAddRequest") proto.RegisterType((*MemberAddResponse)(nil), "etcdserverpb.MemberAddResponse") @@ -2452,6 +2504,8 @@ type LeaseClient interface { // LeaseKeepAlive keeps the lease alive by streaming keep alive requests from the client // to the server and streaming keep alive responses from the server to the client. LeaseKeepAlive(ctx context.Context, opts ...grpc.CallOption) (Lease_LeaseKeepAliveClient, error) + // LeaseTimeToLive retrieves lease information. + LeaseTimeToLive(ctx context.Context, in *LeaseTimeToLiveRequest, opts ...grpc.CallOption) (*LeaseTimeToLiveResponse, error) } type leaseClient struct { @@ -2511,6 +2565,15 @@ func (x *leaseLeaseKeepAliveClient) Recv() (*LeaseKeepAliveResponse, error) { return m, nil } +func (c *leaseClient) LeaseTimeToLive(ctx context.Context, in *LeaseTimeToLiveRequest, opts ...grpc.CallOption) (*LeaseTimeToLiveResponse, error) { + out := new(LeaseTimeToLiveResponse) + err := grpc.Invoke(ctx, "/etcdserverpb.Lease/LeaseTimeToLive", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + // Server API for Lease service type LeaseServer interface { @@ -2523,6 +2586,8 @@ type LeaseServer interface { // LeaseKeepAlive keeps the lease alive by streaming keep alive requests from the client // to the server and streaming keep alive responses from the server to the client. LeaseKeepAlive(Lease_LeaseKeepAliveServer) error + // LeaseTimeToLive retrieves lease information. + LeaseTimeToLive(context.Context, *LeaseTimeToLiveRequest) (*LeaseTimeToLiveResponse, error) } func RegisterLeaseServer(s *grpc.Server, srv LeaseServer) { @@ -2591,6 +2656,24 @@ func (x *leaseLeaseKeepAliveServer) Recv() (*LeaseKeepAliveRequest, error) { return m, nil } +func _Lease_LeaseTimeToLive_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(LeaseTimeToLiveRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(LeaseServer).LeaseTimeToLive(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/etcdserverpb.Lease/LeaseTimeToLive", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(LeaseServer).LeaseTimeToLive(ctx, req.(*LeaseTimeToLiveRequest)) + } + return interceptor(ctx, in, info, handler) +} + var _Lease_serviceDesc = grpc.ServiceDesc{ ServiceName: "etcdserverpb.Lease", HandlerType: (*LeaseServer)(nil), @@ -2603,6 +2686,10 @@ var _Lease_serviceDesc = grpc.ServiceDesc{ MethodName: "LeaseRevoke", Handler: _Lease_LeaseRevoke_Handler, }, + { + MethodName: "LeaseTimeToLive", + Handler: _Lease_LeaseTimeToLive_Handler, + }, }, Streams: []grpc.StreamDesc{ { @@ -3730,6 +3817,26 @@ func (m *RangeRequest) MarshalTo(data []byte) (int, error) { } i++ } + if m.MinModRevision != 0 { + data[i] = 0x50 + i++ + i = encodeVarintRpc(data, i, uint64(m.MinModRevision)) + } + if m.MaxModRevision != 0 { + data[i] = 0x58 + i++ + i = encodeVarintRpc(data, i, uint64(m.MaxModRevision)) + } + if m.MinCreateRevision != 0 { + data[i] = 0x60 + i++ + i = encodeVarintRpc(data, i, uint64(m.MinCreateRevision)) + } + if m.MaxCreateRevision != 0 { + data[i] = 0x68 + i++ + i = encodeVarintRpc(data, i, uint64(m.MaxCreateRevision)) + } return i, nil } @@ -4827,6 +4934,90 @@ func (m *LeaseKeepAliveResponse) MarshalTo(data []byte) (int, error) { return i, nil } +func (m *LeaseTimeToLiveRequest) Marshal() (data []byte, err error) { + size := m.Size() + data = make([]byte, size) + n, err := m.MarshalTo(data) + if err != nil { + return nil, err + } + return data[:n], nil +} + +func (m *LeaseTimeToLiveRequest) MarshalTo(data []byte) (int, error) { + var i int + _ = i + var l int + _ = l + if m.ID != 0 { + data[i] = 0x8 + i++ + i = encodeVarintRpc(data, i, uint64(m.ID)) + } + if m.Keys { + data[i] = 0x10 + i++ + if m.Keys { + data[i] = 1 + } else { + data[i] = 0 + } + i++ + } + return i, nil +} + +func (m *LeaseTimeToLiveResponse) Marshal() (data []byte, err error) { + size := m.Size() + data = make([]byte, size) + n, err := m.MarshalTo(data) + if err != nil { + return nil, err + } + return data[:n], nil +} + +func (m *LeaseTimeToLiveResponse) MarshalTo(data []byte) (int, error) { + var i int + _ = i + var l int + _ = l + if m.Header != nil { + data[i] = 0xa + i++ + i = encodeVarintRpc(data, i, uint64(m.Header.Size())) + n25, err := m.Header.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n25 + } + if m.ID != 0 { + data[i] = 0x10 + i++ + i = encodeVarintRpc(data, i, uint64(m.ID)) + } + if m.TTL != 0 { + data[i] = 0x18 + i++ + i = encodeVarintRpc(data, i, uint64(m.TTL)) + } + if m.GrantedTTL != 0 { + data[i] = 0x20 + i++ + i = encodeVarintRpc(data, i, uint64(m.GrantedTTL)) + } + if len(m.Keys) > 0 { + for _, b := range m.Keys { + data[i] = 0x2a + i++ + i = encodeVarintRpc(data, i, uint64(len(b))) + i += copy(data[i:], b) + } + } + return i, nil +} + func (m *Member) Marshal() (data []byte, err error) { size := m.Size() data = make([]byte, size) @@ -4938,21 +5129,21 @@ func (m *MemberAddResponse) MarshalTo(data []byte) (int, error) { data[i] = 0xa i++ i = encodeVarintRpc(data, i, uint64(m.Header.Size())) - n25, err := m.Header.MarshalTo(data[i:]) + n26, err := m.Header.MarshalTo(data[i:]) if err != nil { return 0, err } - i += n25 + i += n26 } if m.Member != nil { data[i] = 0x12 i++ i = encodeVarintRpc(data, i, uint64(m.Member.Size())) - n26, err := m.Member.MarshalTo(data[i:]) + n27, err := m.Member.MarshalTo(data[i:]) if err != nil { return 0, err } - i += n26 + i += n27 } return i, nil } @@ -4999,11 +5190,11 @@ func (m *MemberRemoveResponse) MarshalTo(data []byte) (int, error) { data[i] = 0xa i++ i = encodeVarintRpc(data, i, uint64(m.Header.Size())) - n27, err := m.Header.MarshalTo(data[i:]) + n28, err := m.Header.MarshalTo(data[i:]) if err != nil { return 0, err } - i += n27 + i += n28 } return i, nil } @@ -5065,11 +5256,11 @@ func (m *MemberUpdateResponse) MarshalTo(data []byte) (int, error) { data[i] = 0xa i++ i = encodeVarintRpc(data, i, uint64(m.Header.Size())) - n28, err := m.Header.MarshalTo(data[i:]) + n29, err := m.Header.MarshalTo(data[i:]) if err != nil { return 0, err } - i += n28 + i += n29 } return i, nil } @@ -5111,11 +5302,11 @@ func (m *MemberListResponse) MarshalTo(data []byte) (int, error) { data[i] = 0xa i++ i = encodeVarintRpc(data, i, uint64(m.Header.Size())) - n29, err := m.Header.MarshalTo(data[i:]) + n30, err := m.Header.MarshalTo(data[i:]) if err != nil { return 0, err } - i += n29 + i += n30 } if len(m.Members) > 0 { for _, msg := range m.Members { @@ -5169,11 +5360,11 @@ func (m *DefragmentResponse) MarshalTo(data []byte) (int, error) { data[i] = 0xa i++ i = encodeVarintRpc(data, i, uint64(m.Header.Size())) - n30, err := m.Header.MarshalTo(data[i:]) + n31, err := m.Header.MarshalTo(data[i:]) if err != nil { return 0, err } - i += n30 + i += n31 } return i, nil } @@ -5258,11 +5449,11 @@ func (m *AlarmResponse) MarshalTo(data []byte) (int, error) { data[i] = 0xa i++ i = encodeVarintRpc(data, i, uint64(m.Header.Size())) - n31, err := m.Header.MarshalTo(data[i:]) + n32, err := m.Header.MarshalTo(data[i:]) if err != nil { return 0, err } - i += n31 + i += n32 } if len(m.Alarms) > 0 { for _, msg := range m.Alarms { @@ -5316,11 +5507,11 @@ func (m *StatusResponse) MarshalTo(data []byte) (int, error) { data[i] = 0xa i++ i = encodeVarintRpc(data, i, uint64(m.Header.Size())) - n32, err := m.Header.MarshalTo(data[i:]) + n33, err := m.Header.MarshalTo(data[i:]) if err != nil { return 0, err } - i += n32 + i += n33 } if len(m.Version) > 0 { data[i] = 0x12 @@ -5718,11 +5909,11 @@ func (m *AuthRoleGrantPermissionRequest) MarshalTo(data []byte) (int, error) { data[i] = 0x12 i++ i = encodeVarintRpc(data, i, uint64(m.Perm.Size())) - n33, err := m.Perm.MarshalTo(data[i:]) + n34, err := m.Perm.MarshalTo(data[i:]) if err != nil { return 0, err } - i += n33 + i += n34 } return i, nil } @@ -5782,11 +5973,11 @@ func (m *AuthEnableResponse) MarshalTo(data []byte) (int, error) { data[i] = 0xa i++ i = encodeVarintRpc(data, i, uint64(m.Header.Size())) - n34, err := m.Header.MarshalTo(data[i:]) + n35, err := m.Header.MarshalTo(data[i:]) if err != nil { return 0, err } - i += n34 + i += n35 } return i, nil } @@ -5810,11 +6001,11 @@ func (m *AuthDisableResponse) MarshalTo(data []byte) (int, error) { data[i] = 0xa i++ i = encodeVarintRpc(data, i, uint64(m.Header.Size())) - n35, err := m.Header.MarshalTo(data[i:]) + n36, err := m.Header.MarshalTo(data[i:]) if err != nil { return 0, err } - i += n35 + i += n36 } return i, nil } @@ -5838,11 +6029,11 @@ func (m *AuthenticateResponse) MarshalTo(data []byte) (int, error) { data[i] = 0xa i++ i = encodeVarintRpc(data, i, uint64(m.Header.Size())) - n36, err := m.Header.MarshalTo(data[i:]) + n37, err := m.Header.MarshalTo(data[i:]) if err != nil { return 0, err } - i += n36 + i += n37 } if len(m.Token) > 0 { data[i] = 0x12 @@ -5872,11 +6063,11 @@ func (m *AuthUserAddResponse) MarshalTo(data []byte) (int, error) { data[i] = 0xa i++ i = encodeVarintRpc(data, i, uint64(m.Header.Size())) - n37, err := m.Header.MarshalTo(data[i:]) + n38, err := m.Header.MarshalTo(data[i:]) if err != nil { return 0, err } - i += n37 + i += n38 } return i, nil } @@ -5900,11 +6091,11 @@ func (m *AuthUserGetResponse) MarshalTo(data []byte) (int, error) { data[i] = 0xa i++ i = encodeVarintRpc(data, i, uint64(m.Header.Size())) - n38, err := m.Header.MarshalTo(data[i:]) + n39, err := m.Header.MarshalTo(data[i:]) if err != nil { return 0, err } - i += n38 + i += n39 } if len(m.Roles) > 0 { for _, s := range m.Roles { @@ -5943,11 +6134,11 @@ func (m *AuthUserDeleteResponse) MarshalTo(data []byte) (int, error) { data[i] = 0xa i++ i = encodeVarintRpc(data, i, uint64(m.Header.Size())) - n39, err := m.Header.MarshalTo(data[i:]) + n40, err := m.Header.MarshalTo(data[i:]) if err != nil { return 0, err } - i += n39 + i += n40 } return i, nil } @@ -5971,11 +6162,11 @@ func (m *AuthUserChangePasswordResponse) MarshalTo(data []byte) (int, error) { data[i] = 0xa i++ i = encodeVarintRpc(data, i, uint64(m.Header.Size())) - n40, err := m.Header.MarshalTo(data[i:]) + n41, err := m.Header.MarshalTo(data[i:]) if err != nil { return 0, err } - i += n40 + i += n41 } return i, nil } @@ -5999,11 +6190,11 @@ func (m *AuthUserGrantRoleResponse) MarshalTo(data []byte) (int, error) { data[i] = 0xa i++ i = encodeVarintRpc(data, i, uint64(m.Header.Size())) - n41, err := m.Header.MarshalTo(data[i:]) + n42, err := m.Header.MarshalTo(data[i:]) if err != nil { return 0, err } - i += n41 + i += n42 } return i, nil } @@ -6027,11 +6218,11 @@ func (m *AuthUserRevokeRoleResponse) MarshalTo(data []byte) (int, error) { data[i] = 0xa i++ i = encodeVarintRpc(data, i, uint64(m.Header.Size())) - n42, err := m.Header.MarshalTo(data[i:]) + n43, err := m.Header.MarshalTo(data[i:]) if err != nil { return 0, err } - i += n42 + i += n43 } return i, nil } @@ -6055,11 +6246,11 @@ func (m *AuthRoleAddResponse) MarshalTo(data []byte) (int, error) { data[i] = 0xa i++ i = encodeVarintRpc(data, i, uint64(m.Header.Size())) - n43, err := m.Header.MarshalTo(data[i:]) + n44, err := m.Header.MarshalTo(data[i:]) if err != nil { return 0, err } - i += n43 + i += n44 } return i, nil } @@ -6083,11 +6274,11 @@ func (m *AuthRoleGetResponse) MarshalTo(data []byte) (int, error) { data[i] = 0xa i++ i = encodeVarintRpc(data, i, uint64(m.Header.Size())) - n44, err := m.Header.MarshalTo(data[i:]) + n45, err := m.Header.MarshalTo(data[i:]) if err != nil { return 0, err } - i += n44 + i += n45 } if len(m.Perm) > 0 { for _, msg := range m.Perm { @@ -6123,11 +6314,11 @@ func (m *AuthRoleListResponse) MarshalTo(data []byte) (int, error) { data[i] = 0xa i++ i = encodeVarintRpc(data, i, uint64(m.Header.Size())) - n45, err := m.Header.MarshalTo(data[i:]) + n46, err := m.Header.MarshalTo(data[i:]) if err != nil { return 0, err } - i += n45 + i += n46 } if len(m.Roles) > 0 { for _, s := range m.Roles { @@ -6166,11 +6357,11 @@ func (m *AuthUserListResponse) MarshalTo(data []byte) (int, error) { data[i] = 0xa i++ i = encodeVarintRpc(data, i, uint64(m.Header.Size())) - n46, err := m.Header.MarshalTo(data[i:]) + n47, err := m.Header.MarshalTo(data[i:]) if err != nil { return 0, err } - i += n46 + i += n47 } if len(m.Users) > 0 { for _, s := range m.Users { @@ -6209,11 +6400,11 @@ func (m *AuthRoleDeleteResponse) MarshalTo(data []byte) (int, error) { data[i] = 0xa i++ i = encodeVarintRpc(data, i, uint64(m.Header.Size())) - n47, err := m.Header.MarshalTo(data[i:]) + n48, err := m.Header.MarshalTo(data[i:]) if err != nil { return 0, err } - i += n47 + i += n48 } return i, nil } @@ -6237,11 +6428,11 @@ func (m *AuthRoleGrantPermissionResponse) MarshalTo(data []byte) (int, error) { data[i] = 0xa i++ i = encodeVarintRpc(data, i, uint64(m.Header.Size())) - n48, err := m.Header.MarshalTo(data[i:]) + n49, err := m.Header.MarshalTo(data[i:]) if err != nil { return 0, err } - i += n48 + i += n49 } return i, nil } @@ -6265,11 +6456,11 @@ func (m *AuthRoleRevokePermissionResponse) MarshalTo(data []byte) (int, error) { data[i] = 0xa i++ i = encodeVarintRpc(data, i, uint64(m.Header.Size())) - n49, err := m.Header.MarshalTo(data[i:]) + n50, err := m.Header.MarshalTo(data[i:]) if err != nil { return 0, err } - i += n49 + i += n50 } return i, nil } @@ -6351,6 +6542,18 @@ func (m *RangeRequest) Size() (n int) { if m.CountOnly { n += 2 } + if m.MinModRevision != 0 { + n += 1 + sovRpc(uint64(m.MinModRevision)) + } + if m.MaxModRevision != 0 { + n += 1 + sovRpc(uint64(m.MaxModRevision)) + } + if m.MinCreateRevision != 0 { + n += 1 + sovRpc(uint64(m.MinCreateRevision)) + } + if m.MaxCreateRevision != 0 { + n += 1 + sovRpc(uint64(m.MaxCreateRevision)) + } return n } @@ -6839,6 +7042,43 @@ func (m *LeaseKeepAliveResponse) Size() (n int) { return n } +func (m *LeaseTimeToLiveRequest) Size() (n int) { + var l int + _ = l + if m.ID != 0 { + n += 1 + sovRpc(uint64(m.ID)) + } + if m.Keys { + n += 2 + } + return n +} + +func (m *LeaseTimeToLiveResponse) Size() (n int) { + var l int + _ = l + if m.Header != nil { + l = m.Header.Size() + n += 1 + l + sovRpc(uint64(l)) + } + if m.ID != 0 { + n += 1 + sovRpc(uint64(m.ID)) + } + if m.TTL != 0 { + n += 1 + sovRpc(uint64(m.TTL)) + } + if m.GrantedTTL != 0 { + n += 1 + sovRpc(uint64(m.GrantedTTL)) + } + if len(m.Keys) > 0 { + for _, b := range m.Keys { + l = len(b) + n += 1 + l + sovRpc(uint64(l)) + } + } + return n +} + func (m *Member) Size() (n int) { var l int _ = l @@ -7777,6 +8017,82 @@ func (m *RangeRequest) Unmarshal(data []byte) error { } } m.CountOnly = bool(v != 0) + case 10: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field MinModRevision", wireType) + } + m.MinModRevision = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowRpc + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + m.MinModRevision |= (int64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + case 11: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field MaxModRevision", wireType) + } + m.MaxModRevision = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowRpc + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + m.MaxModRevision |= (int64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + case 12: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field MinCreateRevision", wireType) + } + m.MinCreateRevision = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowRpc + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + m.MinCreateRevision |= (int64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + case 13: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field MaxCreateRevision", wireType) + } + m.MaxCreateRevision = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowRpc + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + m.MaxCreateRevision |= (int64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } default: iNdEx = preIndex skippy, err := skipRpc(data[iNdEx:]) @@ -10914,6 +11230,264 @@ func (m *LeaseKeepAliveResponse) Unmarshal(data []byte) error { } return nil } +func (m *LeaseTimeToLiveRequest) Unmarshal(data []byte) error { + l := len(data) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowRpc + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: LeaseTimeToLiveRequest: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: LeaseTimeToLiveRequest: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field ID", wireType) + } + m.ID = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowRpc + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + m.ID |= (int64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + case 2: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field Keys", wireType) + } + var v int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowRpc + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + v |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + m.Keys = bool(v != 0) + default: + iNdEx = preIndex + skippy, err := skipRpc(data[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthRpc + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *LeaseTimeToLiveResponse) Unmarshal(data []byte) error { + l := len(data) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowRpc + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: LeaseTimeToLiveResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: LeaseTimeToLiveResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Header", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowRpc + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthRpc + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.Header == nil { + m.Header = &ResponseHeader{} + } + if err := m.Header.Unmarshal(data[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field ID", wireType) + } + m.ID = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowRpc + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + m.ID |= (int64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + case 3: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field TTL", wireType) + } + m.TTL = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowRpc + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + m.TTL |= (int64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + case 4: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field GrantedTTL", wireType) + } + m.GrantedTTL = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowRpc + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + m.GrantedTTL |= (int64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + case 5: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Keys", wireType) + } + var byteLen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowRpc + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + byteLen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if byteLen < 0 { + return ErrInvalidLengthRpc + } + postIndex := iNdEx + byteLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Keys = append(m.Keys, make([]byte, postIndex-iNdEx)) + copy(m.Keys[len(m.Keys)-1], data[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipRpc(data[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthRpc + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} func (m *Member) Unmarshal(data []byte) error { l := len(data) iNdEx := 0 @@ -15407,209 +15981,207 @@ var ( ) var fileDescriptorRpc = []byte{ - // 3256 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x09, 0x6e, 0x88, 0x02, 0xff, 0xb4, 0x5a, 0x4f, 0x73, 0x1b, 0xc7, - 0xb1, 0xe7, 0x02, 0x20, 0x40, 0x34, 0x40, 0x10, 0x1a, 0x52, 0x32, 0xb8, 0x92, 0x28, 0x6a, 0xf4, - 0x8f, 0x92, 0x6c, 0xc2, 0xa6, 0xfd, 0xde, 0x41, 0xef, 0x95, 0xab, 0x28, 0x02, 0x16, 0x19, 0xd2, - 0xa4, 0xbc, 0xa4, 0x64, 0xa7, 0xca, 0x15, 0xd6, 0x12, 0x18, 0x01, 0x28, 0x02, 0xbb, 0xf0, 0xee, - 0x02, 0x12, 0x9d, 0xa4, 0x2a, 0xe5, 0x8a, 0x0f, 0xc9, 0x31, 0x3e, 0x24, 0x71, 0x8e, 0xf9, 0x0c, - 0xb9, 0xe5, 0x03, 0xa4, 0x72, 0x89, 0xab, 0xf2, 0x05, 0x52, 0x4e, 0x0e, 0x39, 0xe4, 0x9e, 0xca, - 0x21, 0x95, 0xd4, 0xfc, 0xdb, 0x9d, 0x5d, 0xec, 0x82, 0x74, 0x36, 0xbe, 0x48, 0x98, 0x9e, 0x9e, - 0xfe, 0x75, 0xf7, 0x4c, 0xf7, 0xf4, 0xf4, 0x12, 0x8a, 0xce, 0xb0, 0xb5, 0x3e, 0x74, 0x6c, 0xcf, - 0x46, 0x65, 0xe2, 0xb5, 0xda, 0x2e, 0x71, 0xc6, 0xc4, 0x19, 0x9e, 0xe8, 0x4b, 0x1d, 0xbb, 0x63, - 0xb3, 0x89, 0x3a, 0xfd, 0xc5, 0x79, 0xf4, 0x65, 0xca, 0x53, 0x1f, 0x8c, 0x5b, 0x2d, 0xf6, 0xcf, - 0xf0, 0xa4, 0x7e, 0x3a, 0x16, 0x53, 0x57, 0xd9, 0x94, 0x39, 0xf2, 0xba, 0xec, 0x9f, 0xe1, 0x09, - 0xfb, 0x4f, 0x4c, 0x5e, 0xeb, 0xd8, 0x76, 0xa7, 0x4f, 0xea, 0xe6, 0xb0, 0x57, 0x37, 0x2d, 0xcb, - 0xf6, 0x4c, 0xaf, 0x67, 0x5b, 0x2e, 0x9f, 0xc5, 0x9f, 0x6b, 0x50, 0x31, 0x88, 0x3b, 0xb4, 0x2d, - 0x97, 0x6c, 0x13, 0xb3, 0x4d, 0x1c, 0x74, 0x1d, 0xa0, 0xd5, 0x1f, 0xb9, 0x1e, 0x71, 0x8e, 0x7b, - 0xed, 0x9a, 0xb6, 0xaa, 0xad, 0xe5, 0x8c, 0xa2, 0xa0, 0xec, 0xb4, 0xd1, 0x55, 0x28, 0x0e, 0xc8, - 0xe0, 0x84, 0xcf, 0x66, 0xd8, 0xec, 0x1c, 0x27, 0xec, 0xb4, 0x91, 0x0e, 0x73, 0x0e, 0x19, 0xf7, - 0xdc, 0x9e, 0x6d, 0xd5, 0xb2, 0xab, 0xda, 0x5a, 0xd6, 0xf0, 0xc7, 0x74, 0xa1, 0x63, 0xbe, 0xf0, - 0x8e, 0x3d, 0xe2, 0x0c, 0x6a, 0x39, 0xbe, 0x90, 0x12, 0x8e, 0x88, 0x33, 0xc0, 0x5f, 0x65, 0xa1, - 0x6c, 0x98, 0x56, 0x87, 0x18, 0xe4, 0x93, 0x11, 0x71, 0x3d, 0x54, 0x85, 0xec, 0x29, 0x39, 0x63, - 0xf0, 0x65, 0x83, 0xfe, 0xe4, 0xeb, 0xad, 0x0e, 0x39, 0x26, 0x16, 0x07, 0x2e, 0xd3, 0xf5, 0x56, - 0x87, 0x34, 0xad, 0x36, 0x5a, 0x82, 0xd9, 0x7e, 0x6f, 0xd0, 0xf3, 0x04, 0x2a, 0x1f, 0x84, 0xd4, - 0xc9, 0x45, 0xd4, 0xd9, 0x02, 0x70, 0x6d, 0xc7, 0x3b, 0xb6, 0x9d, 0x36, 0x71, 0x6a, 0xb3, 0xab, - 0xda, 0x5a, 0x65, 0xe3, 0xf6, 0xba, 0xba, 0x11, 0xeb, 0xaa, 0x42, 0xeb, 0x87, 0xb6, 0xe3, 0x1d, - 0x50, 0x5e, 0xa3, 0xe8, 0xca, 0x9f, 0xe8, 0x3d, 0x28, 0x31, 0x21, 0x9e, 0xe9, 0x74, 0x88, 0x57, - 0xcb, 0x33, 0x29, 0x77, 0xce, 0x91, 0x72, 0xc4, 0x98, 0x0d, 0x06, 0xcf, 0x7f, 0x23, 0x0c, 0x65, - 0x97, 0x38, 0x3d, 0xb3, 0xdf, 0xfb, 0xd4, 0x3c, 0xe9, 0x93, 0x5a, 0x61, 0x55, 0x5b, 0x9b, 0x33, - 0x42, 0x34, 0x6a, 0xff, 0x29, 0x39, 0x73, 0x8f, 0x6d, 0xab, 0x7f, 0x56, 0x9b, 0x63, 0x0c, 0x73, - 0x94, 0x70, 0x60, 0xf5, 0xcf, 0xd8, 0xa6, 0xd9, 0x23, 0xcb, 0xe3, 0xb3, 0x45, 0x36, 0x5b, 0x64, - 0x14, 0x3a, 0x8d, 0xd7, 0xa1, 0xe8, 0xeb, 0x8f, 0xe6, 0x20, 0xb7, 0x7f, 0xb0, 0xdf, 0xac, 0xce, - 0x20, 0x80, 0xfc, 0xe6, 0xe1, 0x56, 0x73, 0xbf, 0x51, 0xd5, 0x50, 0x09, 0x0a, 0x8d, 0x26, 0x1f, - 0x64, 0xf0, 0x63, 0x80, 0x40, 0x53, 0x54, 0x80, 0xec, 0x6e, 0xf3, 0xbb, 0xd5, 0x19, 0xca, 0xf3, - 0xbc, 0x69, 0x1c, 0xee, 0x1c, 0xec, 0x57, 0x35, 0xba, 0x78, 0xcb, 0x68, 0x6e, 0x1e, 0x35, 0xab, - 0x19, 0xca, 0xf1, 0xfe, 0x41, 0xa3, 0x9a, 0x45, 0x45, 0x98, 0x7d, 0xbe, 0xb9, 0xf7, 0xac, 0x59, - 0xcd, 0xe1, 0x2f, 0x34, 0x98, 0x17, 0xb6, 0xf3, 0xf3, 0x85, 0xde, 0x81, 0x7c, 0x97, 0x9d, 0x31, - 0xb6, 0xad, 0xa5, 0x8d, 0x6b, 0x11, 0x47, 0x85, 0xce, 0xa1, 0x21, 0x78, 0x11, 0x86, 0xec, 0xe9, - 0xd8, 0xad, 0x65, 0x56, 0xb3, 0x6b, 0xa5, 0x8d, 0xea, 0x3a, 0x3f, 0xfc, 0xeb, 0xbb, 0xe4, 0xec, - 0xb9, 0xd9, 0x1f, 0x11, 0x83, 0x4e, 0x22, 0x04, 0xb9, 0x81, 0xed, 0x10, 0xb6, 0xfb, 0x73, 0x06, - 0xfb, 0x4d, 0x8f, 0x04, 0x73, 0x80, 0xd8, 0x79, 0x3e, 0xc0, 0x2d, 0x80, 0xa7, 0x23, 0x2f, 0xf9, - 0x94, 0x2d, 0xc1, 0xec, 0x98, 0xca, 0x15, 0x27, 0x8c, 0x0f, 0xd8, 0xf1, 0x22, 0xa6, 0x4b, 0xfc, - 0xe3, 0x45, 0x07, 0xe8, 0x35, 0x28, 0x0c, 0x1d, 0x32, 0x3e, 0x3e, 0x1d, 0x33, 0x8c, 0x39, 0x23, - 0x4f, 0x87, 0xbb, 0x63, 0x6c, 0x41, 0x89, 0x81, 0xa4, 0xb2, 0xfb, 0x7e, 0x20, 0x3d, 0xc3, 0x96, - 0x4d, 0xda, 0x2e, 0xf1, 0x3e, 0x06, 0xd4, 0x20, 0x7d, 0xe2, 0x91, 0x34, 0x21, 0xa4, 0x58, 0x93, - 0x0d, 0x59, 0xf3, 0x33, 0x0d, 0x16, 0x43, 0xe2, 0x53, 0x99, 0x55, 0x83, 0x42, 0x9b, 0x09, 0xe3, - 0x1a, 0x64, 0x0d, 0x39, 0x44, 0x0f, 0x61, 0x4e, 0x28, 0xe0, 0xd6, 0xb2, 0x09, 0xbb, 0x5d, 0xe0, - 0x3a, 0xb9, 0xf8, 0x6f, 0x1a, 0x14, 0x85, 0xa1, 0x07, 0x43, 0xb4, 0x09, 0xf3, 0x0e, 0x1f, 0x1c, - 0x33, 0x7b, 0x84, 0x46, 0x7a, 0x72, 0x24, 0x6e, 0xcf, 0x18, 0x65, 0xb1, 0x84, 0x91, 0xd1, 0xff, - 0x41, 0x49, 0x8a, 0x18, 0x8e, 0x3c, 0xe1, 0xf2, 0x5a, 0x58, 0x40, 0x70, 0x72, 0xb6, 0x67, 0x0c, - 0x10, 0xec, 0x4f, 0x47, 0x1e, 0x3a, 0x82, 0x25, 0xb9, 0x98, 0x5b, 0x23, 0xd4, 0xc8, 0x32, 0x29, - 0xab, 0x61, 0x29, 0x93, 0x5b, 0xb5, 0x3d, 0x63, 0x20, 0xb1, 0x5e, 0x99, 0x7c, 0x5c, 0x84, 0x82, - 0xa0, 0xe2, 0xbf, 0x6b, 0x00, 0xd2, 0xa1, 0x07, 0x43, 0xd4, 0x80, 0x8a, 0x23, 0x46, 0x21, 0x83, - 0xaf, 0xc6, 0x1a, 0x2c, 0xf6, 0x61, 0xc6, 0x98, 0x97, 0x8b, 0xb8, 0xc9, 0xef, 0x42, 0xd9, 0x97, - 0x12, 0xd8, 0xbc, 0x1c, 0x63, 0xb3, 0x2f, 0xa1, 0x24, 0x17, 0x50, 0xab, 0x3f, 0x84, 0xcb, 0xfe, - 0xfa, 0x18, 0xb3, 0x6f, 0x4e, 0x31, 0xdb, 0x17, 0xb8, 0x28, 0x25, 0xa8, 0x86, 0x03, 0xcd, 0xdb, - 0x9c, 0x8c, 0xbf, 0xcc, 0x42, 0x61, 0xcb, 0x1e, 0x0c, 0x4d, 0x87, 0xee, 0x51, 0xde, 0x21, 0xee, - 0xa8, 0xef, 0x31, 0x73, 0x2b, 0x1b, 0xb7, 0xc2, 0x08, 0x82, 0x4d, 0xfe, 0x6f, 0x30, 0x56, 0x43, - 0x2c, 0xa1, 0x8b, 0x45, 0x9a, 0xce, 0x5c, 0x60, 0xb1, 0x48, 0xd2, 0x62, 0x89, 0x8c, 0xa5, 0x6c, - 0x10, 0x4b, 0x3a, 0x14, 0xc6, 0xc4, 0x09, 0xae, 0x96, 0xed, 0x19, 0x43, 0x12, 0xd0, 0x7d, 0x58, - 0x68, 0x39, 0xc4, 0xa4, 0xfe, 0x90, 0xd7, 0xcf, 0xac, 0xe0, 0xa9, 0xf0, 0x09, 0x43, 0x5e, 0x43, - 0xb7, 0xa0, 0x3c, 0xb0, 0xdb, 0x01, 0x5f, 0x5e, 0xf0, 0x95, 0x06, 0x76, 0xdb, 0x67, 0xba, 0x22, - 0x93, 0x12, 0xbd, 0x17, 0xca, 0xdb, 0x33, 0x22, 0x2d, 0xe1, 0xb7, 0x60, 0x3e, 0x64, 0x2b, 0x4d, - 0xbf, 0xcd, 0x0f, 0x9e, 0x6d, 0xee, 0xf1, 0x5c, 0xfd, 0x84, 0xa5, 0x67, 0xa3, 0xaa, 0xd1, 0x94, - 0xbf, 0xd7, 0x3c, 0x3c, 0xac, 0x66, 0xf0, 0xff, 0xfb, 0x4b, 0x44, 0x72, 0x57, 0x72, 0xfa, 0x8c, - 0x92, 0xd3, 0x35, 0x99, 0xd3, 0x33, 0x41, 0x4e, 0xcf, 0x3e, 0xae, 0x40, 0x99, 0x3b, 0xe4, 0x78, - 0x64, 0xf5, 0x6c, 0x0b, 0xff, 0x5a, 0x03, 0x38, 0x7a, 0x65, 0xc9, 0x8c, 0x53, 0x87, 0x42, 0x8b, - 0x0b, 0xaf, 0x69, 0x2c, 0x80, 0x2f, 0xc7, 0xfa, 0xd8, 0x90, 0x5c, 0xe8, 0x2d, 0x28, 0xb8, 0xa3, - 0x56, 0x8b, 0xb8, 0x32, 0xbf, 0xbf, 0x16, 0xcd, 0x21, 0x22, 0xc2, 0x0d, 0xc9, 0x47, 0x97, 0xbc, - 0x30, 0x7b, 0xfd, 0x11, 0xcb, 0xf6, 0xd3, 0x97, 0x08, 0x3e, 0xfc, 0x4b, 0x0d, 0x4a, 0x4c, 0xcb, - 0x54, 0x89, 0xeb, 0x1a, 0x14, 0x99, 0x0e, 0xa4, 0x2d, 0x52, 0xd7, 0x9c, 0x11, 0x10, 0xd0, 0xff, - 0x42, 0x51, 0x1e, 0x59, 0x99, 0xbd, 0x6a, 0xf1, 0x62, 0x0f, 0x86, 0x46, 0xc0, 0x8a, 0x77, 0xe1, - 0x12, 0xf3, 0x4a, 0x8b, 0x56, 0x65, 0xd2, 0x8f, 0x6a, 0xdd, 0xa2, 0x45, 0xea, 0x16, 0x1d, 0xe6, - 0x86, 0xdd, 0x33, 0xb7, 0xd7, 0x32, 0xfb, 0x42, 0x0b, 0x7f, 0x8c, 0xbf, 0x03, 0x48, 0x15, 0x96, - 0xc6, 0x5c, 0x3c, 0x0f, 0xa5, 0x6d, 0xd3, 0xed, 0x0a, 0x95, 0xf0, 0x47, 0x50, 0xe6, 0xc3, 0x54, - 0x3e, 0x44, 0x90, 0xeb, 0x9a, 0x6e, 0x97, 0x29, 0x3e, 0x6f, 0xb0, 0xdf, 0xf8, 0x12, 0x2c, 0x1c, - 0x5a, 0xe6, 0xd0, 0xed, 0xda, 0x32, 0xb9, 0xd2, 0xaa, 0xb4, 0x1a, 0xd0, 0x52, 0x21, 0xde, 0x83, - 0x05, 0x87, 0x0c, 0xcc, 0x9e, 0xd5, 0xb3, 0x3a, 0xc7, 0x27, 0x67, 0x1e, 0x71, 0x45, 0xd1, 0x5a, - 0xf1, 0xc9, 0x8f, 0x29, 0x95, 0xaa, 0x76, 0xd2, 0xb7, 0x4f, 0x44, 0x88, 0xb3, 0xdf, 0xf8, 0x37, - 0x1a, 0x94, 0x3f, 0x34, 0xbd, 0x96, 0xf4, 0x02, 0xda, 0x81, 0x8a, 0x1f, 0xd8, 0x8c, 0x22, 0x74, - 0x89, 0x64, 0x78, 0xb6, 0x66, 0x4b, 0x04, 0xba, 0xcc, 0xf0, 0xf3, 0x2d, 0x95, 0xc0, 0x44, 0x99, - 0x56, 0x8b, 0xf4, 0x7d, 0x51, 0x99, 0x64, 0x51, 0x8c, 0x51, 0x15, 0xa5, 0x12, 0x1e, 0x2f, 0x04, - 0xb7, 0x1f, 0x0f, 0xcb, 0x2f, 0x33, 0x80, 0x26, 0x75, 0xf8, 0xa6, 0x05, 0xc1, 0x1d, 0xa8, 0xb8, - 0x9e, 0xe9, 0x78, 0xc7, 0x91, 0x92, 0x7e, 0x9e, 0x51, 0xfd, 0xe4, 0x74, 0x0f, 0x16, 0x86, 0x8e, - 0xdd, 0x71, 0x88, 0xeb, 0x1e, 0x5b, 0xb6, 0xd7, 0x7b, 0x71, 0x26, 0xaa, 0xa1, 0x8a, 0x24, 0xef, - 0x33, 0x2a, 0x6a, 0x42, 0xe1, 0x45, 0xaf, 0xef, 0x11, 0xc7, 0xad, 0xcd, 0xae, 0x66, 0xd7, 0x2a, - 0x1b, 0x0f, 0xcf, 0xf3, 0xda, 0xfa, 0x7b, 0x8c, 0xff, 0xe8, 0x6c, 0x48, 0x0c, 0xb9, 0x56, 0xad, - 0x53, 0xf2, 0xa1, 0x3a, 0xe5, 0x0e, 0x40, 0xc0, 0x4f, 0xb3, 0xd6, 0xfe, 0xc1, 0xd3, 0x67, 0x47, - 0xd5, 0x19, 0x54, 0x86, 0xb9, 0xfd, 0x83, 0x46, 0x73, 0xaf, 0x49, 0xf3, 0x1a, 0xae, 0x4b, 0xdf, - 0xa8, 0x3e, 0x44, 0xcb, 0x30, 0xf7, 0x92, 0x52, 0xe5, 0x9b, 0x27, 0x6b, 0x14, 0xd8, 0x78, 0xa7, - 0x8d, 0xff, 0xaa, 0xc1, 0xbc, 0x38, 0x05, 0xa9, 0x8e, 0xa2, 0x0a, 0x91, 0x09, 0x41, 0xd0, 0xa2, - 0x88, 0x9f, 0x8e, 0xb6, 0xa8, 0xbd, 0xe4, 0x90, 0x86, 0x3b, 0xdf, 0x6c, 0xd2, 0x16, 0x6e, 0xf5, - 0xc7, 0xe8, 0x3e, 0x54, 0x5b, 0x3c, 0xdc, 0x23, 0xf7, 0x8c, 0xb1, 0x20, 0xe8, 0xfe, 0x26, 0xdd, - 0x81, 0x3c, 0x19, 0x13, 0xcb, 0x73, 0x6b, 0x25, 0x96, 0x9b, 0xe6, 0x65, 0x65, 0xd5, 0xa4, 0x54, - 0x43, 0x4c, 0xe2, 0xff, 0x81, 0x4b, 0x7b, 0xb4, 0xb4, 0x7d, 0xe2, 0x98, 0x96, 0x5a, 0x24, 0x1f, - 0x1d, 0xed, 0x09, 0xaf, 0x64, 0xbd, 0xa3, 0x3d, 0x54, 0x81, 0xcc, 0x4e, 0x43, 0xd8, 0x90, 0xe9, - 0x35, 0xf0, 0x67, 0x1a, 0x20, 0x75, 0x5d, 0x2a, 0x37, 0x45, 0x84, 0x4b, 0xf8, 0x6c, 0x00, 0xbf, - 0x04, 0xb3, 0xc4, 0x71, 0x6c, 0x87, 0x39, 0xa4, 0x68, 0xf0, 0x01, 0xbe, 0x2d, 0x74, 0x30, 0xc8, - 0xd8, 0x3e, 0xf5, 0xcf, 0x3c, 0x97, 0xa6, 0xf9, 0xaa, 0xee, 0xc2, 0x62, 0x88, 0x2b, 0x55, 0x8e, - 0xbc, 0x07, 0x97, 0x99, 0xb0, 0x5d, 0x42, 0x86, 0x9b, 0xfd, 0xde, 0x38, 0x11, 0x75, 0x08, 0x57, - 0xa2, 0x8c, 0xdf, 0xae, 0x8f, 0x70, 0x17, 0xf2, 0xef, 0xb3, 0x57, 0xb9, 0xa2, 0x4b, 0x8e, 0xf1, - 0x22, 0xc8, 0x59, 0xe6, 0x80, 0x3f, 0x70, 0x8a, 0x06, 0xfb, 0xcd, 0x2e, 0x15, 0x42, 0x9c, 0x67, - 0xc6, 0x1e, 0xbf, 0xbc, 0x8a, 0x86, 0x3f, 0x46, 0x2b, 0x00, 0xad, 0x7e, 0x8f, 0x58, 0x1e, 0x9b, - 0xcd, 0xb1, 0x59, 0x85, 0x82, 0xd7, 0xa1, 0xca, 0x91, 0x36, 0xdb, 0x6d, 0xe5, 0x02, 0xf3, 0xe5, - 0x69, 0x61, 0x79, 0xf8, 0x25, 0x5c, 0x52, 0xf8, 0x53, 0xb9, 0xe1, 0x75, 0xc8, 0xf3, 0xd6, 0x83, - 0xc8, 0x9d, 0x4b, 0xe1, 0x55, 0x1c, 0xc6, 0x10, 0x3c, 0xf8, 0x0e, 0x2c, 0x0a, 0x0a, 0x19, 0xd8, - 0x71, 0x7b, 0xc5, 0xfc, 0x83, 0xf7, 0x60, 0x29, 0xcc, 0x96, 0xea, 0x88, 0x6c, 0x4a, 0xd0, 0x67, - 0xc3, 0xb6, 0x92, 0x8a, 0xa3, 0x9b, 0xa2, 0x3a, 0x2c, 0x13, 0x71, 0x98, 0xaf, 0x90, 0x14, 0x91, - 0x4a, 0xa1, 0x45, 0xe9, 0xfe, 0xbd, 0x9e, 0xeb, 0x5f, 0xb8, 0x9f, 0x02, 0x52, 0x89, 0xa9, 0x36, - 0x65, 0x1d, 0x0a, 0xdc, 0xe1, 0xb2, 0xa6, 0x8b, 0xdf, 0x15, 0xc9, 0x44, 0x15, 0x6a, 0x90, 0x17, - 0x8e, 0xd9, 0x19, 0x10, 0x3f, 0xe7, 0xd0, 0x4a, 0x46, 0x25, 0xa6, 0xb2, 0xf8, 0x0f, 0x1a, 0x94, - 0x37, 0xfb, 0xa6, 0x33, 0x90, 0xce, 0x7f, 0x17, 0xf2, 0xbc, 0x44, 0x12, 0xcf, 0x88, 0xbb, 0x61, - 0x31, 0x2a, 0x2f, 0x1f, 0x6c, 0xf2, 0x82, 0x4a, 0xac, 0xa2, 0x9b, 0x25, 0x3a, 0x5e, 0x8d, 0x48, - 0x07, 0xac, 0x81, 0xde, 0x80, 0x59, 0x93, 0x2e, 0x61, 0xb1, 0x58, 0x89, 0x16, 0xa7, 0x4c, 0x1a, - 0xbb, 0xce, 0x38, 0x17, 0x7e, 0x07, 0x4a, 0x0a, 0x02, 0xad, 0xb9, 0x9f, 0x34, 0xc5, 0x95, 0xb5, - 0xb9, 0x75, 0xb4, 0xf3, 0x9c, 0x97, 0xe2, 0x15, 0x80, 0x46, 0xd3, 0x1f, 0x67, 0xf0, 0x47, 0x62, - 0x95, 0x88, 0x70, 0x55, 0x1f, 0x2d, 0x49, 0x9f, 0xcc, 0x85, 0xf4, 0x79, 0x05, 0xf3, 0xc2, 0xfc, - 0x54, 0x67, 0xe0, 0x2d, 0xc8, 0x33, 0x79, 0xf2, 0x08, 0x2c, 0xc7, 0xc0, 0xca, 0xe8, 0xe4, 0x8c, - 0x78, 0x01, 0xe6, 0x0f, 0x3d, 0xd3, 0x1b, 0xb9, 0xf2, 0x08, 0xfc, 0x5e, 0x83, 0x8a, 0xa4, 0xa4, - 0xed, 0x38, 0xc8, 0x97, 0x1a, 0xcf, 0x79, 0xfe, 0x3b, 0xed, 0x0a, 0xe4, 0xdb, 0x27, 0x87, 0xbd, - 0x4f, 0x65, 0x5f, 0x47, 0x8c, 0x28, 0xbd, 0xcf, 0x71, 0x78, 0x9f, 0x52, 0x8c, 0xe8, 0x13, 0xc0, - 0x31, 0x5f, 0x78, 0x3b, 0x56, 0x9b, 0xbc, 0x62, 0x37, 0x6d, 0xce, 0x08, 0x08, 0xac, 0x6a, 0x17, - 0xfd, 0x4c, 0x56, 0x99, 0xa8, 0xfd, 0xcd, 0x45, 0xb8, 0xb4, 0x39, 0xf2, 0xba, 0x4d, 0xcb, 0x3c, - 0xe9, 0xcb, 0x24, 0x80, 0x97, 0x00, 0x51, 0x62, 0xa3, 0xe7, 0xaa, 0xd4, 0x26, 0x2c, 0x52, 0x2a, - 0xb1, 0xbc, 0x5e, 0x4b, 0xc9, 0x18, 0x32, 0x6d, 0x6b, 0x91, 0xb4, 0x6d, 0xba, 0xee, 0x4b, 0xdb, - 0x69, 0x0b, 0xd3, 0xfc, 0x31, 0x6e, 0x70, 0xe1, 0xcf, 0xdc, 0x50, 0x62, 0xfe, 0xa6, 0x52, 0xd6, - 0x02, 0x29, 0x4f, 0x88, 0x37, 0x45, 0x0a, 0x7e, 0x08, 0x97, 0x25, 0xa7, 0x78, 0xca, 0x4f, 0x61, - 0x3e, 0x80, 0xeb, 0x92, 0x79, 0xab, 0x4b, 0xeb, 0xcd, 0xa7, 0x02, 0xf0, 0x3f, 0xd5, 0xf3, 0x31, - 0xd4, 0x7c, 0x3d, 0x59, 0x0d, 0x62, 0xf7, 0x55, 0x05, 0x46, 0xae, 0x38, 0x33, 0x45, 0x83, 0xfd, - 0xa6, 0x34, 0xc7, 0xee, 0xfb, 0x97, 0x20, 0xfd, 0x8d, 0xb7, 0x60, 0x59, 0xca, 0x10, 0xd5, 0x41, - 0x58, 0xc8, 0x84, 0x42, 0x71, 0x42, 0x84, 0xc3, 0xe8, 0xd2, 0xe9, 0x6e, 0x57, 0x39, 0xc3, 0xae, - 0x65, 0x32, 0x35, 0x45, 0xe6, 0x65, 0x7e, 0x22, 0xa8, 0x62, 0x6a, 0xd2, 0x16, 0x64, 0x2a, 0x40, - 0x25, 0x8b, 0x8d, 0xa0, 0xe4, 0x89, 0x8d, 0x98, 0x10, 0xfd, 0x31, 0xac, 0xf8, 0x4a, 0x50, 0xbf, - 0x3d, 0x25, 0xce, 0xa0, 0xe7, 0xba, 0xca, 0x5b, 0x34, 0xce, 0xf0, 0xbb, 0x90, 0x1b, 0x12, 0x91, - 0x53, 0x4a, 0x1b, 0x68, 0x9d, 0x7f, 0x75, 0x58, 0x57, 0x16, 0xb3, 0x79, 0xdc, 0x86, 0x1b, 0x52, - 0x3a, 0xf7, 0x68, 0xac, 0xf8, 0xa8, 0x52, 0xf2, 0x9d, 0xc2, 0xdd, 0x3a, 0xf9, 0x4e, 0xc9, 0xf2, - 0xbd, 0x97, 0xef, 0x14, 0x7a, 0x57, 0xa8, 0xb1, 0x95, 0xea, 0xae, 0xd8, 0xe5, 0x3e, 0xf5, 0x43, - 0x32, 0x95, 0xb0, 0x13, 0x58, 0x0a, 0x47, 0x72, 0xaa, 0x34, 0xb6, 0x04, 0xb3, 0x9e, 0x7d, 0x4a, - 0x64, 0x12, 0xe3, 0x03, 0xa9, 0xb0, 0x1f, 0xe6, 0xa9, 0x14, 0x36, 0x03, 0x61, 0xec, 0x48, 0xa6, - 0xd5, 0x97, 0xee, 0xa6, 0xac, 0x67, 0xf8, 0x00, 0xef, 0xc3, 0x95, 0x68, 0x9a, 0x48, 0xa5, 0xf2, - 0x73, 0x7e, 0x80, 0xe3, 0x32, 0x49, 0x2a, 0xb9, 0x1f, 0x04, 0xc9, 0x40, 0x49, 0x28, 0xa9, 0x44, - 0x1a, 0xa0, 0xc7, 0xe5, 0x97, 0xff, 0xc6, 0x79, 0xf5, 0xd3, 0x4d, 0x2a, 0x61, 0x6e, 0x20, 0x2c, - 0xfd, 0xf6, 0x07, 0x39, 0x22, 0x3b, 0x35, 0x47, 0x88, 0x20, 0x09, 0xb2, 0xd8, 0xb7, 0x70, 0xe8, - 0x04, 0x46, 0x90, 0x40, 0xd3, 0x62, 0xd0, 0x3b, 0xc4, 0xc7, 0x60, 0x03, 0x79, 0xb0, 0xd5, 0xb4, - 0x9b, 0x6a, 0x33, 0x3e, 0x0c, 0x72, 0xe7, 0x44, 0x66, 0x4e, 0x25, 0xf8, 0x23, 0x58, 0x4d, 0x4e, - 0xca, 0x69, 0x24, 0x3f, 0xc0, 0x50, 0xf4, 0x0b, 0x4a, 0xe5, 0x2b, 0x63, 0x09, 0x0a, 0xfb, 0x07, - 0x87, 0x4f, 0x37, 0xb7, 0x9a, 0x55, 0x6d, 0xe3, 0x9f, 0x59, 0xc8, 0xec, 0x3e, 0x47, 0xdf, 0x83, - 0x59, 0xfe, 0x0d, 0x62, 0xca, 0x27, 0x1a, 0x7d, 0xda, 0xd7, 0x0c, 0x7c, 0xed, 0xb3, 0x3f, 0xfe, - 0xe5, 0x8b, 0xcc, 0x15, 0x7c, 0xa9, 0x3e, 0x7e, 0xdb, 0xec, 0x0f, 0xbb, 0x66, 0xfd, 0x74, 0x5c, - 0x67, 0x77, 0xc2, 0x23, 0xed, 0x01, 0x7a, 0x0e, 0xd9, 0xa7, 0x23, 0x0f, 0x25, 0x7e, 0xbf, 0xd1, - 0x93, 0xbf, 0x72, 0x60, 0x9d, 0x49, 0x5e, 0xc2, 0x0b, 0xaa, 0xe4, 0xe1, 0xc8, 0xa3, 0x72, 0xc7, - 0x50, 0x52, 0x3e, 0x54, 0xa0, 0x73, 0xbf, 0xec, 0xe8, 0xe7, 0x7f, 0x04, 0xc1, 0x98, 0xe1, 0x5d, - 0xc3, 0xaf, 0xa9, 0x78, 0xfc, 0x7b, 0x8a, 0x6a, 0xcf, 0xd1, 0x2b, 0x2b, 0x6a, 0x4f, 0xd0, 0x7a, - 0x8f, 0xda, 0xa3, 0xb4, 0xbb, 0xe3, 0xed, 0xf1, 0x5e, 0x59, 0x54, 0xae, 0x2d, 0x3e, 0xae, 0xb4, - 0x3c, 0x74, 0x23, 0xa6, 0x57, 0xaf, 0x76, 0xa5, 0xf5, 0xd5, 0x64, 0x06, 0x81, 0x74, 0x93, 0x21, - 0x5d, 0xc5, 0x57, 0x54, 0xa4, 0x96, 0xcf, 0xf7, 0x48, 0x7b, 0xb0, 0xd1, 0x85, 0x59, 0xd6, 0x4b, - 0x43, 0xc7, 0xf2, 0x87, 0x1e, 0xd3, 0x05, 0x4c, 0x38, 0x01, 0xa1, 0x2e, 0x1c, 0x5e, 0x66, 0x68, - 0x8b, 0xb8, 0xe2, 0xa3, 0xb1, 0x76, 0xda, 0x23, 0xed, 0xc1, 0x9a, 0xf6, 0xa6, 0xb6, 0xf1, 0x8f, - 0x0c, 0xcc, 0xb2, 0xa6, 0x0b, 0x1a, 0x02, 0x04, 0xdd, 0xa9, 0xa8, 0x9d, 0x13, 0xfd, 0xae, 0xa8, - 0x9d, 0x93, 0x8d, 0x2d, 0x7c, 0x83, 0x21, 0x2f, 0xe3, 0x25, 0x1f, 0x99, 0x7d, 0x10, 0xae, 0x77, - 0x28, 0x17, 0x75, 0xeb, 0x4b, 0x28, 0x29, 0x5d, 0x26, 0x14, 0x27, 0x31, 0xd4, 0xa6, 0x8a, 0x1e, - 0x93, 0x98, 0x16, 0x15, 0xbe, 0xc5, 0x40, 0xaf, 0xe3, 0x9a, 0xea, 0x5c, 0x8e, 0xeb, 0x30, 0x4e, - 0x0a, 0xfc, 0x63, 0x0d, 0x2a, 0xe1, 0x4e, 0x13, 0xba, 0x15, 0x23, 0x3a, 0xda, 0xb0, 0xd2, 0x6f, - 0x4f, 0x67, 0x4a, 0x54, 0x81, 0xe3, 0x9f, 0x12, 0x32, 0x34, 0x29, 0xa7, 0xf4, 0xfd, 0xbf, 0xb2, - 0x50, 0xd8, 0xe2, 0x7f, 0x32, 0x82, 0x3c, 0x28, 0xfa, 0xfd, 0x1e, 0xb4, 0x12, 0xd7, 0x0b, 0x08, - 0x0a, 0x65, 0xfd, 0x46, 0xe2, 0xbc, 0x50, 0xe1, 0x2e, 0x53, 0x61, 0x15, 0x5f, 0xf5, 0x55, 0x10, - 0x7f, 0x9a, 0x52, 0xe7, 0x4f, 0xde, 0xba, 0xd9, 0x6e, 0x53, 0x47, 0xfc, 0x48, 0x83, 0xb2, 0xda, - 0xc6, 0x41, 0x37, 0x63, 0xbb, 0x10, 0x6a, 0x27, 0x48, 0xc7, 0xd3, 0x58, 0x04, 0xfe, 0x7d, 0x86, - 0x7f, 0x0b, 0xaf, 0x24, 0xe1, 0x3b, 0x8c, 0x3f, 0xac, 0x02, 0x6f, 0xdc, 0xc4, 0xab, 0x10, 0xea, - 0x0b, 0xc5, 0xab, 0x10, 0xee, 0xfb, 0x9c, 0xaf, 0xc2, 0x88, 0xf1, 0x53, 0x15, 0x5e, 0x01, 0x04, - 0x7d, 0x1d, 0x14, 0xeb, 0x5c, 0xe5, 0xe9, 0x10, 0x3d, 0xf9, 0x93, 0x2d, 0x21, 0x7c, 0x8f, 0x61, - 0xdf, 0xc4, 0xd7, 0x92, 0xb0, 0xfb, 0x3d, 0x97, 0x46, 0xc0, 0xc6, 0x6f, 0x73, 0x50, 0x7a, 0xdf, - 0xec, 0x59, 0x1e, 0xb1, 0x4c, 0xab, 0x45, 0x50, 0x07, 0x66, 0xd9, 0xdd, 0x10, 0x0d, 0x77, 0xb5, - 0xd9, 0x12, 0x0d, 0xf7, 0x50, 0x27, 0x02, 0xdf, 0x61, 0xd0, 0x37, 0xb0, 0xee, 0x43, 0x0f, 0x02, - 0xf9, 0x75, 0xd6, 0x45, 0xa0, 0x26, 0x9f, 0x42, 0x9e, 0x77, 0x0d, 0x50, 0x44, 0x5a, 0xa8, 0xbb, - 0xa0, 0x5f, 0x8b, 0x9f, 0x4c, 0x3c, 0x65, 0x2a, 0x96, 0xcb, 0x98, 0x29, 0xd8, 0xf7, 0x01, 0x82, - 0x36, 0x55, 0xd4, 0xbf, 0x13, 0x5d, 0x2d, 0x7d, 0x35, 0x99, 0x41, 0x00, 0x3f, 0x60, 0xc0, 0xb7, - 0xf1, 0x8d, 0x58, 0xe0, 0xb6, 0xbf, 0x80, 0x82, 0xb7, 0x20, 0xb7, 0x6d, 0xba, 0x5d, 0x14, 0x49, - 0xfd, 0xca, 0x57, 0x3b, 0x5d, 0x8f, 0x9b, 0x12, 0x50, 0xb7, 0x19, 0xd4, 0x0a, 0x5e, 0x8e, 0x85, - 0xea, 0x9a, 0x2e, 0xcd, 0xa4, 0x68, 0x04, 0x73, 0xf2, 0x4b, 0x1c, 0xba, 0x1e, 0xf1, 0x59, 0xf8, - 0xab, 0x9d, 0xbe, 0x92, 0x34, 0x2d, 0x00, 0xd7, 0x18, 0x20, 0xc6, 0xd7, 0xe3, 0x9d, 0x2a, 0xd8, - 0x1f, 0x69, 0x0f, 0xde, 0xd4, 0x36, 0x7e, 0x5a, 0x85, 0x1c, 0xad, 0x52, 0x68, 0xee, 0x0e, 0x1e, - 0x77, 0x51, 0x0f, 0x4f, 0xb4, 0x54, 0xa2, 0x1e, 0x9e, 0x7c, 0x17, 0xc6, 0xe4, 0x6e, 0xf6, 0x87, - 0x73, 0x84, 0x71, 0x51, 0x8b, 0x3d, 0x28, 0x29, 0x4f, 0x40, 0x14, 0x23, 0x31, 0xdc, 0xb0, 0x89, - 0xe6, 0xee, 0x98, 0xf7, 0x23, 0x5e, 0x65, 0xa0, 0x3a, 0xbe, 0x1c, 0x06, 0x6d, 0x73, 0x36, 0x8a, - 0xfa, 0x03, 0x28, 0xab, 0x6f, 0x45, 0x14, 0x23, 0x34, 0xd2, 0x11, 0x8a, 0xe6, 0x8a, 0xb8, 0xa7, - 0x66, 0x4c, 0xd0, 0xf8, 0x7f, 0x26, 0x28, 0x79, 0x29, 0xfa, 0x27, 0x50, 0x10, 0x2f, 0xc8, 0x38, - 0x7b, 0xc3, 0x3d, 0xa4, 0x38, 0x7b, 0x23, 0xcf, 0xcf, 0x98, 0x42, 0x80, 0xc1, 0xd2, 0x4a, 0x59, - 0x26, 0x68, 0x01, 0xf9, 0x84, 0x78, 0x49, 0x90, 0x41, 0x57, 0x24, 0x09, 0x52, 0x79, 0xa5, 0x4c, - 0x85, 0xec, 0x10, 0x4f, 0x9c, 0x65, 0xf9, 0x04, 0x40, 0x09, 0x12, 0xd5, 0x6c, 0x88, 0xa7, 0xb1, - 0x24, 0xd6, 0x6e, 0x01, 0xaa, 0x48, 0x85, 0xe8, 0x87, 0x00, 0xc1, 0x73, 0x37, 0x7a, 0x1d, 0xc7, - 0xf6, 0xcc, 0xa2, 0xd7, 0x71, 0xfc, 0x8b, 0x39, 0x26, 0x82, 0x03, 0x70, 0x5e, 0x3f, 0x52, 0xf8, - 0x9f, 0x6b, 0x80, 0x26, 0x9f, 0xc7, 0xe8, 0x61, 0x3c, 0x44, 0x6c, 0x3b, 0x4e, 0x7f, 0xfd, 0x62, - 0xcc, 0x89, 0xd9, 0x33, 0xd0, 0xab, 0xc5, 0x96, 0x0c, 0x5f, 0x52, 0xcd, 0x3e, 0xd7, 0x60, 0x3e, - 0xf4, 0xc0, 0x46, 0x77, 0x13, 0xf6, 0x39, 0xd2, 0xd2, 0xd3, 0xef, 0x9d, 0xcb, 0x97, 0x58, 0xb1, - 0x28, 0xa7, 0x42, 0x56, 0x6b, 0x3f, 0xd1, 0xa0, 0x12, 0x7e, 0x95, 0xa3, 0x04, 0x80, 0x89, 0xbe, - 0xa0, 0xbe, 0x76, 0x3e, 0xe3, 0x05, 0x76, 0x2b, 0x28, 0xe0, 0x3e, 0x81, 0x82, 0x78, 0xcc, 0xc7, - 0x85, 0x45, 0xb8, 0xad, 0x18, 0x17, 0x16, 0x91, 0x4e, 0x40, 0x52, 0x58, 0xd0, 0x77, 0xb1, 0x12, - 0x89, 0xe2, 0xc9, 0x9f, 0x04, 0x39, 0x3d, 0x12, 0x23, 0xfd, 0x82, 0xa9, 0x90, 0x41, 0x24, 0xca, - 0x07, 0x3f, 0x4a, 0x90, 0x78, 0x4e, 0x24, 0x46, 0xfb, 0x05, 0x49, 0x91, 0xc8, 0x50, 0x95, 0x48, - 0x0c, 0xde, 0xe7, 0x71, 0x91, 0x38, 0xd1, 0x34, 0x8d, 0x8b, 0xc4, 0xc9, 0x27, 0x7e, 0xd2, 0xde, - 0x32, 0xf0, 0x50, 0x24, 0x2e, 0xc6, 0xbc, 0xe7, 0xd1, 0xeb, 0x09, 0x3e, 0x8d, 0x6d, 0xc8, 0xea, - 0x6f, 0x5c, 0x90, 0x7b, 0x7a, 0x04, 0xf0, 0xdd, 0x90, 0x11, 0xf0, 0x2b, 0x0d, 0x96, 0xe2, 0x1a, - 0x02, 0x28, 0x01, 0x2c, 0xa1, 0x9b, 0xab, 0xaf, 0x5f, 0x94, 0xfd, 0x02, 0x7e, 0xf3, 0x63, 0xe2, - 0x71, 0xf5, 0x77, 0x5f, 0xaf, 0x68, 0x5f, 0x7d, 0xbd, 0xa2, 0xfd, 0xe9, 0xeb, 0x15, 0xed, 0x17, - 0x7f, 0x5e, 0x99, 0x39, 0xc9, 0xb3, 0xbf, 0x5e, 0x7f, 0xfb, 0xdf, 0x01, 0x00, 0x00, 0xff, 0xff, - 0x66, 0x40, 0x0b, 0xdf, 0x44, 0x2f, 0x00, 0x00, + // 3228 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x09, 0x6e, 0x88, 0x02, 0xff, 0xb4, 0x3a, 0x4d, 0x73, 0x1b, 0xc7, + 0xb1, 0x5a, 0x00, 0x04, 0x88, 0x06, 0x08, 0x51, 0x43, 0x4a, 0x06, 0x57, 0x14, 0x45, 0x8d, 0x3e, + 0x6d, 0xd9, 0xc4, 0x33, 0xed, 0xf7, 0x0e, 0xef, 0xbd, 0x72, 0x15, 0x48, 0xc0, 0x32, 0x43, 0x9a, + 0x94, 0x97, 0x14, 0xed, 0x54, 0xb9, 0xc2, 0x5a, 0x02, 0x2b, 0x12, 0x45, 0x7c, 0x79, 0x77, 0x01, + 0x89, 0x4e, 0x52, 0x95, 0x72, 0xc5, 0x87, 0xe4, 0x18, 0x1f, 0x92, 0x38, 0xc7, 0xfc, 0x86, 0xdc, + 0xf2, 0x03, 0x52, 0xb9, 0xc4, 0x55, 0xf9, 0x03, 0xa9, 0x24, 0x87, 0x1c, 0x72, 0x4f, 0xe5, 0x90, + 0x4a, 0xe6, 0x73, 0x77, 0x76, 0x31, 0x0b, 0xd2, 0xd9, 0xf8, 0x20, 0x71, 0xa7, 0xa7, 0xa7, 0xbf, + 0x66, 0xba, 0xa7, 0xbb, 0x07, 0x50, 0x74, 0x87, 0xad, 0xb5, 0xa1, 0x3b, 0xf0, 0x07, 0xa8, 0xec, + 0xf8, 0xad, 0xb6, 0xe7, 0xb8, 0x63, 0xc7, 0x1d, 0x1e, 0x9b, 0x8b, 0x27, 0x83, 0x93, 0x01, 0x9b, + 0xa8, 0xd1, 0x2f, 0x8e, 0x63, 0x2e, 0x51, 0x9c, 0x5a, 0x6f, 0xdc, 0x6a, 0xb1, 0xff, 0x86, 0xc7, + 0xb5, 0xb3, 0xb1, 0x98, 0xba, 0xc9, 0xa6, 0xec, 0x91, 0x7f, 0xca, 0xfe, 0x23, 0x53, 0xf4, 0x8f, + 0x98, 0x5c, 0x3e, 0x19, 0x0c, 0x4e, 0xba, 0x4e, 0xcd, 0x1e, 0x76, 0x6a, 0x76, 0xbf, 0x3f, 0xf0, + 0x6d, 0xbf, 0x33, 0xe8, 0x7b, 0x7c, 0x16, 0x7f, 0x6e, 0x40, 0xc5, 0x72, 0xbc, 0x21, 0x81, 0x38, + 0xef, 0x39, 0x76, 0xdb, 0x71, 0xd1, 0x2d, 0x80, 0x56, 0x77, 0xe4, 0xf9, 0x8e, 0x7b, 0xd4, 0x69, + 0x57, 0x8d, 0x55, 0xe3, 0x51, 0xce, 0x2a, 0x0a, 0xc8, 0x56, 0x1b, 0xdd, 0x84, 0x62, 0xcf, 0xe9, + 0x1d, 0xf3, 0xd9, 0x0c, 0x9b, 0x9d, 0xe5, 0x00, 0x32, 0x69, 0xc2, 0xac, 0xeb, 0x8c, 0x3b, 0x1e, + 0xe1, 0x50, 0xcd, 0x92, 0xb9, 0xac, 0x15, 0x8c, 0xe9, 0x42, 0xd7, 0x7e, 0xee, 0x1f, 0x11, 0x32, + 0xbd, 0x6a, 0x8e, 0x2f, 0xa4, 0x80, 0x03, 0x32, 0xc6, 0x5f, 0x65, 0xa1, 0x6c, 0xd9, 0xfd, 0x13, + 0xc7, 0x72, 0x3e, 0x19, 0x39, 0x9e, 0x8f, 0xe6, 0x21, 0x7b, 0xe6, 0x9c, 0x33, 0xf6, 0x65, 0x8b, + 0x7e, 0xf2, 0xf5, 0x04, 0xe3, 0xc8, 0xe9, 0x73, 0xc6, 0x65, 0xba, 0x9e, 0x00, 0x9a, 0xfd, 0x36, + 0x5a, 0x84, 0x99, 0x6e, 0xa7, 0xd7, 0xf1, 0x05, 0x57, 0x3e, 0x88, 0x88, 0x93, 0x8b, 0x89, 0xb3, + 0x09, 0xe0, 0x0d, 0x5c, 0xff, 0x68, 0xe0, 0x12, 0xa5, 0xab, 0x33, 0x64, 0xb6, 0xb2, 0x7e, 0x6f, + 0x4d, 0xdd, 0x88, 0x35, 0x55, 0xa0, 0xb5, 0x7d, 0x82, 0xbc, 0x47, 0x71, 0xad, 0xa2, 0x27, 0x3f, + 0xd1, 0xbb, 0x50, 0x62, 0x44, 0x7c, 0xdb, 0x3d, 0x71, 0xfc, 0x6a, 0x9e, 0x51, 0xb9, 0x7f, 0x01, + 0x95, 0x03, 0x86, 0x6c, 0x31, 0xf6, 0xfc, 0x1b, 0x61, 0x28, 0x13, 0xfc, 0x8e, 0xdd, 0xed, 0x7c, + 0x6a, 0x1f, 0x77, 0x9d, 0x6a, 0x81, 0x10, 0x9a, 0xb5, 0x22, 0x30, 0xaa, 0x3f, 0x31, 0x83, 0x77, + 0x34, 0xe8, 0x77, 0xcf, 0xab, 0xb3, 0x0c, 0x61, 0x96, 0x02, 0xf6, 0xc8, 0x98, 0x6d, 0xda, 0x60, + 0xd4, 0xf7, 0xf9, 0x6c, 0x91, 0xcd, 0x16, 0x19, 0x84, 0x4e, 0xe3, 0x35, 0x28, 0x06, 0xf2, 0xa3, + 0x59, 0xc8, 0xed, 0xee, 0xed, 0x36, 0xe7, 0xaf, 0x20, 0x80, 0x7c, 0x7d, 0x7f, 0xb3, 0xb9, 0xdb, + 0x98, 0x37, 0x50, 0x09, 0x0a, 0x8d, 0x26, 0x1f, 0x64, 0xf0, 0x06, 0x40, 0x28, 0x29, 0x2a, 0x40, + 0x76, 0xbb, 0xf9, 0x6d, 0x82, 0x4f, 0x70, 0x0e, 0x9b, 0xd6, 0xfe, 0xd6, 0xde, 0x2e, 0x59, 0x40, + 0x16, 0x6f, 0x5a, 0xcd, 0xfa, 0x41, 0x73, 0x3e, 0x43, 0x31, 0xde, 0xdf, 0x6b, 0xcc, 0x67, 0x51, + 0x11, 0x66, 0x0e, 0xeb, 0x3b, 0xcf, 0x9a, 0xf3, 0x39, 0xfc, 0x85, 0x01, 0x73, 0x42, 0x77, 0x7e, + 0xbe, 0xd0, 0xdb, 0x90, 0x3f, 0x65, 0x67, 0x8c, 0x6d, 0x6b, 0x69, 0x7d, 0x39, 0x66, 0xa8, 0xc8, + 0x39, 0xb4, 0x04, 0x2e, 0xb1, 0x4d, 0xf6, 0x6c, 0xec, 0x91, 0x1d, 0xcf, 0x92, 0x25, 0xf3, 0x6b, + 0xfc, 0xf0, 0xaf, 0x6d, 0x3b, 0xe7, 0x87, 0x76, 0x77, 0xe4, 0x58, 0x74, 0x12, 0x21, 0xc8, 0xf5, + 0x06, 0xae, 0xc3, 0x76, 0x7f, 0xd6, 0x62, 0xdf, 0xf4, 0x48, 0x30, 0x03, 0x88, 0x9d, 0xe7, 0x03, + 0xdc, 0x02, 0x78, 0x3a, 0xf2, 0x93, 0x4f, 0x19, 0x59, 0x35, 0xa6, 0x74, 0xc5, 0x09, 0xe3, 0x03, + 0x76, 0xbc, 0x1c, 0xdb, 0x73, 0x82, 0xe3, 0x45, 0x07, 0xe8, 0x15, 0x28, 0x0c, 0xc9, 0x79, 0x3a, + 0x3a, 0x1b, 0x33, 0x1e, 0xb3, 0x56, 0x9e, 0x0e, 0xb7, 0xc7, 0xb8, 0x0f, 0x25, 0xc6, 0x24, 0x95, + 0xde, 0xaf, 0x86, 0xd4, 0x33, 0x6c, 0xd9, 0xa4, 0xee, 0x92, 0xdf, 0xc7, 0x80, 0x1a, 0x4e, 0xd7, + 0xf1, 0x9d, 0x34, 0x2e, 0xa4, 0x68, 0x93, 0x8d, 0x68, 0xf3, 0x13, 0x03, 0x16, 0x22, 0xe4, 0x53, + 0xa9, 0x55, 0x85, 0x42, 0x9b, 0x11, 0xe3, 0x12, 0x64, 0x2d, 0x39, 0x44, 0x8f, 0x61, 0x56, 0x08, + 0xe0, 0x11, 0x09, 0xf4, 0xbb, 0x5d, 0xe0, 0x32, 0x79, 0xf8, 0xaf, 0x06, 0x14, 0x85, 0xa2, 0x7b, + 0x43, 0x54, 0x87, 0x39, 0x97, 0x0f, 0x8e, 0x98, 0x3e, 0x42, 0x22, 0x33, 0xd9, 0x13, 0xdf, 0xbb, + 0x62, 0x95, 0xc5, 0x12, 0x06, 0x46, 0xff, 0x07, 0x25, 0x49, 0x62, 0x38, 0xf2, 0x85, 0xc9, 0xab, + 0x51, 0x02, 0xe1, 0xc9, 0x21, 0xcb, 0x41, 0xa0, 0x13, 0x20, 0x3a, 0x80, 0x45, 0xb9, 0x98, 0x6b, + 0x23, 0xc4, 0xc8, 0x32, 0x2a, 0xab, 0x51, 0x2a, 0x93, 0x5b, 0x45, 0xa8, 0x21, 0xb1, 0x5e, 0x99, + 0xdc, 0x28, 0x42, 0x41, 0x40, 0xf1, 0xdf, 0x0c, 0x00, 0x69, 0x50, 0xa2, 0x6f, 0x03, 0x2a, 0xae, + 0x18, 0x45, 0x14, 0xbe, 0xa9, 0x55, 0x58, 0xec, 0xc3, 0x15, 0x6b, 0x4e, 0x2e, 0xe2, 0x2a, 0xbf, + 0x03, 0xe5, 0x80, 0x4a, 0xa8, 0xf3, 0x92, 0x46, 0xe7, 0x80, 0x42, 0x49, 0x2e, 0xa0, 0x5a, 0x7f, + 0x08, 0xd7, 0x83, 0xf5, 0x1a, 0xb5, 0xef, 0x4c, 0x51, 0x3b, 0x20, 0xb8, 0x20, 0x29, 0xa8, 0x8a, + 0x03, 0x8d, 0xdb, 0x1c, 0x8c, 0xbf, 0xcc, 0x42, 0x61, 0x73, 0xd0, 0x1b, 0xda, 0x2e, 0xdd, 0xa3, + 0x3c, 0x81, 0x8f, 0xba, 0x3e, 0x53, 0xb7, 0xb2, 0x7e, 0x37, 0xca, 0x41, 0xa0, 0xc9, 0xbf, 0x16, + 0x43, 0xb5, 0xc4, 0x12, 0xba, 0x58, 0x84, 0xe9, 0xcc, 0x25, 0x16, 0x8b, 0x20, 0x2d, 0x96, 0x48, + 0x5f, 0xca, 0x86, 0xbe, 0x64, 0x42, 0x81, 0x2c, 0x0c, 0xaf, 0x16, 0xa2, 0x8b, 0x04, 0x10, 0xd7, + 0xbd, 0xda, 0x72, 0x1d, 0x9b, 0xda, 0x43, 0x5e, 0x3f, 0x33, 0x02, 0xa7, 0xc2, 0x27, 0x2c, 0x79, + 0x0d, 0xdd, 0x85, 0x72, 0x6f, 0xd0, 0x0e, 0xf1, 0xf2, 0x02, 0xaf, 0x44, 0xa0, 0x01, 0xd2, 0x0d, + 0x19, 0x94, 0xe8, 0xbd, 0x50, 0x26, 0xb3, 0x7c, 0x88, 0xdf, 0x84, 0xb9, 0x88, 0xae, 0x34, 0xfc, + 0x36, 0x3f, 0x78, 0x56, 0xdf, 0xe1, 0xb1, 0xfa, 0x09, 0x0b, 0xcf, 0x16, 0x89, 0xd5, 0x24, 0xe4, + 0xef, 0x34, 0xf7, 0xf7, 0x49, 0x64, 0xff, 0xff, 0x60, 0x89, 0x08, 0xee, 0x4a, 0x4c, 0xbf, 0xa2, + 0xc4, 0x74, 0x43, 0xc6, 0xf4, 0x4c, 0x18, 0xd3, 0xb3, 0x1b, 0x15, 0x28, 0x73, 0x83, 0x1c, 0x8d, + 0xfa, 0x44, 0x30, 0xfc, 0x4b, 0x72, 0x2c, 0x0f, 0x5e, 0xf6, 0x65, 0xc4, 0xa9, 0x41, 0xa1, 0xc5, + 0x89, 0x93, 0x0d, 0xa2, 0x0e, 0x7c, 0x5d, 0x6b, 0x63, 0x4b, 0x62, 0xa1, 0x37, 0xa1, 0xe0, 0x8d, + 0x5a, 0x2d, 0xc7, 0x93, 0xf1, 0xfd, 0x95, 0x78, 0x0c, 0x11, 0x1e, 0x6e, 0x49, 0x3c, 0xba, 0xe4, + 0xb9, 0xdd, 0xe9, 0x8e, 0x58, 0xb4, 0x9f, 0xbe, 0x44, 0xe0, 0xe1, 0x9f, 0x1b, 0x50, 0x62, 0x52, + 0xa6, 0x0a, 0x5c, 0xcb, 0x50, 0x64, 0x32, 0x38, 0x6d, 0x11, 0xba, 0xc8, 0x0d, 0x1b, 0x00, 0xd0, + 0xff, 0x90, 0xd0, 0x2a, 0xd6, 0xc9, 0xe8, 0x55, 0xd5, 0x93, 0x25, 0x92, 0x85, 0xa8, 0x78, 0x1b, + 0xae, 0x31, 0xab, 0xb4, 0x68, 0x56, 0x26, 0xed, 0xa8, 0xe6, 0x2d, 0x46, 0x2c, 0x6f, 0x21, 0x73, + 0xc3, 0xd3, 0x73, 0xaf, 0xd3, 0xb2, 0xbb, 0x42, 0x8a, 0x60, 0x8c, 0xbf, 0x05, 0x48, 0x25, 0x96, + 0x46, 0x5d, 0x3c, 0x07, 0xa5, 0xf7, 0x6c, 0xef, 0x54, 0x88, 0x84, 0x3f, 0x82, 0x32, 0x1f, 0xa6, + 0xb2, 0x21, 0xb9, 0xa7, 0x4f, 0x09, 0x15, 0x26, 0xf8, 0x9c, 0xc5, 0xbe, 0xf1, 0x35, 0xb8, 0xba, + 0xdf, 0xb7, 0x87, 0xde, 0xe9, 0x40, 0x06, 0x57, 0x9a, 0x95, 0xce, 0x87, 0xb0, 0x54, 0x1c, 0x1f, + 0xc2, 0x55, 0xd7, 0xe9, 0xd9, 0x9d, 0x7e, 0xa7, 0x7f, 0x72, 0x74, 0x7c, 0xee, 0x3b, 0x9e, 0x48, + 0x5a, 0x2b, 0x01, 0x78, 0x83, 0x42, 0xa9, 0x68, 0xc7, 0xdd, 0xc1, 0xb1, 0x70, 0x71, 0xf6, 0x8d, + 0x7f, 0x65, 0x40, 0xf9, 0x43, 0xdb, 0x6f, 0x49, 0x2b, 0xa0, 0x2d, 0xa8, 0x04, 0x8e, 0xcd, 0x20, + 0x42, 0x96, 0x58, 0x84, 0x67, 0x6b, 0x36, 0x85, 0xa3, 0xcb, 0x08, 0x3f, 0xd7, 0x52, 0x01, 0x8c, + 0x94, 0xdd, 0x6f, 0x39, 0xdd, 0x80, 0x54, 0x26, 0x99, 0x14, 0x43, 0x54, 0x49, 0xa9, 0x80, 0x8d, + 0xab, 0xe1, 0xed, 0xc7, 0xdd, 0xf2, 0xcb, 0x0c, 0xa0, 0x49, 0x19, 0xbe, 0x6e, 0x42, 0x70, 0x1f, + 0x2a, 0x1e, 0xf1, 0x76, 0xff, 0x28, 0x96, 0xd2, 0xcf, 0x31, 0x68, 0x10, 0x9c, 0x88, 0x85, 0x49, + 0x2d, 0x71, 0x42, 0x8e, 0xb4, 0x77, 0x44, 0xca, 0x8b, 0xce, 0xf3, 0x73, 0x91, 0x0d, 0x55, 0x24, + 0x78, 0x97, 0x41, 0x51, 0x93, 0x78, 0x6e, 0xa7, 0x4b, 0xd2, 0x7f, 0x8f, 0x44, 0xc3, 0x2c, 0x89, + 0xc0, 0x8f, 0x2f, 0xb2, 0xda, 0xda, 0xbb, 0x0c, 0xff, 0xe0, 0x7c, 0x48, 0x62, 0x86, 0x58, 0xab, + 0xe6, 0x29, 0xf9, 0x48, 0x9e, 0x72, 0x1f, 0x20, 0xc4, 0xa7, 0x51, 0x6b, 0x77, 0xef, 0xe9, 0xb3, + 0x03, 0x12, 0xd5, 0xca, 0x30, 0xbb, 0xbb, 0xd7, 0x68, 0xee, 0x34, 0x69, 0x5c, 0xc3, 0x35, 0x69, + 0x1b, 0xd5, 0x86, 0x68, 0x09, 0x66, 0x5f, 0x50, 0xa8, 0xac, 0x79, 0x48, 0x5e, 0xc2, 0xc6, 0x5b, + 0x6d, 0xfc, 0x17, 0x92, 0xc8, 0x8a, 0x53, 0x90, 0xea, 0x28, 0xaa, 0x2c, 0x32, 0x11, 0x16, 0x34, + 0x29, 0xe2, 0xa7, 0xa3, 0x2d, 0x72, 0x2f, 0x39, 0xa4, 0xee, 0xce, 0x37, 0x9b, 0x4c, 0x71, 0xb3, + 0x06, 0x63, 0x72, 0xcd, 0xcc, 0xb7, 0xb8, 0xbb, 0xc7, 0xee, 0x19, 0xeb, 0xaa, 0x80, 0x07, 0x9b, + 0x74, 0x1f, 0xf2, 0xce, 0xd8, 0xe9, 0xfb, 0x5e, 0xb5, 0xc4, 0x62, 0xd3, 0x9c, 0xcc, 0xac, 0x9a, + 0x14, 0x6a, 0x89, 0x49, 0xfc, 0xdf, 0x70, 0x6d, 0x87, 0xa6, 0xb6, 0x4f, 0xc8, 0x21, 0x50, 0x93, + 0xe4, 0x83, 0x83, 0x1d, 0x61, 0x95, 0xac, 0x7f, 0xb0, 0x83, 0x2a, 0x90, 0xd9, 0x6a, 0x08, 0x1d, + 0x32, 0x9d, 0x06, 0xfe, 0xcc, 0x00, 0xa4, 0xae, 0x4b, 0x65, 0xa6, 0x18, 0x71, 0xc9, 0x3e, 0x1b, + 0xb2, 0x27, 0xd9, 0xb8, 0xe3, 0xba, 0x03, 0x97, 0x19, 0xa4, 0x68, 0xf1, 0x01, 0xbe, 0x27, 0x64, + 0x20, 0x3a, 0x0f, 0xce, 0x82, 0x33, 0xcf, 0xa9, 0x19, 0x81, 0xa8, 0xdb, 0xb0, 0x10, 0xc1, 0x4a, + 0x15, 0x23, 0x1f, 0xc2, 0x75, 0x46, 0x6c, 0xdb, 0x71, 0x86, 0xf5, 0x6e, 0x67, 0x9c, 0xc8, 0x75, + 0x08, 0x37, 0xe2, 0x88, 0xdf, 0xac, 0x8d, 0xf0, 0x29, 0xe4, 0xdf, 0x67, 0x55, 0xb9, 0x22, 0x4b, + 0x8e, 0xe1, 0x92, 0x40, 0xd7, 0xb7, 0x7b, 0xbc, 0xc0, 0x29, 0x5a, 0xec, 0x9b, 0x5d, 0x2a, 0x8e, + 0xe3, 0x3e, 0xb3, 0x76, 0xf8, 0xe5, 0x55, 0xb4, 0x82, 0x31, 0x5a, 0xa1, 0xfd, 0x80, 0x0e, 0x39, + 0x1e, 0x6c, 0x36, 0xc7, 0x66, 0x15, 0x08, 0xa9, 0x2d, 0xe7, 0x39, 0xa7, 0x7a, 0xbb, 0xad, 0x5c, + 0x60, 0x01, 0x3d, 0x23, 0x4a, 0x0f, 0xbf, 0x80, 0x6b, 0x0a, 0x7e, 0x2a, 0x33, 0xbc, 0x0e, 0x79, + 0xde, 0x7a, 0x10, 0xb1, 0x73, 0x31, 0xba, 0x8a, 0xb3, 0xb1, 0x04, 0x0e, 0x89, 0x0f, 0x0b, 0x02, + 0xe2, 0xf4, 0x06, 0xba, 0xbd, 0x62, 0xf6, 0xc1, 0x3b, 0xb0, 0x18, 0x45, 0x4b, 0x75, 0x44, 0xea, + 0x92, 0xe9, 0xb3, 0x61, 0x5b, 0x09, 0xc5, 0xf1, 0x4d, 0x51, 0x0d, 0x96, 0x89, 0x19, 0x2c, 0x10, + 0x48, 0x92, 0x48, 0x25, 0xd0, 0x82, 0x34, 0xff, 0x4e, 0xc7, 0x0b, 0x2e, 0xdc, 0x4f, 0x01, 0xa9, + 0xc0, 0x54, 0x9b, 0xb2, 0x06, 0x05, 0x6e, 0x70, 0x99, 0xd3, 0xe9, 0x77, 0x45, 0x22, 0x51, 0x81, + 0x1a, 0xce, 0x73, 0xd7, 0x3e, 0xe9, 0x39, 0x41, 0xcc, 0xa1, 0x99, 0x8c, 0x0a, 0x4c, 0xa5, 0xf1, + 0xef, 0xc8, 0x2d, 0x5e, 0xef, 0xda, 0x6e, 0x4f, 0x1a, 0xff, 0x1d, 0xc8, 0xf3, 0x14, 0x49, 0x94, + 0x11, 0x0f, 0xa2, 0x64, 0x54, 0x5c, 0x3e, 0xa8, 0xf3, 0x84, 0x4a, 0xac, 0xa2, 0x9b, 0x25, 0x3a, + 0x5e, 0x8d, 0x58, 0x07, 0xac, 0x81, 0xde, 0x80, 0x19, 0x9b, 0x2e, 0x61, 0xbe, 0x58, 0x89, 0x27, + 0xa7, 0x8c, 0x1a, 0xbb, 0xce, 0x38, 0x16, 0x7e, 0x1b, 0x4a, 0x0a, 0x07, 0x9a, 0x73, 0x3f, 0x69, + 0x8a, 0x2b, 0xab, 0xbe, 0x79, 0xb0, 0x75, 0xc8, 0x53, 0xf1, 0x0a, 0x40, 0xa3, 0x19, 0x8c, 0x33, + 0x24, 0x19, 0xe3, 0xab, 0x84, 0x87, 0xab, 0xf2, 0x18, 0x49, 0xf2, 0x64, 0x2e, 0x25, 0xcf, 0x4b, + 0x98, 0x13, 0xea, 0xa7, 0x3a, 0x03, 0x6f, 0x12, 0x0b, 0x53, 0x32, 0xf2, 0x08, 0x2c, 0x69, 0xd8, + 0x4a, 0xef, 0xe4, 0x88, 0x98, 0x24, 0x31, 0xfb, 0xbe, 0xed, 0x8f, 0x3c, 0x79, 0x04, 0x7e, 0x6b, + 0x40, 0x45, 0x42, 0xd2, 0x76, 0x1c, 0x64, 0xa5, 0xc6, 0x63, 0x5e, 0x50, 0xa7, 0xdd, 0x80, 0x7c, + 0xfb, 0x78, 0xbf, 0xf3, 0xa9, 0xec, 0xeb, 0x88, 0x11, 0x85, 0x77, 0x39, 0x1f, 0xde, 0xa7, 0x14, + 0x23, 0x5a, 0x02, 0xd0, 0x8e, 0xe5, 0x56, 0xbf, 0xed, 0xbc, 0x64, 0x37, 0x6d, 0xce, 0x0a, 0x01, + 0x2c, 0x6b, 0x17, 0xfd, 0x4c, 0x96, 0x99, 0xa8, 0xfd, 0x4d, 0x72, 0xc8, 0xeb, 0x23, 0xff, 0xb4, + 0xd9, 0xa7, 0xad, 0x3c, 0xa9, 0xe1, 0x22, 0x20, 0x0a, 0x6c, 0x74, 0x3c, 0x15, 0xda, 0x84, 0x05, + 0x0a, 0x25, 0xe7, 0x9e, 0xe4, 0xf4, 0x61, 0xc4, 0x90, 0x61, 0xdb, 0x88, 0x85, 0x6d, 0xdb, 0xf3, + 0x5e, 0x0c, 0xdc, 0xb6, 0x50, 0x2d, 0x18, 0xe3, 0x06, 0x27, 0xfe, 0xcc, 0x8b, 0x04, 0xe6, 0xaf, + 0x4b, 0xe5, 0x51, 0x48, 0xe5, 0x89, 0xe3, 0x4f, 0xa1, 0x82, 0x1f, 0xc3, 0x75, 0x89, 0x29, 0x4a, + 0xf9, 0x29, 0xc8, 0x7b, 0x70, 0x4b, 0x22, 0x6f, 0x9e, 0xd2, 0x7c, 0xf3, 0xa9, 0x60, 0xf8, 0xef, + 0xca, 0xb9, 0x01, 0xd5, 0x40, 0x4e, 0x96, 0x83, 0x0c, 0xba, 0xaa, 0x00, 0x23, 0x4f, 0x9c, 0x19, + 0x42, 0x8b, 0x7e, 0x53, 0x98, 0x4b, 0x50, 0xe4, 0x25, 0x48, 0xbf, 0xf1, 0x26, 0x2c, 0x49, 0x1a, + 0x22, 0x3b, 0x88, 0x12, 0x99, 0x10, 0x48, 0x47, 0x44, 0x18, 0x8c, 0x2e, 0x9d, 0x6e, 0x76, 0x15, + 0x33, 0x6a, 0x5a, 0x46, 0xd3, 0x50, 0x68, 0x5e, 0xe7, 0x27, 0x82, 0x0a, 0xa6, 0x06, 0x6d, 0x01, + 0xa6, 0x04, 0x54, 0xb0, 0xd8, 0x08, 0x0a, 0x9e, 0xd8, 0x88, 0x09, 0xd2, 0x1f, 0xc3, 0x4a, 0x20, + 0x04, 0xb5, 0xdb, 0x53, 0x72, 0x58, 0x3b, 0x9e, 0xa7, 0xd4, 0xa2, 0x3a, 0xc5, 0x1f, 0x40, 0x6e, + 0xe8, 0x88, 0x98, 0x52, 0x5a, 0x47, 0x6b, 0xfc, 0xd5, 0x61, 0x4d, 0x59, 0xcc, 0xe6, 0x71, 0x1b, + 0x6e, 0x4b, 0xea, 0xdc, 0xa2, 0x5a, 0xf2, 0x71, 0xa1, 0x64, 0x9d, 0xc2, 0xcd, 0x3a, 0x59, 0xa7, + 0x64, 0xf9, 0xde, 0xcb, 0x3a, 0x85, 0xde, 0x15, 0xaa, 0x6f, 0xa5, 0xba, 0x2b, 0xb6, 0xb9, 0x4d, + 0x03, 0x97, 0x4c, 0x45, 0xec, 0x18, 0x16, 0xa3, 0x9e, 0x9c, 0x2a, 0x8c, 0x91, 0xac, 0xd7, 0x27, + 0x26, 0x94, 0x41, 0x8c, 0x0f, 0xa4, 0xc0, 0x81, 0x9b, 0xa7, 0x12, 0xd8, 0x0e, 0x89, 0xb1, 0x23, + 0x99, 0x56, 0x5e, 0xba, 0x9b, 0x32, 0x9f, 0xe1, 0x03, 0xbc, 0x0b, 0x37, 0xe2, 0x61, 0x22, 0x95, + 0xc8, 0x87, 0xfc, 0x00, 0xeb, 0x22, 0x49, 0x2a, 0xba, 0x1f, 0x84, 0xc1, 0x40, 0x09, 0x28, 0xa9, + 0x48, 0x5a, 0x60, 0xea, 0xe2, 0xcb, 0x7f, 0xe2, 0xbc, 0x06, 0xe1, 0x26, 0x15, 0x31, 0x2f, 0x24, + 0x96, 0x7e, 0xfb, 0xc3, 0x18, 0x91, 0x9d, 0x1a, 0x23, 0x84, 0x93, 0x84, 0x51, 0xec, 0x1b, 0x38, + 0x74, 0x82, 0x47, 0x18, 0x40, 0xd3, 0xf2, 0xa0, 0x77, 0x48, 0xc0, 0x83, 0x0d, 0xe4, 0xc1, 0x56, + 0xc3, 0x6e, 0xaa, 0xcd, 0xf8, 0x30, 0x8c, 0x9d, 0x13, 0x91, 0x39, 0x15, 0xe1, 0x8f, 0x60, 0x35, + 0x39, 0x28, 0xa7, 0xa1, 0xfc, 0x1a, 0x86, 0x62, 0x90, 0x50, 0x2a, 0xaf, 0x8c, 0x25, 0x28, 0xec, + 0xee, 0xed, 0x3f, 0xad, 0x6f, 0x92, 0x54, 0x76, 0xfd, 0x1f, 0x59, 0xc8, 0x6c, 0x1f, 0xa2, 0xef, + 0xc0, 0x0c, 0x7f, 0x83, 0x98, 0xf2, 0x44, 0x63, 0x4e, 0x7b, 0xcd, 0xc0, 0xcb, 0x9f, 0xfd, 0xfe, + 0xcf, 0x5f, 0x64, 0x6e, 0xe0, 0x6b, 0xb5, 0xf1, 0x5b, 0x76, 0x77, 0x78, 0x6a, 0xd7, 0xce, 0xc6, + 0x35, 0x76, 0x27, 0xfc, 0xaf, 0xf1, 0x1a, 0x3a, 0x84, 0x2c, 0x7d, 0xa1, 0x48, 0x7c, 0xbf, 0x31, + 0x93, 0x5f, 0x39, 0xb0, 0xc9, 0x28, 0x2f, 0xe2, 0xab, 0x2a, 0xe5, 0xe1, 0xc8, 0xa7, 0x74, 0xc7, + 0x50, 0x52, 0x1e, 0x2a, 0xd0, 0x85, 0x2f, 0x3b, 0xe6, 0xc5, 0x8f, 0x20, 0x18, 0x33, 0x7e, 0xcb, + 0xf8, 0x15, 0x95, 0x1f, 0x7f, 0x4f, 0x51, 0xf5, 0x39, 0x78, 0xd9, 0x8f, 0xeb, 0x13, 0xb6, 0xde, + 0xe3, 0xfa, 0x28, 0xed, 0x6e, 0xbd, 0x3e, 0xfe, 0xcb, 0x3e, 0xa5, 0x3b, 0x10, 0x8f, 0x2b, 0x2d, + 0x1f, 0xdd, 0xd6, 0xf4, 0xea, 0xd5, 0xae, 0xb4, 0xb9, 0x9a, 0x8c, 0x20, 0x38, 0xdd, 0x61, 0x9c, + 0x6e, 0xe2, 0x1b, 0x2a, 0xa7, 0x56, 0x80, 0x47, 0x18, 0xae, 0x9f, 0xc2, 0x0c, 0xeb, 0xa5, 0xa1, + 0x23, 0xf9, 0x61, 0x6a, 0xba, 0x80, 0x09, 0x27, 0x20, 0xd2, 0x85, 0xc3, 0x4b, 0x8c, 0xdb, 0x02, + 0xae, 0x04, 0xdc, 0x58, 0x3b, 0x8d, 0x70, 0x79, 0x64, 0xfc, 0x97, 0xb1, 0xfe, 0xf7, 0x0c, 0xcc, + 0xb0, 0xa6, 0x0b, 0x1a, 0x02, 0x84, 0xdd, 0xa9, 0xb8, 0x9e, 0x13, 0xfd, 0xae, 0xb8, 0x9e, 0x93, + 0x8d, 0x2d, 0x7c, 0x9b, 0x71, 0x5e, 0xc2, 0x8b, 0x01, 0x67, 0xf6, 0x20, 0x5c, 0x3b, 0xa1, 0x58, + 0xd4, 0xac, 0x2f, 0xa0, 0xa4, 0x74, 0x99, 0x90, 0x8e, 0x62, 0xa4, 0x4d, 0x15, 0x3f, 0x26, 0x9a, + 0x16, 0x15, 0xbe, 0xcb, 0x98, 0xde, 0xc2, 0x55, 0xd5, 0xb8, 0x9c, 0xaf, 0xcb, 0x30, 0x29, 0xe3, + 0x1f, 0x92, 0xa2, 0x29, 0xda, 0x69, 0x42, 0x77, 0x35, 0xa4, 0xe3, 0x0d, 0x2b, 0xf3, 0xde, 0x74, + 0xa4, 0x44, 0x11, 0x38, 0xff, 0x33, 0x82, 0x69, 0x53, 0x4c, 0x69, 0xfb, 0x7f, 0xd2, 0x47, 0x3b, + 0xfe, 0x93, 0x11, 0xe4, 0x43, 0x31, 0xe8, 0xf7, 0xa0, 0x15, 0x5d, 0x2f, 0x20, 0x4c, 0x94, 0xcd, + 0xdb, 0x89, 0xf3, 0x42, 0x84, 0x07, 0x4c, 0x84, 0x55, 0x7c, 0x33, 0x10, 0x41, 0xfc, 0x34, 0xa5, + 0xc6, 0x4b, 0xde, 0x9a, 0xdd, 0x6e, 0x53, 0x43, 0xfc, 0x80, 0x14, 0xfd, 0x6a, 0x1b, 0x07, 0xdd, + 0xd1, 0x76, 0x21, 0xd4, 0x4e, 0x90, 0x89, 0xa7, 0xa1, 0x08, 0xfe, 0xaf, 0x32, 0xfe, 0x77, 0xf1, + 0x4a, 0x12, 0x7f, 0x97, 0xe1, 0x47, 0x45, 0xe0, 0x8d, 0x1b, 0xbd, 0x08, 0x91, 0xbe, 0x90, 0x5e, + 0x84, 0x68, 0xdf, 0xe7, 0x62, 0x11, 0x46, 0x0c, 0x9f, 0x8a, 0xf0, 0x12, 0x20, 0xec, 0xeb, 0x20, + 0xad, 0x71, 0x95, 0xd2, 0x21, 0x7e, 0xf2, 0x27, 0x5b, 0x42, 0xf8, 0x21, 0xe3, 0x7d, 0x07, 0x2f, + 0x27, 0xf1, 0xee, 0x12, 0x6c, 0xea, 0xe7, 0xbf, 0xce, 0x41, 0xe9, 0x7d, 0xbb, 0xd3, 0xf7, 0x9d, + 0x3e, 0x6d, 0x57, 0xa3, 0x13, 0x98, 0x61, 0x77, 0x43, 0xdc, 0xdd, 0xd5, 0x66, 0x4b, 0xdc, 0xdd, + 0x23, 0x9d, 0x08, 0x7c, 0x9f, 0xb1, 0xbe, 0x8d, 0xcd, 0x80, 0x75, 0x2f, 0xa4, 0x5f, 0x63, 0x5d, + 0x04, 0xaa, 0xf2, 0x19, 0xe4, 0x79, 0xd7, 0x00, 0xc5, 0xa8, 0x45, 0xba, 0x0b, 0xe6, 0xb2, 0x7e, + 0x32, 0xf1, 0x94, 0xa9, 0xbc, 0x3c, 0x86, 0x4c, 0x99, 0x7d, 0x17, 0x20, 0x6c, 0x53, 0xc5, 0xed, + 0x3b, 0xd1, 0xd5, 0x32, 0x57, 0x93, 0x11, 0x04, 0xe3, 0xd7, 0x18, 0xe3, 0x7b, 0xf8, 0xb6, 0x96, + 0x71, 0x3b, 0x58, 0x40, 0x99, 0xb7, 0x20, 0x47, 0x9f, 0xe4, 0x50, 0x2c, 0xf4, 0x2b, 0xaf, 0x76, + 0xa6, 0xa9, 0x9b, 0x12, 0xac, 0xee, 0x31, 0x56, 0x2b, 0x78, 0x49, 0xcb, 0x8a, 0x3e, 0xcd, 0x51, + 0x26, 0x23, 0x98, 0x95, 0x2f, 0x71, 0xe8, 0x56, 0xcc, 0x66, 0xd1, 0x57, 0x3b, 0x73, 0x25, 0x69, + 0x5a, 0x30, 0x7c, 0xc4, 0x18, 0x62, 0x7c, 0x4b, 0x6f, 0x54, 0x81, 0x4e, 0x98, 0x92, 0x00, 0xf2, + 0xe3, 0x79, 0xc8, 0xd1, 0x2c, 0x85, 0xc6, 0xee, 0xb0, 0xb8, 0x8b, 0x5b, 0x78, 0xa2, 0xa5, 0x12, + 0xb7, 0xf0, 0x64, 0x5d, 0xa8, 0x89, 0xdd, 0xec, 0x87, 0x73, 0x0e, 0xc3, 0xa2, 0x1a, 0xfb, 0x50, + 0x52, 0x4a, 0x40, 0xa4, 0xa1, 0x18, 0x6d, 0xd8, 0xc4, 0x63, 0xb7, 0xa6, 0x7e, 0xc4, 0xab, 0x8c, + 0xa9, 0x89, 0xaf, 0x47, 0x99, 0xb6, 0x39, 0x1a, 0xe5, 0xfa, 0x3d, 0x28, 0xab, 0xb5, 0x22, 0xd2, + 0x10, 0x8d, 0x75, 0x84, 0xe2, 0xb1, 0x42, 0x57, 0x6a, 0x6a, 0x9c, 0x26, 0xf8, 0x99, 0xa0, 0xc4, + 0xa5, 0xdc, 0x3f, 0x81, 0x82, 0xa8, 0x20, 0x75, 0xfa, 0x46, 0x7b, 0x48, 0x3a, 0x7d, 0x63, 0xe5, + 0xa7, 0x26, 0x11, 0x60, 0x6c, 0x69, 0xa6, 0x2c, 0x03, 0xb4, 0x60, 0x49, 0x0a, 0x8d, 0x24, 0x96, + 0x61, 0x57, 0x24, 0x89, 0xa5, 0x52, 0xa5, 0x4c, 0x65, 0x79, 0xe2, 0xf8, 0xe2, 0x2c, 0xcb, 0x12, + 0x00, 0x25, 0x50, 0x54, 0xa3, 0x21, 0x9e, 0x86, 0x92, 0x98, 0xbb, 0x85, 0x5c, 0x45, 0x28, 0x44, + 0xdf, 0x07, 0x08, 0xcb, 0xdd, 0xf8, 0x75, 0xac, 0xed, 0x99, 0xc5, 0xaf, 0x63, 0x7d, 0xc5, 0xac, + 0xf1, 0xe0, 0x90, 0x39, 0xcf, 0x1f, 0x29, 0xfb, 0x9f, 0x1a, 0x80, 0x26, 0xcb, 0x63, 0xf4, 0x58, + 0xcf, 0x42, 0xdb, 0x8e, 0x33, 0x5f, 0xbf, 0x1c, 0x72, 0x62, 0xf4, 0x0c, 0xe5, 0x6a, 0xb1, 0x25, + 0xc3, 0x17, 0x54, 0xb2, 0xcf, 0x0d, 0x98, 0x8b, 0x14, 0xd8, 0xe8, 0x41, 0xc2, 0x3e, 0xc7, 0x5a, + 0x7a, 0xe6, 0xc3, 0x0b, 0xf1, 0x12, 0x33, 0x16, 0xe5, 0x54, 0xc8, 0x6c, 0xed, 0x47, 0x24, 0x69, + 0x8a, 0x56, 0xe5, 0x28, 0x81, 0xc1, 0x44, 0x5f, 0xd0, 0x7c, 0x74, 0x31, 0xe2, 0x25, 0x76, 0x2b, + 0x4c, 0xe0, 0x88, 0x5b, 0x88, 0x62, 0x5e, 0xe7, 0x16, 0xd1, 0xb6, 0xa2, 0xce, 0x2d, 0x62, 0x9d, + 0x80, 0x24, 0xb7, 0xa0, 0x75, 0xb1, 0xe2, 0x89, 0xa2, 0xe4, 0x4f, 0x62, 0x39, 0xdd, 0x13, 0x63, + 0xfd, 0x82, 0xa9, 0x2c, 0x43, 0x4f, 0x94, 0x05, 0x3f, 0x4a, 0xa0, 0x78, 0x81, 0x27, 0xc6, 0xfb, + 0x05, 0x49, 0x9e, 0xc8, 0xb8, 0x2a, 0x9e, 0x18, 0xd6, 0xe7, 0x3a, 0x4f, 0x9c, 0x68, 0x9a, 0xea, + 0x3c, 0x71, 0xb2, 0xc4, 0x4f, 0xda, 0x5b, 0xc6, 0x3c, 0xe2, 0x89, 0x0b, 0x9a, 0x7a, 0x1e, 0xbd, + 0x9e, 0x60, 0x53, 0x6d, 0x43, 0xd6, 0x7c, 0xe3, 0x92, 0xd8, 0xd3, 0x3d, 0x80, 0xef, 0x86, 0xf4, + 0x80, 0x5f, 0x18, 0xb0, 0xa8, 0x6b, 0x08, 0xa0, 0x04, 0x66, 0x09, 0xdd, 0x5c, 0x73, 0xed, 0xb2, + 0xe8, 0x97, 0xb0, 0x5b, 0xe0, 0x13, 0x1b, 0xf3, 0xbf, 0xf9, 0xe3, 0x8a, 0xf1, 0x15, 0xf9, 0xf7, + 0x07, 0xf2, 0xef, 0x67, 0x7f, 0x5a, 0xb9, 0x72, 0x9c, 0x67, 0xbf, 0x5e, 0x7f, 0xeb, 0x5f, 0x01, + 0x00, 0x00, 0xff, 0xff, 0x66, 0x40, 0x0b, 0xdf, 0x44, 0x2f, 0x00, 0x00, } diff --git a/vendor/github.com/coreos/etcd/etcdserver/etcdserverpb/rpc.pb.gw.go b/vendor/github.com/coreos/etcd/etcdserver/etcdserverpb/rpc.pb.gw.go index a2efbcd9..473ad582 100644 --- a/vendor/github.com/coreos/etcd/etcdserver/etcdserverpb/rpc.pb.gw.go +++ b/vendor/github.com/coreos/etcd/etcdserver/etcdserverpb/rpc.pb.gw.go @@ -222,6 +222,19 @@ func request_Lease_LeaseKeepAlive_0(ctx context.Context, marshaler runtime.Marsh return stream, metadata, nil } +func request_Lease_LeaseTimeToLive_0(ctx context.Context, marshaler runtime.Marshaler, client LeaseClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq LeaseTimeToLiveRequest + var metadata runtime.ServerMetadata + + if err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil { + return nil, metadata, grpc.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := client.LeaseTimeToLive(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + func request_Cluster_MemberAdd_0(ctx context.Context, marshaler runtime.Marshaler, client ClusterClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { var protoReq MemberAddRequest var metadata runtime.ServerMetadata @@ -935,6 +948,34 @@ func RegisterLeaseHandler(ctx context.Context, mux *runtime.ServeMux, conn *grpc }) + mux.Handle("POST", pattern_Lease_LeaseTimeToLive_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(ctx) + defer cancel() + if cn, ok := w.(http.CloseNotifier); ok { + go func(done <-chan struct{}, closed <-chan bool) { + select { + case <-done: + case <-closed: + cancel() + } + }(ctx.Done(), cn.CloseNotify()) + } + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateContext(ctx, req) + if err != nil { + runtime.HTTPError(ctx, outboundMarshaler, w, req, err) + } + resp, md, err := request_Lease_LeaseTimeToLive_0(rctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, outboundMarshaler, w, req, err) + return + } + + forward_Lease_LeaseTimeToLive_0(ctx, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + return nil } @@ -944,6 +985,8 @@ var ( pattern_Lease_LeaseRevoke_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"v3alpha", "kv", "lease", "revoke"}, "")) pattern_Lease_LeaseKeepAlive_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"v3alpha", "lease", "keepalive"}, "")) + + pattern_Lease_LeaseTimeToLive_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"v3alpha", "kv", "lease", "timetolive"}, "")) ) var ( @@ -952,6 +995,8 @@ var ( forward_Lease_LeaseRevoke_0 = runtime.ForwardResponseMessage forward_Lease_LeaseKeepAlive_0 = runtime.ForwardResponseStream + + forward_Lease_LeaseTimeToLive_0 = runtime.ForwardResponseMessage ) // RegisterClusterHandlerFromEndpoint is same as RegisterClusterHandler but diff --git a/vendor/github.com/coreos/etcd/mvcc/mvccpb/kv.pb.go b/vendor/github.com/coreos/etcd/mvcc/mvccpb/kv.pb.go index e7575ca1..62731e2d 100644 --- a/vendor/github.com/coreos/etcd/mvcc/mvccpb/kv.pb.go +++ b/vendor/github.com/coreos/etcd/mvcc/mvccpb/kv.pb.go @@ -708,24 +708,24 @@ var ( ) var fileDescriptorKv = []byte{ - // 303 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x09, 0x6e, 0x88, 0x02, 0xff, 0x6c, 0x90, 0x41, 0x4e, 0xc2, 0x40, - 0x14, 0x86, 0x3b, 0x14, 0x0a, 0x3e, 0x08, 0x36, 0x13, 0x12, 0x27, 0x2e, 0x26, 0x95, 0x8d, 0x18, - 0x13, 0x4c, 0xf0, 0x06, 0xc6, 0xae, 0x70, 0x61, 0x1a, 0x74, 0x4b, 0x4a, 0x79, 0x21, 0xa4, 0x94, - 0x69, 0x4a, 0x9d, 0xa4, 0x37, 0x71, 0xef, 0xde, 0x73, 0xb0, 0xe4, 0x08, 0x52, 0x2f, 0x62, 0xfa, - 0xc6, 0xe2, 0xc6, 0xcd, 0xe4, 0xfd, 0xff, 0xff, 0x65, 0xe6, 0x7f, 0x03, 0x9d, 0x58, 0x8f, 0xd3, - 0x4c, 0xe5, 0x8a, 0x3b, 0x89, 0x8e, 0xa2, 0x74, 0x71, 0x39, 0x58, 0xa9, 0x95, 0x22, 0xeb, 0xae, - 0x9a, 0x4c, 0x3a, 0xfc, 0x64, 0xd0, 0x99, 0x62, 0xf1, 0x1a, 0x6e, 0xde, 0x90, 0xbb, 0x60, 0xc7, - 0x58, 0x08, 0xe6, 0xb1, 0x51, 0x2f, 0xa8, 0x46, 0x7e, 0x0d, 0xe7, 0x51, 0x86, 0x61, 0x8e, 0xf3, - 0x0c, 0xf5, 0x7a, 0xb7, 0x56, 0x5b, 0xd1, 0xf0, 0xd8, 0xc8, 0x0e, 0xfa, 0xc6, 0x0e, 0x7e, 0x5d, - 0x7e, 0x05, 0xbd, 0x44, 0x2d, 0xff, 0x28, 0x9b, 0xa8, 0x6e, 0xa2, 0x96, 0x27, 0x44, 0x40, 0x5b, - 0x63, 0x46, 0x69, 0x93, 0xd2, 0x5a, 0xf2, 0x01, 0xb4, 0x74, 0x55, 0x40, 0xb4, 0xe8, 0x65, 0x23, - 0x2a, 0x77, 0x83, 0xe1, 0x0e, 0x85, 0x43, 0xb4, 0x11, 0xc3, 0x0f, 0x06, 0x2d, 0x5f, 0xe3, 0x36, - 0xe7, 0xb7, 0xd0, 0xcc, 0x8b, 0x14, 0xa9, 0x6e, 0x7f, 0x72, 0x31, 0x36, 0x7b, 0x8e, 0x29, 0x34, - 0xe7, 0xac, 0x48, 0x31, 0x20, 0x88, 0x7b, 0xd0, 0x88, 0x35, 0x75, 0xef, 0x4e, 0xdc, 0x1a, 0xad, - 0x17, 0x0f, 0x1a, 0xb1, 0xe6, 0x37, 0xd0, 0x4e, 0x33, 0xd4, 0xf3, 0x58, 0x53, 0xf9, 0xff, 0x30, - 0xa7, 0x02, 0xa6, 0x7a, 0xe8, 0xc1, 0xd9, 0xe9, 0x7e, 0xde, 0x06, 0xfb, 0xf9, 0x65, 0xe6, 0x5a, - 0x1c, 0xc0, 0x79, 0xf4, 0x9f, 0xfc, 0x99, 0xef, 0xb2, 0x07, 0xb1, 0x3f, 0x4a, 0xeb, 0x70, 0x94, - 0xd6, 0xbe, 0x94, 0xec, 0x50, 0x4a, 0xf6, 0x55, 0x4a, 0xf6, 0xfe, 0x2d, 0xad, 0x85, 0x43, 0xff, - 0x7e, 0xff, 0x13, 0x00, 0x00, 0xff, 0xff, 0xb5, 0x45, 0x92, 0x5d, 0xa1, 0x01, 0x00, 0x00, + // 298 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x09, 0x6e, 0x88, 0x02, 0xff, 0x74, 0x90, 0xcf, 0x4a, 0xc3, 0x40, + 0x10, 0xc6, 0xbb, 0x4d, 0x9b, 0xd6, 0x69, 0xa9, 0x61, 0x29, 0xb8, 0x78, 0x08, 0x31, 0x17, 0x15, + 0x21, 0x42, 0x7d, 0x03, 0x31, 0xa7, 0x7a, 0x90, 0x10, 0xbd, 0x96, 0x34, 0x0e, 0xa5, 0xa4, 0xed, + 0x86, 0x34, 0x2e, 0xe4, 0x4d, 0xbc, 0x7b, 0xf7, 0x39, 0x7a, 0xec, 0x23, 0xf8, 0xe7, 0x45, 0xdc, + 0xcc, 0x9a, 0x7a, 0xf2, 0x30, 0xcb, 0xcc, 0xf7, 0xfd, 0xd8, 0xfd, 0x66, 0xa1, 0x9f, 0xa9, 0x20, + 0x2f, 0x64, 0x29, 0xb9, 0xbd, 0x56, 0x69, 0x9a, 0xcf, 0x4f, 0xc7, 0x0b, 0xb9, 0x90, 0x24, 0x5d, + 0xd7, 0x9d, 0x71, 0xfd, 0x77, 0x06, 0xfd, 0x29, 0x56, 0x4f, 0xc9, 0xea, 0x05, 0xb9, 0x03, 0x56, + 0x86, 0x95, 0x60, 0x1e, 0xbb, 0x18, 0x46, 0x75, 0xcb, 0xcf, 0xe1, 0x38, 0x2d, 0x30, 0x29, 0x71, + 0x56, 0xa0, 0x5a, 0x6e, 0x97, 0x72, 0x23, 0xda, 0xda, 0xb5, 0xa2, 0x91, 0x91, 0xa3, 0x5f, 0x95, + 0x9f, 0xc1, 0x70, 0x2d, 0x9f, 0xff, 0x28, 0x8b, 0xa8, 0x81, 0xd6, 0x0e, 0x88, 0x80, 0x9e, 0xc2, + 0x82, 0xdc, 0x0e, 0xb9, 0xcd, 0xc8, 0xc7, 0xd0, 0x55, 0x75, 0x00, 0xd1, 0xa5, 0x97, 0xcd, 0x50, + 0xab, 0x2b, 0x4c, 0xb6, 0x28, 0x6c, 0xa2, 0xcd, 0xe0, 0xbf, 0x31, 0xe8, 0x86, 0x0a, 0x37, 0x25, + 0xbf, 0x82, 0x4e, 0x59, 0xe5, 0x48, 0x71, 0x47, 0x93, 0x93, 0xc0, 0xec, 0x19, 0x90, 0x69, 0xce, + 0x58, 0xdb, 0x11, 0x41, 0xdc, 0x83, 0x76, 0xa6, 0x28, 0xfb, 0x60, 0xe2, 0x34, 0x68, 0xb3, 0x78, + 0xa4, 0x3d, 0x7e, 0x09, 0xbd, 0x5c, 0xc7, 0x9f, 0x69, 0xcc, 0xfa, 0x07, 0xb3, 0x6b, 0x60, 0xaa, + 0x7c, 0x0f, 0x8e, 0x0e, 0xf7, 0xf3, 0x1e, 0x58, 0x0f, 0x8f, 0xb1, 0xd3, 0xe2, 0x00, 0xf6, 0x5d, + 0x78, 0x1f, 0xc6, 0xa1, 0xc3, 0x6e, 0xc5, 0xee, 0xd3, 0x6d, 0xed, 0x75, 0xed, 0xbe, 0x5c, 0xb6, + 0xd7, 0xf5, 0xa1, 0xeb, 0xf5, 0xdb, 0x6d, 0xcd, 0x6d, 0xfa, 0xf7, 0x9b, 0x9f, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xb5, 0x45, 0x92, 0x5d, 0xa1, 0x01, 0x00, 0x00, } diff --git a/vendor/github.com/hashicorp/consul/api/operator.go b/vendor/github.com/hashicorp/consul/api/operator.go new file mode 100644 index 00000000..48d74f3c --- /dev/null +++ b/vendor/github.com/hashicorp/consul/api/operator.go @@ -0,0 +1,81 @@ +package api + +// Operator can be used to perform low-level operator tasks for Consul. +type Operator struct { + c *Client +} + +// Operator returns a handle to the operator endpoints. +func (c *Client) Operator() *Operator { + return &Operator{c} +} + +// RaftServer has information about a server in the Raft configuration. +type RaftServer struct { + // ID is the unique ID for the server. These are currently the same + // as the address, but they will be changed to a real GUID in a future + // release of Consul. + ID string + + // Node is the node name of the server, as known by Consul, or this + // will be set to "(unknown)" otherwise. + Node string + + // Address is the IP:port of the server, used for Raft communications. + Address string + + // Leader is true if this server is the current cluster leader. + Leader bool + + // Voter is true if this server has a vote in the cluster. This might + // be false if the server is staging and still coming online, or if + // it's a non-voting server, which will be added in a future release of + // Consul. + Voter bool +} + +// RaftConfigration is returned when querying for the current Raft configuration. +type RaftConfiguration struct { + // Servers has the list of servers in the Raft configuration. + Servers []*RaftServer + + // Index has the Raft index of this configuration. + Index uint64 +} + +// RaftGetConfiguration is used to query the current Raft peer set. +func (op *Operator) RaftGetConfiguration(q *QueryOptions) (*RaftConfiguration, error) { + r := op.c.newRequest("GET", "/v1/operator/raft/configuration") + r.setQueryOptions(q) + _, resp, err := requireOK(op.c.doRequest(r)) + if err != nil { + return nil, err + } + defer resp.Body.Close() + + var out RaftConfiguration + if err := decodeBody(resp, &out); err != nil { + return nil, err + } + return &out, nil +} + +// RaftRemovePeerByAddress is used to kick a stale peer (one that it in the Raft +// quorum but no longer known to Serf or the catalog) by address in the form of +// "IP:port". +func (op *Operator) RaftRemovePeerByAddress(address string, q *WriteOptions) error { + r := op.c.newRequest("DELETE", "/v1/operator/raft/peer") + r.setWriteOptions(q) + + // TODO (slackpad) Currently we made address a query parameter. Once + // IDs are in place this will be DELETE /v1/operator/raft/peer/. + r.params.Set("address", string(address)) + + _, resp, err := requireOK(op.c.doRequest(r)) + if err != nil { + return err + } + + resp.Body.Close() + return nil +} diff --git a/vendor/github.com/samuel/go-zookeeper/zk/conn.go b/vendor/github.com/samuel/go-zookeeper/zk/conn.go index ed87ca5e..b6b8dbc1 100644 --- a/vendor/github.com/samuel/go-zookeeper/zk/conn.go +++ b/vendor/github.com/samuel/go-zookeeper/zk/conn.go @@ -44,9 +44,9 @@ const ( type watchType int const ( - watchTypeData = iota - watchTypeExist = iota - watchTypeChild = iota + watchTypeData = iota + watchTypeExist + watchTypeChild ) type watchPathType struct { @@ -61,6 +61,11 @@ type Logger interface { Printf(string, ...interface{}) } +type authCreds struct { + scheme string + auth []byte +} + type Conn struct { lastZxid int64 sessionID int64 @@ -75,21 +80,28 @@ type Conn struct { server string // remember the address/port of the current server conn net.Conn eventChan chan Event + eventCallback EventCallback // may be nil shouldQuit chan struct{} pingInterval time.Duration recvTimeout time.Duration connectTimeout time.Duration + creds []authCreds + credsMu sync.Mutex // protects server + sendChan chan *request requests map[int32]*request // Xid -> pending request requestsLock sync.Mutex watchers map[watchPathType][]chan Event watchersLock sync.Mutex + closeChan chan struct{} // channel to tell send loop stop // Debug (used by unit tests) reconnectDelay time.Duration logger Logger + + buf []byte } // connOption represents a connection option. @@ -185,6 +197,7 @@ func Connect(servers []string, sessionTimeout time.Duration, options ...connOpti watchers: make(map[watchPathType][]chan Event), passwd: emptyPassword, logger: DefaultLogger, + buf: make([]byte, bufferSize), // Debug reconnectDelay: 0, @@ -224,6 +237,18 @@ func WithHostProvider(hostProvider HostProvider) connOption { } } +// EventCallback is a function that is called when an Event occurs. +type EventCallback func(Event) + +// WithEventCallback returns a connection option that specifies an event +// callback. +// The callback must not block - doing so would delay the ZK go routines. +func WithEventCallback(cb EventCallback) connOption { + return func(c *Conn) { + c.eventCallback = cb + } +} + func (c *Conn) Close() { close(c.shouldQuit) @@ -238,7 +263,7 @@ func (c *Conn) State() State { return State(atomic.LoadInt32((*int32)(&c.state))) } -// SessionId returns the current session id of the connection. +// SessionID returns the current session id of the connection. func (c *Conn) SessionID() int64 { return atomic.LoadInt64(&c.sessionID) } @@ -258,8 +283,16 @@ func (c *Conn) setTimeouts(sessionTimeoutMs int32) { func (c *Conn) setState(state State) { atomic.StoreInt32((*int32)(&c.state), int32(state)) + c.sendEvent(Event{Type: EventSession, State: state, Server: c.Server()}) +} + +func (c *Conn) sendEvent(evt Event) { + if c.eventCallback != nil { + c.eventCallback(evt) + } + select { - case c.eventChan <- Event{Type: EventSession, State: state, Server: c.Server()}: + case c.eventChan <- evt: default: // panic("zk: event channel full - it must be monitored and never allowed to be full") } @@ -296,6 +329,65 @@ func (c *Conn) connect() error { } } +func (c *Conn) resendZkAuth(reauthReadyChan chan struct{}) { + c.credsMu.Lock() + defer c.credsMu.Unlock() + + defer close(reauthReadyChan) + + c.logger.Printf("Re-submitting `%d` credentials after reconnect", + len(c.creds)) + + for _, cred := range c.creds { + resChan, err := c.sendRequest( + opSetAuth, + &setAuthRequest{Type: 0, + Scheme: cred.scheme, + Auth: cred.auth, + }, + &setAuthResponse{}, + nil) + + if err != nil { + c.logger.Printf("Call to sendRequest failed during credential resubmit: %s", err) + // FIXME(prozlach): lets ignore errors for now + continue + } + + res := <-resChan + if res.err != nil { + c.logger.Printf("Credential re-submit failed: %s", res.err) + // FIXME(prozlach): lets ignore errors for now + continue + } + } +} + +func (c *Conn) sendRequest( + opcode int32, + req interface{}, + res interface{}, + recvFunc func(*request, *responseHeader, error), +) ( + <-chan response, + error, +) { + rq := &request{ + xid: c.nextXid(), + opcode: opcode, + pkt: req, + recvStruct: res, + recvChan: make(chan response, 1), + recvFunc: recvFunc, + } + + if err := c.sendData(rq); err != nil { + return nil, err + } + + return rq.recvChan, nil +} + func (c *Conn) loop() { for { if err := c.connect(); err != nil { @@ -313,13 +405,15 @@ func (c *Conn) loop() { c.conn.Close() case err == nil: c.logger.Printf("Authenticated: id=%d, timeout=%d", c.SessionID(), c.sessionTimeoutMs) - c.hostProvider.Connected() // mark success - closeChan := make(chan struct{}) // channel to tell send loop stop - var wg sync.WaitGroup + c.hostProvider.Connected() // mark success + c.closeChan = make(chan struct{}) // channel to tell send loop stop + reauthChan := make(chan struct{}) // channel to tell send loop that authdata has been resubmitted + var wg sync.WaitGroup wg.Add(1) go func() { - err := c.sendLoop(c.conn, closeChan) + <-reauthChan + err := c.sendLoop() c.logger.Printf("Send loop terminated: err=%v", err) c.conn.Close() // causes recv loop to EOF/exit wg.Done() @@ -332,10 +426,12 @@ func (c *Conn) loop() { if err == nil { panic("zk: recvLoop should never return nil error") } - close(closeChan) // tell send loop to exit + close(c.closeChan) // tell send loop to exit wg.Done() }() + c.resendZkAuth(reauthChan) + c.sendSetWatches() wg.Wait() } @@ -507,66 +603,73 @@ func (c *Conn) authenticate() error { return nil } -func (c *Conn) sendLoop(conn net.Conn, closeChan <-chan struct{}) error { +func (c *Conn) sendData(req *request) error { + header := &requestHeader{req.xid, req.opcode} + n, err := encodePacket(c.buf[4:], header) + if err != nil { + req.recvChan <- response{-1, err} + return nil + } + + n2, err := encodePacket(c.buf[4+n:], req.pkt) + if err != nil { + req.recvChan <- response{-1, err} + return nil + } + + n += n2 + + binary.BigEndian.PutUint32(c.buf[:4], uint32(n)) + + c.requestsLock.Lock() + select { + case <-c.closeChan: + req.recvChan <- response{-1, ErrConnectionClosed} + c.requestsLock.Unlock() + return ErrConnectionClosed + default: + } + c.requests[req.xid] = req + c.requestsLock.Unlock() + + c.conn.SetWriteDeadline(time.Now().Add(c.recvTimeout)) + _, err = c.conn.Write(c.buf[:n+4]) + c.conn.SetWriteDeadline(time.Time{}) + if err != nil { + req.recvChan <- response{-1, err} + c.conn.Close() + return err + } + + return nil +} + +func (c *Conn) sendLoop() error { pingTicker := time.NewTicker(c.pingInterval) defer pingTicker.Stop() - buf := make([]byte, bufferSize) for { select { case req := <-c.sendChan: - header := &requestHeader{req.xid, req.opcode} - n, err := encodePacket(buf[4:], header) - if err != nil { - req.recvChan <- response{-1, err} - continue - } - - n2, err := encodePacket(buf[4+n:], req.pkt) - if err != nil { - req.recvChan <- response{-1, err} - continue - } - - n += n2 - - binary.BigEndian.PutUint32(buf[:4], uint32(n)) - - c.requestsLock.Lock() - select { - case <-closeChan: - req.recvChan <- response{-1, ErrConnectionClosed} - c.requestsLock.Unlock() - return ErrConnectionClosed - default: - } - c.requests[req.xid] = req - c.requestsLock.Unlock() - - conn.SetWriteDeadline(time.Now().Add(c.recvTimeout)) - _, err = conn.Write(buf[:n+4]) - conn.SetWriteDeadline(time.Time{}) - if err != nil { - req.recvChan <- response{-1, err} - conn.Close() + if err := c.sendData(req); err != nil { return err } case <-pingTicker.C: - n, err := encodePacket(buf[4:], &requestHeader{Xid: -2, Opcode: opPing}) + n, err := encodePacket(c.buf[4:], &requestHeader{Xid: -2, Opcode: opPing}) if err != nil { panic("zk: opPing should never fail to serialize") } - binary.BigEndian.PutUint32(buf[:4], uint32(n)) + binary.BigEndian.PutUint32(c.buf[:4], uint32(n)) - conn.SetWriteDeadline(time.Now().Add(c.recvTimeout)) - _, err = conn.Write(buf[:n+4]) - conn.SetWriteDeadline(time.Time{}) + c.conn.SetWriteDeadline(time.Now().Add(c.recvTimeout)) + _, err = c.conn.Write(c.buf[:n+4]) + c.conn.SetWriteDeadline(time.Time{}) if err != nil { - conn.Close() + c.conn.Close() return err } - case <-closeChan: + case <-c.closeChan: return nil } } @@ -611,10 +714,7 @@ func (c *Conn) recvLoop(conn net.Conn) error { Path: res.Path, Err: nil, } - select { - case c.eventChan <- ev: - default: - } + c.sendEvent(ev) wTypes := make([]watchType, 0, 2) switch res.Type { case EventNodeCreated: @@ -706,7 +806,28 @@ func (c *Conn) request(opcode int32, req interface{}, res interface{}, recvFunc func (c *Conn) AddAuth(scheme string, auth []byte) error { _, err := c.request(opSetAuth, &setAuthRequest{Type: 0, Scheme: scheme, Auth: auth}, &setAuthResponse{}, nil) - return err + + if err != nil { + return err + } + + // Remember authdata so that it can be re-submitted on reconnect + // + // FIXME(prozlach): For now we treat "userfoo:passbar" and "userfoo:passbar2" + // as two different entries, which will be re-submitted on reconnet. Some + // research is needed on how ZK treats these cases and + // then maybe switch to something like "map[username] = password" to allow + // only single password for given user with users being unique. + obj := authCreds{ + scheme: scheme, + auth: auth, + } + + c.credsMu.Lock() + c.creds = append(c.creds, obj) + c.credsMu.Unlock() + + return nil } func (c *Conn) Children(path string) ([]string, *Stat, error) { @@ -867,6 +988,7 @@ func (c *Conn) Sync(path string) (string, error) { type MultiResponse struct { Stat *Stat String string + Error error } // Multi executes multiple ZooKeeper operations or none of them. The provided @@ -897,7 +1019,7 @@ func (c *Conn) Multi(ops ...interface{}) ([]MultiResponse, error) { _, err := c.request(opMulti, req, res, nil) mr := make([]MultiResponse, len(res.Ops)) for i, op := range res.Ops { - mr[i] = MultiResponse{Stat: op.Stat, String: op.String} + mr[i] = MultiResponse{Stat: op.Stat, String: op.String, Error: op.Err.toError()} } return mr, err } diff --git a/vendor/github.com/samuel/go-zookeeper/zk/constants.go b/vendor/github.com/samuel/go-zookeeper/zk/constants.go index f9b39b90..33b5563b 100644 --- a/vendor/github.com/samuel/go-zookeeper/zk/constants.go +++ b/vendor/github.com/samuel/go-zookeeper/zk/constants.go @@ -28,18 +28,19 @@ const ( opClose = -11 opSetAuth = 100 opSetWatches = 101 + opError = -1 // Not in protocol, used internally opWatcherEvent = -2 ) const ( - EventNodeCreated = EventType(1) - EventNodeDeleted = EventType(2) - EventNodeDataChanged = EventType(3) - EventNodeChildrenChanged = EventType(4) + EventNodeCreated EventType = 1 + EventNodeDeleted EventType = 2 + EventNodeDataChanged EventType = 3 + EventNodeChildrenChanged EventType = 4 - EventSession = EventType(-1) - EventNotWatching = EventType(-2) + EventSession EventType = -1 + EventNotWatching EventType = -2 ) var ( @@ -54,14 +55,13 @@ var ( ) const ( - StateUnknown = State(-1) - StateDisconnected = State(0) - StateConnecting = State(1) - StateAuthFailed = State(4) - StateConnectedReadOnly = State(5) - StateSaslAuthenticated = State(6) - StateExpired = State(-112) - // StateAuthFailed = State(-113) + StateUnknown State = -1 + StateDisconnected State = 0 + StateConnecting State = 1 + StateAuthFailed State = 4 + StateConnectedReadOnly State = 5 + StateSaslAuthenticated State = 6 + StateExpired State = -112 StateConnected = State(100) StateHasSession = State(101) @@ -154,20 +154,20 @@ const ( errBadArguments = -8 errInvalidState = -9 // API errors - errAPIError = ErrCode(-100) - errNoNode = ErrCode(-101) // * - errNoAuth = ErrCode(-102) - errBadVersion = ErrCode(-103) // * - errNoChildrenForEphemerals = ErrCode(-108) - errNodeExists = ErrCode(-110) // * - errNotEmpty = ErrCode(-111) - errSessionExpired = ErrCode(-112) - errInvalidCallback = ErrCode(-113) - errInvalidAcl = ErrCode(-114) - errAuthFailed = ErrCode(-115) - errClosing = ErrCode(-116) - errNothing = ErrCode(-117) - errSessionMoved = ErrCode(-118) + errAPIError ErrCode = -100 + errNoNode ErrCode = -101 // * + errNoAuth ErrCode = -102 + errBadVersion ErrCode = -103 // * + errNoChildrenForEphemerals ErrCode = -108 + errNodeExists ErrCode = -110 // * + errNotEmpty ErrCode = -111 + errSessionExpired ErrCode = -112 + errInvalidCallback ErrCode = -113 + errInvalidAcl ErrCode = -114 + errAuthFailed ErrCode = -115 + errClosing ErrCode = -116 + errNothing ErrCode = -117 + errSessionMoved ErrCode = -118 ) // Constants for ACL permissions diff --git a/vendor/github.com/samuel/go-zookeeper/zk/lock.go b/vendor/github.com/samuel/go-zookeeper/zk/lock.go index f13a8b0b..af257491 100644 --- a/vendor/github.com/samuel/go-zookeeper/zk/lock.go +++ b/vendor/github.com/samuel/go-zookeeper/zk/lock.go @@ -58,8 +58,16 @@ func (l *Lock) Lock() error { parts := strings.Split(l.path, "/") pth := "" for _, p := range parts[1:] { + var exists bool pth += "/" + p - _, err := l.c.Create(pth, []byte{}, 0, l.acl) + exists, _, err = l.c.Exists(pth) + if err != nil { + return err + } + if exists == true { + continue + } + _, err = l.c.Create(pth, []byte{}, 0, l.acl) if err != nil && err != ErrNodeExists { return err } diff --git a/vendor/github.com/samuel/go-zookeeper/zk/server_help.go b/vendor/github.com/samuel/go-zookeeper/zk/server_help.go index 618185a2..3663064c 100644 --- a/vendor/github.com/samuel/go-zookeeper/zk/server_help.go +++ b/vendor/github.com/samuel/go-zookeeper/zk/server_help.go @@ -99,37 +99,41 @@ func StartTestCluster(size int, stdout, stderr io.Writer) (*TestCluster, error) return cluster, nil } -func (ts *TestCluster) Connect(idx int) (*Conn, error) { - zk, _, err := Connect([]string{fmt.Sprintf("127.0.0.1:%d", ts.Servers[idx].Port)}, time.Second*15) +func (tc *TestCluster) Connect(idx int) (*Conn, error) { + zk, _, err := Connect([]string{fmt.Sprintf("127.0.0.1:%d", tc.Servers[idx].Port)}, time.Second*15) return zk, err } -func (ts *TestCluster) ConnectAll() (*Conn, <-chan Event, error) { - return ts.ConnectAllTimeout(time.Second * 15) +func (tc *TestCluster) ConnectAll() (*Conn, <-chan Event, error) { + return tc.ConnectAllTimeout(time.Second * 15) } -func (ts *TestCluster) ConnectAllTimeout(sessionTimeout time.Duration) (*Conn, <-chan Event, error) { - hosts := make([]string, len(ts.Servers)) - for i, srv := range ts.Servers { +func (tc *TestCluster) ConnectAllTimeout(sessionTimeout time.Duration) (*Conn, <-chan Event, error) { + return tc.ConnectWithOptions(sessionTimeout) +} + +func (tc *TestCluster) ConnectWithOptions(sessionTimeout time.Duration, options ...connOption) (*Conn, <-chan Event, error) { + hosts := make([]string, len(tc.Servers)) + for i, srv := range tc.Servers { hosts[i] = fmt.Sprintf("127.0.0.1:%d", srv.Port) } - zk, ch, err := Connect(hosts, sessionTimeout) + zk, ch, err := Connect(hosts, sessionTimeout, options...) return zk, ch, err } -func (ts *TestCluster) Stop() error { - for _, srv := range ts.Servers { +func (tc *TestCluster) Stop() error { + for _, srv := range tc.Servers { srv.Srv.Stop() } - defer os.RemoveAll(ts.Path) - return ts.waitForStop(5, time.Second) + defer os.RemoveAll(tc.Path) + return tc.waitForStop(5, time.Second) } // waitForStart blocks until the cluster is up -func (ts *TestCluster) waitForStart(maxRetry int, interval time.Duration) error { +func (tc *TestCluster) waitForStart(maxRetry int, interval time.Duration) error { // verify that the servers are up with SRVR - serverAddrs := make([]string, len(ts.Servers)) - for i, s := range ts.Servers { + serverAddrs := make([]string, len(tc.Servers)) + for i, s := range tc.Servers { serverAddrs[i] = fmt.Sprintf("127.0.0.1:%d", s.Port) } @@ -144,10 +148,10 @@ func (ts *TestCluster) waitForStart(maxRetry int, interval time.Duration) error } // waitForStop blocks until the cluster is down -func (ts *TestCluster) waitForStop(maxRetry int, interval time.Duration) error { +func (tc *TestCluster) waitForStop(maxRetry int, interval time.Duration) error { // verify that the servers are up with RUOK - serverAddrs := make([]string, len(ts.Servers)) - for i, s := range ts.Servers { + serverAddrs := make([]string, len(tc.Servers)) + for i, s := range tc.Servers { serverAddrs[i] = fmt.Sprintf("127.0.0.1:%d", s.Port) } @@ -188,3 +192,25 @@ func (tc *TestCluster) StopServer(server string) { } panic(fmt.Sprintf("Unknown server: %s", server)) } + +func (tc *TestCluster) StartAllServers() error { + for _, s := range tc.Servers { + if err := s.Srv.Start(); err != nil { + return fmt.Errorf( + "Failed to start server listening on port `%d` : %+v", s.Port, err) + } + } + + return nil +} + +func (tc *TestCluster) StopAllServers() error { + for _, s := range tc.Servers { + if err := s.Srv.Stop(); err != nil { + return fmt.Errorf( + "Failed to stop server listening on port `%d` : %+v", s.Port, err) + } + } + + return nil +} diff --git a/vendor/github.com/samuel/go-zookeeper/zk/structs.go b/vendor/github.com/samuel/go-zookeeper/zk/structs.go index 02cd3f35..d4af27de 100644 --- a/vendor/github.com/samuel/go-zookeeper/zk/structs.go +++ b/vendor/github.com/samuel/go-zookeeper/zk/structs.go @@ -270,6 +270,7 @@ type multiResponseOp struct { Header multiHeader String string Stat *Stat + Err ErrCode } type multiResponse struct { Ops []multiResponseOp @@ -327,6 +328,8 @@ func (r *multiRequest) Decode(buf []byte) (int, error) { } func (r *multiResponse) Decode(buf []byte) (int, error) { + var multiErr error + r.Ops = make([]multiResponseOp, 0) r.DoneHeader = multiHeader{-1, true, -1} total := 0 @@ -347,6 +350,8 @@ func (r *multiResponse) Decode(buf []byte) (int, error) { switch header.Type { default: return total, ErrAPIError + case opError: + w = reflect.ValueOf(&res.Err) case opCreate: w = reflect.ValueOf(&res.String) case opSetData: @@ -362,8 +367,12 @@ func (r *multiResponse) Decode(buf []byte) (int, error) { total += n } r.Ops = append(r.Ops, res) + if multiErr == nil && res.Err != errOk { + // Use the first error as the error returned from Multi(). + multiErr = res.Err.toError() + } } - return total, nil + return total, multiErr } type watcherEvent struct { diff --git a/vendor/github.com/spf13/cobra/bash_completions.go b/vendor/github.com/spf13/cobra/bash_completions.go index c9b43d98..7a5bd4d7 100644 --- a/vendor/github.com/spf13/cobra/bash_completions.go +++ b/vendor/github.com/spf13/cobra/bash_completions.go @@ -401,10 +401,8 @@ func writeLocalNonPersistentFlag(flag *pflag.Flag, w io.Writer) error { format += "=" } format += "\")\n" - if _, err := fmt.Fprintf(w, format, name); err != nil { - return err - } - return nil + _, err := fmt.Fprintf(w, format, name) + return err } func writeFlags(cmd *Command, w io.Writer) error { diff --git a/vendor/github.com/spf13/cobra/cobra.go b/vendor/github.com/spf13/cobra/cobra.go index 93a2c0f3..b39c715a 100644 --- a/vendor/github.com/spf13/cobra/cobra.go +++ b/vendor/github.com/spf13/cobra/cobra.go @@ -37,38 +37,36 @@ var templateFuncs = template.FuncMap{ var initializers []func() -// automatic prefix matching can be a dangerous thing to automatically enable in CLI tools. -// Set this to true to enable it +// Automatic prefix matching can be a dangerous thing to automatically enable in CLI tools. +// Set this to true to enable it. var EnablePrefixMatching = false -//EnableCommandSorting controls sorting of the slice of commands, which is turned on by default. -//To disable sorting, set it to false. +// EnableCommandSorting controls sorting of the slice of commands, which is turned on by default. +// To disable sorting, set it to false. var EnableCommandSorting = true -//AddTemplateFunc adds a template function that's available to Usage and Help -//template generation. +// AddTemplateFunc adds a template function that's available to Usage and Help +// template generation. func AddTemplateFunc(name string, tmplFunc interface{}) { templateFuncs[name] = tmplFunc } -//AddTemplateFuncs adds multiple template functions availalble to Usage and -//Help template generation. +// AddTemplateFuncs adds multiple template functions availalble to Usage and +// Help template generation. func AddTemplateFuncs(tmplFuncs template.FuncMap) { for k, v := range tmplFuncs { templateFuncs[k] = v } } -//OnInitialize takes a series of func() arguments and appends them to a slice of func(). +// OnInitialize takes a series of func() arguments and appends them to a slice of func(). func OnInitialize(y ...func()) { - for _, x := range y { - initializers = append(initializers, x) - } + initializers = append(initializers, y...) } -//Gt takes two types and checks whether the first type is greater than the second. In case of types Arrays, Chans, -//Maps and Slices, Gt will compare their lengths. Ints are compared directly while strings are first parsed as -//ints and then compared. +// Gt takes two types and checks whether the first type is greater than the second. In case of types Arrays, Chans, +// Maps and Slices, Gt will compare their lengths. Ints are compared directly while strings are first parsed as +// ints and then compared. func Gt(a interface{}, b interface{}) bool { var left, right int64 av := reflect.ValueOf(a) @@ -96,7 +94,7 @@ func Gt(a interface{}, b interface{}) bool { return left > right } -//Eq takes two types and checks whether they are equal. Supported types are int and string. Unsupported types will panic. +// Eq takes two types and checks whether they are equal. Supported types are int and string. Unsupported types will panic. func Eq(a interface{}, b interface{}) bool { av := reflect.ValueOf(a) bv := reflect.ValueOf(b) @@ -116,7 +114,7 @@ func trimRightSpace(s string) string { return strings.TrimRightFunc(s, unicode.IsSpace) } -// appendIfNotPresent will append stringToAppend to the end of s, but only if it's not yet present in s +// appendIfNotPresent will append stringToAppend to the end of s, but only if it's not yet present in s. func appendIfNotPresent(s, stringToAppend string) string { if strings.Contains(s, stringToAppend) { return s @@ -124,7 +122,7 @@ func appendIfNotPresent(s, stringToAppend string) string { return s + " " + stringToAppend } -//rpad adds padding to the right of a string +// rpad adds padding to the right of a string. func rpad(s string, padding int) string { template := fmt.Sprintf("%%-%ds", padding) return fmt.Sprintf(template, s) @@ -138,7 +136,7 @@ func tmpl(w io.Writer, text string, data interface{}) error { return t.Execute(w, data) } -// ld compares two strings and returns the levenshtein distance between them +// ld compares two strings and returns the levenshtein distance between them. func ld(s, t string, ignoreCase bool) int { if ignoreCase { s = strings.ToLower(s) diff --git a/vendor/github.com/spf13/cobra/command.go b/vendor/github.com/spf13/cobra/command.go index 9521036f..9ae98369 100644 --- a/vendor/github.com/spf13/cobra/command.go +++ b/vendor/github.com/spf13/cobra/command.go @@ -140,17 +140,17 @@ func (c *Command) SetOutput(output io.Writer) { c.output = &output } -// Usage can be defined by application +// Usage can be defined by application. func (c *Command) SetUsageFunc(f func(*Command) error) { c.usageFunc = f } -// Can be defined by Application +// Can be defined by Application. func (c *Command) SetUsageTemplate(s string) { c.usageTemplate = s } -// Can be defined by Application +// Can be defined by Application. func (c *Command) SetHelpFunc(f func(*Command, []string)) { c.helpFunc = f } @@ -159,7 +159,7 @@ func (c *Command) SetHelpCommand(cmd *Command) { c.helpCommand = cmd } -// Can be defined by Application +// Can be defined by Application. func (c *Command) SetHelpTemplate(s string) { c.helpTemplate = s } @@ -195,7 +195,7 @@ func (c *Command) getOut(def io.Writer) io.Writer { } // UsageFunc returns either the function set by SetUsageFunc for this command -// or a parent, or it returns a default usage function +// or a parent, or it returns a default usage function. func (c *Command) UsageFunc() (f func(*Command) error) { if c.usageFunc != nil { return c.usageFunc @@ -214,15 +214,15 @@ func (c *Command) UsageFunc() (f func(*Command) error) { } } -// Output the usage for the command -// Used when a user provides invalid input -// Can be defined by user by overriding UsageFunc +// Usage puts out the usage for the command. +// Used when a user provides invalid input. +// Can be defined by user by overriding UsageFunc. func (c *Command) Usage() error { return c.UsageFunc()(c) } // HelpFunc returns either the function set by SetHelpFunc for this command -// or a parent, or it returns a function with default help behavior +// or a parent, or it returns a function with default help behavior. func (c *Command) HelpFunc() func(*Command, []string) { cmd := c for cmd != nil { @@ -240,9 +240,9 @@ func (c *Command) HelpFunc() func(*Command, []string) { } } -// Output the help for the command -// Used when a user calls help [command] -// Can be defined by user by overriding HelpFunc +// Help puts out the help for the command. +// Used when a user calls help [command]. +// Can be defined by user by overriding HelpFunc. func (c *Command) Help() error { c.HelpFunc()(c, []string{}) return nil @@ -333,7 +333,7 @@ func (c *Command) HelpTemplate() string { {{end}}{{if or .Runnable .HasSubCommands}}{{.UsageString}}{{end}}` } -// Really only used when casting a command to a commander +// Really only used when casting a command to a commander. func (c *Command) resetChildrensParents() { for _, x := range c.commands { x.parent = c @@ -745,13 +745,13 @@ func (c *Command) initHelpCmd() { c.AddCommand(c.helpCommand) } -// Used for testing +// Used for testing. func (c *Command) ResetCommands() { c.commands = nil c.helpCommand = nil } -// Sorts commands by their names +// Sorts commands by their names. type commandSorterByName []*Command func (c commandSorterByName) Len() int { return len(c) } @@ -831,18 +831,18 @@ main: } } -// Print is a convenience method to Print to the defined output, fallback to Stderr if not set +// Print is a convenience method to Print to the defined output, fallback to Stderr if not set. func (c *Command) Print(i ...interface{}) { fmt.Fprint(c.OutOrStderr(), i...) } -// Println is a convenience method to Println to the defined output, fallback to Stderr if not set +// Println is a convenience method to Println to the defined output, fallback to Stderr if not set. func (c *Command) Println(i ...interface{}) { str := fmt.Sprintln(i...) c.Print(str) } -// Printf is a convenience method to Printf to the defined output, fallback to Stderr if not set +// Printf is a convenience method to Printf to the defined output, fallback to Stderr if not set. func (c *Command) Printf(format string, i ...interface{}) { str := fmt.Sprintf(format, i...) c.Print(str) @@ -859,7 +859,7 @@ func (c *Command) CommandPath() string { return str } -//The full usage for a given command (including parents) +// UseLine puts out the full usage for a given command (including parents). func (c *Command) UseLine() string { str := "" if c.HasParent() { @@ -869,7 +869,7 @@ func (c *Command) UseLine() string { } // For use in determining which flags have been assigned to which commands -// and which persist +// and which persist. func (c *Command) DebugFlags() { c.Println("DebugFlags called on", c.Name()) var debugflags func(*Command) @@ -944,18 +944,18 @@ func (c *Command) HasExample() bool { return len(c.Example) > 0 } -// Runnable determines if the command is itself runnable +// Runnable determines if the command is itself runnable. func (c *Command) Runnable() bool { return c.Run != nil || c.RunE != nil } -// HasSubCommands determines if the command has children commands +// HasSubCommands determines if the command has children commands. func (c *Command) HasSubCommands() bool { return len(c.commands) > 0 } // IsAvailableCommand determines if a command is available as a non-help command -// (this includes all non deprecated/hidden commands) +// (this includes all non deprecated/hidden commands). func (c *Command) IsAvailableCommand() bool { if len(c.Deprecated) != 0 || c.Hidden { return false @@ -974,7 +974,7 @@ func (c *Command) IsAvailableCommand() bool { // IsHelpCommand determines if a command is a 'help' command; a help command is // determined by the fact that it is NOT runnable/hidden/deprecated, and has no -// sub commands that are runnable/hidden/deprecated +// sub commands that are runnable/hidden/deprecated. func (c *Command) IsHelpCommand() bool { // if a command is runnable, deprecated, or hidden it is not a 'help' command @@ -995,7 +995,7 @@ func (c *Command) IsHelpCommand() bool { // HasHelpSubCommands determines if a command has any available 'help' sub commands // that need to be shown in the usage/help default template under 'additional help -// topics' +// topics'. func (c *Command) HasHelpSubCommands() bool { // return true on the first found available 'help' sub command @@ -1010,7 +1010,7 @@ func (c *Command) HasHelpSubCommands() bool { } // HasAvailableSubCommands determines if a command has available sub commands that -// need to be shown in the usage/help default template under 'available commands' +// need to be shown in the usage/help default template under 'available commands'. func (c *Command) HasAvailableSubCommands() bool { // return true on the first found available (non deprecated/help/hidden) @@ -1026,17 +1026,18 @@ func (c *Command) HasAvailableSubCommands() bool { return false } -// Determine if the command is a child command +// HasParent determines if the command is a child command. func (c *Command) HasParent() bool { return c.parent != nil } -// GlobalNormalizationFunc returns the global normalization function or nil if doesn't exists +// GlobalNormalizationFunc returns the global normalization function or nil if doesn't exists. func (c *Command) GlobalNormalizationFunc() func(f *flag.FlagSet, name string) flag.NormalizedName { return c.globNormFunc } -// Get the complete FlagSet that applies to this command (local and persistent declared here and by all parents) +// Flage returns the complete FlagSet that applies +// to this command (local and persistent declared here and by all parents). func (c *Command) Flags() *flag.FlagSet { if c.flags == nil { c.flags = flag.NewFlagSet(c.Name(), flag.ContinueOnError) @@ -1048,7 +1049,7 @@ func (c *Command) Flags() *flag.FlagSet { return c.flags } -// LocalNonPersistentFlags are flags specific to this command which will NOT persist to subcommands +// LocalNonPersistentFlags are flags specific to this command which will NOT persist to subcommands. func (c *Command) LocalNonPersistentFlags() *flag.FlagSet { persistentFlags := c.PersistentFlags() @@ -1061,7 +1062,7 @@ func (c *Command) LocalNonPersistentFlags() *flag.FlagSet { return out } -// Get the local FlagSet specifically set in the current command +// LocalFlags returns the local FlagSet specifically set in the current command. func (c *Command) LocalFlags() *flag.FlagSet { c.mergePersistentFlags() @@ -1079,7 +1080,7 @@ func (c *Command) LocalFlags() *flag.FlagSet { return local } -// All Flags which were inherited from parents commands +// InheritedFlags returns all flags which were inherited from parents commands. func (c *Command) InheritedFlags() *flag.FlagSet { c.mergePersistentFlags() @@ -1108,12 +1109,12 @@ func (c *Command) InheritedFlags() *flag.FlagSet { return inherited } -// All Flags which were not inherited from parent commands +// NonInheritedFlags returns all flags which were not inherited from parent commands. func (c *Command) NonInheritedFlags() *flag.FlagSet { return c.LocalFlags() } -// Get the Persistent FlagSet specifically set in the current command +// PersistentFlags returns the persistent FlagSet specifically set in the current command. func (c *Command) PersistentFlags() *flag.FlagSet { if c.pflags == nil { c.pflags = flag.NewFlagSet(c.Name(), flag.ContinueOnError) @@ -1125,7 +1126,7 @@ func (c *Command) PersistentFlags() *flag.FlagSet { return c.pflags } -// For use in testing +// ResetFlags is used in testing. func (c *Command) ResetFlags() { c.flagErrorBuf = new(bytes.Buffer) c.flagErrorBuf.Reset() @@ -1135,50 +1136,50 @@ func (c *Command) ResetFlags() { c.pflags.SetOutput(c.flagErrorBuf) } -// Does the command contain any flags (local plus persistent from the entire structure) +// Does the command contain any flags (local plus persistent from the entire structure). func (c *Command) HasFlags() bool { return c.Flags().HasFlags() } -// Does the command contain persistent flags +// Does the command contain persistent flags. func (c *Command) HasPersistentFlags() bool { return c.PersistentFlags().HasFlags() } -// Does the command has flags specifically declared locally +// Does the command has flags specifically declared locally. func (c *Command) HasLocalFlags() bool { return c.LocalFlags().HasFlags() } -// Does the command have flags inherited from its parent command +// Does the command have flags inherited from its parent command. func (c *Command) HasInheritedFlags() bool { return c.InheritedFlags().HasFlags() } // Does the command contain any flags (local plus persistent from the entire -// structure) which are not hidden or deprecated +// structure) which are not hidden or deprecated. func (c *Command) HasAvailableFlags() bool { return c.Flags().HasAvailableFlags() } -// Does the command contain persistent flags which are not hidden or deprecated +// Does the command contain persistent flags which are not hidden or deprecated. func (c *Command) HasAvailablePersistentFlags() bool { return c.PersistentFlags().HasAvailableFlags() } // Does the command has flags specifically declared locally which are not hidden -// or deprecated +// or deprecated. func (c *Command) HasAvailableLocalFlags() bool { return c.LocalFlags().HasAvailableFlags() } // Does the command have flags inherited from its parent command which are -// not hidden or deprecated +// not hidden or deprecated. func (c *Command) HasAvailableInheritedFlags() bool { return c.InheritedFlags().HasAvailableFlags() } -// Flag climbs up the command tree looking for matching flag +// Flag climbs up the command tree looking for matching flag. func (c *Command) Flag(name string) (flag *flag.Flag) { flag = c.Flags().Lookup(name) @@ -1189,7 +1190,7 @@ func (c *Command) Flag(name string) (flag *flag.Flag) { return } -// recursively find matching persistent flag +// Recursively find matching persistent flag. func (c *Command) persistentFlag(name string) (flag *flag.Flag) { if c.HasPersistentFlags() { flag = c.PersistentFlags().Lookup(name) @@ -1201,7 +1202,7 @@ func (c *Command) persistentFlag(name string) (flag *flag.Flag) { return } -// ParseFlags parses persistent flag tree & local flags +// ParseFlags parses persistent flag tree and local flags. func (c *Command) ParseFlags(args []string) (err error) { if c.DisableFlagParsing { return nil @@ -1211,7 +1212,7 @@ func (c *Command) ParseFlags(args []string) (err error) { return } -// Parent returns a commands parent command +// Parent returns a commands parent command. func (c *Command) Parent() *Command { return c.parent } diff --git a/vendor/github.com/spf13/pflag/bool.go b/vendor/github.com/spf13/pflag/bool.go index d272e40b..c4c5c0bf 100644 --- a/vendor/github.com/spf13/pflag/bool.go +++ b/vendor/github.com/spf13/pflag/bool.go @@ -1,9 +1,6 @@ package pflag -import ( - "fmt" - "strconv" -) +import "strconv" // optional interface to indicate boolean flags that can be // supplied without "=value" text @@ -30,7 +27,7 @@ func (b *boolValue) Type() string { return "bool" } -func (b *boolValue) String() string { return fmt.Sprintf("%v", *b) } +func (b *boolValue) String() string { return strconv.FormatBool(bool(*b)) } func (b *boolValue) IsBoolFlag() bool { return true } diff --git a/vendor/github.com/spf13/pflag/count.go b/vendor/github.com/spf13/pflag/count.go index 7b1f142e..d22be41f 100644 --- a/vendor/github.com/spf13/pflag/count.go +++ b/vendor/github.com/spf13/pflag/count.go @@ -1,9 +1,6 @@ package pflag -import ( - "fmt" - "strconv" -) +import "strconv" // -- count Value type countValue int @@ -28,7 +25,7 @@ func (i *countValue) Type() string { return "count" } -func (i *countValue) String() string { return fmt.Sprintf("%v", *i) } +func (i *countValue) String() string { return strconv.Itoa(int(*i)) } func countConv(sval string) (interface{}, error) { i, err := strconv.Atoi(sval) diff --git a/vendor/github.com/spf13/pflag/flag.go b/vendor/github.com/spf13/pflag/flag.go index eb143d79..b0b0d46f 100644 --- a/vendor/github.com/spf13/pflag/flag.go +++ b/vendor/github.com/spf13/pflag/flag.go @@ -434,10 +434,20 @@ func (f *Flag) defaultIsZeroValue() bool { return f.DefValue == "" case *ipValue, *ipMaskValue, *ipNetValue: return f.DefValue == "" - case *intSliceValue, *stringSliceValue: + case *intSliceValue, *stringSliceValue, *stringArrayValue: return f.DefValue == "[]" default: - return true + switch f.Value.String() { + case "false": + return true + case "": + return true + case "": + return true + case "0": + return true + } + return false } } diff --git a/vendor/github.com/spf13/pflag/float32.go b/vendor/github.com/spf13/pflag/float32.go index 7683fae1..a243f81f 100644 --- a/vendor/github.com/spf13/pflag/float32.go +++ b/vendor/github.com/spf13/pflag/float32.go @@ -1,9 +1,6 @@ package pflag -import ( - "fmt" - "strconv" -) +import "strconv" // -- float32 Value type float32Value float32 @@ -23,7 +20,7 @@ func (f *float32Value) Type() string { return "float32" } -func (f *float32Value) String() string { return fmt.Sprintf("%v", *f) } +func (f *float32Value) String() string { return strconv.FormatFloat(float64(*f), 'g', -1, 32) } func float32Conv(sval string) (interface{}, error) { v, err := strconv.ParseFloat(sval, 32) diff --git a/vendor/github.com/spf13/pflag/float64.go b/vendor/github.com/spf13/pflag/float64.go index 50fbf8cc..04b5492a 100644 --- a/vendor/github.com/spf13/pflag/float64.go +++ b/vendor/github.com/spf13/pflag/float64.go @@ -1,9 +1,6 @@ package pflag -import ( - "fmt" - "strconv" -) +import "strconv" // -- float64 Value type float64Value float64 @@ -23,7 +20,7 @@ func (f *float64Value) Type() string { return "float64" } -func (f *float64Value) String() string { return fmt.Sprintf("%v", *f) } +func (f *float64Value) String() string { return strconv.FormatFloat(float64(*f), 'g', -1, 64) } func float64Conv(sval string) (interface{}, error) { return strconv.ParseFloat(sval, 64) diff --git a/vendor/github.com/spf13/pflag/int.go b/vendor/github.com/spf13/pflag/int.go index b6560368..1474b89d 100644 --- a/vendor/github.com/spf13/pflag/int.go +++ b/vendor/github.com/spf13/pflag/int.go @@ -1,9 +1,6 @@ package pflag -import ( - "fmt" - "strconv" -) +import "strconv" // -- int Value type intValue int @@ -23,7 +20,7 @@ func (i *intValue) Type() string { return "int" } -func (i *intValue) String() string { return fmt.Sprintf("%v", *i) } +func (i *intValue) String() string { return strconv.Itoa(int(*i)) } func intConv(sval string) (interface{}, error) { return strconv.Atoi(sval) diff --git a/vendor/github.com/spf13/pflag/int32.go b/vendor/github.com/spf13/pflag/int32.go index 41659a9a..9b95944f 100644 --- a/vendor/github.com/spf13/pflag/int32.go +++ b/vendor/github.com/spf13/pflag/int32.go @@ -1,9 +1,6 @@ package pflag -import ( - "fmt" - "strconv" -) +import "strconv" // -- int32 Value type int32Value int32 @@ -23,7 +20,7 @@ func (i *int32Value) Type() string { return "int32" } -func (i *int32Value) String() string { return fmt.Sprintf("%v", *i) } +func (i *int32Value) String() string { return strconv.FormatInt(int64(*i), 10) } func int32Conv(sval string) (interface{}, error) { v, err := strconv.ParseInt(sval, 0, 32) diff --git a/vendor/github.com/spf13/pflag/int64.go b/vendor/github.com/spf13/pflag/int64.go index 6e67e380..0026d781 100644 --- a/vendor/github.com/spf13/pflag/int64.go +++ b/vendor/github.com/spf13/pflag/int64.go @@ -1,9 +1,6 @@ package pflag -import ( - "fmt" - "strconv" -) +import "strconv" // -- int64 Value type int64Value int64 @@ -23,7 +20,7 @@ func (i *int64Value) Type() string { return "int64" } -func (i *int64Value) String() string { return fmt.Sprintf("%v", *i) } +func (i *int64Value) String() string { return strconv.FormatInt(int64(*i), 10) } func int64Conv(sval string) (interface{}, error) { return strconv.ParseInt(sval, 0, 64) diff --git a/vendor/github.com/spf13/pflag/int8.go b/vendor/github.com/spf13/pflag/int8.go index 400db21f..4da92228 100644 --- a/vendor/github.com/spf13/pflag/int8.go +++ b/vendor/github.com/spf13/pflag/int8.go @@ -1,9 +1,6 @@ package pflag -import ( - "fmt" - "strconv" -) +import "strconv" // -- int8 Value type int8Value int8 @@ -23,7 +20,7 @@ func (i *int8Value) Type() string { return "int8" } -func (i *int8Value) String() string { return fmt.Sprintf("%v", *i) } +func (i *int8Value) String() string { return strconv.FormatInt(int64(*i), 10) } func int8Conv(sval string) (interface{}, error) { v, err := strconv.ParseInt(sval, 0, 8) diff --git a/vendor/github.com/spf13/pflag/string.go b/vendor/github.com/spf13/pflag/string.go index e296136e..04e0a26f 100644 --- a/vendor/github.com/spf13/pflag/string.go +++ b/vendor/github.com/spf13/pflag/string.go @@ -1,7 +1,5 @@ package pflag -import "fmt" - // -- string Value type stringValue string @@ -18,7 +16,7 @@ func (s *stringValue) Type() string { return "string" } -func (s *stringValue) String() string { return fmt.Sprintf("%s", *s) } +func (s *stringValue) String() string { return string(*s) } func stringConv(sval string) (interface{}, error) { return sval, nil diff --git a/vendor/github.com/spf13/pflag/string_array.go b/vendor/github.com/spf13/pflag/string_array.go new file mode 100644 index 00000000..f320f2ec --- /dev/null +++ b/vendor/github.com/spf13/pflag/string_array.go @@ -0,0 +1,110 @@ +package pflag + +import ( + "fmt" + "strings" +) + +var _ = fmt.Fprint + +// -- stringArray Value +type stringArrayValue struct { + value *[]string + changed bool +} + +func newStringArrayValue(val []string, p *[]string) *stringArrayValue { + ssv := new(stringArrayValue) + ssv.value = p + *ssv.value = val + return ssv +} + +func (s *stringArrayValue) Set(val string) error { + if !s.changed { + *s.value = []string{val} + s.changed = true + } else { + *s.value = append(*s.value, val) + } + return nil +} + +func (s *stringArrayValue) Type() string { + return "stringArray" +} + +func (s *stringArrayValue) String() string { + str, _ := writeAsCSV(*s.value) + return "[" + str + "]" +} + +func stringArrayConv(sval string) (interface{}, error) { + sval = strings.Trim(sval, "[]") + // An empty string would cause a array with one (empty) string + if len(sval) == 0 { + return []string{}, nil + } + return readAsCSV(sval) +} + +// GetStringArray return the []string value of a flag with the given name +func (f *FlagSet) GetStringArray(name string) ([]string, error) { + val, err := f.getFlagType(name, "stringArray", stringArrayConv) + if err != nil { + return []string{}, err + } + return val.([]string), nil +} + +// StringArrayVar defines a string flag with specified name, default value, and usage string. +// The argument p points to a []string variable in which to store the values of the multiple flags. +// The value of each argument will not try to be separated by comma +func (f *FlagSet) StringArrayVar(p *[]string, name string, value []string, usage string) { + f.VarP(newStringArrayValue(value, p), name, "", usage) +} + +// StringArrayVarP is like StringArrayVar, but accepts a shorthand letter that can be used after a single dash. +func (f *FlagSet) StringArrayVarP(p *[]string, name, shorthand string, value []string, usage string) { + f.VarP(newStringArrayValue(value, p), name, shorthand, usage) +} + +// StringArrayVar defines a string flag with specified name, default value, and usage string. +// The argument p points to a []string variable in which to store the value of the flag. +// The value of each argument will not try to be separated by comma +func StringArrayVar(p *[]string, name string, value []string, usage string) { + CommandLine.VarP(newStringArrayValue(value, p), name, "", usage) +} + +// StringArrayVarP is like StringArrayVar, but accepts a shorthand letter that can be used after a single dash. +func StringArrayVarP(p *[]string, name, shorthand string, value []string, usage string) { + CommandLine.VarP(newStringArrayValue(value, p), name, shorthand, usage) +} + +// StringArray defines a string flag with specified name, default value, and usage string. +// The return value is the address of a []string variable that stores the value of the flag. +// The value of each argument will not try to be separated by comma +func (f *FlagSet) StringArray(name string, value []string, usage string) *[]string { + p := []string{} + f.StringArrayVarP(&p, name, "", value, usage) + return &p +} + +// StringArrayP is like StringArray, but accepts a shorthand letter that can be used after a single dash. +func (f *FlagSet) StringArrayP(name, shorthand string, value []string, usage string) *[]string { + p := []string{} + f.StringArrayVarP(&p, name, shorthand, value, usage) + return &p +} + +// StringArray defines a string flag with specified name, default value, and usage string. +// The return value is the address of a []string variable that stores the value of the flag. +// The value of each argument will not try to be separated by comma +func StringArray(name string, value []string, usage string) *[]string { + return CommandLine.StringArrayP(name, "", value, usage) +} + +// StringArrayP is like StringArray, but accepts a shorthand letter that can be used after a single dash. +func StringArrayP(name, shorthand string, value []string, usage string) *[]string { + return CommandLine.StringArrayP(name, shorthand, value, usage) +} diff --git a/vendor/github.com/spf13/pflag/string_slice.go b/vendor/github.com/spf13/pflag/string_slice.go index 927a4408..51e3c5d2 100644 --- a/vendor/github.com/spf13/pflag/string_slice.go +++ b/vendor/github.com/spf13/pflag/string_slice.go @@ -31,6 +31,17 @@ func readAsCSV(val string) ([]string, error) { return csvReader.Read() } +func writeAsCSV(vals []string) (string, error) { + b := &bytes.Buffer{} + w := csv.NewWriter(b) + err := w.Write(vals) + if err != nil { + return "", err + } + w.Flush() + return strings.TrimSuffix(b.String(), fmt.Sprintln()), nil +} + func (s *stringSliceValue) Set(val string) error { v, err := readAsCSV(val) if err != nil { @@ -50,11 +61,8 @@ func (s *stringSliceValue) Type() string { } func (s *stringSliceValue) String() string { - b := &bytes.Buffer{} - w := csv.NewWriter(b) - w.Write(*s.value) - w.Flush() - return "[" + strings.TrimSuffix(b.String(), fmt.Sprintln()) + "]" + str, _ := writeAsCSV(*s.value) + return "[" + str + "]" } func stringSliceConv(sval string) (interface{}, error) { diff --git a/vendor/github.com/spf13/pflag/uint.go b/vendor/github.com/spf13/pflag/uint.go index e142b499..dcbc2b75 100644 --- a/vendor/github.com/spf13/pflag/uint.go +++ b/vendor/github.com/spf13/pflag/uint.go @@ -1,9 +1,6 @@ package pflag -import ( - "fmt" - "strconv" -) +import "strconv" // -- uint Value type uintValue uint @@ -23,7 +20,7 @@ func (i *uintValue) Type() string { return "uint" } -func (i *uintValue) String() string { return fmt.Sprintf("%v", *i) } +func (i *uintValue) String() string { return strconv.FormatUint(uint64(*i), 10) } func uintConv(sval string) (interface{}, error) { v, err := strconv.ParseUint(sval, 0, 0) diff --git a/vendor/github.com/spf13/pflag/uint16.go b/vendor/github.com/spf13/pflag/uint16.go index 5c96c19d..7e9914ed 100644 --- a/vendor/github.com/spf13/pflag/uint16.go +++ b/vendor/github.com/spf13/pflag/uint16.go @@ -1,9 +1,6 @@ package pflag -import ( - "fmt" - "strconv" -) +import "strconv" // -- uint16 value type uint16Value uint16 @@ -12,7 +9,7 @@ func newUint16Value(val uint16, p *uint16) *uint16Value { *p = val return (*uint16Value)(p) } -func (i *uint16Value) String() string { return fmt.Sprintf("%d", *i) } + func (i *uint16Value) Set(s string) error { v, err := strconv.ParseUint(s, 0, 16) *i = uint16Value(v) @@ -23,6 +20,8 @@ func (i *uint16Value) Type() string { return "uint16" } +func (i *uint16Value) String() string { return strconv.FormatUint(uint64(*i), 10) } + func uint16Conv(sval string) (interface{}, error) { v, err := strconv.ParseUint(sval, 0, 16) if err != nil { diff --git a/vendor/github.com/spf13/pflag/uint32.go b/vendor/github.com/spf13/pflag/uint32.go index 294fcaa3..d8024539 100644 --- a/vendor/github.com/spf13/pflag/uint32.go +++ b/vendor/github.com/spf13/pflag/uint32.go @@ -1,18 +1,15 @@ package pflag -import ( - "fmt" - "strconv" -) +import "strconv" -// -- uint16 value +// -- uint32 value type uint32Value uint32 func newUint32Value(val uint32, p *uint32) *uint32Value { *p = val return (*uint32Value)(p) } -func (i *uint32Value) String() string { return fmt.Sprintf("%d", *i) } + func (i *uint32Value) Set(s string) error { v, err := strconv.ParseUint(s, 0, 32) *i = uint32Value(v) @@ -23,6 +20,8 @@ func (i *uint32Value) Type() string { return "uint32" } +func (i *uint32Value) String() string { return strconv.FormatUint(uint64(*i), 10) } + func uint32Conv(sval string) (interface{}, error) { v, err := strconv.ParseUint(sval, 0, 32) if err != nil { diff --git a/vendor/github.com/spf13/pflag/uint64.go b/vendor/github.com/spf13/pflag/uint64.go index c6818850..f62240f2 100644 --- a/vendor/github.com/spf13/pflag/uint64.go +++ b/vendor/github.com/spf13/pflag/uint64.go @@ -1,9 +1,6 @@ package pflag -import ( - "fmt" - "strconv" -) +import "strconv" // -- uint64 Value type uint64Value uint64 @@ -23,7 +20,7 @@ func (i *uint64Value) Type() string { return "uint64" } -func (i *uint64Value) String() string { return fmt.Sprintf("%v", *i) } +func (i *uint64Value) String() string { return strconv.FormatUint(uint64(*i), 10) } func uint64Conv(sval string) (interface{}, error) { v, err := strconv.ParseUint(sval, 0, 64) diff --git a/vendor/github.com/spf13/pflag/uint8.go b/vendor/github.com/spf13/pflag/uint8.go index 26db418a..bb0e83c1 100644 --- a/vendor/github.com/spf13/pflag/uint8.go +++ b/vendor/github.com/spf13/pflag/uint8.go @@ -1,9 +1,6 @@ package pflag -import ( - "fmt" - "strconv" -) +import "strconv" // -- uint8 Value type uint8Value uint8 @@ -23,7 +20,7 @@ func (i *uint8Value) Type() string { return "uint8" } -func (i *uint8Value) String() string { return fmt.Sprintf("%v", *i) } +func (i *uint8Value) String() string { return strconv.FormatUint(uint64(*i), 10) } func uint8Conv(sval string) (interface{}, error) { v, err := strconv.ParseUint(sval, 0, 8) diff --git a/vendor/google.golang.org/grpc/transport/http_util.go b/vendor/google.golang.org/grpc/transport/http_util.go index 79da5126..3e16e4df 100644 --- a/vendor/google.golang.org/grpc/transport/http_util.go +++ b/vendor/google.golang.org/grpc/transport/http_util.go @@ -53,7 +53,7 @@ import ( const ( // The primary user agent - primaryUA = "grpc-go/1.0" + primaryUA = "grpc-go/0.11" // http2MaxFrameLen specifies the max length of a HTTP2 frame. http2MaxFrameLen = 16384 // 16KB frame // http://http2.github.io/http2-spec/#SettingValues