Merge pull request #32981 from aboch/nlo2

Support swarm-mode services with node-local networks
This commit is contained in:
Madhu Venugopal 2017-05-17 18:43:06 -07:00 committed by GitHub
commit ca4b3c6f67
93 changed files with 4115 additions and 1635 deletions

View file

@ -283,13 +283,6 @@ func (n *networkRouter) buildNetworkResource(nw libnetwork.Network) *types.Netwo
r.ID = nw.ID()
r.Created = info.Created()
r.Scope = info.Scope()
if n.cluster.IsManager() {
if _, err := n.cluster.GetNetwork(nw.ID()); err == nil {
r.Scope = "swarm"
}
} else if info.Dynamic() {
r.Scope = "swarm"
}
r.Driver = nw.Type()
r.EnableIPv6 = info.IPv6Enabled()
r.Internal = info.Internal()
@ -299,6 +292,11 @@ func (n *networkRouter) buildNetworkResource(nw libnetwork.Network) *types.Netwo
r.Containers = make(map[string]types.EndpointResource)
buildIpamResources(r, info)
r.Labels = info.Labels()
r.ConfigOnly = info.ConfigOnly()
if cn := info.ConfigFrom(); cn != "" {
r.ConfigFrom = network.ConfigReference{Network: cn}
}
peers := info.Peers()
if len(peers) != 0 {

View file

@ -100,3 +100,8 @@ func (es *EndpointSettings) Copy() *EndpointSettings {
type NetworkingConfig struct {
EndpointsConfig map[string]*EndpointSettings // Endpoint configs for each connecting network
}
// ConfigReference specifies the source which provides a network's configuration
type ConfigReference struct {
Network string
}

View file

@ -1,5 +1,9 @@
package swarm
import (
"github.com/docker/docker/api/types/network"
)
// Endpoint represents an endpoint.
type Endpoint struct {
Spec EndpointSpec `json:",omitempty"`
@ -78,12 +82,14 @@ type Network struct {
// NetworkSpec represents the spec of a network.
type NetworkSpec struct {
Annotations
DriverConfiguration *Driver `json:",omitempty"`
IPv6Enabled bool `json:",omitempty"`
Internal bool `json:",omitempty"`
Attachable bool `json:",omitempty"`
Ingress bool `json:",omitempty"`
IPAMOptions *IPAMOptions `json:",omitempty"`
DriverConfiguration *Driver `json:",omitempty"`
IPv6Enabled bool `json:",omitempty"`
Internal bool `json:",omitempty"`
Attachable bool `json:",omitempty"`
Ingress bool `json:",omitempty"`
IPAMOptions *IPAMOptions `json:",omitempty"`
ConfigFrom *network.ConfigReference `json:",omitempty"`
Scope string `json:",omitempty"`
}
// NetworkAttachmentConfig represents the configuration of a network attachment.

View file

@ -396,13 +396,15 @@ type NetworkResource struct {
Name string // Name is the requested name of the network
ID string `json:"Id"` // ID uniquely identifies a network on a single machine
Created time.Time // Created is the time the network created
Scope string // Scope describes the level at which the network exists (e.g. `global` for cluster-wide or `local` for machine level)
Scope string // Scope describes the level at which the network exists (e.g. `swarm` for cluster-wide or `local` for machine level)
Driver string // Driver is the Driver name used to create the network (e.g. `bridge`, `overlay`)
EnableIPv6 bool // EnableIPv6 represents whether to enable IPv6
IPAM network.IPAM // IPAM is the network's IP Address Management
Internal bool // Internal represents if the network is used internal only
Attachable bool // Attachable represents if the global scope is manually attachable by regular containers from workers in swarm mode.
Ingress bool // Ingress indicates the network is providing the routing-mesh for the swarm cluster.
ConfigFrom network.ConfigReference // ConfigFrom specifies the source which will provide the configuration for this network.
ConfigOnly bool // ConfigOnly networks are place-holder networks for network configurations to be used by other networks. ConfigOnly networks cannot be used directly to run containers or services.
Containers map[string]EndpointResource // Containers contains endpoints belonging to the network
Options map[string]string // Options holds the network specific options to use for when creating the network
Labels map[string]string // Labels holds metadata specific to the network being created
@ -430,11 +432,14 @@ type NetworkCreate struct {
// which has the same name but it is not guaranteed to catch all name collisions.
CheckDuplicate bool
Driver string
Scope string
EnableIPv6 bool
IPAM *network.IPAM
Internal bool
Attachable bool
Ingress bool
ConfigOnly bool
ConfigFrom *network.ConfigReference
Options map[string]string
Labels map[string]string
}

View file

@ -6,6 +6,7 @@ import (
basictypes "github.com/docker/docker/api/types"
networktypes "github.com/docker/docker/api/types/network"
types "github.com/docker/docker/api/types/swarm"
netconst "github.com/docker/libnetwork/datastore"
swarmapi "github.com/docker/swarmkit/api"
gogotypes "github.com/gogo/protobuf/types"
)
@ -30,10 +31,17 @@ func networkFromGRPC(n *swarmapi.Network) types.Network {
Attachable: n.Spec.Attachable,
Ingress: n.Spec.Ingress,
IPAMOptions: ipamFromGRPC(n.Spec.IPAM),
Scope: netconst.SwarmScope,
},
IPAMOptions: ipamFromGRPC(n.IPAM),
}
if n.Spec.ConfigFrom != "" {
network.Spec.ConfigFrom = &networktypes.ConfigReference{
Network: n.Spec.ConfigFrom,
}
}
// Meta
network.Version.Index = n.Meta.Version.Index
network.CreatedAt, _ = gogotypes.TimestampFromProto(n.Meta.CreatedAt)
@ -152,7 +160,7 @@ func BasicNetworkFromGRPC(n swarmapi.Network) basictypes.NetworkResource {
nr := basictypes.NetworkResource{
ID: n.ID,
Name: n.Spec.Annotations.Name,
Scope: "swarm",
Scope: netconst.SwarmScope,
EnableIPv6: spec.Ipv6Enabled,
IPAM: ipam,
Internal: spec.Internal,
@ -161,6 +169,12 @@ func BasicNetworkFromGRPC(n swarmapi.Network) basictypes.NetworkResource {
Labels: n.Spec.Annotations.Labels,
}
if n.Spec.ConfigFrom != "" {
nr.ConfigFrom = networktypes.ConfigReference{
Network: n.Spec.ConfigFrom,
}
}
if n.DriverState != nil {
nr.Driver = n.DriverState.Name
nr.Options = n.DriverState.Options
@ -206,5 +220,8 @@ func BasicNetworkCreateToGRPC(create basictypes.NetworkCreateRequest) swarmapi.N
}
ns.IPAM.Configs = ipamSpec
}
if create.ConfigFrom != nil {
ns.ConfigFrom = create.ConfigFrom.Network
}
return ns
}

View file

@ -176,7 +176,7 @@ func (c *containerAdapter) removeNetworks(ctx context.Context) error {
}
func (c *containerAdapter) networkAttach(ctx context.Context) error {
config := c.container.createNetworkingConfig()
config := c.container.createNetworkingConfig(c.backend)
var (
networkName string
@ -195,7 +195,7 @@ func (c *containerAdapter) networkAttach(ctx context.Context) error {
}
func (c *containerAdapter) waitForDetach(ctx context.Context) error {
config := c.container.createNetworkingConfig()
config := c.container.createNetworkingConfig(c.backend)
var (
networkName string
@ -216,20 +216,19 @@ func (c *containerAdapter) waitForDetach(ctx context.Context) error {
func (c *containerAdapter) create(ctx context.Context) error {
var cr containertypes.ContainerCreateCreatedBody
var err error
if cr, err = c.backend.CreateManagedContainer(types.ContainerCreateConfig{
Name: c.container.name(),
Config: c.container.config(),
HostConfig: c.container.hostConfig(),
// Use the first network in container create
NetworkingConfig: c.container.createNetworkingConfig(),
NetworkingConfig: c.container.createNetworkingConfig(c.backend),
}); err != nil {
return err
}
// Docker daemon currently doesn't support multiple networks in container create
// Connect to all other networks
nc := c.container.connectNetworkingConfig()
nc := c.container.connectNetworkingConfig(c.backend)
if nc != nil {
for n, ep := range nc.EndpointsConfig {

View file

@ -18,8 +18,10 @@ import (
enginemount "github.com/docker/docker/api/types/mount"
"github.com/docker/docker/api/types/network"
volumetypes "github.com/docker/docker/api/types/volume"
executorpkg "github.com/docker/docker/daemon/cluster/executor"
clustertypes "github.com/docker/docker/daemon/cluster/provider"
"github.com/docker/go-connections/nat"
netconst "github.com/docker/libnetwork/datastore"
"github.com/docker/swarmkit/agent/exec"
"github.com/docker/swarmkit/api"
"github.com/docker/swarmkit/template"
@ -374,6 +376,14 @@ func (c *containerConfig) hostConfig() *enginecontainer.HostConfig {
}
}
if len(c.task.Networks) > 0 {
labels := c.task.Networks[0].Network.Spec.Annotations.Labels
name := c.task.Networks[0].Network.Spec.Annotations.Name
if v, ok := labels["com.docker.swarm.predefined"]; ok && v == "true" {
hc.NetworkMode = enginecontainer.NetworkMode(name)
}
}
return hc
}
@ -428,7 +438,7 @@ func (c *containerConfig) resources() enginecontainer.Resources {
}
// Docker daemon supports just 1 network during container create.
func (c *containerConfig) createNetworkingConfig() *network.NetworkingConfig {
func (c *containerConfig) createNetworkingConfig(b executorpkg.Backend) *network.NetworkingConfig {
var networks []*api.NetworkAttachment
if c.task.Spec.GetContainer() != nil || c.task.Spec.GetAttachment() != nil {
networks = c.task.Networks
@ -436,19 +446,18 @@ func (c *containerConfig) createNetworkingConfig() *network.NetworkingConfig {
epConfig := make(map[string]*network.EndpointSettings)
if len(networks) > 0 {
epConfig[networks[0].Network.Spec.Annotations.Name] = getEndpointConfig(networks[0])
epConfig[networks[0].Network.Spec.Annotations.Name] = getEndpointConfig(networks[0], b)
}
return &network.NetworkingConfig{EndpointsConfig: epConfig}
}
// TODO: Merge this function with createNetworkingConfig after daemon supports multiple networks in container create
func (c *containerConfig) connectNetworkingConfig() *network.NetworkingConfig {
func (c *containerConfig) connectNetworkingConfig(b executorpkg.Backend) *network.NetworkingConfig {
var networks []*api.NetworkAttachment
if c.task.Spec.GetContainer() != nil {
networks = c.task.Networks
}
// First network is used during container create. Other networks are used in "docker network connect"
if len(networks) < 2 {
return nil
@ -456,12 +465,12 @@ func (c *containerConfig) connectNetworkingConfig() *network.NetworkingConfig {
epConfig := make(map[string]*network.EndpointSettings)
for _, na := range networks[1:] {
epConfig[na.Network.Spec.Annotations.Name] = getEndpointConfig(na)
epConfig[na.Network.Spec.Annotations.Name] = getEndpointConfig(na, b)
}
return &network.NetworkingConfig{EndpointsConfig: epConfig}
}
func getEndpointConfig(na *api.NetworkAttachment) *network.EndpointSettings {
func getEndpointConfig(na *api.NetworkAttachment, b executorpkg.Backend) *network.EndpointSettings {
var ipv4, ipv6 string
for _, addr := range na.Addresses {
ip, _, err := net.ParseCIDR(addr)
@ -479,13 +488,19 @@ func getEndpointConfig(na *api.NetworkAttachment) *network.EndpointSettings {
}
}
return &network.EndpointSettings{
n := &network.EndpointSettings{
NetworkID: na.Network.ID,
IPAMConfig: &network.EndpointIPAMConfig{
IPv4Address: ipv4,
IPv6Address: ipv6,
},
}
if v, ok := na.Network.Spec.Annotations.Labels["com.docker.swarm.predefined"]; ok && v == "true" {
if ln, err := b.FindNetwork(na.Network.Spec.Annotations.Name); err == nil {
n.NetworkID = ln.ID()
}
}
return n
}
func (c *containerConfig) virtualIP(networkID string) string {
@ -570,27 +585,38 @@ func (c *containerConfig) networkCreateRequest(name string) (clustertypes.Networ
options := types.NetworkCreate{
// ID: na.Network.ID,
Driver: na.Network.DriverState.Name,
IPAM: &network.IPAM{
Driver: na.Network.IPAM.Driver.Name,
Options: na.Network.IPAM.Driver.Options,
},
Options: na.Network.DriverState.Options,
Labels: na.Network.Spec.Annotations.Labels,
Internal: na.Network.Spec.Internal,
Attachable: na.Network.Spec.Attachable,
Ingress: na.Network.Spec.Ingress,
EnableIPv6: na.Network.Spec.Ipv6Enabled,
CheckDuplicate: true,
Scope: netconst.SwarmScope,
}
for _, ic := range na.Network.IPAM.Configs {
c := network.IPAMConfig{
Subnet: ic.Subnet,
IPRange: ic.Range,
Gateway: ic.Gateway,
if na.Network.Spec.ConfigFrom != "" {
options.ConfigFrom = &network.ConfigReference{
Network: na.Network.Spec.ConfigFrom,
}
}
if na.Network.DriverState != nil {
options.Driver = na.Network.DriverState.Name
options.Options = na.Network.DriverState.Options
}
if na.Network.IPAM != nil {
options.IPAM = &network.IPAM{
Driver: na.Network.IPAM.Driver.Name,
Options: na.Network.IPAM.Driver.Options,
}
for _, ic := range na.Network.IPAM.Configs {
c := network.IPAMConfig{
Subnet: ic.Subnet,
IPRange: ic.Range,
Gateway: ic.Gateway,
}
options.IPAM.Config = append(options.IPAM.Config, c)
}
options.IPAM.Config = append(options.IPAM.Config, c)
}
return clustertypes.NetworkCreateRequest{

View file

@ -17,7 +17,28 @@ import (
// GetNetworks returns all current cluster managed networks.
func (c *Cluster) GetNetworks() ([]apitypes.NetworkResource, error) {
return c.getNetworks(nil)
list, err := c.getNetworks(nil)
if err != nil {
return nil, err
}
removePredefinedNetworks(&list)
return list, nil
}
func removePredefinedNetworks(networks *[]apitypes.NetworkResource) {
if networks == nil {
return
}
var idxs []int
for i, n := range *networks {
if v, ok := n.Labels["com.docker.swarm.predefined"]; ok && v == "true" {
idxs = append(idxs, i)
}
}
for i, idx := range idxs {
idx -= i
*networks = append((*networks)[:idx], (*networks)[idx+1:]...)
}
}
func (c *Cluster) getNetworks(filters *swarmapi.ListNetworksRequest_Filters) ([]apitypes.NetworkResource, error) {
@ -269,16 +290,27 @@ func (c *Cluster) populateNetworkID(ctx context.Context, client swarmapi.Control
if len(networks) == 0 {
networks = s.Networks
}
for i, n := range networks {
apiNetwork, err := getNetwork(ctx, client, n.Target)
if err != nil {
if ln, _ := c.config.Backend.FindNetwork(n.Target); ln != nil && !ln.Info().Dynamic() {
ln, _ := c.config.Backend.FindNetwork(n.Target)
if ln != nil && runconfig.IsPreDefinedNetwork(ln.Name()) {
// Need to retrieve the corresponding predefined swarm network
// and use its id for the request.
apiNetwork, err = getNetwork(ctx, client, ln.Name())
if err != nil {
err = fmt.Errorf("could not find the corresponding predefined swarm network: %v", err)
return apierrors.NewRequestNotFoundError(err)
}
goto setid
}
if ln != nil && !ln.Info().Dynamic() {
err = fmt.Errorf("The network %s cannot be used with services. Only networks scoped to the swarm can be used, such as those created with the overlay driver.", ln.Name())
return apierrors.NewRequestForbiddenError(err)
}
return err
}
setid:
networks[i].Target = apiNetwork.ID
}
return nil

View file

@ -318,6 +318,11 @@ func (daemon *Daemon) createNetwork(create types.NetworkCreateRequest, id string
libnetwork.NetworkOptionLabels(create.Labels),
libnetwork.NetworkOptionAttachable(create.Attachable),
libnetwork.NetworkOptionIngress(create.Ingress),
libnetwork.NetworkOptionScope(create.Scope),
}
if create.ConfigOnly {
nwOptions = append(nwOptions, libnetwork.NetworkOptionConfigOnly())
}
if create.IPAM != nil {
@ -337,6 +342,10 @@ func (daemon *Daemon) createNetwork(create types.NetworkCreateRequest, id string
nwOptions = append(nwOptions, libnetwork.NetworkOptionPersist(false))
}
if create.ConfigFrom != nil {
nwOptions = append(nwOptions, libnetwork.NetworkOptionConfigFrom(create.ConfigFrom.Network))
}
n, err := c.NewNetwork(driver, create.Name, id, nwOptions...)
if err != nil {
if _, ok := err.(libnetwork.ErrDataStoreNotInitialized); ok {
@ -498,13 +507,29 @@ func (daemon *Daemon) deleteNetwork(networkID string, dynamic bool) error {
return apierrors.NewRequestForbiddenError(err)
}
if dynamic && !nw.Info().Dynamic() {
if runconfig.IsPreDefinedNetwork(nw.Name()) {
// Predefined networks now support swarm services. Make this
// a no-op when cluster requests to remove the predefined network.
return nil
}
err := fmt.Errorf("%s is not a dynamic network", nw.Name())
return apierrors.NewRequestForbiddenError(err)
}
if err := nw.Delete(); err != nil {
return err
}
daemon.pluginRefCount(nw.Type(), driverapi.NetworkPluginEndpointType, plugingetter.Release)
ipamType, _, _, _ := nw.Info().IpamConfig()
daemon.pluginRefCount(ipamType, ipamapi.PluginEndpointType, plugingetter.Release)
daemon.LogNetworkEvent(nw, "destroy")
// If this is not a configuration only network, we need to
// update the corresponding remote drivers' reference counts
if !nw.Info().ConfigOnly() {
daemon.pluginRefCount(nw.Type(), driverapi.NetworkPluginEndpointType, plugingetter.Release)
ipamType, _, _, _ := nw.Info().IpamConfig()
daemon.pluginRefCount(ipamType, ipamapi.PluginEndpointType, plugingetter.Release)
daemon.LogNetworkEvent(nw, "destroy")
}
return nil
}

View file

@ -315,6 +315,9 @@ func (daemon *Daemon) localNetworksPrune(ctx context.Context, pruneFilters filte
return true
default:
}
if nw.Info().ConfigOnly() {
return false
}
if !until.IsZero() && nw.Info().Created().After(until) {
return false
}

View file

@ -37,6 +37,9 @@ Options:
-o, --opt value Set driver specific options (default map[])
--subnet value Subnet in CIDR format that represents a
network segment (default [])
--scope value Promote a network to swarm scope (value = [ local | swarm ])
--config-only Creates a configuration only network
--config-from The name of the network from which copying the configuration
```
## Description

View file

@ -134,3 +134,44 @@ $ docker network create -d overlay \
--opt encrypted=true \
my-ingress-network
```
### Run services on predefined networks
You can create services on the predefined docker networks `bridge` and `host`.
```bash
$ docker service create --name my-service \
--network host \
--replicas 2 \
busybox top
```
### Swarm networks with local scope drivers
You can create a swarm network with local scope network drivers. You do so
by promoting the network scope to `swarm` during the creation of the network.
You will then be able to use this network when creating services.
```bash
$ docker network create -d bridge \
--scope swarm \
--attachable \
swarm-network
```
For network drivers which provide connectivity across hosts (ex. macvlan), if
node specific configurations are needed in order to plumb the network on each
host, you will supply that configuration via a configuration only network.
When you create the swarm scoped network, you will then specify the name of the
network which contains the configuration.
```bash
node1$ docker network create --config-only --subnet 192.168.100.0/24 --gateway 192.168.100.115 mv-config
node2$ docker network create --config-only --subnet 192.168.200.0/24 --gateway 192.168.200.202 mv-config
node1$ docker network create -d macvlan --scope swarm --config-from mv-config --attachable swarm-network
```

View file

@ -26,7 +26,7 @@ github.com/imdario/mergo 0.2.1
golang.org/x/sync de49d9dcd27d4f764488181bea099dfe6179bcf0
#get libnetwork packages
github.com/docker/libnetwork 6786135bf7de08ec26a72a6f7e4291d27d113a3f
github.com/docker/libnetwork b2bc1a68486ccf8ada503162d9f0df7d31bdd8fb
github.com/docker/go-events 18b43f1bc85d9cdd42c05a6cd2d444c7a200a894
github.com/armon/go-radix e39d623f12e8e41c7b5529e9a9dd67a1e2261f80
github.com/armon/go-metrics eb0af217e5e9747e41dd5303755356b62d28e3ec
@ -107,8 +107,8 @@ github.com/containerd/containerd 3addd840653146c90a254301d6c3a663c7fd6429
github.com/tonistiigi/fifo 1405643975692217d6720f8b54aeee1bf2cd5cf4
# cluster
github.com/docker/swarmkit ae29cf24355ef2106b63884d2f9b0a6406e5a144
github.com/gogo/protobuf 8d70fb3182befc465c4a1eac8ad4d38ff49778e2
github.com/docker/swarmkit 998a47fb9c2b727c8a48d372309af0b3032051e2
github.com/gogo/protobuf v0.4
github.com/cloudflare/cfssl 7fb22c8cba7ecaf98e4082d22d65800cf45e042a
github.com/google/certificate-transparency d90e65c3a07988180c5b1ece71791c0b6506826e
golang.org/x/crypto 3fbbcd23f1cb824e69491a5930cfeff09b12f4d2

View file

@ -222,7 +222,7 @@ func (c *controller) agentSetup(clusterProvider cluster.Provider) error {
return err
}
c.drvRegistry.WalkDrivers(func(name string, driver driverapi.Driver, capability driverapi.Capability) bool {
if capability.DataScope == datastore.GlobalScope {
if capability.ConnectivityScope == datastore.GlobalScope {
c.agentDriverNotify(driver)
}
return false
@ -507,7 +507,7 @@ func (n *network) Services() map[string]ServiceInfo {
}
func (n *network) isClusterEligible() bool {
if n.driverScope() != datastore.GlobalScope {
if n.scope != datastore.SwarmScope || !n.driverIsMultihost() {
return false
}
return n.getController().getAgent() != nil

View file

@ -621,7 +621,7 @@ func (c *controller) pushNodeDiscovery(d driverapi.Driver, cap driverapi.Capabil
}
}
if d == nil || cap.DataScope != datastore.GlobalScope || nodes == nil {
if d == nil || cap.ConnectivityScope != datastore.GlobalScope || nodes == nil {
return
}
@ -722,22 +722,46 @@ func (c *controller) NewNetwork(networkType, name string, id string, options ...
}
network.processOptions(options...)
if err := network.validateConfiguration(); err != nil {
return nil, err
}
_, cap, err := network.resolveDriver(networkType, true)
var (
cap *driverapi.Capability
err error
)
// Reset network types, force local scope and skip allocation and
// plumbing for configuration networks. Reset of the config-only
// network drivers is needed so that this special network is not
// usable by old engine versions.
if network.configOnly {
network.scope = datastore.LocalScope
network.networkType = "null"
network.ipamType = ""
goto addToStore
}
_, cap, err = network.resolveDriver(network.networkType, true)
if err != nil {
return nil, err
}
if network.scope == datastore.LocalScope && cap.DataScope == datastore.GlobalScope {
return nil, types.ForbiddenErrorf("cannot downgrade network scope for %s networks", networkType)
}
if network.ingress && cap.DataScope != datastore.GlobalScope {
return nil, types.ForbiddenErrorf("Ingress network can only be global scope network")
}
if cap.DataScope == datastore.GlobalScope && !c.isDistributedControl() && !network.dynamic {
// At this point the network scope is still unknown if not set by user
if (cap.DataScope == datastore.GlobalScope || network.scope == datastore.SwarmScope) &&
!c.isDistributedControl() && !network.dynamic {
if c.isManager() {
// For non-distributed controlled environment, globalscoped non-dynamic networks are redirected to Manager
return nil, ManagerRedirectError(name)
}
return nil, types.ForbiddenErrorf("Cannot create a multi-host network from a worker node. Please create the network from a manager node.")
}
@ -747,6 +771,26 @@ func (c *controller) NewNetwork(networkType, name string, id string, options ...
return nil, err
}
// From this point on, we need the network specific configuration,
// which may come from a configuration-only network
if network.configFrom != "" {
t, err := c.getConfigNetwork(network.configFrom)
if err != nil {
return nil, types.NotFoundErrorf("configuration network %q does not exist", network.configFrom)
}
if err := t.applyConfigurationTo(network); err != nil {
return nil, types.InternalErrorf("Failed to apply configuration: %v", err)
}
defer func() {
if err == nil {
if err := t.getEpCnt().IncEndpointCnt(); err != nil {
logrus.Warnf("Failed to update reference count for configuration network %q on creation of network %q: %v",
t.Name(), network.Name(), err)
}
}
}()
}
err = network.ipamAllocate()
if err != nil {
return nil, err
@ -769,6 +813,7 @@ func (c *controller) NewNetwork(networkType, name string, id string, options ...
}
}()
addToStore:
// First store the endpoint count, then the network. To avoid to
// end up with a datastore containing a network and not an epCnt,
// in case of an ungraceful shutdown during this function call.
@ -788,6 +833,9 @@ func (c *controller) NewNetwork(networkType, name string, id string, options ...
if err = c.updateToStore(network); err != nil {
return nil, err
}
if network.configOnly {
return network, nil
}
joinCluster(network)
if !c.isDistributedControl() {
@ -796,11 +844,18 @@ func (c *controller) NewNetwork(networkType, name string, id string, options ...
c.Unlock()
}
c.Lock()
arrangeUserFilterRule()
c.Unlock()
return network, nil
}
var joinCluster NetworkWalker = func(nw Network) bool {
n := nw.(*network)
if n.configOnly {
return false
}
if err := n.joinCluster(); err != nil {
logrus.Errorf("Failed to join network %s (%s) into agent cluster: %v", n.Name(), n.ID(), err)
}
@ -816,6 +871,9 @@ func (c *controller) reservePools() {
}
for _, n := range networks {
if n.configOnly {
continue
}
if !doReplayPoolReserve(n) {
continue
}

View file

@ -115,7 +115,10 @@ const (
// LocalScope indicates to store the KV object in local datastore such as boltdb
LocalScope = "local"
// GlobalScope indicates to store the KV object in global datastore such as consul/etcd/zookeeper
GlobalScope = "global"
GlobalScope = "global"
// SwarmScope is not indicating a datastore location. It is defined here
// along with the other two scopes just for consistency.
SwarmScope = "swarm"
defaultPrefix = "/var/lib/docker/network/files"
)

View file

@ -161,7 +161,8 @@ type DriverCallback interface {
// Capability represents the high level capabilities of the drivers which libnetwork can make use of
type Capability struct {
DataScope string
DataScope string
ConnectivityScope string
}
// IPAMData represents the per-network ip related

View file

@ -153,7 +153,8 @@ func Init(dc driverapi.DriverCallback, config map[string]interface{}) error {
}
c := driverapi.Capability{
DataScope: datastore.LocalScope,
DataScope: datastore.LocalScope,
ConnectivityScope: datastore.LocalScope,
}
return dc.RegisterDriver(networkType, d, c)
}

View file

@ -0,0 +1,88 @@
package brmanager
import (
"github.com/docker/libnetwork/datastore"
"github.com/docker/libnetwork/discoverapi"
"github.com/docker/libnetwork/driverapi"
"github.com/docker/libnetwork/types"
)
const networkType = "bridge"
type driver struct{}
// Init registers a new instance of bridge manager driver
func Init(dc driverapi.DriverCallback, config map[string]interface{}) error {
c := driverapi.Capability{
DataScope: datastore.LocalScope,
ConnectivityScope: datastore.LocalScope,
}
return dc.RegisterDriver(networkType, &driver{}, c)
}
func (d *driver) NetworkAllocate(id string, option map[string]string, ipV4Data, ipV6Data []driverapi.IPAMData) (map[string]string, error) {
return nil, types.NotImplementedErrorf("not implemented")
}
func (d *driver) NetworkFree(id string) error {
return types.NotImplementedErrorf("not implemented")
}
func (d *driver) CreateNetwork(id string, option map[string]interface{}, nInfo driverapi.NetworkInfo, ipV4Data, ipV6Data []driverapi.IPAMData) error {
return types.NotImplementedErrorf("not implemented")
}
func (d *driver) EventNotify(etype driverapi.EventType, nid, tableName, key string, value []byte) {
}
func (d *driver) DecodeTableEntry(tablename string, key string, value []byte) (string, map[string]string) {
return "", nil
}
func (d *driver) DeleteNetwork(nid string) error {
return types.NotImplementedErrorf("not implemented")
}
func (d *driver) CreateEndpoint(nid, eid string, ifInfo driverapi.InterfaceInfo, epOptions map[string]interface{}) error {
return types.NotImplementedErrorf("not implemented")
}
func (d *driver) DeleteEndpoint(nid, eid string) error {
return types.NotImplementedErrorf("not implemented")
}
func (d *driver) EndpointOperInfo(nid, eid string) (map[string]interface{}, error) {
return nil, types.NotImplementedErrorf("not implemented")
}
func (d *driver) Join(nid, eid string, sboxKey string, jinfo driverapi.JoinInfo, options map[string]interface{}) error {
return types.NotImplementedErrorf("not implemented")
}
func (d *driver) Leave(nid, eid string) error {
return types.NotImplementedErrorf("not implemented")
}
func (d *driver) Type() string {
return networkType
}
func (d *driver) IsBuiltIn() bool {
return true
}
func (d *driver) DiscoverNew(dType discoverapi.DiscoveryType, data interface{}) error {
return types.NotImplementedErrorf("not implemented")
}
func (d *driver) DiscoverDelete(dType discoverapi.DiscoveryType, data interface{}) error {
return types.NotImplementedErrorf("not implemented")
}
func (d *driver) ProgramExternalConnectivity(nid, eid string, options map[string]interface{}) error {
return types.NotImplementedErrorf("not implemented")
}
func (d *driver) RevokeExternalConnectivity(nid, eid string) error {
return types.NotImplementedErrorf("not implemented")
}

View file

@ -53,7 +53,7 @@ func setupIPChains(config *configuration) (*iptables.ChainInfo, *iptables.ChainI
return nil, nil, nil, fmt.Errorf("failed to create FILTER isolation chain: %v", err)
}
if err := addReturnRule(IsolationChain); err != nil {
if err := iptables.AddReturnRule(IsolationChain); err != nil {
return nil, nil, nil, err
}
@ -117,7 +117,7 @@ func (n *bridgeNetwork) setupIPTables(config *networkConfiguration, i *bridgeInt
}
d.Lock()
err = ensureJumpRule("FORWARD", IsolationChain)
err = iptables.EnsureJumpRule("FORWARD", IsolationChain)
d.Unlock()
if err != nil {
return err
@ -280,46 +280,6 @@ func setINC(iface1, iface2 string, enable bool) error {
return nil
}
func addReturnRule(chain string) error {
var (
table = iptables.Filter
args = []string{"-j", "RETURN"}
)
if iptables.Exists(table, chain, args...) {
return nil
}
err := iptables.RawCombinedOutput(append([]string{"-I", chain}, args...)...)
if err != nil {
return fmt.Errorf("unable to add return rule in %s chain: %s", chain, err.Error())
}
return nil
}
// Ensure the jump rule is on top
func ensureJumpRule(fromChain, toChain string) error {
var (
table = iptables.Filter
args = []string{"-j", toChain}
)
if iptables.Exists(table, fromChain, args...) {
err := iptables.RawCombinedOutput(append([]string{"-D", fromChain}, args...)...)
if err != nil {
return fmt.Errorf("unable to remove jump to %s rule in %s chain: %s", toChain, fromChain, err.Error())
}
}
err := iptables.RawCombinedOutput(append([]string{"-I", fromChain}, args...)...)
if err != nil {
return fmt.Errorf("unable to insert jump to %s rule in %s chain: %s", toChain, fromChain, err.Error())
}
return nil
}
func removeIPChains() {
for _, chainInfo := range []iptables.ChainInfo{
{Name: DockerChain, Table: iptables.Nat},

View file

@ -19,7 +19,8 @@ type driver struct {
// Init registers a new instance of host driver
func Init(dc driverapi.DriverCallback, config map[string]interface{}) error {
c := driverapi.Capability{
DataScope: datastore.LocalScope,
DataScope: datastore.LocalScope,
ConnectivityScope: datastore.LocalScope,
}
return dc.RegisterDriver(networkType, &driver{}, c)
}

View file

@ -58,7 +58,8 @@ type network struct {
// Init initializes and registers the libnetwork ipvlan driver
func Init(dc driverapi.DriverCallback, config map[string]interface{}) error {
c := driverapi.Capability{
DataScope: datastore.LocalScope,
DataScope: datastore.LocalScope,
ConnectivityScope: datastore.GlobalScope,
}
d := &driver{
networks: networkTable{},

View file

@ -0,0 +1,88 @@
package ivmanager
import (
"github.com/docker/libnetwork/datastore"
"github.com/docker/libnetwork/discoverapi"
"github.com/docker/libnetwork/driverapi"
"github.com/docker/libnetwork/types"
)
const networkType = "ipvlan"
type driver struct{}
// Init registers a new instance of ipvlan manager driver
func Init(dc driverapi.DriverCallback, config map[string]interface{}) error {
c := driverapi.Capability{
DataScope: datastore.LocalScope,
ConnectivityScope: datastore.GlobalScope,
}
return dc.RegisterDriver(networkType, &driver{}, c)
}
func (d *driver) NetworkAllocate(id string, option map[string]string, ipV4Data, ipV6Data []driverapi.IPAMData) (map[string]string, error) {
return nil, types.NotImplementedErrorf("not implemented")
}
func (d *driver) NetworkFree(id string) error {
return types.NotImplementedErrorf("not implemented")
}
func (d *driver) CreateNetwork(id string, option map[string]interface{}, nInfo driverapi.NetworkInfo, ipV4Data, ipV6Data []driverapi.IPAMData) error {
return types.NotImplementedErrorf("not implemented")
}
func (d *driver) EventNotify(etype driverapi.EventType, nid, tableName, key string, value []byte) {
}
func (d *driver) DecodeTableEntry(tablename string, key string, value []byte) (string, map[string]string) {
return "", nil
}
func (d *driver) DeleteNetwork(nid string) error {
return types.NotImplementedErrorf("not implemented")
}
func (d *driver) CreateEndpoint(nid, eid string, ifInfo driverapi.InterfaceInfo, epOptions map[string]interface{}) error {
return types.NotImplementedErrorf("not implemented")
}
func (d *driver) DeleteEndpoint(nid, eid string) error {
return types.NotImplementedErrorf("not implemented")
}
func (d *driver) EndpointOperInfo(nid, eid string) (map[string]interface{}, error) {
return nil, types.NotImplementedErrorf("not implemented")
}
func (d *driver) Join(nid, eid string, sboxKey string, jinfo driverapi.JoinInfo, options map[string]interface{}) error {
return types.NotImplementedErrorf("not implemented")
}
func (d *driver) Leave(nid, eid string) error {
return types.NotImplementedErrorf("not implemented")
}
func (d *driver) Type() string {
return networkType
}
func (d *driver) IsBuiltIn() bool {
return true
}
func (d *driver) DiscoverNew(dType discoverapi.DiscoveryType, data interface{}) error {
return types.NotImplementedErrorf("not implemented")
}
func (d *driver) DiscoverDelete(dType discoverapi.DiscoveryType, data interface{}) error {
return types.NotImplementedErrorf("not implemented")
}
func (d *driver) ProgramExternalConnectivity(nid, eid string, options map[string]interface{}) error {
return types.NotImplementedErrorf("not implemented")
}
func (d *driver) RevokeExternalConnectivity(nid, eid string) error {
return types.NotImplementedErrorf("not implemented")
}

View file

@ -60,7 +60,8 @@ type network struct {
// Init initializes and registers the libnetwork macvlan driver
func Init(dc driverapi.DriverCallback, config map[string]interface{}) error {
c := driverapi.Capability{
DataScope: datastore.LocalScope,
DataScope: datastore.LocalScope,
ConnectivityScope: datastore.GlobalScope,
}
d := &driver{
networks: networkTable{},

View file

@ -0,0 +1,88 @@
package mvmanager
import (
"github.com/docker/libnetwork/datastore"
"github.com/docker/libnetwork/discoverapi"
"github.com/docker/libnetwork/driverapi"
"github.com/docker/libnetwork/types"
)
const networkType = "macvlan"
type driver struct{}
// Init registers a new instance of macvlan manager driver
func Init(dc driverapi.DriverCallback, config map[string]interface{}) error {
c := driverapi.Capability{
DataScope: datastore.LocalScope,
ConnectivityScope: datastore.GlobalScope,
}
return dc.RegisterDriver(networkType, &driver{}, c)
}
func (d *driver) NetworkAllocate(id string, option map[string]string, ipV4Data, ipV6Data []driverapi.IPAMData) (map[string]string, error) {
return nil, types.NotImplementedErrorf("not implemented")
}
func (d *driver) NetworkFree(id string) error {
return types.NotImplementedErrorf("not implemented")
}
func (d *driver) CreateNetwork(id string, option map[string]interface{}, nInfo driverapi.NetworkInfo, ipV4Data, ipV6Data []driverapi.IPAMData) error {
return types.NotImplementedErrorf("not implemented")
}
func (d *driver) EventNotify(etype driverapi.EventType, nid, tableName, key string, value []byte) {
}
func (d *driver) DecodeTableEntry(tablename string, key string, value []byte) (string, map[string]string) {
return "", nil
}
func (d *driver) DeleteNetwork(nid string) error {
return types.NotImplementedErrorf("not implemented")
}
func (d *driver) CreateEndpoint(nid, eid string, ifInfo driverapi.InterfaceInfo, epOptions map[string]interface{}) error {
return types.NotImplementedErrorf("not implemented")
}
func (d *driver) DeleteEndpoint(nid, eid string) error {
return types.NotImplementedErrorf("not implemented")
}
func (d *driver) EndpointOperInfo(nid, eid string) (map[string]interface{}, error) {
return nil, types.NotImplementedErrorf("not implemented")
}
func (d *driver) Join(nid, eid string, sboxKey string, jinfo driverapi.JoinInfo, options map[string]interface{}) error {
return types.NotImplementedErrorf("not implemented")
}
func (d *driver) Leave(nid, eid string) error {
return types.NotImplementedErrorf("not implemented")
}
func (d *driver) Type() string {
return networkType
}
func (d *driver) IsBuiltIn() bool {
return true
}
func (d *driver) DiscoverNew(dType discoverapi.DiscoveryType, data interface{}) error {
return types.NotImplementedErrorf("not implemented")
}
func (d *driver) DiscoverDelete(dType discoverapi.DiscoveryType, data interface{}) error {
return types.NotImplementedErrorf("not implemented")
}
func (d *driver) ProgramExternalConnectivity(nid, eid string, options map[string]interface{}) error {
return types.NotImplementedErrorf("not implemented")
}
func (d *driver) RevokeExternalConnectivity(nid, eid string) error {
return types.NotImplementedErrorf("not implemented")
}

View file

@ -56,7 +56,8 @@ type driver struct {
// Init registers a new instance of overlay driver
func Init(dc driverapi.DriverCallback, config map[string]interface{}) error {
c := driverapi.Capability{
DataScope: datastore.GlobalScope,
DataScope: datastore.GlobalScope,
ConnectivityScope: datastore.GlobalScope,
}
d := &driver{
networks: networkTable{},

View file

@ -49,7 +49,8 @@ type network struct {
func Init(dc driverapi.DriverCallback, config map[string]interface{}) error {
var err error
c := driverapi.Capability{
DataScope: datastore.GlobalScope,
DataScope: datastore.GlobalScope,
ConnectivityScope: datastore.GlobalScope,
}
d := &driver{

View file

@ -24,7 +24,8 @@ func (r *Response) GetError() string {
// GetCapabilityResponse is the response of GetCapability request
type GetCapabilityResponse struct {
Response
Scope string
Scope string
ConnectivityScope string
}
// AllocateNetworkRequest requests allocation of new network by manager

View file

@ -74,6 +74,17 @@ func (d *driver) getCapabilities() (*driverapi.Capability, error) {
return nil, fmt.Errorf("invalid capability: expecting 'local' or 'global', got %s", capResp.Scope)
}
switch capResp.ConnectivityScope {
case "global":
c.ConnectivityScope = datastore.GlobalScope
case "local":
c.ConnectivityScope = datastore.LocalScope
case "":
c.ConnectivityScope = c.DataScope
default:
return nil, fmt.Errorf("invalid capability: expecting 'local' or 'global', got %s", capResp.Scope)
}
return c, nil
}

View file

@ -159,7 +159,8 @@ func Init(dc driverapi.DriverCallback, config map[string]interface{}) error {
}
c := driverapi.Capability{
DataScope: datastore.LocalScope,
DataScope: datastore.LocalScope,
ConnectivityScope: datastore.LocalScope,
}
return dc.RegisterDriver(networkType, d, c)
}

View file

@ -57,7 +57,8 @@ type driver struct {
// Init registers a new instance of overlay driver
func Init(dc driverapi.DriverCallback, config map[string]interface{}) error {
c := driverapi.Capability{
DataScope: datastore.GlobalScope,
DataScope: datastore.GlobalScope,
ConnectivityScope: datastore.GlobalScope,
}
d := &driver{
networks: networkTable{},

View file

@ -36,7 +36,8 @@ type driver struct {
// Init registers a new instance of overlay driver
func Init(dc driverapi.DriverCallback, config map[string]interface{}) error {
c := driverapi.Capability{
DataScope: datastore.GlobalScope,
DataScope: datastore.GlobalScope,
ConnectivityScope: datastore.GlobalScope,
}
d := &driver{

View file

@ -41,6 +41,8 @@ type networkConfiguration struct {
DNSSuffix string
SourceMac string
NetworkAdapterName string
dbIndex uint64
dbExists bool
}
// endpointConfiguration represents the user specified configuration for the sandbox endpoint
@ -59,17 +61,22 @@ type endpointConnectivity struct {
type hnsEndpoint struct {
id string
nid string
profileID string
Type string
macAddress net.HardwareAddr
epOption *endpointOption // User specified parameters
epConnectivity *endpointConnectivity // User specified parameters
portMapping []types.PortBinding // Operation port bindings
addr *net.IPNet
gateway net.IP
dbIndex uint64
dbExists bool
}
type hnsNetwork struct {
id string
created bool
config *networkConfiguration
endpoints map[string]*hnsEndpoint // key: endpoint id
driver *driver // The network's driver
@ -79,9 +86,14 @@ type hnsNetwork struct {
type driver struct {
name string
networks map[string]*hnsNetwork
store datastore.DataStore
sync.Mutex
}
const (
errNotFound = "HNS failed with error : The object identifier does not represent a valid object. "
)
// IsBuiltinWindowsDriver vaidates if network-type is a builtin local-scoped driver
func IsBuiltinLocalDriver(networkType string) bool {
if "l2bridge" == networkType || "l2tunnel" == networkType || "nat" == networkType || "ics" == networkType || "transparent" == networkType {
@ -103,8 +115,16 @@ func GetInit(networkType string) func(dc driverapi.DriverCallback, config map[st
return types.BadRequestErrorf("Network type not supported: %s", networkType)
}
return dc.RegisterDriver(networkType, newDriver(networkType), driverapi.Capability{
DataScope: datastore.LocalScope,
d := newDriver(networkType)
err := d.initStore(config)
if err != nil {
return err
}
return dc.RegisterDriver(networkType, d, driverapi.Capability{
DataScope: datastore.LocalScope,
ConnectivityScope: datastore.LocalScope,
})
}
}
@ -132,7 +152,7 @@ func (n *hnsNetwork) getEndpoint(eid string) (*hnsEndpoint, error) {
}
func (d *driver) parseNetworkOptions(id string, genericOptions map[string]string) (*networkConfiguration, error) {
config := &networkConfiguration{}
config := &networkConfiguration{Type: d.name}
for label, value := range genericOptions {
switch label {
@ -187,6 +207,21 @@ func (d *driver) DecodeTableEntry(tablename string, key string, value []byte) (s
return "", nil
}
func (d *driver) createNetwork(config *networkConfiguration) error {
network := &hnsNetwork{
id: config.ID,
endpoints: make(map[string]*hnsEndpoint),
config: config,
driver: d,
}
d.Lock()
d.networks[config.ID] = network
d.Unlock()
return nil
}
// Create a new network
func (d *driver) CreateNetwork(id string, option map[string]interface{}, nInfo driverapi.NetworkInfo, ipV4Data, ipV6Data []driverapi.IPAMData) error {
if _, err := d.getNetwork(id); err == nil {
@ -209,16 +244,11 @@ func (d *driver) CreateNetwork(id string, option map[string]interface{}, nInfo d
return err
}
network := &hnsNetwork{
id: config.ID,
endpoints: make(map[string]*hnsEndpoint),
config: config,
driver: d,
}
err = d.createNetwork(config)
d.Lock()
d.networks[config.ID] = network
d.Unlock()
if err != nil {
return err
}
// A non blank hnsid indicates that the network was discovered
// from HNS. No need to call HNS if this network was discovered
@ -293,7 +323,9 @@ func (d *driver) CreateNetwork(id string, option map[string]interface{}, nInfo d
genData[HNSID] = config.HnsID
}
return nil
n, err := d.getNetwork(id)
n.created = true
return d.storeUpdate(config)
}
func (d *driver) DeleteNetwork(nid string) error {
@ -306,21 +338,25 @@ func (d *driver) DeleteNetwork(nid string) error {
config := n.config
n.Unlock()
// Cannot remove network if endpoints are still present
if len(n.endpoints) != 0 {
return fmt.Errorf("network %s has active endpoint", n.id)
}
_, err = hcsshim.HNSNetworkRequest("DELETE", config.HnsID, "")
if err != nil {
return types.ForbiddenErrorf(err.Error())
if n.created {
_, err = hcsshim.HNSNetworkRequest("DELETE", config.HnsID, "")
if err != nil && err.Error() != errNotFound {
return types.ForbiddenErrorf(err.Error())
}
}
d.Lock()
delete(d.networks, nid)
d.Unlock()
return nil
// delele endpoints belong to this network
for _, ep := range n.endpoints {
if err := d.storeDelete(ep); err != nil {
logrus.Warnf("Failed to remove bridge endpoint %s from store: %v", ep.id[0:7], err)
}
}
return d.storeDelete(config)
}
func convertQosPolicies(qosPolicies []types.QosPolicy) ([]json.RawMessage, error) {
@ -543,6 +579,8 @@ func (d *driver) CreateEndpoint(nid, eid string, ifInfo driverapi.InterfaceInfo,
// TODO For now the ip mask is not in the info generated by HNS
endpoint := &hnsEndpoint{
id: eid,
nid: n.id,
Type: d.name,
addr: &net.IPNet{IP: hnsresponse.IPAddress, Mask: hnsresponse.IPAddress.DefaultMask()},
macAddress: mac,
}
@ -573,6 +611,10 @@ func (d *driver) CreateEndpoint(nid, eid string, ifInfo driverapi.InterfaceInfo,
ifInfo.SetMacAddress(endpoint.macAddress)
}
if err = d.storeUpdate(endpoint); err != nil {
return fmt.Errorf("failed to save endpoint %s to store: %v", endpoint.id[0:7], err)
}
return nil
}
@ -592,10 +634,13 @@ func (d *driver) DeleteEndpoint(nid, eid string) error {
n.Unlock()
_, err = hcsshim.HNSEndpointRequest("DELETE", ep.profileID, "")
if err != nil {
if err != nil && err.Error() != errNotFound {
return err
}
if err := d.storeDelete(ep); err != nil {
logrus.Warnf("Failed to remove bridge endpoint %s from store: %v", ep.id[0:7], err)
}
return nil
}

View file

@ -0,0 +1,335 @@
// +build windows
package windows
import (
"encoding/json"
"fmt"
"net"
"github.com/Sirupsen/logrus"
"github.com/docker/libnetwork/datastore"
"github.com/docker/libnetwork/discoverapi"
"github.com/docker/libnetwork/netlabel"
"github.com/docker/libnetwork/types"
)
const (
windowsPrefix = "windows"
windowsEndpointPrefix = "windows-endpoint"
)
func (d *driver) initStore(option map[string]interface{}) error {
if data, ok := option[netlabel.LocalKVClient]; ok {
var err error
dsc, ok := data.(discoverapi.DatastoreConfigData)
if !ok {
return types.InternalErrorf("incorrect data in datastore configuration: %v", data)
}
d.store, err = datastore.NewDataStoreFromConfig(dsc)
if err != nil {
return types.InternalErrorf("windows driver failed to initialize data store: %v", err)
}
err = d.populateNetworks()
if err != nil {
return err
}
err = d.populateEndpoints()
if err != nil {
return err
}
}
return nil
}
func (d *driver) populateNetworks() error {
kvol, err := d.store.List(datastore.Key(windowsPrefix), &networkConfiguration{Type: d.name})
if err != nil && err != datastore.ErrKeyNotFound {
return fmt.Errorf("failed to get windows network configurations from store: %v", err)
}
// It's normal for network configuration state to be empty. Just return.
if err == datastore.ErrKeyNotFound {
return nil
}
for _, kvo := range kvol {
ncfg := kvo.(*networkConfiguration)
if ncfg.Type != d.name {
continue
}
if err = d.createNetwork(ncfg); err != nil {
logrus.Warnf("could not create windows network for id %s hnsid %s while booting up from persistent state: %v", ncfg.ID, ncfg.HnsID, err)
}
logrus.Debugf("Network (%s) restored", ncfg.ID[0:7])
}
return nil
}
func (d *driver) populateEndpoints() error {
kvol, err := d.store.List(datastore.Key(windowsEndpointPrefix), &hnsEndpoint{Type: d.name})
if err != nil && err != datastore.ErrKeyNotFound {
return fmt.Errorf("failed to get endpoints from store: %v", err)
}
if err == datastore.ErrKeyNotFound {
return nil
}
for _, kvo := range kvol {
ep := kvo.(*hnsEndpoint)
if ep.Type != d.name {
continue
}
n, ok := d.networks[ep.nid]
if !ok {
logrus.Debugf("Network (%s) not found for restored endpoint (%s)", ep.nid[0:7], ep.id[0:7])
logrus.Debugf("Deleting stale endpoint (%s) from store", ep.id[0:7])
if err := d.storeDelete(ep); err != nil {
logrus.Debugf("Failed to delete stale endpoint (%s) from store", ep.id[0:7])
}
continue
}
n.endpoints[ep.id] = ep
logrus.Debugf("Endpoint (%s) restored to network (%s)", ep.id[0:7], ep.nid[0:7])
}
return nil
}
func (d *driver) storeUpdate(kvObject datastore.KVObject) error {
if d.store == nil {
logrus.Warnf("store not initialized. kv object %s is not added to the store", datastore.Key(kvObject.Key()...))
return nil
}
if err := d.store.PutObjectAtomic(kvObject); err != nil {
return fmt.Errorf("failed to update store for object type %T: %v", kvObject, err)
}
return nil
}
func (d *driver) storeDelete(kvObject datastore.KVObject) error {
if d.store == nil {
logrus.Debugf("store not initialized. kv object %s is not deleted from store", datastore.Key(kvObject.Key()...))
return nil
}
retry:
if err := d.store.DeleteObjectAtomic(kvObject); err != nil {
if err == datastore.ErrKeyModified {
if err := d.store.GetObject(datastore.Key(kvObject.Key()...), kvObject); err != nil {
return fmt.Errorf("could not update the kvobject to latest when trying to delete: %v", err)
}
goto retry
}
return err
}
return nil
}
func (ncfg *networkConfiguration) MarshalJSON() ([]byte, error) {
nMap := make(map[string]interface{})
nMap["ID"] = ncfg.ID
nMap["Type"] = ncfg.Type
nMap["Name"] = ncfg.Name
nMap["HnsID"] = ncfg.HnsID
nMap["VLAN"] = ncfg.VLAN
nMap["VSID"] = ncfg.VSID
nMap["DNSServers"] = ncfg.DNSServers
nMap["DNSSuffix"] = ncfg.DNSSuffix
nMap["SourceMac"] = ncfg.SourceMac
nMap["NetworkAdapterName"] = ncfg.NetworkAdapterName
return json.Marshal(nMap)
}
func (ncfg *networkConfiguration) UnmarshalJSON(b []byte) error {
var (
err error
nMap map[string]interface{}
)
if err = json.Unmarshal(b, &nMap); err != nil {
return err
}
ncfg.ID = nMap["ID"].(string)
ncfg.Type = nMap["Type"].(string)
ncfg.Name = nMap["Name"].(string)
ncfg.HnsID = nMap["HnsID"].(string)
ncfg.VLAN = uint(nMap["VLAN"].(float64))
ncfg.VSID = uint(nMap["VSID"].(float64))
ncfg.DNSServers = nMap["DNSServers"].(string)
ncfg.DNSSuffix = nMap["DNSSuffix"].(string)
ncfg.SourceMac = nMap["SourceMac"].(string)
ncfg.NetworkAdapterName = nMap["NetworkAdapterName"].(string)
return nil
}
func (ncfg *networkConfiguration) Key() []string {
return []string{windowsPrefix + ncfg.Type, ncfg.ID}
}
func (ncfg *networkConfiguration) KeyPrefix() []string {
return []string{windowsPrefix + ncfg.Type}
}
func (ncfg *networkConfiguration) Value() []byte {
b, err := json.Marshal(ncfg)
if err != nil {
return nil
}
return b
}
func (ncfg *networkConfiguration) SetValue(value []byte) error {
return json.Unmarshal(value, ncfg)
}
func (ncfg *networkConfiguration) Index() uint64 {
return ncfg.dbIndex
}
func (ncfg *networkConfiguration) SetIndex(index uint64) {
ncfg.dbIndex = index
ncfg.dbExists = true
}
func (ncfg *networkConfiguration) Exists() bool {
return ncfg.dbExists
}
func (ncfg *networkConfiguration) Skip() bool {
return false
}
func (ncfg *networkConfiguration) New() datastore.KVObject {
return &networkConfiguration{Type: ncfg.Type}
}
func (ncfg *networkConfiguration) CopyTo(o datastore.KVObject) error {
dstNcfg := o.(*networkConfiguration)
*dstNcfg = *ncfg
return nil
}
func (ncfg *networkConfiguration) DataScope() string {
return datastore.LocalScope
}
func (ep *hnsEndpoint) MarshalJSON() ([]byte, error) {
epMap := make(map[string]interface{})
epMap["id"] = ep.id
epMap["nid"] = ep.nid
epMap["Type"] = ep.Type
epMap["profileID"] = ep.profileID
epMap["MacAddress"] = ep.macAddress.String()
epMap["Addr"] = ep.addr.String()
epMap["gateway"] = ep.gateway.String()
epMap["epOption"] = ep.epOption
epMap["epConnectivity"] = ep.epConnectivity
epMap["PortMapping"] = ep.portMapping
return json.Marshal(epMap)
}
func (ep *hnsEndpoint) UnmarshalJSON(b []byte) error {
var (
err error
epMap map[string]interface{}
)
if err = json.Unmarshal(b, &epMap); err != nil {
return fmt.Errorf("Failed to unmarshal to endpoint: %v", err)
}
if v, ok := epMap["MacAddress"]; ok {
if ep.macAddress, err = net.ParseMAC(v.(string)); err != nil {
return types.InternalErrorf("failed to decode endpoint MAC address (%s) after json unmarshal: %v", v.(string), err)
}
}
if v, ok := epMap["Addr"]; ok {
if ep.addr, err = types.ParseCIDR(v.(string)); err != nil {
return types.InternalErrorf("failed to decode endpoint IPv4 address (%s) after json unmarshal: %v", v.(string), err)
}
}
ep.id = epMap["id"].(string)
ep.Type = epMap["Type"].(string)
ep.nid = epMap["nid"].(string)
ep.profileID = epMap["profileID"].(string)
d, _ := json.Marshal(epMap["epOption"])
if err := json.Unmarshal(d, &ep.epOption); err != nil {
logrus.Warnf("Failed to decode endpoint container config %v", err)
}
d, _ = json.Marshal(epMap["epConnectivity"])
if err := json.Unmarshal(d, &ep.epConnectivity); err != nil {
logrus.Warnf("Failed to decode endpoint external connectivity configuration %v", err)
}
d, _ = json.Marshal(epMap["PortMapping"])
if err := json.Unmarshal(d, &ep.portMapping); err != nil {
logrus.Warnf("Failed to decode endpoint port mapping %v", err)
}
return nil
}
func (ep *hnsEndpoint) Key() []string {
return []string{windowsEndpointPrefix + ep.Type, ep.id}
}
func (ep *hnsEndpoint) KeyPrefix() []string {
return []string{windowsEndpointPrefix + ep.Type}
}
func (ep *hnsEndpoint) Value() []byte {
b, err := json.Marshal(ep)
if err != nil {
return nil
}
return b
}
func (ep *hnsEndpoint) SetValue(value []byte) error {
return json.Unmarshal(value, ep)
}
func (ep *hnsEndpoint) Index() uint64 {
return ep.dbIndex
}
func (ep *hnsEndpoint) SetIndex(index uint64) {
ep.dbIndex = index
ep.dbExists = true
}
func (ep *hnsEndpoint) Exists() bool {
return ep.dbExists
}
func (ep *hnsEndpoint) Skip() bool {
return false
}
func (ep *hnsEndpoint) New() datastore.KVObject {
return &hnsEndpoint{Type: ep.Type}
}
func (ep *hnsEndpoint) CopyTo(o datastore.KVObject) error {
dstEp := o.(*hnsEndpoint)
*dstEp = *ep
return nil
}
func (ep *hnsEndpoint) DataScope() string {
return datastore.LocalScope
}

View file

@ -1152,6 +1152,9 @@ func (c *controller) cleanupLocalEndpoints() {
}
for _, n := range nl {
if n.ConfigOnly() {
continue
}
epl, err := n.getEndpointsFromStore()
if err != nil {
logrus.Warnf("Could not get list of endpoints in network %s during endpoint cleanup: %v", n.name, err)

29
vendor/github.com/docker/libnetwork/firewall_linux.go generated vendored Normal file
View file

@ -0,0 +1,29 @@
package libnetwork
import (
"github.com/Sirupsen/logrus"
"github.com/docker/libnetwork/iptables"
)
const userChain = "DOCKER-USER"
// This chain allow users to configure firewall policies in a way that persists
// docker operations/restarts. Docker will not delete or modify any pre-existing
// rules from the DOCKER-USER filter chain.
func arrangeUserFilterRule() {
_, err := iptables.NewChain(userChain, iptables.Filter, false)
if err != nil {
logrus.Warnf("Failed to create %s chain: %v", userChain, err)
return
}
if err = iptables.AddReturnRule(userChain); err != nil {
logrus.Warnf("Failed to add the RETURN rule for %s: %v", userChain, err)
return
}
err = iptables.EnsureJumpRule("FORWARD", userChain)
if err != nil {
logrus.Warnf("Failed to ensure the jump rule for %s: %v", userChain, err)
}
}

View file

@ -0,0 +1,6 @@
// +build !linux
package libnetwork
func arrangeUserFilterRule() {
}

View file

@ -498,3 +498,44 @@ func parseVersionNumbers(input string) (major, minor, micro int) {
func supportsCOption(mj, mn, mc int) bool {
return mj > 1 || (mj == 1 && (mn > 4 || (mn == 4 && mc >= 11)))
}
// AddReturnRule adds a return rule for the chain in the filter table
func AddReturnRule(chain string) error {
var (
table = Filter
args = []string{"-j", "RETURN"}
)
if Exists(table, chain, args...) {
return nil
}
err := RawCombinedOutput(append([]string{"-A", chain}, args...)...)
if err != nil {
return fmt.Errorf("unable to add return rule in %s chain: %s", chain, err.Error())
}
return nil
}
// EnsureJumpRule ensures the jump rule is on top
func EnsureJumpRule(fromChain, toChain string) error {
var (
table = Filter
args = []string{"-j", toChain}
)
if Exists(table, fromChain, args...) {
err := RawCombinedOutput(append([]string{"-D", fromChain}, args...)...)
if err != nil {
return fmt.Errorf("unable to remove jump to %s rule in %s chain: %s", toChain, fromChain, err.Error())
}
}
err := RawCombinedOutput(append([]string{"-I", fromChain}, args...)...)
if err != nil {
return fmt.Errorf("unable to insert jump to %s rule in %s chain: %s", toChain, fromChain, err.Error())
}
return nil
}

View file

@ -67,6 +67,8 @@ type NetworkInfo interface {
Internal() bool
Attachable() bool
Ingress() bool
ConfigFrom() string
ConfigOnly() bool
Labels() map[string]string
Dynamic() bool
Created() time.Time
@ -193,7 +195,7 @@ type network struct {
networkType string
id string
created time.Time
scope string
scope string // network data scope
labels map[string]string
ipamType string
ipamOptions map[string]string
@ -219,6 +221,8 @@ type network struct {
ingress bool
driverTables []networkDBTable
dynamic bool
configOnly bool
configFrom string
sync.Mutex
}
@ -348,6 +352,95 @@ func (i *IpamInfo) CopyTo(dstI *IpamInfo) error {
return nil
}
func (n *network) validateConfiguration() error {
if n.configOnly {
// Only supports network specific configurations.
// Network operator configurations are not supported.
if n.ingress || n.internal || n.attachable {
return types.ForbiddenErrorf("configuration network can only contain network " +
"specific fields. Network operator fields like " +
"[ ingress | internal | attachable ] are not supported.")
}
}
if n.configFrom != "" {
if n.configOnly {
return types.ForbiddenErrorf("a configuration network cannot depend on another configuration network")
}
if n.ipamType != "" &&
n.ipamType != defaultIpamForNetworkType(n.networkType) ||
n.enableIPv6 ||
len(n.labels) > 0 || len(n.ipamOptions) > 0 ||
len(n.ipamV4Config) > 0 || len(n.ipamV6Config) > 0 {
return types.ForbiddenErrorf("user specified configurations are not supported if the network depends on a configuration network")
}
if len(n.generic) > 0 {
if data, ok := n.generic[netlabel.GenericData]; ok {
var (
driverOptions map[string]string
opts interface{}
)
switch data.(type) {
case map[string]interface{}:
opts = data.(map[string]interface{})
case map[string]string:
opts = data.(map[string]string)
}
ba, err := json.Marshal(opts)
if err != nil {
return fmt.Errorf("failed to validate network configuration: %v", err)
}
if err := json.Unmarshal(ba, &driverOptions); err != nil {
return fmt.Errorf("failed to validate network configuration: %v", err)
}
if len(driverOptions) > 0 {
return types.ForbiddenErrorf("network driver options are not supported if the network depends on a configuration network")
}
}
}
}
return nil
}
// Applies network specific configurations
func (n *network) applyConfigurationTo(to *network) error {
to.enableIPv6 = n.enableIPv6
if len(n.labels) > 0 {
to.labels = make(map[string]string, len(n.labels))
for k, v := range n.labels {
if _, ok := to.labels[k]; !ok {
to.labels[k] = v
}
}
}
if len(n.ipamOptions) > 0 {
to.ipamOptions = make(map[string]string, len(n.ipamOptions))
for k, v := range n.ipamOptions {
if _, ok := to.ipamOptions[k]; !ok {
to.ipamOptions[k] = v
}
}
}
if len(n.ipamV4Config) > 0 {
to.ipamV4Config = make([]*IpamConf, 0, len(n.ipamV4Config))
for _, v4conf := range n.ipamV4Config {
to.ipamV4Config = append(to.ipamV4Config, v4conf)
}
}
if len(n.ipamV6Config) > 0 {
to.ipamV6Config = make([]*IpamConf, 0, len(n.ipamV6Config))
for _, v6conf := range n.ipamV6Config {
to.ipamV6Config = append(to.ipamV6Config, v6conf)
}
}
if len(n.generic) > 0 {
to.generic = options.Generic{}
for k, v := range n.generic {
to.generic[k] = v
}
}
return nil
}
func (n *network) CopyTo(o datastore.KVObject) error {
n.Lock()
defer n.Unlock()
@ -370,6 +463,8 @@ func (n *network) CopyTo(o datastore.KVObject) error {
dstN.attachable = n.attachable
dstN.inDelete = n.inDelete
dstN.ingress = n.ingress
dstN.configOnly = n.configOnly
dstN.configFrom = n.configFrom
// copy labels
if dstN.labels == nil {
@ -419,7 +514,12 @@ func (n *network) CopyTo(o datastore.KVObject) error {
}
func (n *network) DataScope() string {
return n.Scope()
s := n.Scope()
// All swarm scope networks have local datascope
if s == datastore.SwarmScope {
s = datastore.LocalScope
}
return s
}
func (n *network) getEpCnt() *endpointCnt {
@ -479,6 +579,8 @@ func (n *network) MarshalJSON() ([]byte, error) {
netMap["attachable"] = n.attachable
netMap["inDelete"] = n.inDelete
netMap["ingress"] = n.ingress
netMap["configOnly"] = n.configOnly
netMap["configFrom"] = n.configFrom
return json.Marshal(netMap)
}
@ -583,6 +685,12 @@ func (n *network) UnmarshalJSON(b []byte) (err error) {
if v, ok := netMap["ingress"]; ok {
n.ingress = v.(bool)
}
if v, ok := netMap["configOnly"]; ok {
n.configOnly = v.(bool)
}
if v, ok := netMap["configFrom"]; ok {
n.configFrom = v.(string)
}
// Reconcile old networks with the recently added `--ipv6` flag
if !n.enableIPv6 {
n.enableIPv6 = len(n.ipamV6Info) > 0
@ -659,6 +767,14 @@ func NetworkOptionAttachable(attachable bool) NetworkOption {
}
}
// NetworkOptionScope returns an option setter to overwrite the network's scope.
// By default the network's scope is set to the network driver's datascope.
func NetworkOptionScope(scope string) NetworkOption {
return func(n *network) {
n.scope = scope
}
}
// NetworkOptionIpam function returns an option setter for the ipam configuration for this network
func NetworkOptionIpam(ipamDriver string, addrSpace string, ipV4 []*IpamConf, ipV6 []*IpamConf, opts map[string]string) NetworkOption {
return func(n *network) {
@ -713,6 +829,23 @@ func NetworkOptionDeferIPv6Alloc(enable bool) NetworkOption {
}
}
// NetworkOptionConfigOnly tells controller this network is
// a configuration only network. It serves as a configuration
// for other networks.
func NetworkOptionConfigOnly() NetworkOption {
return func(n *network) {
n.configOnly = true
}
}
// NetworkOptionConfigFrom tells controller to pick the
// network configuration from a configuration only network
func NetworkOptionConfigFrom(name string) NetworkOption {
return func(n *network) {
n.configFrom = name
}
}
func (n *network) processOptions(options ...NetworkOption) {
for _, opt := range options {
if opt != nil {
@ -757,6 +890,14 @@ func (n *network) driverScope() string {
return cap.DataScope
}
func (n *network) driverIsMultihost() bool {
_, cap, err := n.resolveDriver(n.networkType, true)
if err != nil {
return false
}
return cap.ConnectivityScope == datastore.GlobalScope
}
func (n *network) driver(load bool) (driverapi.Driver, error) {
d, cap, err := n.resolveDriver(n.networkType, load)
if err != nil {
@ -767,14 +908,14 @@ func (n *network) driver(load bool) (driverapi.Driver, error) {
isAgent := c.isAgent()
n.Lock()
// If load is not required, driver, cap and err may all be nil
if cap != nil {
if n.scope == "" && cap != nil {
n.scope = cap.DataScope
}
if isAgent || n.dynamic {
// If we are running in agent mode then all networks
// in libnetwork are local scope regardless of the
// backing driver.
n.scope = datastore.LocalScope
if isAgent && n.dynamic {
// If we are running in agent mode and the network
// is dynamic, then the networks are swarm scoped
// regardless of the backing driver.
n.scope = datastore.SwarmScope
}
n.Unlock()
return d, nil
@ -797,6 +938,9 @@ func (n *network) delete(force bool) error {
}
if !force && n.getEpCnt().EndpointCnt() != 0 {
if n.configOnly {
return types.ForbiddenErrorf("configuration network %q is in use", n.Name())
}
return &ActiveEndpointsError{name: n.name, id: n.id}
}
@ -806,6 +950,21 @@ func (n *network) delete(force bool) error {
return fmt.Errorf("error marking network %s (%s) for deletion: %v", n.Name(), n.ID(), err)
}
if n.ConfigFrom() != "" {
if t, err := c.getConfigNetwork(n.ConfigFrom()); err == nil {
if err := t.getEpCnt().DecEndpointCnt(); err != nil {
logrus.Warnf("Failed to update reference count for configuration network %q on removal of network %q: %v",
t.Name(), n.Name(), err)
}
} else {
logrus.Warnf("Could not find configuration network %q during removal of network %q", n.configOnly, n.Name())
}
}
if n.configOnly {
goto removeFromStore
}
if err = n.deleteNetwork(); err != nil {
if !force {
return err
@ -831,6 +990,7 @@ func (n *network) delete(force bool) error {
c.cleanupServiceBindings(n.ID())
removeFromStore:
// deleteFromStore performs an atomic delete operation and the
// network.epCnt will help prevent any possible
// race between endpoint join and network delete
@ -892,6 +1052,10 @@ func (n *network) CreateEndpoint(name string, options ...EndpointOption) (Endpoi
return nil, ErrInvalidName(name)
}
if n.ConfigOnly() {
return nil, types.ForbiddenErrorf("cannot create endpoint on configuration-only network")
}
if _, err = n.EndpointByName(name); err == nil {
return nil, types.ForbiddenErrorf("endpoint with name %s already exists in network %s", name, n.Name())
}
@ -1611,6 +1775,20 @@ func (n *network) IPv6Enabled() bool {
return n.enableIPv6
}
func (n *network) ConfigFrom() string {
n.Lock()
defer n.Unlock()
return n.configFrom
}
func (n *network) ConfigOnly() bool {
n.Lock()
defer n.Unlock()
return n.configOnly
}
func (n *network) Labels() map[string]string {
n.Lock()
defer n.Unlock()
@ -1778,3 +1956,24 @@ func (n *network) ExecFunc(f func()) error {
func (n *network) NdotsSet() bool {
return false
}
// config-only network is looked up by name
func (c *controller) getConfigNetwork(name string) (*network, error) {
var n Network
s := func(current Network) bool {
if current.Info().ConfigOnly() && current.Name() == name {
n = current
return true
}
return false
}
c.WalkNetworks(s)
if n == nil {
return nil, types.NotFoundErrorf("configuration network %q not found", name)
}
return n.(*network), nil
}

View file

@ -480,26 +480,31 @@ func (nDB *NetworkDB) bulkSyncTables() {
func (nDB *NetworkDB) bulkSync(nodes []string, all bool) ([]string, error) {
if !all {
// If not all, then just pick one.
nodes = nDB.mRandomNodes(1, nodes)
// Get 2 random nodes. 2nd node will be tried if the bulk sync to
// 1st node fails.
nodes = nDB.mRandomNodes(2, nodes)
}
if len(nodes) == 0 {
return nil, nil
}
logrus.Debugf("%s: Initiating bulk sync with nodes %v", nDB.config.NodeName, nodes)
var err error
var networks []string
for _, node := range nodes {
if node == nDB.config.NodeName {
continue
}
logrus.Debugf("%s: Initiating bulk sync with node %v", nDB.config.NodeName, node)
networks = nDB.findCommonNetworks(node)
err = nDB.bulkSyncNode(networks, node, true)
// if its periodic bulksync stop after the first successful sync
if !all && err == nil {
break
}
if err != nil {
err = fmt.Errorf("bulk sync failed on node %s: %v", node, err)
err = fmt.Errorf("bulk sync to node %s failed: %v", node, err)
logrus.Warn(err.Error())
}
}

View file

@ -98,7 +98,9 @@ func (c *controller) getNetworkFromStore(nid string) (*network, error) {
}
n.epCnt = ec
n.scope = store.Scope()
if n.scope == "" {
n.scope = store.Scope()
}
return n, nil
}
@ -132,7 +134,9 @@ func (c *controller) getNetworksForScope(scope string) ([]*network, error) {
}
n.epCnt = ec
n.scope = scope
if n.scope == "" {
n.scope = scope
}
nl = append(nl, n)
}
@ -171,7 +175,9 @@ func (c *controller) getNetworksFromStore() ([]*network, error) {
ec.n = n
n.epCnt = ec
}
n.scope = store.Scope()
if n.scope == "" {
n.scope = store.Scope()
}
n.Unlock()
nl = append(nl, n)
}
@ -350,17 +356,18 @@ func (c *controller) networkWatchLoop(nw *netWatch, ep *endpoint, ecCh <-chan da
}
func (c *controller) processEndpointCreate(nmap map[string]*netWatch, ep *endpoint) {
if !c.isDistributedControl() && ep.getNetwork().driverScope() == datastore.GlobalScope {
n := ep.getNetwork()
if !c.isDistributedControl() && n.Scope() == datastore.SwarmScope && n.driverIsMultihost() {
return
}
c.Lock()
nw, ok := nmap[ep.getNetwork().ID()]
nw, ok := nmap[n.ID()]
c.Unlock()
if ok {
// Update the svc db for the local endpoint join right away
ep.getNetwork().updateSvcRecord(ep, c.getLocalEps(nw), true)
n.updateSvcRecord(ep, c.getLocalEps(nw), true)
c.Lock()
nw.localEps[ep.ID()] = ep
@ -381,15 +388,15 @@ func (c *controller) processEndpointCreate(nmap map[string]*netWatch, ep *endpoi
// Update the svc db for the local endpoint join right away
// Do this before adding this ep to localEps so that we don't
// try to update this ep's container's svc records
ep.getNetwork().updateSvcRecord(ep, c.getLocalEps(nw), true)
n.updateSvcRecord(ep, c.getLocalEps(nw), true)
c.Lock()
nw.localEps[ep.ID()] = ep
nmap[ep.getNetwork().ID()] = nw
nmap[n.ID()] = nw
nw.stopCh = make(chan struct{})
c.Unlock()
store := c.getStore(ep.getNetwork().DataScope())
store := c.getStore(n.DataScope())
if store == nil {
return
}
@ -398,7 +405,7 @@ func (c *controller) processEndpointCreate(nmap map[string]*netWatch, ep *endpoi
return
}
ch, err := store.Watch(ep.getNetwork().getEpCnt(), nw.stopCh)
ch, err := store.Watch(n.getEpCnt(), nw.stopCh)
if err != nil {
logrus.Warnf("Error creating watch for network: %v", err)
return
@ -408,12 +415,13 @@ func (c *controller) processEndpointCreate(nmap map[string]*netWatch, ep *endpoi
}
func (c *controller) processEndpointDelete(nmap map[string]*netWatch, ep *endpoint) {
if !c.isDistributedControl() && ep.getNetwork().driverScope() == datastore.GlobalScope {
n := ep.getNetwork()
if !c.isDistributedControl() && n.Scope() == datastore.SwarmScope && n.driverIsMultihost() {
return
}
c.Lock()
nw, ok := nmap[ep.getNetwork().ID()]
nw, ok := nmap[n.ID()]
if ok {
delete(nw.localEps, ep.ID())
@ -422,7 +430,7 @@ func (c *controller) processEndpointDelete(nmap map[string]*netWatch, ep *endpoi
// Update the svc db about local endpoint leave right away
// Do this after we remove this ep from localEps so that we
// don't try to remove this svc record from this ep's container.
ep.getNetwork().updateSvcRecord(ep, c.getLocalEps(nw), false)
n.updateSvcRecord(ep, c.getLocalEps(nw), false)
c.Lock()
if len(nw.localEps) == 0 {
@ -430,9 +438,9 @@ func (c *controller) processEndpointDelete(nmap map[string]*netWatch, ep *endpoi
// This is the last container going away for the network. Destroy
// this network's svc db entry
delete(c.svcRecords, ep.getNetwork().ID())
delete(c.svcRecords, n.ID())
delete(nmap, ep.getNetwork().ID())
delete(nmap, n.ID())
}
}
c.Unlock()
@ -478,7 +486,7 @@ func (c *controller) networkCleanup() {
}
var populateSpecial NetworkWalker = func(nw Network) bool {
if n := nw.(*network); n.hasSpecialDriver() {
if n := nw.(*network); n.hasSpecialDriver() && !n.ConfigOnly() {
if err := n.getController().addNetwork(n); err != nil {
logrus.Warnf("Failed to populate network %q with driver %q", nw.Name(), nw.Type())
}

View file

@ -89,8 +89,8 @@ type ListNodesRequest_Filters struct {
Names []string `protobuf:"bytes,1,rep,name=names" json:"names,omitempty"`
IDPrefixes []string `protobuf:"bytes,2,rep,name=id_prefixes,json=idPrefixes" json:"id_prefixes,omitempty"`
Labels map[string]string `protobuf:"bytes,3,rep,name=labels" json:"labels,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"`
Memberships []NodeSpec_Membership `protobuf:"varint,4,rep,packed,name=memberships,enum=docker.swarmkit.v1.NodeSpec_Membership" json:"memberships,omitempty"`
Roles []NodeRole `protobuf:"varint,5,rep,packed,name=roles,enum=docker.swarmkit.v1.NodeRole" json:"roles,omitempty"`
Memberships []NodeSpec_Membership `protobuf:"varint,4,rep,name=memberships,enum=docker.swarmkit.v1.NodeSpec_Membership" json:"memberships,omitempty"`
Roles []NodeRole `protobuf:"varint,5,rep,name=roles,enum=docker.swarmkit.v1.NodeRole" json:"roles,omitempty"`
// NamePrefixes matches all objects with the given prefixes
NamePrefixes []string `protobuf:"bytes,6,rep,name=name_prefixes,json=namePrefixes" json:"name_prefixes,omitempty"`
}
@ -192,7 +192,7 @@ type ListTasksRequest_Filters struct {
Labels map[string]string `protobuf:"bytes,3,rep,name=labels" json:"labels,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"`
ServiceIDs []string `protobuf:"bytes,4,rep,name=service_ids,json=serviceIds" json:"service_ids,omitempty"`
NodeIDs []string `protobuf:"bytes,5,rep,name=node_ids,json=nodeIds" json:"node_ids,omitempty"`
DesiredStates []TaskState `protobuf:"varint,6,rep,packed,name=desired_states,json=desiredStates,enum=docker.swarmkit.v1.TaskState" json:"desired_states,omitempty"`
DesiredStates []TaskState `protobuf:"varint,6,rep,name=desired_states,json=desiredStates,enum=docker.swarmkit.v1.TaskState" json:"desired_states,omitempty"`
// NamePrefixes matches all objects with the given prefixes
NamePrefixes []string `protobuf:"bytes,7,rep,name=name_prefixes,json=namePrefixes" json:"name_prefixes,omitempty"`
Runtimes []string `protobuf:"bytes,9,rep,name=runtimes" json:"runtimes,omitempty"`
@ -3614,38 +3614,18 @@ func (m *ListNodesRequest_Filters) MarshalTo(dAtA []byte) (int, error) {
}
}
if len(m.Memberships) > 0 {
dAtA4 := make([]byte, len(m.Memberships)*10)
var j3 int
for _, num := range m.Memberships {
for num >= 1<<7 {
dAtA4[j3] = uint8(uint64(num)&0x7f | 0x80)
num >>= 7
j3++
}
dAtA4[j3] = uint8(num)
j3++
dAtA[i] = 0x20
i++
i = encodeVarintControl(dAtA, i, uint64(num))
}
dAtA[i] = 0x22
i++
i = encodeVarintControl(dAtA, i, uint64(j3))
i += copy(dAtA[i:], dAtA4[:j3])
}
if len(m.Roles) > 0 {
dAtA6 := make([]byte, len(m.Roles)*10)
var j5 int
for _, num := range m.Roles {
for num >= 1<<7 {
dAtA6[j5] = uint8(uint64(num)&0x7f | 0x80)
num >>= 7
j5++
}
dAtA6[j5] = uint8(num)
j5++
dAtA[i] = 0x28
i++
i = encodeVarintControl(dAtA, i, uint64(num))
}
dAtA[i] = 0x2a
i++
i = encodeVarintControl(dAtA, i, uint64(j5))
i += copy(dAtA[i:], dAtA6[:j5])
}
if len(m.NamePrefixes) > 0 {
for _, s := range m.NamePrefixes {
@ -3720,21 +3700,21 @@ func (m *UpdateNodeRequest) MarshalTo(dAtA []byte) (int, error) {
dAtA[i] = 0x12
i++
i = encodeVarintControl(dAtA, i, uint64(m.NodeVersion.Size()))
n7, err := m.NodeVersion.MarshalTo(dAtA[i:])
n3, err := m.NodeVersion.MarshalTo(dAtA[i:])
if err != nil {
return 0, err
}
i += n7
i += n3
}
if m.Spec != nil {
dAtA[i] = 0x1a
i++
i = encodeVarintControl(dAtA, i, uint64(m.Spec.Size()))
n8, err := m.Spec.MarshalTo(dAtA[i:])
n4, err := m.Spec.MarshalTo(dAtA[i:])
if err != nil {
return 0, err
}
i += n8
i += n4
}
return i, nil
}
@ -3758,11 +3738,11 @@ func (m *UpdateNodeResponse) MarshalTo(dAtA []byte) (int, error) {
dAtA[i] = 0xa
i++
i = encodeVarintControl(dAtA, i, uint64(m.Node.Size()))
n9, err := m.Node.MarshalTo(dAtA[i:])
n5, err := m.Node.MarshalTo(dAtA[i:])
if err != nil {
return 0, err
}
i += n9
i += n5
}
return i, nil
}
@ -3862,11 +3842,11 @@ func (m *GetTaskResponse) MarshalTo(dAtA []byte) (int, error) {
dAtA[i] = 0xa
i++
i = encodeVarintControl(dAtA, i, uint64(m.Task.Size()))
n10, err := m.Task.MarshalTo(dAtA[i:])
n6, err := m.Task.MarshalTo(dAtA[i:])
if err != nil {
return 0, err
}
i += n10
i += n6
}
return i, nil
}
@ -3932,11 +3912,11 @@ func (m *ListTasksRequest) MarshalTo(dAtA []byte) (int, error) {
dAtA[i] = 0xa
i++
i = encodeVarintControl(dAtA, i, uint64(m.Filters.Size()))
n11, err := m.Filters.MarshalTo(dAtA[i:])
n7, err := m.Filters.MarshalTo(dAtA[i:])
if err != nil {
return 0, err
}
i += n11
i += n7
}
return i, nil
}
@ -4034,21 +4014,11 @@ func (m *ListTasksRequest_Filters) MarshalTo(dAtA []byte) (int, error) {
}
}
if len(m.DesiredStates) > 0 {
dAtA13 := make([]byte, len(m.DesiredStates)*10)
var j12 int
for _, num := range m.DesiredStates {
for num >= 1<<7 {
dAtA13[j12] = uint8(uint64(num)&0x7f | 0x80)
num >>= 7
j12++
}
dAtA13[j12] = uint8(num)
j12++
dAtA[i] = 0x30
i++
i = encodeVarintControl(dAtA, i, uint64(num))
}
dAtA[i] = 0x32
i++
i = encodeVarintControl(dAtA, i, uint64(j12))
i += copy(dAtA[i:], dAtA13[:j12])
}
if len(m.NamePrefixes) > 0 {
for _, s := range m.NamePrefixes {
@ -4142,11 +4112,11 @@ func (m *CreateServiceRequest) MarshalTo(dAtA []byte) (int, error) {
dAtA[i] = 0xa
i++
i = encodeVarintControl(dAtA, i, uint64(m.Spec.Size()))
n14, err := m.Spec.MarshalTo(dAtA[i:])
n8, err := m.Spec.MarshalTo(dAtA[i:])
if err != nil {
return 0, err
}
i += n14
i += n8
}
return i, nil
}
@ -4170,11 +4140,11 @@ func (m *CreateServiceResponse) MarshalTo(dAtA []byte) (int, error) {
dAtA[i] = 0xa
i++
i = encodeVarintControl(dAtA, i, uint64(m.Service.Size()))
n15, err := m.Service.MarshalTo(dAtA[i:])
n9, err := m.Service.MarshalTo(dAtA[i:])
if err != nil {
return 0, err
}
i += n15
i += n9
}
return i, nil
}
@ -4232,11 +4202,11 @@ func (m *GetServiceResponse) MarshalTo(dAtA []byte) (int, error) {
dAtA[i] = 0xa
i++
i = encodeVarintControl(dAtA, i, uint64(m.Service.Size()))
n16, err := m.Service.MarshalTo(dAtA[i:])
n10, err := m.Service.MarshalTo(dAtA[i:])
if err != nil {
return 0, err
}
i += n16
i += n10
}
return i, nil
}
@ -4266,21 +4236,21 @@ func (m *UpdateServiceRequest) MarshalTo(dAtA []byte) (int, error) {
dAtA[i] = 0x12
i++
i = encodeVarintControl(dAtA, i, uint64(m.ServiceVersion.Size()))
n17, err := m.ServiceVersion.MarshalTo(dAtA[i:])
n11, err := m.ServiceVersion.MarshalTo(dAtA[i:])
if err != nil {
return 0, err
}
i += n17
i += n11
}
if m.Spec != nil {
dAtA[i] = 0x1a
i++
i = encodeVarintControl(dAtA, i, uint64(m.Spec.Size()))
n18, err := m.Spec.MarshalTo(dAtA[i:])
n12, err := m.Spec.MarshalTo(dAtA[i:])
if err != nil {
return 0, err
}
i += n18
i += n12
}
if m.Rollback != 0 {
dAtA[i] = 0x20
@ -4309,11 +4279,11 @@ func (m *UpdateServiceResponse) MarshalTo(dAtA []byte) (int, error) {
dAtA[i] = 0xa
i++
i = encodeVarintControl(dAtA, i, uint64(m.Service.Size()))
n19, err := m.Service.MarshalTo(dAtA[i:])
n13, err := m.Service.MarshalTo(dAtA[i:])
if err != nil {
return 0, err
}
i += n19
i += n13
}
return i, nil
}
@ -4379,11 +4349,11 @@ func (m *ListServicesRequest) MarshalTo(dAtA []byte) (int, error) {
dAtA[i] = 0xa
i++
i = encodeVarintControl(dAtA, i, uint64(m.Filters.Size()))
n20, err := m.Filters.MarshalTo(dAtA[i:])
n14, err := m.Filters.MarshalTo(dAtA[i:])
if err != nil {
return 0, err
}
i += n20
i += n14
}
return i, nil
}
@ -4532,11 +4502,11 @@ func (m *CreateNetworkRequest) MarshalTo(dAtA []byte) (int, error) {
dAtA[i] = 0xa
i++
i = encodeVarintControl(dAtA, i, uint64(m.Spec.Size()))
n21, err := m.Spec.MarshalTo(dAtA[i:])
n15, err := m.Spec.MarshalTo(dAtA[i:])
if err != nil {
return 0, err
}
i += n21
i += n15
}
return i, nil
}
@ -4560,11 +4530,11 @@ func (m *CreateNetworkResponse) MarshalTo(dAtA []byte) (int, error) {
dAtA[i] = 0xa
i++
i = encodeVarintControl(dAtA, i, uint64(m.Network.Size()))
n22, err := m.Network.MarshalTo(dAtA[i:])
n16, err := m.Network.MarshalTo(dAtA[i:])
if err != nil {
return 0, err
}
i += n22
i += n16
}
return i, nil
}
@ -4618,11 +4588,11 @@ func (m *GetNetworkResponse) MarshalTo(dAtA []byte) (int, error) {
dAtA[i] = 0xa
i++
i = encodeVarintControl(dAtA, i, uint64(m.Network.Size()))
n23, err := m.Network.MarshalTo(dAtA[i:])
n17, err := m.Network.MarshalTo(dAtA[i:])
if err != nil {
return 0, err
}
i += n23
i += n17
}
return i, nil
}
@ -4694,11 +4664,11 @@ func (m *ListNetworksRequest) MarshalTo(dAtA []byte) (int, error) {
dAtA[i] = 0xa
i++
i = encodeVarintControl(dAtA, i, uint64(m.Filters.Size()))
n24, err := m.Filters.MarshalTo(dAtA[i:])
n18, err := m.Filters.MarshalTo(dAtA[i:])
if err != nil {
return 0, err
}
i += n24
i += n18
}
return i, nil
}
@ -4856,11 +4826,11 @@ func (m *GetClusterResponse) MarshalTo(dAtA []byte) (int, error) {
dAtA[i] = 0xa
i++
i = encodeVarintControl(dAtA, i, uint64(m.Cluster.Size()))
n25, err := m.Cluster.MarshalTo(dAtA[i:])
n19, err := m.Cluster.MarshalTo(dAtA[i:])
if err != nil {
return 0, err
}
i += n25
i += n19
}
return i, nil
}
@ -4884,11 +4854,11 @@ func (m *ListClustersRequest) MarshalTo(dAtA []byte) (int, error) {
dAtA[i] = 0xa
i++
i = encodeVarintControl(dAtA, i, uint64(m.Filters.Size()))
n26, err := m.Filters.MarshalTo(dAtA[i:])
n20, err := m.Filters.MarshalTo(dAtA[i:])
if err != nil {
return 0, err
}
i += n26
i += n20
}
return i, nil
}
@ -5076,30 +5046,30 @@ func (m *UpdateClusterRequest) MarshalTo(dAtA []byte) (int, error) {
dAtA[i] = 0x12
i++
i = encodeVarintControl(dAtA, i, uint64(m.ClusterVersion.Size()))
n27, err := m.ClusterVersion.MarshalTo(dAtA[i:])
n21, err := m.ClusterVersion.MarshalTo(dAtA[i:])
if err != nil {
return 0, err
}
i += n27
i += n21
}
if m.Spec != nil {
dAtA[i] = 0x1a
i++
i = encodeVarintControl(dAtA, i, uint64(m.Spec.Size()))
n28, err := m.Spec.MarshalTo(dAtA[i:])
n22, err := m.Spec.MarshalTo(dAtA[i:])
if err != nil {
return 0, err
}
i += n28
i += n22
}
dAtA[i] = 0x22
i++
i = encodeVarintControl(dAtA, i, uint64(m.Rotation.Size()))
n29, err := m.Rotation.MarshalTo(dAtA[i:])
n23, err := m.Rotation.MarshalTo(dAtA[i:])
if err != nil {
return 0, err
}
i += n29
i += n23
return i, nil
}
@ -5122,11 +5092,11 @@ func (m *UpdateClusterResponse) MarshalTo(dAtA []byte) (int, error) {
dAtA[i] = 0xa
i++
i = encodeVarintControl(dAtA, i, uint64(m.Cluster.Size()))
n30, err := m.Cluster.MarshalTo(dAtA[i:])
n24, err := m.Cluster.MarshalTo(dAtA[i:])
if err != nil {
return 0, err
}
i += n30
i += n24
}
return i, nil
}
@ -5174,11 +5144,11 @@ func (m *GetSecretResponse) MarshalTo(dAtA []byte) (int, error) {
dAtA[i] = 0xa
i++
i = encodeVarintControl(dAtA, i, uint64(m.Secret.Size()))
n31, err := m.Secret.MarshalTo(dAtA[i:])
n25, err := m.Secret.MarshalTo(dAtA[i:])
if err != nil {
return 0, err
}
i += n31
i += n25
}
return i, nil
}
@ -5208,21 +5178,21 @@ func (m *UpdateSecretRequest) MarshalTo(dAtA []byte) (int, error) {
dAtA[i] = 0x12
i++
i = encodeVarintControl(dAtA, i, uint64(m.SecretVersion.Size()))
n32, err := m.SecretVersion.MarshalTo(dAtA[i:])
n26, err := m.SecretVersion.MarshalTo(dAtA[i:])
if err != nil {
return 0, err
}
i += n32
i += n26
}
if m.Spec != nil {
dAtA[i] = 0x1a
i++
i = encodeVarintControl(dAtA, i, uint64(m.Spec.Size()))
n33, err := m.Spec.MarshalTo(dAtA[i:])
n27, err := m.Spec.MarshalTo(dAtA[i:])
if err != nil {
return 0, err
}
i += n33
i += n27
}
return i, nil
}
@ -5246,11 +5216,11 @@ func (m *UpdateSecretResponse) MarshalTo(dAtA []byte) (int, error) {
dAtA[i] = 0xa
i++
i = encodeVarintControl(dAtA, i, uint64(m.Secret.Size()))
n34, err := m.Secret.MarshalTo(dAtA[i:])
n28, err := m.Secret.MarshalTo(dAtA[i:])
if err != nil {
return 0, err
}
i += n34
i += n28
}
return i, nil
}
@ -5274,11 +5244,11 @@ func (m *ListSecretsRequest) MarshalTo(dAtA []byte) (int, error) {
dAtA[i] = 0xa
i++
i = encodeVarintControl(dAtA, i, uint64(m.Filters.Size()))
n35, err := m.Filters.MarshalTo(dAtA[i:])
n29, err := m.Filters.MarshalTo(dAtA[i:])
if err != nil {
return 0, err
}
i += n35
i += n29
}
return i, nil
}
@ -5412,11 +5382,11 @@ func (m *CreateSecretRequest) MarshalTo(dAtA []byte) (int, error) {
dAtA[i] = 0xa
i++
i = encodeVarintControl(dAtA, i, uint64(m.Spec.Size()))
n36, err := m.Spec.MarshalTo(dAtA[i:])
n30, err := m.Spec.MarshalTo(dAtA[i:])
if err != nil {
return 0, err
}
i += n36
i += n30
}
return i, nil
}
@ -5440,11 +5410,11 @@ func (m *CreateSecretResponse) MarshalTo(dAtA []byte) (int, error) {
dAtA[i] = 0xa
i++
i = encodeVarintControl(dAtA, i, uint64(m.Secret.Size()))
n37, err := m.Secret.MarshalTo(dAtA[i:])
n31, err := m.Secret.MarshalTo(dAtA[i:])
if err != nil {
return 0, err
}
i += n37
i += n31
}
return i, nil
}
@ -5534,11 +5504,11 @@ func (m *GetConfigResponse) MarshalTo(dAtA []byte) (int, error) {
dAtA[i] = 0xa
i++
i = encodeVarintControl(dAtA, i, uint64(m.Config.Size()))
n38, err := m.Config.MarshalTo(dAtA[i:])
n32, err := m.Config.MarshalTo(dAtA[i:])
if err != nil {
return 0, err
}
i += n38
i += n32
}
return i, nil
}
@ -5568,21 +5538,21 @@ func (m *UpdateConfigRequest) MarshalTo(dAtA []byte) (int, error) {
dAtA[i] = 0x12
i++
i = encodeVarintControl(dAtA, i, uint64(m.ConfigVersion.Size()))
n39, err := m.ConfigVersion.MarshalTo(dAtA[i:])
n33, err := m.ConfigVersion.MarshalTo(dAtA[i:])
if err != nil {
return 0, err
}
i += n39
i += n33
}
if m.Spec != nil {
dAtA[i] = 0x1a
i++
i = encodeVarintControl(dAtA, i, uint64(m.Spec.Size()))
n40, err := m.Spec.MarshalTo(dAtA[i:])
n34, err := m.Spec.MarshalTo(dAtA[i:])
if err != nil {
return 0, err
}
i += n40
i += n34
}
return i, nil
}
@ -5606,11 +5576,11 @@ func (m *UpdateConfigResponse) MarshalTo(dAtA []byte) (int, error) {
dAtA[i] = 0xa
i++
i = encodeVarintControl(dAtA, i, uint64(m.Config.Size()))
n41, err := m.Config.MarshalTo(dAtA[i:])
n35, err := m.Config.MarshalTo(dAtA[i:])
if err != nil {
return 0, err
}
i += n41
i += n35
}
return i, nil
}
@ -5634,11 +5604,11 @@ func (m *ListConfigsRequest) MarshalTo(dAtA []byte) (int, error) {
dAtA[i] = 0xa
i++
i = encodeVarintControl(dAtA, i, uint64(m.Filters.Size()))
n42, err := m.Filters.MarshalTo(dAtA[i:])
n36, err := m.Filters.MarshalTo(dAtA[i:])
if err != nil {
return 0, err
}
i += n42
i += n36
}
return i, nil
}
@ -5772,11 +5742,11 @@ func (m *CreateConfigRequest) MarshalTo(dAtA []byte) (int, error) {
dAtA[i] = 0xa
i++
i = encodeVarintControl(dAtA, i, uint64(m.Spec.Size()))
n43, err := m.Spec.MarshalTo(dAtA[i:])
n37, err := m.Spec.MarshalTo(dAtA[i:])
if err != nil {
return 0, err
}
i += n43
i += n37
}
return i, nil
}
@ -5800,11 +5770,11 @@ func (m *CreateConfigResponse) MarshalTo(dAtA []byte) (int, error) {
dAtA[i] = 0xa
i++
i = encodeVarintControl(dAtA, i, uint64(m.Config.Size()))
n44, err := m.Config.MarshalTo(dAtA[i:])
n38, err := m.Config.MarshalTo(dAtA[i:])
if err != nil {
return 0, err
}
i += n44
i += n38
}
return i, nil
}
@ -7020,18 +6990,14 @@ func (m *ListNodesRequest_Filters) Size() (n int) {
}
}
if len(m.Memberships) > 0 {
l = 0
for _, e := range m.Memberships {
l += sovControl(uint64(e))
n += 1 + sovControl(uint64(e))
}
n += 1 + sovControl(uint64(l)) + l
}
if len(m.Roles) > 0 {
l = 0
for _, e := range m.Roles {
l += sovControl(uint64(e))
n += 1 + sovControl(uint64(e))
}
n += 1 + sovControl(uint64(l)) + l
}
if len(m.NamePrefixes) > 0 {
for _, s := range m.NamePrefixes {
@ -7183,11 +7149,9 @@ func (m *ListTasksRequest_Filters) Size() (n int) {
}
}
if len(m.DesiredStates) > 0 {
l = 0
for _, e := range m.DesiredStates {
l += sovControl(uint64(e))
n += 1 + sovControl(uint64(e))
}
n += 1 + sovControl(uint64(l)) + l
}
if len(m.NamePrefixes) > 0 {
for _, s := range m.NamePrefixes {
@ -9123,7 +9087,24 @@ func (m *ListNodesRequest_Filters) Unmarshal(dAtA []byte) error {
}
iNdEx = postIndex
case 4:
if wireType == 2 {
if wireType == 0 {
var v NodeSpec_Membership
for shift := uint(0); ; shift += 7 {
if shift >= 64 {
return ErrIntOverflowControl
}
if iNdEx >= l {
return io.ErrUnexpectedEOF
}
b := dAtA[iNdEx]
iNdEx++
v |= (NodeSpec_Membership(b) & 0x7F) << shift
if b < 0x80 {
break
}
}
m.Memberships = append(m.Memberships, v)
} else if wireType == 2 {
var packedLen int
for shift := uint(0); ; shift += 7 {
if shift >= 64 {
@ -9164,8 +9145,12 @@ func (m *ListNodesRequest_Filters) Unmarshal(dAtA []byte) error {
}
m.Memberships = append(m.Memberships, v)
}
} else if wireType == 0 {
var v NodeSpec_Membership
} else {
return fmt.Errorf("proto: wrong wireType = %d for field Memberships", wireType)
}
case 5:
if wireType == 0 {
var v NodeRole
for shift := uint(0); ; shift += 7 {
if shift >= 64 {
return ErrIntOverflowControl
@ -9175,17 +9160,13 @@ func (m *ListNodesRequest_Filters) Unmarshal(dAtA []byte) error {
}
b := dAtA[iNdEx]
iNdEx++
v |= (NodeSpec_Membership(b) & 0x7F) << shift
v |= (NodeRole(b) & 0x7F) << shift
if b < 0x80 {
break
}
}
m.Memberships = append(m.Memberships, v)
} else {
return fmt.Errorf("proto: wrong wireType = %d for field Memberships", wireType)
}
case 5:
if wireType == 2 {
m.Roles = append(m.Roles, v)
} else if wireType == 2 {
var packedLen int
for shift := uint(0); ; shift += 7 {
if shift >= 64 {
@ -9226,23 +9207,6 @@ func (m *ListNodesRequest_Filters) Unmarshal(dAtA []byte) error {
}
m.Roles = append(m.Roles, v)
}
} else if wireType == 0 {
var v NodeRole
for shift := uint(0); ; shift += 7 {
if shift >= 64 {
return ErrIntOverflowControl
}
if iNdEx >= l {
return io.ErrUnexpectedEOF
}
b := dAtA[iNdEx]
iNdEx++
v |= (NodeRole(b) & 0x7F) << shift
if b < 0x80 {
break
}
}
m.Roles = append(m.Roles, v)
} else {
return fmt.Errorf("proto: wrong wireType = %d for field Roles", wireType)
}
@ -10390,7 +10354,24 @@ func (m *ListTasksRequest_Filters) Unmarshal(dAtA []byte) error {
m.NodeIDs = append(m.NodeIDs, string(dAtA[iNdEx:postIndex]))
iNdEx = postIndex
case 6:
if wireType == 2 {
if wireType == 0 {
var v TaskState
for shift := uint(0); ; shift += 7 {
if shift >= 64 {
return ErrIntOverflowControl
}
if iNdEx >= l {
return io.ErrUnexpectedEOF
}
b := dAtA[iNdEx]
iNdEx++
v |= (TaskState(b) & 0x7F) << shift
if b < 0x80 {
break
}
}
m.DesiredStates = append(m.DesiredStates, v)
} else if wireType == 2 {
var packedLen int
for shift := uint(0); ; shift += 7 {
if shift >= 64 {
@ -10431,23 +10412,6 @@ func (m *ListTasksRequest_Filters) Unmarshal(dAtA []byte) error {
}
m.DesiredStates = append(m.DesiredStates, v)
}
} else if wireType == 0 {
var v TaskState
for shift := uint(0); ; shift += 7 {
if shift >= 64 {
return ErrIntOverflowControl
}
if iNdEx >= l {
return io.ErrUnexpectedEOF
}
b := dAtA[iNdEx]
iNdEx++
v |= (TaskState(b) & 0x7F) << shift
if b < 0x80 {
break
}
}
m.DesiredStates = append(m.DesiredStates, v)
} else {
return fmt.Errorf("proto: wrong wireType = %d for field DesiredStates", wireType)
}
@ -15992,136 +15956,137 @@ var (
func init() { proto.RegisterFile("control.proto", fileDescriptorControl) }
var fileDescriptorControl = []byte{
// 2096 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xcc, 0x5a, 0x4b, 0x6f, 0x1b, 0xc9,
0x11, 0x36, 0x1f, 0x12, 0xa9, 0xa2, 0x44, 0x49, 0x2d, 0x39, 0x21, 0x68, 0x47, 0x32, 0xc6, 0xb1,
0x4d, 0x07, 0x0e, 0x95, 0xa5, 0xb3, 0x88, 0xb3, 0x41, 0x1e, 0x2b, 0xd1, 0xeb, 0x70, 0xb5, 0x2b,
0x1b, 0x23, 0x6b, 0x91, 0x1b, 0x41, 0x91, 0x2d, 0x65, 0x4c, 0x8a, 0xc3, 0xcc, 0x0c, 0xb5, 0x2b,
0xe4, 0x92, 0x0d, 0x36, 0x3f, 0x21, 0x40, 0xae, 0xb9, 0xe6, 0x90, 0x43, 0x4e, 0xfb, 0x13, 0x8c,
0x9c, 0x72, 0x0c, 0x10, 0x40, 0xc8, 0x12, 0x08, 0x90, 0x53, 0x7e, 0x43, 0xd0, 0xdd, 0xd5, 0xf3,
0x62, 0xcf, 0x0c, 0x5f, 0x80, 0x7c, 0x12, 0xa7, 0xe7, 0xab, 0xae, 0xea, 0xae, 0xaf, 0xbf, 0xe9,
0xae, 0x16, 0xac, 0xb5, 0xcd, 0xbe, 0x63, 0x99, 0xbd, 0xea, 0xc0, 0x32, 0x1d, 0x93, 0x90, 0x8e,
0xd9, 0xee, 0x52, 0xab, 0x6a, 0x7f, 0xde, 0xb2, 0x2e, 0xba, 0x86, 0x53, 0xbd, 0x7c, 0xaf, 0x5c,
0xb0, 0x07, 0xb4, 0x6d, 0x0b, 0x40, 0x79, 0xcd, 0x3c, 0x7d, 0x43, 0xdb, 0x8e, 0x7c, 0x2c, 0x38,
0x57, 0x03, 0x2a, 0x1f, 0xb6, 0xcf, 0xcd, 0x73, 0x93, 0xff, 0xdc, 0x63, 0xbf, 0xb0, 0x75, 0x6b,
0xd0, 0x1b, 0x9e, 0x1b, 0xfd, 0x3d, 0xf1, 0x47, 0x34, 0x6a, 0xef, 0x43, 0xf1, 0x05, 0x75, 0x8e,
0xcc, 0x0e, 0xd5, 0xe9, 0x6f, 0x86, 0xd4, 0x76, 0xc8, 0x7d, 0xc8, 0xf5, 0xcd, 0x0e, 0x6d, 0x1a,
0x9d, 0x52, 0xea, 0x5e, 0xaa, 0xb2, 0xb2, 0x0f, 0xa3, 0xeb, 0xdd, 0x65, 0x86, 0x68, 0xd4, 0xf5,
0x65, 0xf6, 0xaa, 0xd1, 0xd1, 0x7e, 0x0e, 0xeb, 0xae, 0x99, 0x3d, 0x30, 0xfb, 0x36, 0x25, 0x4f,
0x20, 0xcb, 0x5e, 0x72, 0xa3, 0x42, 0xad, 0x54, 0x1d, 0x1f, 0x40, 0x95, 0xe3, 0x39, 0x4a, 0xbb,
0xce, 0xc0, 0xc6, 0x27, 0x86, 0xcd, 0xbb, 0xb0, 0xa5, 0xeb, 0x8f, 0x20, 0x77, 0x66, 0xf4, 0x1c,
0x6a, 0xd9, 0xd8, 0xcb, 0x13, 0x55, 0x2f, 0x61, 0xb3, 0xea, 0x47, 0xc2, 0x46, 0x97, 0xc6, 0xe5,
0x2f, 0x33, 0x90, 0xc3, 0x46, 0xb2, 0x0d, 0x4b, 0xfd, 0xd6, 0x05, 0x65, 0x3d, 0x66, 0x2a, 0x2b,
0xba, 0x78, 0x20, 0x7b, 0x50, 0x30, 0x3a, 0xcd, 0x81, 0x45, 0xcf, 0x8c, 0x2f, 0xa8, 0x5d, 0x4a,
0xb3, 0x77, 0xfb, 0xc5, 0xd1, 0xf5, 0x2e, 0x34, 0xea, 0xaf, 0xb0, 0x55, 0x07, 0xa3, 0x23, 0x7f,
0x93, 0x57, 0xb0, 0xdc, 0x6b, 0x9d, 0xd2, 0x9e, 0x5d, 0xca, 0xdc, 0xcb, 0x54, 0x0a, 0xb5, 0x67,
0xd3, 0x44, 0x56, 0xfd, 0x84, 0x9b, 0x3e, 0xef, 0x3b, 0xd6, 0x95, 0x8e, 0xfd, 0x90, 0x06, 0x14,
0x2e, 0xe8, 0xc5, 0x29, 0xb5, 0xec, 0x5f, 0x1b, 0x03, 0xbb, 0x94, 0xbd, 0x97, 0xa9, 0x14, 0x6b,
0x8f, 0xa2, 0xa6, 0xed, 0x78, 0x40, 0xdb, 0xd5, 0x4f, 0x5d, 0xbc, 0xee, 0xb7, 0x25, 0x35, 0x58,
0xb2, 0xcc, 0x1e, 0xb5, 0x4b, 0x4b, 0xbc, 0x93, 0xbb, 0x91, 0x73, 0x6f, 0xf6, 0xa8, 0x2e, 0xa0,
0xe4, 0x3e, 0xac, 0xb1, 0xa9, 0xf0, 0xe6, 0x60, 0x99, 0xcf, 0xcf, 0x2a, 0x6b, 0x94, 0xa3, 0x2e,
0xff, 0x18, 0x0a, 0xbe, 0xd0, 0xc9, 0x06, 0x64, 0xba, 0xf4, 0x4a, 0xd0, 0x42, 0x67, 0x3f, 0xd9,
0xec, 0x5e, 0xb6, 0x7a, 0x43, 0x5a, 0x4a, 0xf3, 0x36, 0xf1, 0xf0, 0x41, 0xfa, 0x59, 0x4a, 0x3b,
0x80, 0x4d, 0xdf, 0x74, 0x20, 0x47, 0xaa, 0xb0, 0xc4, 0xb2, 0x2f, 0x92, 0x11, 0x47, 0x12, 0x01,
0xd3, 0xfe, 0x92, 0x82, 0xcd, 0x93, 0x41, 0xa7, 0xe5, 0xd0, 0x69, 0x19, 0x4a, 0x7e, 0x06, 0xab,
0x1c, 0x74, 0x49, 0x2d, 0xdb, 0x30, 0xfb, 0x3c, 0xc0, 0x42, 0xed, 0x8e, 0xca, 0xe3, 0x67, 0x02,
0xa2, 0x17, 0x98, 0x01, 0x3e, 0x90, 0x1f, 0x40, 0x96, 0x2d, 0xb7, 0x52, 0x86, 0xdb, 0xdd, 0x8d,
0xcb, 0x8b, 0xce, 0x91, 0xda, 0x3e, 0x10, 0x7f, 0xac, 0x33, 0x2d, 0x8b, 0x23, 0xd8, 0xd4, 0xe9,
0x85, 0x79, 0x39, 0xfd, 0x78, 0xb7, 0x61, 0xe9, 0xcc, 0xb4, 0xda, 0x22, 0x13, 0x79, 0x5d, 0x3c,
0x68, 0xdb, 0x40, 0xfc, 0xfd, 0x89, 0x98, 0x70, 0xd1, 0xbf, 0x6e, 0xd9, 0x5d, 0x9f, 0x0b, 0xa7,
0x65, 0x77, 0x43, 0x2e, 0x18, 0x82, 0xb9, 0x60, 0xaf, 0xdc, 0x45, 0x2f, 0xcc, 0xbc, 0xd1, 0xb1,
0x97, 0x71, 0xa3, 0xe3, 0x78, 0x8e, 0xd2, 0x9e, 0xc9, 0xd1, 0x4d, 0xed, 0xda, 0x1d, 0x87, 0xdf,
0xbb, 0xf6, 0x75, 0x56, 0x88, 0x08, 0x6b, 0x9c, 0x41, 0x44, 0xfc, 0x66, 0xe3, 0x22, 0xf2, 0xaf,
0x1b, 0x14, 0x11, 0x55, 0x64, 0x4a, 0x11, 0xd9, 0x83, 0x82, 0x4d, 0xad, 0x4b, 0xa3, 0xcd, 0xd8,
0x21, 0x44, 0x04, 0x43, 0x38, 0x16, 0xcd, 0x8d, 0xba, 0xad, 0x03, 0x42, 0x1a, 0x1d, 0x9b, 0x3c,
0x84, 0x3c, 0x72, 0x49, 0xa8, 0xc5, 0xca, 0x7e, 0x61, 0x74, 0xbd, 0x9b, 0x13, 0x64, 0xb2, 0xf5,
0x9c, 0x60, 0x93, 0x4d, 0xea, 0x50, 0xec, 0x50, 0xdb, 0xb0, 0x68, 0xa7, 0x69, 0x3b, 0x2d, 0x07,
0xf5, 0xa1, 0x58, 0xfb, 0x4e, 0x54, 0x8a, 0x8f, 0x19, 0x4a, 0x5f, 0x43, 0x23, 0xfe, 0xa4, 0x10,
0x99, 0xdc, 0xb8, 0xc8, 0x90, 0xbb, 0x00, 0xc3, 0x41, 0xd3, 0x31, 0x9b, 0x6c, 0xed, 0x94, 0xf2,
0x9c, 0xbe, 0xf9, 0xe1, 0xe0, 0xb5, 0x59, 0x6f, 0x39, 0x94, 0x94, 0x21, 0x6f, 0x0d, 0xfb, 0x8e,
0xc1, 0x66, 0x7f, 0x85, 0x5b, 0xbb, 0xcf, 0x0b, 0x90, 0x27, 0x9c, 0x68, 0x4f, 0x9e, 0x18, 0xdf,
0x62, 0xe5, 0x89, 0x13, 0x50, 0xc0, 0xb4, 0x43, 0xd8, 0x3e, 0xb0, 0x68, 0xcb, 0xa1, 0x38, 0xd9,
0x92, 0x82, 0x4f, 0x51, 0x3b, 0x04, 0xff, 0x76, 0x55, 0xdd, 0xa0, 0x85, 0x4f, 0x3e, 0x8e, 0xe0,
0x76, 0xa8, 0x33, 0x8c, 0xea, 0x7d, 0xc8, 0x61, 0x02, 0xb1, 0xc3, 0x3b, 0x31, 0x1d, 0xea, 0x12,
0xab, 0xbd, 0x81, 0xcd, 0x17, 0xd4, 0x09, 0x45, 0xf6, 0x04, 0xc0, 0xe3, 0x0b, 0xae, 0xb7, 0xb5,
0xd1, 0xf5, 0xee, 0x8a, 0x4b, 0x17, 0x7d, 0xc5, 0x65, 0x0b, 0x79, 0x04, 0xeb, 0x46, 0xdf, 0xa6,
0x96, 0xd3, 0xec, 0xd0, 0xb3, 0xd6, 0xb0, 0xe7, 0xd8, 0xa8, 0x2e, 0x45, 0xd1, 0x5c, 0xc7, 0x56,
0xed, 0x10, 0x88, 0xdf, 0xd7, 0x7c, 0x81, 0xff, 0x2d, 0x0d, 0xdb, 0x42, 0x48, 0xe7, 0x0a, 0xbe,
0x0e, 0xeb, 0x12, 0x3d, 0xc5, 0x37, 0xa0, 0x88, 0x36, 0xf2, 0x33, 0xf0, 0x34, 0xf0, 0x19, 0x98,
0x2c, 0x95, 0xe4, 0x53, 0xc8, 0x5b, 0x66, 0xaf, 0x77, 0xda, 0x6a, 0x77, 0x4b, 0xd9, 0x7b, 0xa9,
0x4a, 0xb1, 0xf6, 0x9e, 0xca, 0x50, 0x35, 0xc8, 0xaa, 0x8e, 0x86, 0xba, 0xdb, 0x85, 0xa6, 0x41,
0x5e, 0xb6, 0x92, 0x3c, 0x64, 0x8f, 0x5e, 0x1e, 0x3d, 0xdf, 0xb8, 0x45, 0x56, 0x21, 0xff, 0x4a,
0x7f, 0xfe, 0x59, 0xe3, 0xe5, 0xc9, 0xf1, 0x46, 0x8a, 0xb1, 0x27, 0xd4, 0xdd, 0x7c, 0x49, 0xa8,
0xc3, 0xb6, 0x10, 0xdc, 0x79, 0x72, 0xa0, 0x7d, 0x1b, 0x6e, 0x87, 0x7a, 0x41, 0xe5, 0xfe, 0x2a,
0x03, 0x5b, 0x6c, 0xfd, 0x61, 0xbb, 0x2b, 0xde, 0x8d, 0xb0, 0x78, 0xef, 0x45, 0x49, 0x64, 0xc8,
0x72, 0x5c, 0xbf, 0xff, 0x9c, 0x5e, 0xb8, 0x7e, 0x1f, 0x87, 0xf4, 0xfb, 0x27, 0x53, 0x06, 0xa7,
0x94, 0xf0, 0x31, 0x8d, 0xcc, 0x2a, 0x34, 0xd2, 0xaf, 0x82, 0x4b, 0x8b, 0x53, 0xc1, 0x97, 0xb0,
0x1d, 0x0c, 0x17, 0x49, 0xf3, 0x23, 0xc8, 0x63, 0x12, 0xa5, 0x16, 0xc6, 0xb2, 0xc6, 0x05, 0x7b,
0x8a, 0x78, 0x44, 0x9d, 0xcf, 0x4d, 0xab, 0x3b, 0x85, 0x22, 0xa2, 0x85, 0x4a, 0x11, 0xdd, 0xce,
0x3c, 0x4e, 0xf7, 0x45, 0x53, 0x1c, 0xa7, 0xa5, 0x95, 0xc4, 0x6a, 0x27, 0x5c, 0x11, 0x43, 0x91,
0x11, 0xc8, 0xb2, 0x99, 0xc6, 0xf9, 0xe2, 0xbf, 0x19, 0xc9, 0xd1, 0x86, 0x91, 0x3c, 0xed, 0x91,
0x1c, 0x6d, 0x19, 0xc9, 0x11, 0xd0, 0xe8, 0xa0, 0xf8, 0x2d, 0x28, 0xc6, 0x5f, 0xc9, 0x75, 0xb7,
0xf0, 0x30, 0xdd, 0xb5, 0x18, 0x8a, 0x54, 0xfb, 0x6f, 0x5a, 0xac, 0x45, 0x6c, 0x9f, 0x61, 0x2d,
0x86, 0x2c, 0xc7, 0xd7, 0xe2, 0x1f, 0x6e, 0x70, 0x2d, 0x46, 0x04, 0x37, 0xf3, 0x5a, 0x5c, 0xc0,
0x7a, 0xf3, 0x42, 0xf2, 0xd6, 0x1b, 0x26, 0x2a, 0x76, 0xbd, 0xc9, 0xcc, 0xb9, 0x60, 0xed, 0x43,
0x4e, 0xe9, 0x83, 0xde, 0xd0, 0x76, 0xa8, 0xe5, 0xd3, 0xe8, 0xb6, 0x68, 0x09, 0x69, 0x34, 0xe2,
0x18, 0x2f, 0x10, 0xe0, 0xd2, 0xd7, 0xed, 0xc2, 0xa3, 0x2f, 0x42, 0xe2, 0xe8, 0x2b, 0xad, 0x24,
0xd6, 0xe5, 0x12, 0xbe, 0x98, 0x81, 0x4b, 0x21, 0xcb, 0x77, 0x8b, 0x4b, 0x11, 0xc1, 0xdd, 0x24,
0x97, 0xbc, 0x90, 0x3c, 0x2e, 0x61, 0x36, 0x62, 0xb9, 0x24, 0x53, 0xe7, 0x82, 0xb5, 0x3f, 0xa6,
0xa0, 0x70, 0x48, 0xaf, 0x74, 0xd3, 0x69, 0x39, 0x6c, 0xeb, 0xf3, 0x3d, 0xd8, 0x64, 0x24, 0xa3,
0x56, 0xf3, 0x8d, 0x69, 0xf4, 0x9b, 0x8e, 0xd9, 0xa5, 0x7d, 0x1e, 0x5a, 0x5e, 0x5f, 0x17, 0x2f,
0x3e, 0x36, 0x8d, 0xfe, 0x6b, 0xd6, 0x4c, 0x9e, 0x00, 0xb9, 0x68, 0xf5, 0x5b, 0xe7, 0x41, 0xb0,
0xd8, 0x2c, 0x6e, 0xe0, 0x1b, 0x25, 0x7a, 0xd8, 0xef, 0x99, 0xed, 0x6e, 0x93, 0x8d, 0x3a, 0x13,
0x40, 0x9f, 0xf0, 0x17, 0x87, 0xf4, 0x4a, 0xfb, 0xbd, 0xbb, 0x1f, 0x9c, 0x87, 0xe7, 0x6c, 0x3f,
0x28, 0xd1, 0xd3, 0xec, 0x07, 0xd1, 0x66, 0x8a, 0xfd, 0x20, 0x7a, 0xf7, 0xed, 0x07, 0x3f, 0x64,
0xfb, 0x41, 0x31, 0xab, 0x7c, 0x3f, 0x18, 0x61, 0xe8, 0x9b, 0xfc, 0xfd, 0xec, 0xdb, 0xeb, 0xdd,
0x5b, 0xba, 0x6b, 0xe6, 0xed, 0xef, 0x16, 0xb4, 0x50, 0x7f, 0x0a, 0x1b, 0x7c, 0xc7, 0xde, 0xb6,
0xa8, 0x23, 0xe7, 0xf3, 0x31, 0xac, 0xd8, 0xbc, 0xc1, 0x9b, 0xce, 0xd5, 0xd1, 0xf5, 0x6e, 0x5e,
0xa0, 0x1a, 0x75, 0xf6, 0x9d, 0xe7, 0xbf, 0x3a, 0xda, 0x0b, 0x3c, 0x5c, 0x08, 0x73, 0x0c, 0xa5,
0x06, 0xcb, 0x02, 0x80, 0x91, 0x94, 0xd5, 0x7b, 0x06, 0x6e, 0x83, 0x48, 0xed, 0xeb, 0x14, 0x6c,
0xc9, 0x8d, 0xeb, 0x6c, 0xb1, 0x90, 0x7d, 0x28, 0x22, 0x74, 0x8a, 0xbc, 0xae, 0x09, 0x13, 0x99,
0xd6, 0x5a, 0x20, 0xad, 0x3b, 0xd1, 0x81, 0xfb, 0xb6, 0x27, 0x1f, 0x7b, 0xc7, 0x94, 0xb9, 0xa7,
0xe1, 0x3f, 0x69, 0x20, 0x62, 0x27, 0xc6, 0x1e, 0x5d, 0xd9, 0xfc, 0x65, 0x58, 0x36, 0xab, 0xd1,
0x3b, 0x4e, 0xbf, 0xe1, 0xb8, 0x6a, 0x7e, 0xb5, 0x78, 0xd5, 0xd4, 0x43, 0xaa, 0xf9, 0xc1, 0x74,
0xb1, 0xdd, 0x88, 0x68, 0x1e, 0xca, 0x63, 0x07, 0x46, 0x84, 0x29, 0xfb, 0x21, 0x3b, 0x24, 0xf1,
0x26, 0x94, 0xcc, 0xb8, 0x9c, 0x49, 0xa8, 0xd6, 0x80, 0x2d, 0x79, 0x62, 0xf7, 0x53, 0xb7, 0x16,
0xd8, 0xeb, 0x4e, 0xcc, 0xa5, 0x60, 0x57, 0x73, 0x70, 0xe9, 0x17, 0xb0, 0x25, 0x0f, 0x5d, 0x33,
0xae, 0xee, 0x6f, 0x79, 0x87, 0x3f, 0x7f, 0x34, 0x28, 0x1a, 0x07, 0x66, 0xff, 0xcc, 0x38, 0xf7,
0x75, 0xdb, 0xe6, 0x0d, 0xa1, 0x6e, 0x05, 0x8a, 0x75, 0x2b, 0x5e, 0xbb, 0xa2, 0x21, 0xcd, 0xbd,
0x11, 0x0a, 0x40, 0xdc, 0x08, 0xd1, 0x06, 0x91, 0x3e, 0xd1, 0x98, 0x35, 0x16, 0x26, 0x1a, 0x08,
0x9d, 0x46, 0x34, 0x84, 0xc9, 0x14, 0xa2, 0x21, 0x3c, 0xab, 0x44, 0x63, 0x01, 0xd3, 0x20, 0x45,
0x43, 0x34, 0xcf, 0x20, 0x1a, 0x41, 0xc3, 0x77, 0x4b, 0x34, 0xd4, 0xb1, 0xdd, 0xa4, 0x68, 0xb8,
0x11, 0x79, 0xa2, 0x21, 0x12, 0x11, 0x2b, 0x1a, 0x98, 0x33, 0x09, 0xf5, 0x44, 0x23, 0x48, 0xdd,
0x09, 0x44, 0x43, 0xc5, 0xa5, 0x60, 0x57, 0x73, 0x70, 0xc9, 0x15, 0x8d, 0x99, 0x57, 0xb7, 0x2b,
0x1a, 0xc1, 0x68, 0x6a, 0x5f, 0xde, 0x81, 0xdc, 0x81, 0xb8, 0xdb, 0x24, 0x06, 0xe4, 0xf0, 0xda,
0x90, 0x68, 0xaa, 0xa0, 0x82, 0x57, 0x91, 0xe5, 0xfb, 0xb1, 0x18, 0x14, 0xa5, 0xdb, 0x7f, 0xff,
0xeb, 0xff, 0xfe, 0x94, 0x5e, 0x87, 0x35, 0x0e, 0xfa, 0x3e, 0x6e, 0x1f, 0x89, 0x09, 0x2b, 0xee,
0xfd, 0x13, 0xf9, 0xee, 0x24, 0xb7, 0x75, 0xe5, 0x07, 0x09, 0xa8, 0x78, 0x87, 0x16, 0x80, 0x77,
0xfd, 0x43, 0x1e, 0x44, 0x17, 0xfc, 0xfc, 0x23, 0x7c, 0x98, 0x04, 0x4b, 0xf4, 0xe9, 0x5d, 0xef,
0xa8, 0x7d, 0x8e, 0x5d, 0x27, 0xa9, 0x7d, 0x2a, 0x6e, 0x89, 0x22, 0x7c, 0x8a, 0x1c, 0xbe, 0x6e,
0xd9, 0xdd, 0xc8, 0x1c, 0xfa, 0xae, 0x77, 0x22, 0x73, 0x18, 0xb8, 0xc8, 0x89, 0xcf, 0x21, 0x2f,
0xd2, 0x47, 0xe7, 0xd0, 0x7f, 0x59, 0x12, 0x9d, 0xc3, 0x40, 0xa5, 0x3f, 0x71, 0x3e, 0xf9, 0xf0,
0x62, 0xe6, 0xd3, 0x3f, 0xc2, 0x87, 0x49, 0xb0, 0x44, 0x9f, 0x5e, 0xed, 0x5c, 0xed, 0x73, 0xac,
0x8e, 0xaf, 0xf6, 0x39, 0x5e, 0x82, 0x8f, 0xf2, 0xf9, 0x05, 0xac, 0xfa, 0xeb, 0x7e, 0xe4, 0xd1,
0x84, 0x85, 0xcc, 0x72, 0x25, 0x19, 0x18, 0xef, 0xf9, 0xb7, 0xb0, 0x16, 0xb8, 0xe5, 0x20, 0xca,
0x1e, 0x55, 0xb7, 0x2a, 0xe5, 0xc7, 0x13, 0x20, 0x13, 0x9d, 0x07, 0x8a, 0xe4, 0x6a, 0xe7, 0xaa,
0xb2, 0xbc, 0xda, 0xb9, 0xb2, 0xe2, 0x1e, 0xe3, 0x3c, 0x50, 0x0b, 0x57, 0x3b, 0x57, 0x15, 0xdd,
0xd5, 0xce, 0xd5, 0x85, 0xf5, 0x58, 0x92, 0x61, 0xfd, 0x28, 0x92, 0x64, 0xc1, 0x9a, 0x63, 0x24,
0xc9, 0xc2, 0x05, 0xc4, 0x78, 0x92, 0xc9, 0x62, 0x57, 0x34, 0xc9, 0x42, 0x15, 0xba, 0x68, 0x92,
0x85, 0xeb, 0x66, 0x89, 0x24, 0x93, 0x03, 0x8e, 0x21, 0x59, 0x68, 0xcc, 0x8f, 0x27, 0x40, 0x4e,
0x98, 0xe7, 0x58, 0xe7, 0xaa, 0x22, 0x6f, 0x5c, 0x9e, 0x27, 0x74, 0x2e, 0xf2, 0x8c, 0xa7, 0xfd,
0xc8, 0x3c, 0x07, 0xeb, 0x28, 0x91, 0x79, 0x0e, 0x95, 0x1a, 0x12, 0xf2, 0x2c, 0x0b, 0x51, 0xd1,
0x79, 0x0e, 0x55, 0xcf, 0xa2, 0xf3, 0x1c, 0xae, 0x69, 0x25, 0xae, 0x67, 0x39, 0xe0, 0x98, 0xf5,
0x1c, 0x1a, 0xf3, 0xe3, 0x09, 0x90, 0x89, 0x1f, 0x27, 0xb7, 0x04, 0xa2, 0xfe, 0x38, 0x85, 0x0b,
0x2c, 0xe5, 0x07, 0x09, 0xa8, 0xc4, 0x79, 0xf6, 0xd7, 0x1b, 0xd4, 0xf3, 0xac, 0xa8, 0xa5, 0x94,
0x2b, 0xc9, 0xc0, 0x78, 0xcf, 0x43, 0x28, 0xf8, 0x4e, 0xcd, 0xe4, 0xe1, 0x64, 0x07, 0xfd, 0xf2,
0xa3, 0x44, 0x5c, 0xe2, 0x80, 0xfd, 0x87, 0x62, 0xf5, 0x80, 0x15, 0x27, 0xf0, 0x72, 0x25, 0x19,
0x98, 0xe8, 0xd9, 0x7f, 0x00, 0x56, 0x7b, 0x56, 0x1c, 0xb2, 0xcb, 0x95, 0x64, 0xe0, 0x24, 0xac,
0x12, 0x5b, 0xe8, 0x48, 0x56, 0x05, 0xf6, 0xe8, 0x91, 0xac, 0x0a, 0xee, 0xc3, 0x13, 0x59, 0x85,
0x3e, 0x63, 0x58, 0x15, 0x74, 0x5b, 0x49, 0x06, 0x4e, 0xc4, 0x2a, 0x3c, 0x56, 0x45, 0xb3, 0x2a,
0x78, 0x12, 0x8c, 0x66, 0x55, 0xe8, 0x7c, 0x96, 0xc8, 0xaa, 0xb8, 0x01, 0x2b, 0x8e, 0x68, 0x71,
0xac, 0x9a, 0x78, 0xaa, 0xfd, 0x27, 0xa4, 0x38, 0x56, 0x4d, 0xe0, 0x59, 0x75, 0xd8, 0x8a, 0xf0,
0xbc, 0x5f, 0x7a, 0xfb, 0xcd, 0xce, 0xad, 0x7f, 0x7e, 0xb3, 0x73, 0xeb, 0x77, 0xa3, 0x9d, 0xd4,
0xdb, 0xd1, 0x4e, 0xea, 0x1f, 0xa3, 0x9d, 0xd4, 0xbf, 0x47, 0x3b, 0xa9, 0xd3, 0x65, 0xfe, 0x6f,
0xa0, 0x4f, 0xff, 0x1f, 0x00, 0x00, 0xff, 0xff, 0x16, 0x80, 0xb3, 0xa3, 0x7f, 0x2a, 0x00, 0x00,
// 2106 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xcc, 0x5a, 0xcd, 0x73, 0x1b, 0x49,
0x15, 0xb7, 0x3e, 0x6c, 0xc9, 0x4f, 0xb6, 0x6c, 0xb7, 0x1d, 0x50, 0x29, 0xc1, 0x4e, 0x4d, 0x48,
0xa2, 0x50, 0x41, 0x66, 0x15, 0x16, 0xc2, 0x52, 0x7c, 0xac, 0xed, 0x6c, 0x56, 0xeb, 0x8d, 0x93,
0x1a, 0xc7, 0x5b, 0xdc, 0x54, 0xb2, 0xd4, 0x36, 0x13, 0xc9, 0x1a, 0x31, 0x33, 0xf2, 0xae, 0x8b,
0x0b, 0x50, 0xcb, 0x81, 0x3f, 0x80, 0x2a, 0xae, 0x5c, 0x39, 0x70, 0xe0, 0xc4, 0x81, 0x3f, 0x20,
0xc5, 0x89, 0x23, 0x27, 0xc3, 0xaa, 0x0a, 0x8a, 0x13, 0x7f, 0xc3, 0x56, 0x77, 0xbf, 0x9e, 0x2f,
0xf5, 0xcc, 0xe8, 0xab, 0xca, 0x7b, 0xb2, 0xa6, 0xe7, 0xf7, 0xfa, 0xbd, 0xee, 0xf7, 0xeb, 0xdf,
0x74, 0xbf, 0x36, 0xac, 0xb6, 0xcc, 0x9e, 0x63, 0x99, 0xdd, 0x6a, 0xdf, 0x32, 0x1d, 0x93, 0x90,
0xb6, 0xd9, 0xea, 0x50, 0xab, 0x6a, 0x7f, 0xda, 0xb4, 0x2e, 0x3a, 0x86, 0x53, 0xbd, 0x7c, 0xa7,
0x5c, 0xb0, 0xfb, 0xb4, 0x65, 0x0b, 0x40, 0x79, 0xd5, 0x3c, 0x7d, 0x43, 0x5b, 0x8e, 0x7c, 0x2c,
0x38, 0x57, 0x7d, 0x2a, 0x1f, 0xb6, 0xce, 0xcd, 0x73, 0x93, 0xff, 0xdc, 0x65, 0xbf, 0xb0, 0x75,
0xb3, 0xdf, 0x1d, 0x9c, 0x1b, 0xbd, 0x5d, 0xf1, 0x47, 0x34, 0x6a, 0xef, 0x42, 0xf1, 0x39, 0x75,
0x8e, 0xcc, 0x36, 0xd5, 0xe9, 0x2f, 0x06, 0xd4, 0x76, 0xc8, 0x3d, 0xc8, 0xf5, 0xcc, 0x36, 0x6d,
0x18, 0xed, 0x52, 0xea, 0x6e, 0xaa, 0xb2, 0xbc, 0x07, 0xc3, 0xeb, 0x9d, 0x25, 0x86, 0xa8, 0x1f,
0xe8, 0x4b, 0xec, 0x55, 0xbd, 0xad, 0xfd, 0x04, 0xd6, 0x5c, 0x33, 0xbb, 0x6f, 0xf6, 0x6c, 0x4a,
0x1e, 0x43, 0x96, 0xbd, 0xe4, 0x46, 0x85, 0x5a, 0xa9, 0x3a, 0x3a, 0x80, 0x2a, 0xc7, 0x73, 0x94,
0xf6, 0xdf, 0x0c, 0xac, 0x7f, 0x6c, 0xd8, 0xbc, 0x0b, 0x5b, 0xba, 0xfe, 0x00, 0x72, 0x67, 0x46,
0xd7, 0xa1, 0x96, 0x8d, 0xbd, 0x3c, 0x56, 0xf5, 0x12, 0x36, 0xab, 0x7e, 0x20, 0x6c, 0x74, 0x69,
0x5c, 0xfe, 0x5d, 0x06, 0x72, 0xd8, 0x48, 0xb6, 0x60, 0xb1, 0xd7, 0xbc, 0xa0, 0xac, 0xc7, 0x4c,
0x65, 0x59, 0x17, 0x0f, 0x64, 0x17, 0x0a, 0x46, 0xbb, 0xd1, 0xb7, 0xe8, 0x99, 0xf1, 0x19, 0xb5,
0x4b, 0x69, 0xf6, 0x6e, 0xaf, 0x38, 0xbc, 0xde, 0x81, 0xfa, 0xc1, 0x2b, 0x6c, 0xd5, 0xc1, 0x68,
0xcb, 0xdf, 0xe4, 0x15, 0x2c, 0x75, 0x9b, 0xa7, 0xb4, 0x6b, 0x97, 0x32, 0x77, 0x33, 0x95, 0x42,
0xed, 0xe9, 0x24, 0x91, 0x55, 0x3f, 0xe6, 0xa6, 0xcf, 0x7a, 0x8e, 0x75, 0xa5, 0x63, 0x3f, 0xe4,
0x05, 0x14, 0x2e, 0xe8, 0xc5, 0x29, 0xb5, 0xec, 0x9f, 0x1b, 0x7d, 0xbb, 0x94, 0xbd, 0x9b, 0xa9,
0x14, 0x6b, 0x0f, 0xa3, 0xa6, 0xed, 0xb8, 0x4f, 0x5b, 0xd5, 0x17, 0x2e, 0x7e, 0x2f, 0xbd, 0xbe,
0xa0, 0xfb, 0xed, 0xc9, 0xf7, 0x60, 0xd1, 0x32, 0xbb, 0xd4, 0x2e, 0x2d, 0xf2, 0x8e, 0xee, 0x44,
0xce, 0xbf, 0xd9, 0xa5, 0xdc, 0x5a, 0xc0, 0xc9, 0x3d, 0x58, 0x65, 0x53, 0xe2, 0xcd, 0xc5, 0x12,
0x9f, 0xa7, 0x15, 0xd6, 0x28, 0x47, 0x5f, 0xfe, 0x01, 0x14, 0x7c, 0x43, 0x20, 0xeb, 0x90, 0xe9,
0xd0, 0x2b, 0x41, 0x0f, 0x9d, 0xfd, 0x64, 0xb3, 0x7c, 0xd9, 0xec, 0x0e, 0x68, 0x29, 0xcd, 0xdb,
0xc4, 0xc3, 0x7b, 0xe9, 0xa7, 0x29, 0x6d, 0x1f, 0x36, 0x7c, 0xd3, 0x82, 0x5c, 0xa9, 0xc2, 0x22,
0x63, 0x81, 0x48, 0x4a, 0x1c, 0x59, 0x04, 0x4c, 0xfb, 0x53, 0x0a, 0x36, 0x4e, 0xfa, 0xed, 0xa6,
0x43, 0x27, 0x65, 0x2a, 0xf9, 0x31, 0xac, 0x70, 0xd0, 0x25, 0xb5, 0x6c, 0xc3, 0xec, 0xf1, 0x00,
0x0b, 0xb5, 0xdb, 0x2a, 0x8f, 0x9f, 0x08, 0x88, 0x5e, 0x60, 0x06, 0xf8, 0x40, 0xbe, 0x03, 0x59,
0xb6, 0xec, 0x4a, 0x19, 0x6e, 0x77, 0x27, 0x2e, 0x3f, 0x3a, 0x47, 0x6a, 0x7b, 0x40, 0xfc, 0xb1,
0x4e, 0xb5, 0x3c, 0x8e, 0x60, 0x43, 0xa7, 0x17, 0xe6, 0xe5, 0xe4, 0xe3, 0xdd, 0x82, 0xc5, 0x33,
0xd3, 0x6a, 0x89, 0x4c, 0xe4, 0x75, 0xf1, 0xa0, 0x6d, 0x01, 0xf1, 0xf7, 0x27, 0x62, 0xc2, 0xc5,
0xff, 0xba, 0x69, 0x77, 0x7c, 0x2e, 0x9c, 0xa6, 0xdd, 0x09, 0xb9, 0x60, 0x08, 0xe6, 0x82, 0xbd,
0x72, 0x17, 0xbf, 0x30, 0xf3, 0x46, 0xc7, 0x5e, 0xc6, 0x8d, 0x8e, 0xe3, 0x39, 0x4a, 0x7b, 0x2a,
0x47, 0x37, 0xb1, 0x6b, 0x77, 0x1c, 0x7e, 0xef, 0xda, 0xdf, 0xb2, 0x42, 0x4c, 0x58, 0xe3, 0x14,
0x62, 0xe2, 0x37, 0x1b, 0x15, 0x93, 0x7f, 0xdd, 0xa0, 0x98, 0xa8, 0x22, 0x53, 0x8a, 0xc9, 0x2e,
0x14, 0x6c, 0x6a, 0x5d, 0x1a, 0x2d, 0xc6, 0x0e, 0x21, 0x26, 0x18, 0xc2, 0xb1, 0x68, 0xae, 0x1f,
0xd8, 0x3a, 0x20, 0xa4, 0xde, 0xb6, 0xc9, 0x03, 0xc8, 0x23, 0x97, 0x84, 0x62, 0x2c, 0xef, 0x15,
0x86, 0xd7, 0x3b, 0x39, 0x41, 0x26, 0x5b, 0xcf, 0x09, 0x36, 0xd9, 0xe4, 0x43, 0x28, 0xb6, 0xa9,
0x6d, 0x58, 0xb4, 0xdd, 0xb0, 0x9d, 0xa6, 0x83, 0xfa, 0x50, 0xac, 0x7d, 0x23, 0x2a, 0xc5, 0xc7,
0x0c, 0xc5, 0x05, 0x66, 0x15, 0x0d, 0x79, 0x8b, 0x42, 0x68, 0x72, 0xa3, 0x42, 0x43, 0xee, 0x00,
0x0c, 0xfa, 0x0d, 0xc7, 0x6c, 0xb0, 0xf5, 0x53, 0xca, 0x73, 0x0a, 0xe7, 0x07, 0xfd, 0xd7, 0xe6,
0x41, 0xd3, 0xa1, 0xa4, 0x0c, 0x79, 0x6b, 0xd0, 0x73, 0x0c, 0x96, 0x81, 0x65, 0x6e, 0xed, 0x3e,
0xcf, 0x41, 0xa2, 0x70, 0xb2, 0x3d, 0x89, 0x62, 0x9c, 0x8b, 0x95, 0x28, 0x4e, 0x42, 0x01, 0xd3,
0x0e, 0x61, 0x6b, 0xdf, 0xa2, 0x4d, 0x87, 0xe2, 0x84, 0x4b, 0x1a, 0x3e, 0x41, 0xfd, 0x10, 0x1c,
0xdc, 0x51, 0x75, 0x83, 0x16, 0x3e, 0x09, 0x39, 0x82, 0x5b, 0xa1, 0xce, 0x30, 0xaa, 0x77, 0x21,
0x87, 0x49, 0xc4, 0x0e, 0x6f, 0xc7, 0x74, 0xa8, 0x4b, 0xac, 0xf6, 0x06, 0x36, 0x9e, 0x53, 0x27,
0x14, 0xd9, 0x63, 0x00, 0x8f, 0x33, 0xb8, 0xe6, 0x56, 0x87, 0xd7, 0x3b, 0xcb, 0x2e, 0x65, 0xf4,
0x65, 0x97, 0x31, 0xe4, 0x21, 0xac, 0x19, 0x3d, 0x9b, 0x5a, 0x4e, 0xa3, 0x4d, 0xcf, 0x9a, 0x83,
0xae, 0x63, 0xa3, 0xc2, 0x14, 0x45, 0xf3, 0x01, 0xb6, 0x6a, 0x87, 0x40, 0xfc, 0xbe, 0x66, 0x0b,
0xfc, 0x2f, 0x69, 0xd8, 0x12, 0x62, 0x3a, 0x53, 0xf0, 0x07, 0xb0, 0x26, 0xd1, 0x13, 0x7c, 0x07,
0x8a, 0x68, 0x23, 0x3f, 0x05, 0x4f, 0x02, 0x9f, 0x82, 0xf1, 0x52, 0x49, 0x5e, 0x40, 0xde, 0x32,
0xbb, 0xdd, 0xd3, 0x66, 0xab, 0x53, 0xca, 0xde, 0x4d, 0x55, 0x8a, 0xb5, 0x77, 0x54, 0x86, 0xaa,
0x41, 0x56, 0x75, 0x34, 0xd4, 0xdd, 0x2e, 0x34, 0x0d, 0xf2, 0xb2, 0x95, 0xe4, 0x21, 0x7b, 0xf4,
0xf2, 0xe8, 0xd9, 0xfa, 0x02, 0x59, 0x81, 0xfc, 0x2b, 0xfd, 0xd9, 0x27, 0xf5, 0x97, 0x27, 0xc7,
0xeb, 0x29, 0xc6, 0x9e, 0x50, 0x77, 0xb3, 0x25, 0xe1, 0x00, 0xb6, 0x84, 0xe8, 0xce, 0x92, 0x03,
0xed, 0xeb, 0x70, 0x2b, 0xd4, 0x0b, 0xaa, 0xf7, 0xe7, 0x19, 0xd8, 0x64, 0xeb, 0x0f, 0xdb, 0x5d,
0x01, 0xaf, 0x87, 0x05, 0x7c, 0x37, 0x4a, 0x26, 0x43, 0x96, 0xa3, 0x1a, 0xfe, 0xc7, 0xf4, 0xdc,
0x35, 0xfc, 0x38, 0xa4, 0xe1, 0x3f, 0x9c, 0x30, 0x38, 0xa5, 0x8c, 0x8f, 0x68, 0x64, 0x56, 0xa1,
0x91, 0x7e, 0x15, 0x5c, 0x9c, 0x9f, 0x0a, 0xbe, 0x84, 0xad, 0x60, 0xb8, 0x48, 0x9a, 0xef, 0x43,
0x1e, 0x93, 0x28, 0xb5, 0x30, 0x96, 0x35, 0x2e, 0xd8, 0x53, 0xc4, 0x23, 0xea, 0x7c, 0x6a, 0x5a,
0x9d, 0x09, 0x14, 0x11, 0x2d, 0x54, 0x8a, 0xe8, 0x76, 0xe6, 0x71, 0xba, 0x27, 0x9a, 0xe2, 0x38,
0x2d, 0xad, 0x24, 0x56, 0x3b, 0xe1, 0x8a, 0x18, 0x8a, 0x8c, 0x40, 0x96, 0xcd, 0x34, 0xce, 0x17,
0xff, 0xcd, 0x48, 0x8e, 0x36, 0x8c, 0xe4, 0x69, 0x8f, 0xe4, 0x68, 0xcb, 0x48, 0x8e, 0x80, 0x7a,
0x1b, 0xc5, 0x6f, 0x4e, 0x31, 0xfe, 0x4c, 0xae, 0xbb, 0xb9, 0x87, 0xe9, 0xae, 0xc5, 0x50, 0xa4,
0xda, 0xff, 0xd2, 0x62, 0x2d, 0x62, 0xfb, 0x14, 0x6b, 0x31, 0x64, 0x39, 0xba, 0x16, 0x7f, 0x7b,
0x83, 0x6b, 0x31, 0x22, 0xb8, 0xa9, 0xd7, 0xe2, 0x1c, 0xd6, 0x9b, 0x17, 0x92, 0xb7, 0xde, 0x30,
0x51, 0xb1, 0xeb, 0x4d, 0x66, 0xce, 0x05, 0x6b, 0xef, 0x73, 0x4a, 0xef, 0x77, 0x07, 0xb6, 0x43,
0x2d, 0x9f, 0x46, 0xb7, 0x44, 0x4b, 0x48, 0xa3, 0x11, 0xc7, 0x78, 0x81, 0x00, 0x97, 0xbe, 0x6e,
0x17, 0x1e, 0x7d, 0x11, 0x12, 0x47, 0x5f, 0x69, 0x25, 0xb1, 0x2e, 0x97, 0xf0, 0xc5, 0x14, 0x5c,
0x0a, 0x59, 0x7e, 0xb5, 0xb8, 0x14, 0x11, 0xdc, 0x4d, 0x72, 0xc9, 0x0b, 0xc9, 0xe3, 0x12, 0x66,
0x23, 0x96, 0x4b, 0x32, 0x75, 0x2e, 0x58, 0xfb, 0x7d, 0x0a, 0x0a, 0x87, 0xf4, 0x4a, 0x37, 0x9d,
0xa6, 0xc3, 0xb6, 0x3e, 0xdf, 0x82, 0x0d, 0x46, 0x32, 0x6a, 0x35, 0xde, 0x98, 0x46, 0xaf, 0xe1,
0x98, 0x1d, 0xda, 0xe3, 0xa1, 0xe5, 0xf5, 0x35, 0xf1, 0xe2, 0x23, 0xd3, 0xe8, 0xbd, 0x66, 0xcd,
0xe4, 0x31, 0x90, 0x8b, 0x66, 0xaf, 0x79, 0x1e, 0x04, 0x8b, 0xcd, 0xe2, 0x3a, 0xbe, 0x51, 0xa2,
0x07, 0xbd, 0xae, 0xd9, 0xea, 0x34, 0xd8, 0xa8, 0x33, 0x01, 0xf4, 0x09, 0x7f, 0x71, 0x48, 0xaf,
0xb4, 0xdf, 0xb8, 0xfb, 0xc1, 0x59, 0x78, 0xce, 0xf6, 0x83, 0x12, 0x3d, 0xc9, 0x7e, 0x10, 0x6d,
0x26, 0xd8, 0x0f, 0xa2, 0x77, 0xdf, 0x7e, 0xf0, 0x7d, 0xb6, 0x1f, 0x14, 0xb3, 0xca, 0xf7, 0x83,
0x11, 0x86, 0xbe, 0xc9, 0xdf, 0xcb, 0xbe, 0xbd, 0xde, 0x59, 0xd0, 0x5d, 0x33, 0x6f, 0x7f, 0x37,
0xa7, 0x85, 0xfa, 0x23, 0x58, 0xe7, 0x3b, 0xf6, 0x96, 0x45, 0x1d, 0x39, 0x9f, 0x8f, 0x60, 0xd9,
0xe6, 0x0d, 0xde, 0x74, 0xae, 0x0c, 0xaf, 0x77, 0xf2, 0x02, 0x55, 0x3f, 0x60, 0xdf, 0x79, 0xfe,
0xab, 0xad, 0x3d, 0xc7, 0xc3, 0x85, 0x30, 0xc7, 0x50, 0x6a, 0xb0, 0x24, 0x00, 0x18, 0x49, 0x59,
0xbd, 0x67, 0xe0, 0x36, 0x88, 0xd4, 0xfe, 0x9a, 0x82, 0x4d, 0xb9, 0x71, 0x9d, 0x2e, 0x16, 0xb2,
0x07, 0x45, 0x84, 0x4e, 0x90, 0xd7, 0x55, 0x61, 0x22, 0xd3, 0x5a, 0x0b, 0xa4, 0x75, 0x3b, 0x3a,
0x70, 0xdf, 0xf6, 0xe4, 0x23, 0xef, 0x98, 0x32, 0xf3, 0x34, 0xfc, 0x27, 0x0d, 0x44, 0xec, 0xc4,
0xd8, 0xa3, 0x2b, 0x9b, 0x1f, 0x86, 0x65, 0xb3, 0x1a, 0xbd, 0xe3, 0xf4, 0x1b, 0x8e, 0xaa, 0xe6,
0xe7, 0xf3, 0x57, 0x4d, 0x3d, 0xa4, 0x9a, 0xef, 0x4d, 0x16, 0xdb, 0x8d, 0x88, 0xe6, 0xa1, 0x3c,
0x76, 0x60, 0x44, 0x98, 0xb2, 0xef, 0xb2, 0x43, 0x12, 0x6f, 0x42, 0xc9, 0x8c, 0xcb, 0x99, 0x84,
0x6a, 0x75, 0xd8, 0x94, 0x27, 0x76, 0x3f, 0x75, 0x6b, 0x81, 0xbd, 0xee, 0xd8, 0x5c, 0x0a, 0x76,
0x35, 0x03, 0x97, 0x7e, 0x0a, 0x9b, 0xf2, 0xd0, 0x35, 0xe5, 0xea, 0xfe, 0x9a, 0x77, 0xf8, 0xf3,
0x47, 0x83, 0xa2, 0xb1, 0x6f, 0xf6, 0xce, 0x8c, 0x73, 0x5f, 0xb7, 0x2d, 0xde, 0x10, 0xea, 0x56,
0xa0, 0x58, 0xb7, 0xe2, 0xb5, 0x2b, 0x1a, 0xd2, 0xdc, 0x1b, 0xa1, 0x00, 0xc4, 0x8d, 0x10, 0x6d,
0x10, 0xe9, 0x13, 0x8d, 0x69, 0x63, 0x61, 0xa2, 0x81, 0xd0, 0x49, 0x44, 0x43, 0x98, 0x4c, 0x20,
0x1a, 0xc2, 0xb3, 0x4a, 0x34, 0xe6, 0x30, 0x0d, 0x52, 0x34, 0x44, 0xf3, 0x14, 0xa2, 0x11, 0x34,
0xfc, 0x6a, 0x89, 0x86, 0x3a, 0xb6, 0x9b, 0x14, 0x0d, 0x37, 0x22, 0x4f, 0x34, 0x44, 0x22, 0x62,
0x45, 0x03, 0x73, 0x26, 0xa1, 0x9e, 0x68, 0x04, 0xa9, 0x3b, 0x86, 0x68, 0xa8, 0xb8, 0x14, 0xec,
0x6a, 0x06, 0x2e, 0xb9, 0xa2, 0x31, 0xf5, 0xea, 0x76, 0x45, 0x23, 0x18, 0x4d, 0xed, 0xd7, 0xb7,
0x21, 0xb7, 0x2f, 0xee, 0x39, 0x89, 0x01, 0x39, 0xbc, 0x42, 0x24, 0x9a, 0x2a, 0xa8, 0xe0, 0xb5,
0x64, 0xf9, 0x5e, 0x2c, 0x06, 0x45, 0xe9, 0xd6, 0xdf, 0xff, 0xfc, 0xff, 0x3f, 0xa4, 0xd7, 0x60,
0x95, 0x83, 0xbe, 0x8d, 0xdb, 0x47, 0x62, 0xc2, 0xb2, 0x7b, 0x07, 0x45, 0xbe, 0x39, 0xce, 0xcd,
0x5d, 0xf9, 0x7e, 0x02, 0x2a, 0xde, 0xa1, 0x05, 0xe0, 0x5d, 0x01, 0x91, 0xfb, 0xd1, 0x05, 0x3f,
0xff, 0x08, 0x1f, 0x24, 0xc1, 0x12, 0x7d, 0x7a, 0x57, 0x3c, 0x6a, 0x9f, 0x23, 0x57, 0x4a, 0x6a,
0x9f, 0x8a, 0x9b, 0xa2, 0x08, 0x9f, 0x22, 0x87, 0xaf, 0x9b, 0x76, 0x27, 0x32, 0x87, 0xbe, 0x2b,
0x9e, 0xc8, 0x1c, 0x06, 0x2e, 0x73, 0xe2, 0x73, 0xc8, 0x8b, 0xf4, 0xd1, 0x39, 0xf4, 0x5f, 0x98,
0x44, 0xe7, 0x30, 0x50, 0xe9, 0x4f, 0x9c, 0x4f, 0x3e, 0xbc, 0x98, 0xf9, 0xf4, 0x8f, 0xf0, 0x41,
0x12, 0x2c, 0xd1, 0xa7, 0x57, 0x3b, 0x57, 0xfb, 0x1c, 0xa9, 0xe3, 0xab, 0x7d, 0x8e, 0x96, 0xe0,
0xa3, 0x7c, 0x7e, 0x06, 0x2b, 0xfe, 0xba, 0x1f, 0x79, 0x38, 0x66, 0x21, 0xb3, 0x5c, 0x49, 0x06,
0xc6, 0x7b, 0xfe, 0x25, 0xac, 0x06, 0x6e, 0x39, 0x88, 0xb2, 0x47, 0xd5, 0xad, 0x4a, 0xf9, 0xd1,
0x18, 0xc8, 0x44, 0xe7, 0x81, 0x22, 0xb9, 0xda, 0xb9, 0xaa, 0x2c, 0xaf, 0x76, 0xae, 0xac, 0xb8,
0xc7, 0x38, 0x0f, 0xd4, 0xc2, 0xd5, 0xce, 0x55, 0x45, 0x77, 0xb5, 0x73, 0x75, 0x61, 0x3d, 0x96,
0x64, 0x58, 0x3f, 0x8a, 0x24, 0x59, 0xb0, 0xe6, 0x18, 0x49, 0xb2, 0x70, 0x01, 0x31, 0x9e, 0x64,
0xb2, 0xd8, 0x15, 0x4d, 0xb2, 0x50, 0x85, 0x2e, 0x9a, 0x64, 0xe1, 0xba, 0x59, 0x22, 0xc9, 0xe4,
0x80, 0x63, 0x48, 0x16, 0x1a, 0xf3, 0xa3, 0x31, 0x90, 0x63, 0xe6, 0x39, 0xd6, 0xb9, 0xaa, 0xc8,
0x1b, 0x97, 0xe7, 0x31, 0x9d, 0x8b, 0x3c, 0xe3, 0x69, 0x3f, 0x32, 0xcf, 0xc1, 0x3a, 0x4a, 0x64,
0x9e, 0x43, 0xa5, 0x86, 0x84, 0x3c, 0xcb, 0x42, 0x54, 0x74, 0x9e, 0x43, 0xd5, 0xb3, 0xe8, 0x3c,
0x87, 0x6b, 0x5a, 0x89, 0xeb, 0x59, 0x0e, 0x38, 0x66, 0x3d, 0x87, 0xc6, 0xfc, 0x68, 0x0c, 0x64,
0xe2, 0xc7, 0xc9, 0x2d, 0x81, 0xa8, 0x3f, 0x4e, 0xe1, 0x02, 0x4b, 0xf9, 0x7e, 0x02, 0x2a, 0x71,
0x9e, 0xfd, 0xf5, 0x06, 0xf5, 0x3c, 0x2b, 0x6a, 0x29, 0xe5, 0x4a, 0x32, 0x30, 0xde, 0xf3, 0x00,
0x0a, 0xbe, 0x53, 0x33, 0x79, 0x30, 0xde, 0x41, 0xbf, 0xfc, 0x30, 0x11, 0x97, 0x38, 0x60, 0xff,
0xa1, 0x58, 0x3d, 0x60, 0xc5, 0x09, 0xbc, 0x5c, 0x49, 0x06, 0x26, 0x7a, 0xf6, 0x1f, 0x80, 0xd5,
0x9e, 0x15, 0x87, 0xec, 0x72, 0x25, 0x19, 0x38, 0x0e, 0xab, 0xc4, 0x16, 0x3a, 0x92, 0x55, 0x81,
0x3d, 0x7a, 0x24, 0xab, 0x82, 0xfb, 0xf0, 0x44, 0x56, 0xa1, 0xcf, 0x18, 0x56, 0x05, 0xdd, 0x56,
0x92, 0x81, 0x63, 0xb1, 0x0a, 0x8f, 0x55, 0xd1, 0xac, 0x0a, 0x9e, 0x04, 0xa3, 0x59, 0x15, 0x3a,
0x9f, 0x25, 0xb2, 0x2a, 0x6e, 0xc0, 0x8a, 0x23, 0x5a, 0x1c, 0xab, 0xc6, 0x9e, 0x6a, 0xff, 0x09,
0x29, 0x8e, 0x55, 0x63, 0x78, 0x56, 0x1d, 0xb6, 0x22, 0x3c, 0xef, 0x95, 0xde, 0x7e, 0xb1, 0xbd,
0xf0, 0xcf, 0x2f, 0xb6, 0x17, 0x7e, 0x35, 0xdc, 0x4e, 0xbd, 0x1d, 0x6e, 0xa7, 0xfe, 0x31, 0xdc,
0x4e, 0xfd, 0x7b, 0xb8, 0x9d, 0x3a, 0x5d, 0xe2, 0xff, 0x12, 0xfa, 0xe4, 0xcb, 0x00, 0x00, 0x00,
0xff, 0xff, 0x69, 0xfa, 0x48, 0xde, 0x8b, 0x2a, 0x00, 0x00,
}

View file

@ -176,8 +176,8 @@ message ListNodesRequest {
repeated string names = 1;
repeated string id_prefixes = 2;
map<string, string> labels = 3;
repeated NodeSpec.Membership memberships = 4;
repeated NodeRole roles = 5;
repeated NodeSpec.Membership memberships = 4 [packed=false];
repeated NodeRole roles = 5 [packed=false];
// NamePrefixes matches all objects with the given prefixes
repeated string name_prefixes = 6;
}
@ -233,7 +233,7 @@ message ListTasksRequest {
map<string, string> labels = 3;
repeated string service_ids = 4;
repeated string node_ids = 5;
repeated docker.swarmkit.v1.TaskState desired_states = 6;
repeated docker.swarmkit.v1.TaskState desired_states = 6 [packed=false];
// NamePrefixes matches all objects with the given prefixes
repeated string name_prefixes = 7;
repeated string runtimes = 9;

View file

@ -37,6 +37,7 @@ import io "io"
var _ = proto.Marshal
var _ = fmt.Errorf
var _ = math.Inf
var _ = time.Kitchen
type AssignmentChange_AssignmentAction int32

View file

@ -62,7 +62,7 @@ func (LogStream) EnumDescriptor() ([]byte, []int) { return fileDescriptorLogbrok
type LogSubscriptionOptions struct {
// Streams defines which log streams should be sent from the task source.
// Empty means send all the messages.
Streams []LogStream `protobuf:"varint,1,rep,packed,name=streams,enum=docker.swarmkit.v1.LogStream" json:"streams,omitempty"`
Streams []LogStream `protobuf:"varint,1,rep,name=streams,enum=docker.swarmkit.v1.LogStream" json:"streams,omitempty"`
// Follow instructs the publisher to continue sending log messages as they
// are produced, after satisfying the initial query.
Follow bool `protobuf:"varint,2,opt,name=follow,proto3" json:"follow,omitempty"`
@ -809,21 +809,11 @@ func (m *LogSubscriptionOptions) MarshalTo(dAtA []byte) (int, error) {
var l int
_ = l
if len(m.Streams) > 0 {
dAtA2 := make([]byte, len(m.Streams)*10)
var j1 int
for _, num := range m.Streams {
for num >= 1<<7 {
dAtA2[j1] = uint8(uint64(num)&0x7f | 0x80)
num >>= 7
j1++
}
dAtA2[j1] = uint8(num)
j1++
dAtA[i] = 0x8
i++
i = encodeVarintLogbroker(dAtA, i, uint64(num))
}
dAtA[i] = 0xa
i++
i = encodeVarintLogbroker(dAtA, i, uint64(j1))
i += copy(dAtA[i:], dAtA2[:j1])
}
if m.Follow {
dAtA[i] = 0x10
@ -844,11 +834,11 @@ func (m *LogSubscriptionOptions) MarshalTo(dAtA []byte) (int, error) {
dAtA[i] = 0x22
i++
i = encodeVarintLogbroker(dAtA, i, uint64(m.Since.Size()))
n3, err := m.Since.MarshalTo(dAtA[i:])
n1, err := m.Since.MarshalTo(dAtA[i:])
if err != nil {
return 0, err
}
i += n3
i += n1
}
return i, nil
}
@ -1000,20 +990,20 @@ func (m *LogMessage) MarshalTo(dAtA []byte) (int, error) {
dAtA[i] = 0xa
i++
i = encodeVarintLogbroker(dAtA, i, uint64(m.Context.Size()))
n4, err := m.Context.MarshalTo(dAtA[i:])
n2, err := m.Context.MarshalTo(dAtA[i:])
if err != nil {
return 0, err
}
i += n4
i += n2
if m.Timestamp != nil {
dAtA[i] = 0x12
i++
i = encodeVarintLogbroker(dAtA, i, uint64(m.Timestamp.Size()))
n5, err := m.Timestamp.MarshalTo(dAtA[i:])
n3, err := m.Timestamp.MarshalTo(dAtA[i:])
if err != nil {
return 0, err
}
i += n5
i += n3
}
if m.Stream != 0 {
dAtA[i] = 0x18
@ -1060,21 +1050,21 @@ func (m *SubscribeLogsRequest) MarshalTo(dAtA []byte) (int, error) {
dAtA[i] = 0xa
i++
i = encodeVarintLogbroker(dAtA, i, uint64(m.Selector.Size()))
n6, err := m.Selector.MarshalTo(dAtA[i:])
n4, err := m.Selector.MarshalTo(dAtA[i:])
if err != nil {
return 0, err
}
i += n6
i += n4
}
if m.Options != nil {
dAtA[i] = 0x12
i++
i = encodeVarintLogbroker(dAtA, i, uint64(m.Options.Size()))
n7, err := m.Options.MarshalTo(dAtA[i:])
n5, err := m.Options.MarshalTo(dAtA[i:])
if err != nil {
return 0, err
}
i += n7
i += n5
}
return i, nil
}
@ -1152,21 +1142,21 @@ func (m *SubscriptionMessage) MarshalTo(dAtA []byte) (int, error) {
dAtA[i] = 0x12
i++
i = encodeVarintLogbroker(dAtA, i, uint64(m.Selector.Size()))
n8, err := m.Selector.MarshalTo(dAtA[i:])
n6, err := m.Selector.MarshalTo(dAtA[i:])
if err != nil {
return 0, err
}
i += n8
i += n6
}
if m.Options != nil {
dAtA[i] = 0x1a
i++
i = encodeVarintLogbroker(dAtA, i, uint64(m.Options.Size()))
n9, err := m.Options.MarshalTo(dAtA[i:])
n7, err := m.Options.MarshalTo(dAtA[i:])
if err != nil {
return 0, err
}
i += n9
i += n7
}
if m.Close {
dAtA[i] = 0x20
@ -1580,11 +1570,9 @@ func (m *LogSubscriptionOptions) Size() (n int) {
var l int
_ = l
if len(m.Streams) > 0 {
l = 0
for _, e := range m.Streams {
l += sovLogbroker(uint64(e))
n += 1 + sovLogbroker(uint64(e))
}
n += 1 + sovLogbroker(uint64(l)) + l
}
if m.Follow {
n += 2
@ -1935,7 +1923,24 @@ func (m *LogSubscriptionOptions) Unmarshal(dAtA []byte) error {
}
switch fieldNum {
case 1:
if wireType == 2 {
if wireType == 0 {
var v LogStream
for shift := uint(0); ; shift += 7 {
if shift >= 64 {
return ErrIntOverflowLogbroker
}
if iNdEx >= l {
return io.ErrUnexpectedEOF
}
b := dAtA[iNdEx]
iNdEx++
v |= (LogStream(b) & 0x7F) << shift
if b < 0x80 {
break
}
}
m.Streams = append(m.Streams, v)
} else if wireType == 2 {
var packedLen int
for shift := uint(0); ; shift += 7 {
if shift >= 64 {
@ -1976,23 +1981,6 @@ func (m *LogSubscriptionOptions) Unmarshal(dAtA []byte) error {
}
m.Streams = append(m.Streams, v)
}
} else if wireType == 0 {
var v LogStream
for shift := uint(0); ; shift += 7 {
if shift >= 64 {
return ErrIntOverflowLogbroker
}
if iNdEx >= l {
return io.ErrUnexpectedEOF
}
b := dAtA[iNdEx]
iNdEx++
v |= (LogStream(b) & 0x7F) << shift
if b < 0x80 {
break
}
}
m.Streams = append(m.Streams, v)
} else {
return fmt.Errorf("proto: wrong wireType = %d for field Streams", wireType)
}
@ -3365,64 +3353,64 @@ var (
func init() { proto.RegisterFile("logbroker.proto", fileDescriptorLogbroker) }
var fileDescriptorLogbroker = []byte{
// 940 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xa4, 0x95, 0xcf, 0x6f, 0x1b, 0x45,
0x14, 0xc7, 0x33, 0xeb, 0xc4, 0x3f, 0x9e, 0x9b, 0xc4, 0x1d, 0xa7, 0x91, 0x65, 0xa8, 0x6d, 0x6d,
0xa5, 0x62, 0x45, 0xc5, 0x6e, 0x8d, 0x50, 0x91, 0x2a, 0x21, 0x6a, 0x5c, 0x21, 0x0b, 0x37, 0x41,
0x63, 0x47, 0x70, 0x8b, 0xd6, 0xde, 0xe9, 0xb2, 0xf2, 0x7a, 0xc7, 0xec, 0x8c, 0x13, 0x90, 0x38,
0x70, 0x28, 0x12, 0xca, 0x81, 0x1b, 0x12, 0x1c, 0x7a, 0xa2, 0x17, 0x84, 0x04, 0x77, 0xfe, 0x00,
0x14, 0x71, 0xe2, 0xc8, 0xc9, 0xa2, 0xfb, 0x07, 0xf0, 0x37, 0xa0, 0x9d, 0x19, 0xdb, 0x1b, 0x6c,
0xb7, 0xa8, 0xbd, 0x24, 0x33, 0x3b, 0x9f, 0xb7, 0xef, 0xfb, 0xbe, 0xf3, 0xde, 0x1a, 0x76, 0x3d,
0xe6, 0xf4, 0x03, 0x36, 0xa4, 0x41, 0x6d, 0x1c, 0x30, 0xc1, 0x30, 0xb6, 0xd9, 0x20, 0xda, 0xf1,
0x33, 0x2b, 0x18, 0x0d, 0x5d, 0x51, 0x3b, 0xbd, 0x53, 0xdc, 0x73, 0x98, 0xc3, 0xe4, 0x71, 0x3d,
0x5a, 0x29, 0xb2, 0x58, 0x76, 0x18, 0x73, 0x3c, 0x5a, 0x97, 0xbb, 0xfe, 0xe4, 0x51, 0x5d, 0xb8,
0x23, 0xca, 0x85, 0x35, 0x1a, 0x6b, 0x20, 0x3f, 0xf6, 0x26, 0x8e, 0xeb, 0xd7, 0xd5, 0x3f, 0xf5,
0xd0, 0xfc, 0x15, 0xc1, 0x7e, 0x87, 0x39, 0xdd, 0x49, 0x9f, 0x0f, 0x02, 0x77, 0x2c, 0x5c, 0xe6,
0x1f, 0xc9, 0xbf, 0x1c, 0xdf, 0x85, 0x14, 0x17, 0x01, 0xb5, 0x46, 0xbc, 0x80, 0x2a, 0x89, 0xea,
0x4e, 0xe3, 0x7a, 0x6d, 0x59, 0x4c, 0x2d, 0x0a, 0x96, 0x14, 0x99, 0xd1, 0x78, 0x1f, 0x92, 0x8f,
0x98, 0xe7, 0xb1, 0xb3, 0x82, 0x51, 0x41, 0xd5, 0x34, 0xd1, 0x3b, 0x8c, 0x61, 0x53, 0x58, 0xae,
0x57, 0x48, 0x54, 0x50, 0x35, 0x41, 0xe4, 0x1a, 0xdf, 0x86, 0x2d, 0xee, 0xfa, 0x03, 0x5a, 0xd8,
0xac, 0xa0, 0x6a, 0xb6, 0x51, 0xac, 0xa9, 0x2a, 0x6a, 0xb3, 0x2a, 0x6a, 0xbd, 0x59, 0x15, 0x44,
0x81, 0xe6, 0xb7, 0x08, 0xb2, 0x51, 0x52, 0xea, 0xd1, 0x81, 0x60, 0x01, 0xae, 0x43, 0x96, 0xd3,
0xe0, 0xd4, 0x1d, 0xd0, 0x13, 0xd7, 0x56, 0x52, 0x33, 0xcd, 0x9d, 0x70, 0x5a, 0x86, 0xae, 0x7a,
0xdc, 0x6e, 0x71, 0x02, 0x1a, 0x69, 0xdb, 0x1c, 0xdf, 0x84, 0xb4, 0xcf, 0x6c, 0x45, 0x1b, 0x92,
0xce, 0x86, 0xd3, 0x72, 0xea, 0x90, 0xd9, 0x12, 0x4d, 0x45, 0x87, 0x9a, 0x13, 0x16, 0x1f, 0x4a,
0x2e, 0xb1, 0xe0, 0x7a, 0x16, 0x1f, 0x4a, 0x2e, 0x3a, 0x6c, 0xdb, 0xdc, 0x7c, 0x8c, 0x00, 0x3a,
0xcc, 0x79, 0x9f, 0xf9, 0x82, 0x7e, 0x2e, 0xf0, 0x2d, 0x80, 0x85, 0x9e, 0x02, 0xaa, 0xa0, 0x6a,
0xa6, 0xb9, 0x1d, 0x4e, 0xcb, 0x99, 0xb9, 0x1c, 0x92, 0x99, 0xab, 0xc1, 0x37, 0x20, 0xa5, 0xc5,
0x48, 0xb3, 0x32, 0x4d, 0x08, 0xa7, 0xe5, 0xa4, 0xd2, 0x42, 0x92, 0x4a, 0x4a, 0x04, 0x69, 0x25,
0xd2, 0x3b, 0x0d, 0x29, 0x21, 0x24, 0xa9, 0x74, 0x98, 0x77, 0x20, 0xd5, 0x61, 0xce, 0x7d, 0x21,
0x02, 0x9c, 0x83, 0xc4, 0x90, 0x7e, 0xa1, 0x72, 0x93, 0x68, 0x89, 0xf7, 0x60, 0xeb, 0xd4, 0xf2,
0x26, 0x54, 0x25, 0x21, 0x6a, 0x63, 0x9e, 0x1b, 0x52, 0xf9, 0x43, 0xca, 0xb9, 0xe5, 0x50, 0xfc,
0x2e, 0xa4, 0x06, 0xaa, 0x08, 0x19, 0x9a, 0x6d, 0x94, 0xd6, 0x5c, 0xb8, 0x2e, 0xb5, 0xb9, 0x79,
0x31, 0x2d, 0x6f, 0x90, 0x59, 0x10, 0x7e, 0x07, 0x32, 0xf3, 0x9e, 0x93, 0x89, 0x9e, 0x7f, 0x9f,
0x0b, 0x18, 0xbf, 0x0d, 0x49, 0xd5, 0x3c, 0xb2, 0xbe, 0x17, 0x76, 0x9a, 0x86, 0xa3, 0x86, 0xb2,
0x2d, 0x61, 0xc9, 0xde, 0xb9, 0x42, 0xe4, 0x1a, 0xdf, 0x85, 0x2d, 0x4b, 0x88, 0x80, 0x17, 0xb6,
0x2a, 0x89, 0x6a, 0xb6, 0xf1, 0xda, 0x9a, 0x37, 0x45, 0x3e, 0x69, 0xfd, 0x8a, 0x37, 0x7f, 0x40,
0xb0, 0xa7, 0xc7, 0xa0, 0x4f, 0x3b, 0xcc, 0xe1, 0x84, 0x7e, 0x36, 0xa1, 0x5c, 0xe0, 0x7b, 0x90,
0xe6, 0xba, 0xd9, 0xb4, 0x2f, 0xe5, 0x75, 0xf2, 0x34, 0x46, 0xe6, 0x01, 0xb8, 0x05, 0x29, 0xa6,
0xe6, 0x49, 0x3b, 0x72, 0xb0, 0x2e, 0x76, 0x79, 0x02, 0xc9, 0x2c, 0xd4, 0xfc, 0xe4, 0x3f, 0xd2,
0x66, 0x37, 0xf6, 0x1e, 0xa4, 0x47, 0x6a, 0xa9, 0x1a, 0x7f, 0xfd, 0x95, 0xe9, 0x08, 0x5d, 0xf2,
0x3c, 0xca, 0x7c, 0x1d, 0x8a, 0x1d, 0x97, 0x0b, 0xea, 0xc7, 0xf3, 0xcf, 0x4a, 0x37, 0x7f, 0x47,
0x90, 0x8f, 0x1f, 0xcc, 0xf2, 0xee, 0x83, 0x31, 0xef, 0xed, 0x64, 0x38, 0x2d, 0x1b, 0xed, 0x16,
0x31, 0x5c, 0xfb, 0x92, 0x55, 0xc6, 0x2b, 0x58, 0x95, 0x78, 0x69, 0xab, 0xa2, 0x4e, 0x1f, 0x78,
0x8c, 0xab, 0x0f, 0x4a, 0x9a, 0xa8, 0x8d, 0xf9, 0x13, 0x02, 0xfc, 0xd1, 0xa4, 0xef, 0xb9, 0xfc,
0xd3, 0xb8, 0x7f, 0xf7, 0x60, 0x97, 0xc7, 0x5e, 0xb6, 0x18, 0x58, 0x1c, 0x4e, 0xcb, 0x3b, 0xf1,
0x3c, 0xed, 0x16, 0xd9, 0x89, 0xa3, 0x6d, 0xfb, 0x92, 0xf9, 0xc6, 0xcb, 0x98, 0xbf, 0xd0, 0x9a,
0x88, 0x6b, 0xbd, 0x06, 0xf9, 0x98, 0x54, 0x42, 0xf9, 0x98, 0xf9, 0x9c, 0x1e, 0x3c, 0x45, 0x90,
0x99, 0x8f, 0x00, 0xbe, 0x05, 0xb8, 0x73, 0xf4, 0xc1, 0x49, 0xb7, 0x47, 0x1e, 0xdc, 0x7f, 0x78,
0x72, 0x7c, 0xf8, 0xe1, 0xe1, 0xd1, 0xc7, 0x87, 0xb9, 0x8d, 0xe2, 0xde, 0xf9, 0x93, 0x4a, 0x6e,
0x8e, 0x1d, 0xfb, 0x43, 0x9f, 0x9d, 0xf9, 0xf8, 0x00, 0xae, 0xc6, 0xe8, 0x6e, 0xaf, 0x75, 0x74,
0xdc, 0xcb, 0xa1, 0x62, 0xfe, 0xfc, 0x49, 0x65, 0x77, 0x0e, 0x77, 0x85, 0xcd, 0x26, 0x62, 0x99,
0x7d, 0x40, 0x48, 0xce, 0x58, 0x66, 0x69, 0x10, 0x14, 0xaf, 0x7e, 0xf3, 0x63, 0x69, 0xe3, 0xb7,
0xa7, 0xa5, 0x85, 0xb0, 0xc6, 0x63, 0x04, 0x9b, 0x91, 0x6e, 0xfc, 0x25, 0x6c, 0x5f, 0xea, 0x59,
0x5c, 0x5d, 0xe5, 0xce, 0xaa, 0x89, 0x2b, 0xbe, 0x98, 0xd4, 0x8e, 0x9a, 0xd7, 0xfe, 0xf8, 0xe5,
0x9f, 0xef, 0x8d, 0x5d, 0xd8, 0x96, 0xe4, 0x9b, 0x23, 0xcb, 0xb7, 0x1c, 0x1a, 0xdc, 0x46, 0x8d,
0x9f, 0x0d, 0xe9, 0x56, 0x53, 0xfe, 0x96, 0xe2, 0xef, 0x10, 0xe4, 0x57, 0xb4, 0x39, 0xae, 0xad,
0xbc, 0xb0, 0xb5, 0xf3, 0x50, 0x7c, 0xe3, 0x39, 0xc2, 0xe2, 0x03, 0x62, 0xde, 0x90, 0xba, 0xae,
0xc3, 0x15, 0xa5, 0xeb, 0x8c, 0x05, 0x43, 0x1a, 0x2c, 0xa9, 0xc4, 0x5f, 0x23, 0xc8, 0xc6, 0xee,
0x1a, 0xdf, 0x5c, 0xf5, 0xfe, 0xe5, 0xbe, 0x5d, 0xad, 0x63, 0x45, 0xd3, 0xfc, 0x2f, 0x1d, 0x55,
0xd4, 0x2c, 0x5c, 0x3c, 0x2b, 0x6d, 0xfc, 0xf5, 0xac, 0xb4, 0xf1, 0x55, 0x58, 0x42, 0x17, 0x61,
0x09, 0xfd, 0x19, 0x96, 0xd0, 0xdf, 0x61, 0x09, 0xf5, 0x93, 0xf2, 0xc3, 0xfd, 0xd6, 0xbf, 0x01,
0x00, 0x00, 0xff, 0xff, 0xf8, 0x4f, 0xdd, 0x74, 0x99, 0x08, 0x00, 0x00,
// 944 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xa4, 0x95, 0x41, 0x6f, 0x1b, 0x45,
0x14, 0xc7, 0x3d, 0xeb, 0xc4, 0x8e, 0x9f, 0x9b, 0xc4, 0x1d, 0xa7, 0x91, 0x65, 0xa8, 0x6d, 0x6d,
0xa5, 0x62, 0x45, 0xc5, 0x6e, 0x8d, 0x10, 0x48, 0x91, 0x10, 0x35, 0xae, 0x90, 0x85, 0x9b, 0xa0,
0xb1, 0x23, 0xb8, 0x45, 0x6b, 0xef, 0x74, 0x59, 0x79, 0xbd, 0x63, 0x76, 0xc6, 0x09, 0x48, 0x1c,
0x38, 0x14, 0x09, 0xe5, 0xc0, 0x0d, 0x09, 0x0e, 0x3d, 0xd1, 0x0b, 0x42, 0xe2, 0xc2, 0x8d, 0x0f,
0x80, 0x22, 0x4e, 0x1c, 0x39, 0x59, 0x74, 0x3f, 0x00, 0x9f, 0x01, 0xed, 0xcc, 0xd8, 0xde, 0x60,
0xbb, 0x45, 0xe5, 0x92, 0xcc, 0xec, 0xfc, 0xdf, 0xbe, 0xdf, 0xfb, 0xcf, 0x7b, 0x6b, 0xd8, 0xf5,
0x98, 0xd3, 0x0f, 0xd8, 0x90, 0x06, 0xb5, 0x71, 0xc0, 0x04, 0xc3, 0xd8, 0x66, 0x83, 0x68, 0xc7,
0xcf, 0xad, 0x60, 0x34, 0x74, 0x45, 0xed, 0xec, 0x5e, 0x71, 0xcf, 0x61, 0x0e, 0x93, 0xc7, 0xf5,
0x68, 0xa5, 0x94, 0xc5, 0xb2, 0xc3, 0x98, 0xe3, 0xd1, 0xba, 0xdc, 0xf5, 0x27, 0x8f, 0xea, 0xc2,
0x1d, 0x51, 0x2e, 0xac, 0xd1, 0x58, 0x0b, 0xf2, 0x63, 0x6f, 0xe2, 0xb8, 0x7e, 0x5d, 0xfd, 0x53,
0x0f, 0xcd, 0x5f, 0x10, 0xec, 0x77, 0x98, 0xd3, 0x9d, 0xf4, 0xf9, 0x20, 0x70, 0xc7, 0xc2, 0x65,
0xfe, 0xb1, 0xfc, 0xcb, 0xf1, 0x21, 0xa4, 0xb9, 0x08, 0xa8, 0x35, 0xe2, 0x05, 0x54, 0x49, 0x56,
0x77, 0x1a, 0x37, 0x6b, 0xcb, 0x30, 0xb5, 0x28, 0x58, 0xaa, 0x9a, 0x46, 0x2e, 0x41, 0x66, 0x11,
0x78, 0x1f, 0x52, 0x8f, 0x98, 0xe7, 0xb1, 0xf3, 0x82, 0x51, 0x41, 0xd5, 0x2d, 0xa2, 0x77, 0x18,
0xc3, 0x86, 0xb0, 0x5c, 0xaf, 0x90, 0xac, 0xa0, 0x6a, 0x92, 0xc8, 0x35, 0xbe, 0x0b, 0x9b, 0xdc,
0xf5, 0x07, 0xb4, 0xb0, 0x51, 0x41, 0xd5, 0x6c, 0xa3, 0x58, 0x53, 0x95, 0xd4, 0x66, 0x95, 0xd4,
0x7a, 0xb3, 0x4a, 0x88, 0x12, 0x9a, 0xdf, 0x20, 0xc8, 0x46, 0x89, 0xa9, 0x47, 0x07, 0x82, 0x05,
0xb8, 0x0e, 0x59, 0x4e, 0x83, 0x33, 0x77, 0x40, 0x4f, 0x5d, 0x5b, 0xe1, 0x66, 0x9a, 0x3b, 0xe1,
0xb4, 0x0c, 0x5d, 0xf5, 0xb8, 0xdd, 0xe2, 0x04, 0xb4, 0xa4, 0x6d, 0x73, 0x7c, 0x1b, 0xb6, 0x7c,
0x66, 0x2b, 0xb5, 0x21, 0xd5, 0xd9, 0x70, 0x5a, 0x4e, 0x1f, 0x31, 0x5b, 0x4a, 0xd3, 0xd1, 0xa1,
0xd6, 0x09, 0x8b, 0x0f, 0xa5, 0x2e, 0xb9, 0xd0, 0xf5, 0x2c, 0x3e, 0x94, 0xba, 0xe8, 0xb0, 0x6d,
0x73, 0xf3, 0x31, 0x02, 0xe8, 0x30, 0xe7, 0x3d, 0xe6, 0x0b, 0xfa, 0x99, 0xc0, 0x77, 0x00, 0x16,
0x3c, 0x05, 0x54, 0x41, 0xd5, 0x4c, 0x73, 0x3b, 0x9c, 0x96, 0x33, 0x73, 0x1c, 0x92, 0x99, 0xd3,
0xe0, 0x5b, 0x90, 0xd6, 0x30, 0xd2, 0xac, 0x4c, 0x13, 0xc2, 0x69, 0x39, 0xa5, 0x58, 0x48, 0x4a,
0xa1, 0x44, 0x22, 0x4d, 0x22, 0xbd, 0xd3, 0x22, 0x05, 0x42, 0x52, 0x8a, 0xc3, 0xbc, 0x07, 0xe9,
0x0e, 0x73, 0xee, 0x0b, 0x11, 0xe0, 0x1c, 0x24, 0x87, 0xf4, 0x73, 0x95, 0x9b, 0x44, 0x4b, 0xbc,
0x07, 0x9b, 0x67, 0x96, 0x37, 0xa1, 0x2a, 0x09, 0x51, 0x1b, 0xf3, 0xc2, 0x90, 0xe4, 0x0f, 0x29,
0xe7, 0x96, 0x43, 0xf1, 0x3b, 0x90, 0x1e, 0xa8, 0x22, 0x64, 0x68, 0xb6, 0x51, 0x5a, 0x73, 0xe9,
0xba, 0xd4, 0xe6, 0xc6, 0xe5, 0xb4, 0x9c, 0x20, 0xb3, 0x20, 0xfc, 0x36, 0x64, 0xe6, 0x7d, 0x27,
0x13, 0x3d, 0xff, 0x3e, 0x17, 0x62, 0xfc, 0x26, 0xa4, 0x54, 0xf3, 0xc8, 0xfa, 0x5e, 0xd4, 0x6d,
0x44, 0x8b, 0xa3, 0x86, 0xb2, 0x2d, 0x61, 0xc9, 0xde, 0xb9, 0x46, 0xe4, 0x1a, 0xbf, 0x05, 0x9b,
0x96, 0x10, 0x01, 0x2f, 0x6c, 0x56, 0x92, 0xd5, 0x6c, 0xe3, 0x95, 0x35, 0x6f, 0x8a, 0x7c, 0xd2,
0xfc, 0x4a, 0x6f, 0x7e, 0x8f, 0x60, 0x4f, 0x8f, 0x42, 0x9f, 0x76, 0x98, 0xc3, 0x09, 0xfd, 0x74,
0x42, 0xb9, 0xc0, 0x87, 0xb0, 0xc5, 0x75, 0xb3, 0x69, 0x5f, 0xca, 0xeb, 0xf0, 0xb4, 0x8c, 0xcc,
0x03, 0x70, 0x0b, 0xd2, 0x4c, 0xcd, 0x94, 0x76, 0xe4, 0x60, 0x5d, 0xec, 0xf2, 0x14, 0x92, 0x59,
0xa8, 0xf9, 0xf1, 0xbf, 0xd0, 0x66, 0x37, 0xf6, 0x2e, 0x6c, 0x8d, 0xd4, 0x52, 0x35, 0xfe, 0xfa,
0x2b, 0xd3, 0x11, 0xba, 0xe4, 0x79, 0x94, 0xf9, 0x2a, 0x14, 0x3b, 0x2e, 0x17, 0xd4, 0x8f, 0xe7,
0x9f, 0x95, 0x6e, 0xfe, 0x86, 0x20, 0x1f, 0x3f, 0x98, 0xe5, 0xdd, 0x07, 0x63, 0xde, 0xdb, 0xa9,
0x70, 0x5a, 0x36, 0xda, 0x2d, 0x62, 0xb8, 0xf6, 0x15, 0xab, 0x8c, 0xff, 0x61, 0x55, 0xf2, 0xa5,
0xad, 0x8a, 0x3a, 0x7d, 0xe0, 0x31, 0xae, 0x3e, 0x28, 0x5b, 0x44, 0x6d, 0xcc, 0x1f, 0x11, 0xe0,
0x0f, 0x27, 0x7d, 0xcf, 0xe5, 0x9f, 0xc4, 0xfd, 0x3b, 0x84, 0x5d, 0x1e, 0x7b, 0xd9, 0x62, 0x60,
0x71, 0x38, 0x2d, 0xef, 0xc4, 0xf3, 0xb4, 0x5b, 0x64, 0x27, 0x2e, 0x6d, 0xdb, 0x57, 0xcc, 0x37,
0x5e, 0xc6, 0xfc, 0x05, 0x6b, 0x32, 0xce, 0x7a, 0x03, 0xf2, 0x31, 0x54, 0x42, 0xf9, 0x98, 0xf9,
0x9c, 0x1e, 0x3c, 0x45, 0x90, 0x99, 0x8f, 0x00, 0xbe, 0x03, 0xb8, 0x73, 0xfc, 0xfe, 0x69, 0xb7,
0x47, 0x1e, 0xdc, 0x7f, 0x78, 0x7a, 0x72, 0xf4, 0xc1, 0xd1, 0xf1, 0x47, 0x47, 0xb9, 0x44, 0x71,
0xef, 0xe2, 0x49, 0x25, 0x37, 0x97, 0x9d, 0xf8, 0x43, 0x9f, 0x9d, 0xfb, 0xf8, 0x00, 0xae, 0xc7,
0xd4, 0xdd, 0x5e, 0xeb, 0xf8, 0xa4, 0x97, 0x43, 0xc5, 0xfc, 0xc5, 0x93, 0xca, 0xee, 0x5c, 0xdc,
0x15, 0x36, 0x9b, 0x88, 0x65, 0xed, 0x03, 0x42, 0x72, 0xc6, 0xb2, 0x96, 0x06, 0x41, 0xf1, 0xfa,
0xd7, 0x3f, 0x94, 0x12, 0xbf, 0x3e, 0x2d, 0x2d, 0xc0, 0x1a, 0x8f, 0x11, 0x6c, 0x44, 0xdc, 0xf8,
0x0b, 0xd8, 0xbe, 0xd2, 0xb3, 0xb8, 0xba, 0xca, 0x9d, 0x55, 0x13, 0x57, 0x7c, 0xb1, 0x52, 0x3b,
0x6a, 0xde, 0xf8, 0xfd, 0xe7, 0xbf, 0xbf, 0x33, 0x76, 0x61, 0x5b, 0x2a, 0x5f, 0x1f, 0x59, 0xbe,
0xe5, 0xd0, 0xe0, 0x2e, 0x6a, 0xfc, 0x64, 0x48, 0xb7, 0x9a, 0xf2, 0xf7, 0x14, 0x7f, 0x8b, 0x20,
0xbf, 0xa2, 0xcd, 0x71, 0x6d, 0xe5, 0x85, 0xad, 0x9d, 0x87, 0xe2, 0x6b, 0xcf, 0x01, 0x8b, 0x0f,
0x88, 0x79, 0x4b, 0x72, 0xdd, 0x84, 0x6b, 0x8a, 0xeb, 0x9c, 0x05, 0x43, 0x1a, 0x2c, 0x51, 0xe2,
0xaf, 0x10, 0x64, 0x63, 0x77, 0x8d, 0x6f, 0xaf, 0x7a, 0xff, 0x72, 0xdf, 0xae, 0xe6, 0x58, 0xd1,
0x34, 0xff, 0x89, 0xa3, 0x8a, 0x9a, 0x85, 0xcb, 0x67, 0xa5, 0xc4, 0x9f, 0xcf, 0x4a, 0x89, 0x2f,
0xc3, 0x12, 0xba, 0x0c, 0x4b, 0xe8, 0x8f, 0xb0, 0x84, 0xfe, 0x0a, 0x4b, 0xa8, 0x9f, 0x92, 0x1f,
0xee, 0x37, 0xfe, 0x09, 0x00, 0x00, 0xff, 0xff, 0x08, 0xa1, 0xea, 0xc7, 0x9d, 0x08, 0x00, 0x00,
}

View file

@ -19,7 +19,7 @@ enum LogStream {
message LogSubscriptionOptions {
// Streams defines which log streams should be sent from the task source.
// Empty means send all the messages.
repeated LogStream streams = 1;
repeated LogStream streams = 1 [packed=false];
// Follow instructs the publisher to continue sending log messages as they
// are produced, after satisfying the initial query.

View file

@ -217,6 +217,8 @@ type NetworkAttachment struct {
Addresses []string `protobuf:"bytes,2,rep,name=addresses" json:"addresses,omitempty"`
// List of aliases by which a task is resolved in a network
Aliases []string `protobuf:"bytes,3,rep,name=aliases" json:"aliases,omitempty"`
// Map of all the driver options for this network
DriverOpts map[string]string `protobuf:"bytes,4,rep,name=driver_opts,json=driverOpts" json:"driver_opts,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"`
}
func (m *NetworkAttachment) Reset() { *m = NetworkAttachment{} }
@ -556,6 +558,13 @@ func (m *NetworkAttachment) CopyFrom(src interface{}) {
copy(m.Aliases, o.Aliases)
}
if o.DriverOpts != nil {
m.DriverOpts = make(map[string]string, len(o.DriverOpts))
for k, v := range o.DriverOpts {
m.DriverOpts[k] = v
}
}
}
func (m *Network) Copy() *Network {
@ -1189,6 +1198,23 @@ func (m *NetworkAttachment) MarshalTo(dAtA []byte) (int, error) {
i += copy(dAtA[i:], s)
}
}
if len(m.DriverOpts) > 0 {
for k, _ := range m.DriverOpts {
dAtA[i] = 0x22
i++
v := m.DriverOpts[k]
mapSize := 1 + len(k) + sovObjects(uint64(len(k))) + 1 + len(v) + sovObjects(uint64(len(v)))
i = encodeVarintObjects(dAtA, i, uint64(mapSize))
dAtA[i] = 0xa
i++
i = encodeVarintObjects(dAtA, i, uint64(len(k)))
i += copy(dAtA[i:], k)
dAtA[i] = 0x12
i++
i = encodeVarintObjects(dAtA, i, uint64(len(v)))
i += copy(dAtA[i:], v)
}
}
return i, nil
}
@ -1767,6 +1793,14 @@ func (m *NetworkAttachment) Size() (n int) {
n += 1 + l + sovObjects(uint64(l))
}
}
if len(m.DriverOpts) > 0 {
for k, v := range m.DriverOpts {
_ = k
_ = v
mapEntrySize := 1 + len(k) + sovObjects(uint64(len(k))) + 1 + len(v) + sovObjects(uint64(len(v)))
n += mapEntrySize + 1 + sovObjects(uint64(mapEntrySize))
}
}
return n
}
@ -4393,10 +4427,21 @@ func (this *NetworkAttachment) String() string {
if this == nil {
return "nil"
}
keysForDriverOpts := make([]string, 0, len(this.DriverOpts))
for k, _ := range this.DriverOpts {
keysForDriverOpts = append(keysForDriverOpts, k)
}
github_com_gogo_protobuf_sortkeys.Strings(keysForDriverOpts)
mapStringForDriverOpts := "map[string]string{"
for _, k := range keysForDriverOpts {
mapStringForDriverOpts += fmt.Sprintf("%v: %v,", k, this.DriverOpts[k])
}
mapStringForDriverOpts += "}"
s := strings.Join([]string{`&NetworkAttachment{`,
`Network:` + strings.Replace(fmt.Sprintf("%v", this.Network), "Network", "Network", 1) + `,`,
`Addresses:` + fmt.Sprintf("%v", this.Addresses) + `,`,
`Aliases:` + fmt.Sprintf("%v", this.Aliases) + `,`,
`DriverOpts:` + mapStringForDriverOpts + `,`,
`}`,
}, "")
return s
@ -6097,6 +6142,122 @@ func (m *NetworkAttachment) Unmarshal(dAtA []byte) error {
}
m.Aliases = append(m.Aliases, string(dAtA[iNdEx:postIndex]))
iNdEx = postIndex
case 4:
if wireType != 2 {
return fmt.Errorf("proto: wrong wireType = %d for field DriverOpts", wireType)
}
var msglen int
for shift := uint(0); ; shift += 7 {
if shift >= 64 {
return ErrIntOverflowObjects
}
if iNdEx >= l {
return io.ErrUnexpectedEOF
}
b := dAtA[iNdEx]
iNdEx++
msglen |= (int(b) & 0x7F) << shift
if b < 0x80 {
break
}
}
if msglen < 0 {
return ErrInvalidLengthObjects
}
postIndex := iNdEx + msglen
if postIndex > l {
return io.ErrUnexpectedEOF
}
var keykey uint64
for shift := uint(0); ; shift += 7 {
if shift >= 64 {
return ErrIntOverflowObjects
}
if iNdEx >= l {
return io.ErrUnexpectedEOF
}
b := dAtA[iNdEx]
iNdEx++
keykey |= (uint64(b) & 0x7F) << shift
if b < 0x80 {
break
}
}
var stringLenmapkey uint64
for shift := uint(0); ; shift += 7 {
if shift >= 64 {
return ErrIntOverflowObjects
}
if iNdEx >= l {
return io.ErrUnexpectedEOF
}
b := dAtA[iNdEx]
iNdEx++
stringLenmapkey |= (uint64(b) & 0x7F) << shift
if b < 0x80 {
break
}
}
intStringLenmapkey := int(stringLenmapkey)
if intStringLenmapkey < 0 {
return ErrInvalidLengthObjects
}
postStringIndexmapkey := iNdEx + intStringLenmapkey
if postStringIndexmapkey > l {
return io.ErrUnexpectedEOF
}
mapkey := string(dAtA[iNdEx:postStringIndexmapkey])
iNdEx = postStringIndexmapkey
if m.DriverOpts == nil {
m.DriverOpts = make(map[string]string)
}
if iNdEx < postIndex {
var valuekey uint64
for shift := uint(0); ; shift += 7 {
if shift >= 64 {
return ErrIntOverflowObjects
}
if iNdEx >= l {
return io.ErrUnexpectedEOF
}
b := dAtA[iNdEx]
iNdEx++
valuekey |= (uint64(b) & 0x7F) << shift
if b < 0x80 {
break
}
}
var stringLenmapvalue uint64
for shift := uint(0); ; shift += 7 {
if shift >= 64 {
return ErrIntOverflowObjects
}
if iNdEx >= l {
return io.ErrUnexpectedEOF
}
b := dAtA[iNdEx]
iNdEx++
stringLenmapvalue |= (uint64(b) & 0x7F) << shift
if b < 0x80 {
break
}
}
intStringLenmapvalue := int(stringLenmapvalue)
if intStringLenmapvalue < 0 {
return ErrInvalidLengthObjects
}
postStringIndexmapvalue := iNdEx + intStringLenmapvalue
if postStringIndexmapvalue > l {
return io.ErrUnexpectedEOF
}
mapvalue := string(dAtA[iNdEx:postStringIndexmapvalue])
iNdEx = postStringIndexmapvalue
m.DriverOpts[mapkey] = mapvalue
} else {
var mapvalue string
m.DriverOpts[mapkey] = mapvalue
}
iNdEx = postIndex
default:
iNdEx = preIndex
skippy, err := skipObjects(dAtA[iNdEx:])
@ -7469,93 +7630,96 @@ var (
func init() { proto.RegisterFile("objects.proto", fileDescriptorObjects) }
var fileDescriptorObjects = []byte{
// 1405 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xcc, 0x57, 0xc1, 0x6f, 0x1b, 0x45,
0x17, 0xef, 0xda, 0x1b, 0xdb, 0xfb, 0x9c, 0x58, 0xf9, 0xa6, 0xf9, 0xf2, 0x6d, 0xf3, 0x05, 0x3b,
0xb8, 0x02, 0x55, 0xa8, 0x72, 0x4a, 0x29, 0x28, 0x0d, 0x14, 0x6a, 0x27, 0x11, 0xb5, 0x4a, 0x69,
0x34, 0x2d, 0x2d, 0x37, 0x33, 0xd9, 0x9d, 0xba, 0x8b, 0xd7, 0x3b, 0xab, 0x9d, 0xb1, 0x8b, 0x6f,
0x88, 0x63, 0xfe, 0x81, 0xdc, 0x38, 0xf4, 0xc4, 0x1d, 0x2e, 0x5c, 0x38, 0xf7, 0xc8, 0x09, 0x71,
0x8a, 0xa8, 0xff, 0x0b, 0x24, 0x0e, 0x68, 0x66, 0x67, 0x9d, 0x4d, 0xbd, 0x4e, 0x5a, 0x54, 0x45,
0x9c, 0x3c, 0xb3, 0xf3, 0xfb, 0xbd, 0x79, 0xef, 0xcd, 0x6f, 0xde, 0x3c, 0xc3, 0x02, 0xdb, 0xfb,
0x9a, 0x3a, 0x82, 0x37, 0xc2, 0x88, 0x09, 0x86, 0x90, 0xcb, 0x9c, 0x1e, 0x8d, 0x1a, 0xfc, 0x09,
0x89, 0xfa, 0x3d, 0x4f, 0x34, 0x86, 0xef, 0xae, 0x94, 0xc5, 0x28, 0xa4, 0x1a, 0xb0, 0x52, 0xe6,
0x21, 0x75, 0x92, 0x49, 0xad, 0xcb, 0x58, 0xd7, 0xa7, 0xeb, 0x6a, 0xb6, 0x37, 0x78, 0xb4, 0x2e,
0xbc, 0x3e, 0xe5, 0x82, 0xf4, 0x43, 0x0d, 0x58, 0xea, 0xb2, 0x2e, 0x53, 0xc3, 0x75, 0x39, 0xd2,
0x5f, 0x2f, 0xbc, 0x48, 0x23, 0xc1, 0x48, 0x2f, 0x9d, 0x0f, 0xfd, 0x41, 0xd7, 0x0b, 0xd6, 0xe3,
0x9f, 0xf8, 0x63, 0xfd, 0x67, 0x03, 0xcc, 0x3b, 0x54, 0x10, 0xf4, 0x21, 0x14, 0x87, 0x34, 0xe2,
0x1e, 0x0b, 0x6c, 0x63, 0xcd, 0xb8, 0x54, 0xbe, 0xfa, 0xff, 0xc6, 0xb4, 0xbf, 0x8d, 0x07, 0x31,
0xa4, 0x65, 0x3e, 0x3b, 0xac, 0x9d, 0xc3, 0x09, 0x03, 0x5d, 0x07, 0x70, 0x22, 0x4a, 0x04, 0x75,
0x3b, 0x44, 0xd8, 0x39, 0xc5, 0x5f, 0x69, 0xc4, 0xae, 0x34, 0x12, 0x57, 0x1a, 0xf7, 0x93, 0x08,
0xb0, 0xa5, 0xd1, 0x4d, 0x21, 0xa9, 0x83, 0xd0, 0x4d, 0xa8, 0xf9, 0xd3, 0xa9, 0x1a, 0xdd, 0x14,
0xf5, 0x1f, 0x4d, 0x30, 0x3f, 0x67, 0x2e, 0x45, 0xcb, 0x90, 0xf3, 0x5c, 0xe5, 0xb6, 0xd5, 0x2a,
0x8c, 0x0f, 0x6b, 0xb9, 0xf6, 0x36, 0xce, 0x79, 0x2e, 0xba, 0x0a, 0x66, 0x9f, 0x0a, 0xa2, 0x1d,
0xb2, 0xb3, 0x02, 0x92, 0xb1, 0xeb, 0x68, 0x14, 0x16, 0x7d, 0x00, 0xa6, 0x3c, 0x06, 0xed, 0xc9,
0x6a, 0x16, 0x47, 0xee, 0x79, 0x2f, 0xa4, 0x4e, 0xc2, 0x93, 0x78, 0xb4, 0x03, 0x65, 0x97, 0x72,
0x27, 0xf2, 0x42, 0x21, 0x73, 0x68, 0x2a, 0xfa, 0xc5, 0x59, 0xf4, 0xed, 0x23, 0x28, 0x4e, 0xf3,
0xd0, 0x47, 0x50, 0xe0, 0x82, 0x88, 0x01, 0xb7, 0xe7, 0x94, 0x85, 0xea, 0x4c, 0x07, 0x14, 0x4a,
0xbb, 0xa0, 0x39, 0xe8, 0x16, 0x54, 0xfa, 0x24, 0x20, 0x5d, 0x1a, 0x75, 0xb4, 0x95, 0x82, 0xb2,
0xf2, 0x66, 0x66, 0xe8, 0x31, 0x32, 0x36, 0x84, 0x17, 0xfa, 0xe9, 0x29, 0xda, 0x01, 0x20, 0x42,
0x10, 0xe7, 0x71, 0x9f, 0x06, 0xc2, 0x2e, 0x2a, 0x2b, 0x6f, 0x65, 0xfa, 0x42, 0xc5, 0x13, 0x16,
0xf5, 0x9a, 0x13, 0x30, 0x4e, 0x11, 0xd1, 0xa7, 0x50, 0x76, 0x68, 0x24, 0xbc, 0x47, 0x9e, 0x43,
0x04, 0xb5, 0x4b, 0xca, 0x4e, 0x2d, 0xcb, 0xce, 0xd6, 0x11, 0x4c, 0x07, 0x95, 0x66, 0xa2, 0x2b,
0x60, 0x46, 0xcc, 0xa7, 0xb6, 0xb5, 0x66, 0x5c, 0xaa, 0xcc, 0x3e, 0x16, 0xcc, 0x7c, 0x8a, 0x15,
0x72, 0x73, 0x79, 0xff, 0xa0, 0x8e, 0x60, 0xb1, 0x64, 0x2c, 0x1a, 0x4a, 0x1a, 0xc6, 0x15, 0xe3,
0x4b, 0xe3, 0x2b, 0xa3, 0xfe, 0x57, 0x1e, 0x8a, 0xf7, 0x68, 0x34, 0xf4, 0x9c, 0xd7, 0x2b, 0x9c,
0xeb, 0xc7, 0x84, 0x93, 0x19, 0xa3, 0xde, 0x76, 0x4a, 0x3b, 0x1b, 0x50, 0xa2, 0x81, 0x1b, 0x32,
0x2f, 0x10, 0x5a, 0x38, 0x99, 0x01, 0xee, 0x68, 0x0c, 0x9e, 0xa0, 0xd1, 0x0e, 0x2c, 0xc4, 0xf7,
0xa1, 0x73, 0x4c, 0x35, 0x6b, 0x59, 0xf4, 0x2f, 0x14, 0x50, 0x1f, 0xf7, 0xfc, 0x20, 0x35, 0x43,
0xdb, 0xb0, 0x10, 0x46, 0x74, 0xe8, 0xb1, 0x01, 0xef, 0xa8, 0x20, 0x0a, 0x2f, 0x15, 0x04, 0x9e,
0x4f, 0x58, 0x72, 0x86, 0x3e, 0x86, 0x79, 0x49, 0xee, 0x24, 0x75, 0x04, 0x4e, 0xad, 0x23, 0x58,
0x95, 0x3c, 0x3d, 0x41, 0x77, 0xe1, 0xbf, 0xc7, 0xbc, 0x98, 0x18, 0x2a, 0x9f, 0x6e, 0xe8, 0x7c,
0xda, 0x13, 0xfd, 0x71, 0x13, 0xed, 0x1f, 0xd4, 0x2b, 0x30, 0x9f, 0x96, 0x40, 0xfd, 0xfb, 0x1c,
0x94, 0x92, 0x44, 0xa2, 0x6b, 0xfa, 0xcc, 0x8c, 0xd9, 0x59, 0x4b, 0xb0, 0x2a, 0xde, 0xf8, 0xb8,
0xae, 0xc1, 0x5c, 0xc8, 0x22, 0xc1, 0xed, 0xdc, 0x5a, 0x7e, 0xd6, 0x15, 0xdd, 0x65, 0x91, 0xd8,
0x62, 0xc1, 0x23, 0xaf, 0x8b, 0x63, 0x30, 0x7a, 0x08, 0xe5, 0xa1, 0x17, 0x89, 0x01, 0xf1, 0x3b,
0x5e, 0xc8, 0xed, 0xbc, 0xe2, 0xbe, 0x7d, 0xd2, 0x96, 0x8d, 0x07, 0x31, 0xbe, 0xbd, 0xdb, 0xaa,
0x8c, 0x0f, 0x6b, 0x30, 0x99, 0x72, 0x0c, 0xda, 0x54, 0x3b, 0xe4, 0x2b, 0x77, 0xc0, 0x9a, 0xac,
0xa0, 0xcb, 0x00, 0x41, 0x7c, 0x23, 0x3b, 0x13, 0x65, 0x2f, 0x8c, 0x0f, 0x6b, 0x96, 0xbe, 0xa7,
0xed, 0x6d, 0x6c, 0x69, 0x40, 0xdb, 0x45, 0x08, 0x4c, 0xe2, 0xba, 0x91, 0xd2, 0xb9, 0x85, 0xd5,
0xb8, 0xfe, 0x43, 0x01, 0xcc, 0xfb, 0x84, 0xf7, 0xce, 0xba, 0xaa, 0xca, 0x3d, 0xa7, 0x6e, 0xc6,
0x65, 0x00, 0x1e, 0xeb, 0x4d, 0x86, 0x63, 0x1e, 0x85, 0xa3, 0x55, 0x28, 0xc3, 0xd1, 0x80, 0x38,
0x1c, 0xee, 0x33, 0xa1, 0x2e, 0x81, 0x89, 0xd5, 0x18, 0x5d, 0x84, 0x62, 0xc0, 0x5c, 0x45, 0x2f,
0x28, 0x3a, 0x8c, 0x0f, 0x6b, 0x05, 0x59, 0x2b, 0xda, 0xdb, 0xb8, 0x20, 0x97, 0xda, 0xae, 0x2c,
0x53, 0x24, 0x08, 0x98, 0x20, 0xb2, 0x06, 0x73, 0x5d, 0xee, 0x32, 0xd5, 0xdf, 0x3c, 0x82, 0x25,
0x65, 0x2a, 0xc5, 0x44, 0x0f, 0xe0, 0x7c, 0xe2, 0x6f, 0xda, 0x60, 0xe9, 0x55, 0x0c, 0x22, 0x6d,
0x21, 0xb5, 0x92, 0x7a, 0x16, 0xac, 0xd9, 0xcf, 0x82, 0xca, 0x60, 0xd6, 0xb3, 0xd0, 0x82, 0x05,
0x97, 0x72, 0x2f, 0xa2, 0xae, 0x2a, 0x13, 0x54, 0xdd, 0xcc, 0xca, 0xd5, 0x37, 0x4e, 0x32, 0x42,
0xf1, 0xbc, 0xe6, 0xa8, 0x19, 0x6a, 0x42, 0x49, 0xeb, 0x86, 0xdb, 0x65, 0xa5, 0xdd, 0x97, 0x7c,
0x0e, 0x26, 0xb4, 0x63, 0x65, 0x6e, 0xfe, 0x95, 0xca, 0xdc, 0x75, 0x00, 0x9f, 0x75, 0x3b, 0x6e,
0xe4, 0x0d, 0x69, 0x64, 0x2f, 0xe8, 0x26, 0x21, 0x83, 0xbb, 0xad, 0x10, 0xd8, 0xf2, 0x59, 0x37,
0x1e, 0x4e, 0x15, 0xa5, 0xca, 0xab, 0x15, 0xa5, 0xcd, 0x95, 0xfd, 0x83, 0xfa, 0x32, 0x2c, 0xa5,
0x6b, 0xc8, 0x86, 0x71, 0xd3, 0xb8, 0x65, 0xec, 0x1a, 0xf5, 0xef, 0x0c, 0xf8, 0xcf, 0x54, 0xc0,
0xe8, 0x7d, 0x28, 0xea, 0x90, 0x4f, 0xea, 0xa4, 0x34, 0x0f, 0x27, 0x58, 0xb4, 0x0a, 0x96, 0xbc,
0x7f, 0x94, 0x73, 0x1a, 0x57, 0x16, 0x0b, 0x1f, 0x7d, 0x40, 0x36, 0x14, 0x89, 0xef, 0x11, 0xb9,
0x96, 0x57, 0x6b, 0xc9, 0xb4, 0xfe, 0x34, 0x07, 0x45, 0x6d, 0xec, 0xac, 0xdf, 0x33, 0xbd, 0xed,
0xd4, 0xad, 0xbd, 0x01, 0xf3, 0xf1, 0x51, 0x69, 0xb9, 0x99, 0xa7, 0x1e, 0x58, 0x39, 0xc6, 0xc7,
0x52, 0xbb, 0x01, 0xa6, 0x17, 0x92, 0xbe, 0x7e, 0xcb, 0x32, 0x77, 0x6e, 0xef, 0x36, 0xef, 0xdc,
0x0d, 0xe3, 0x5b, 0x53, 0x1a, 0x1f, 0xd6, 0x4c, 0xf9, 0x01, 0x2b, 0x5a, 0x66, 0xd5, 0xff, 0x69,
0x0e, 0x8a, 0x5b, 0xfe, 0x80, 0x0b, 0x1a, 0x9d, 0x75, 0x92, 0xf4, 0xb6, 0x53, 0x49, 0xda, 0x82,
0x62, 0xc4, 0x98, 0xe8, 0x38, 0xe4, 0xa4, 0xfc, 0x60, 0xc6, 0xc4, 0x56, 0xb3, 0x55, 0x91, 0x44,
0x59, 0xb8, 0xe2, 0x39, 0x2e, 0x48, 0xea, 0x16, 0x41, 0x0f, 0x61, 0x39, 0x29, 0xf7, 0x7b, 0x8c,
0x09, 0x2e, 0x22, 0x12, 0x76, 0x7a, 0x74, 0x24, 0x1b, 0x81, 0xfc, 0xac, 0xc6, 0x6f, 0x27, 0x70,
0xa2, 0x91, 0x4a, 0xde, 0x6d, 0x3a, 0xc2, 0x4b, 0xda, 0x40, 0x2b, 0xe1, 0xdf, 0xa6, 0x23, 0x8e,
0x3e, 0x81, 0x55, 0x3a, 0x81, 0x49, 0x8b, 0x1d, 0x9f, 0xf4, 0xe5, 0x43, 0xd6, 0x71, 0x7c, 0xe6,
0xf4, 0x54, 0x2d, 0x35, 0xf1, 0x05, 0x9a, 0x36, 0xf5, 0x59, 0x8c, 0xd8, 0x92, 0x00, 0xc4, 0xc1,
0xde, 0xf3, 0x89, 0xd3, 0xf3, 0x3d, 0x2e, 0x7b, 0xfb, 0x54, 0x2f, 0x27, 0xcb, 0xa1, 0xf4, 0x6d,
0xe3, 0x84, 0x6c, 0x35, 0x5a, 0x47, 0xdc, 0x54, 0x67, 0xc8, 0x77, 0x02, 0x11, 0x8d, 0xf0, 0xff,
0xf6, 0xb2, 0x57, 0x51, 0x0b, 0xca, 0x83, 0x40, 0x6e, 0x1f, 0xe7, 0xc0, 0x7a, 0xd9, 0x1c, 0x40,
0xcc, 0x92, 0x91, 0xaf, 0x0c, 0x61, 0xf5, 0xa4, 0xcd, 0xd1, 0x22, 0xe4, 0x7b, 0x74, 0x14, 0xeb,
0x07, 0xcb, 0x21, 0xba, 0x09, 0x73, 0x43, 0xe2, 0x0f, 0xa8, 0x56, 0xce, 0x3b, 0x59, 0xfb, 0x65,
0x9b, 0xc4, 0x31, 0x71, 0x33, 0xb7, 0x61, 0x64, 0xca, 0xf6, 0x17, 0x03, 0x0a, 0xf7, 0xa8, 0x13,
0x51, 0xf1, 0x5a, 0x55, 0xbb, 0x71, 0x4c, 0xb5, 0xd5, 0xec, 0x2e, 0x4f, 0xee, 0x3a, 0x25, 0xda,
0x15, 0x28, 0x79, 0x81, 0xa0, 0x51, 0x40, 0x7c, 0xa5, 0xda, 0x12, 0x9e, 0xcc, 0x33, 0x03, 0x78,
0x6a, 0x40, 0x21, 0x6e, 0x83, 0xce, 0x3a, 0x80, 0x78, 0xd7, 0x17, 0x03, 0xc8, 0x74, 0xf2, 0x4f,
0x03, 0x4a, 0x98, 0x72, 0x36, 0x88, 0x5e, 0xf3, 0x5f, 0x82, 0x17, 0xda, 0x8a, 0xfc, 0x3f, 0x6e,
0x2b, 0x10, 0x98, 0x3d, 0x2f, 0xd0, 0x0d, 0x10, 0x56, 0x63, 0xd4, 0x80, 0x62, 0x48, 0x46, 0x3e,
0x23, 0xae, 0x2e, 0x94, 0x4b, 0x53, 0xff, 0x9a, 0x9b, 0xc1, 0x08, 0x27, 0xa0, 0xcd, 0xa5, 0xfd,
0x83, 0xfa, 0x22, 0x54, 0xd2, 0x91, 0x3f, 0x36, 0xea, 0xbf, 0x19, 0x60, 0xed, 0x7c, 0x23, 0x68,
0xa0, 0x3a, 0xf0, 0x7f, 0x65, 0xf0, 0x6b, 0xd3, 0xff, 0xac, 0xad, 0x63, 0x7f, 0x9a, 0xb3, 0x0e,
0xb5, 0x65, 0x3f, 0x7b, 0x5e, 0x3d, 0xf7, 0xfb, 0xf3, 0xea, 0xb9, 0x6f, 0xc7, 0x55, 0xe3, 0xd9,
0xb8, 0x6a, 0xfc, 0x3a, 0xae, 0x1a, 0x7f, 0x8c, 0xab, 0xc6, 0x5e, 0x41, 0xe5, 0xe7, 0xbd, 0xbf,
0x03, 0x00, 0x00, 0xff, 0xff, 0xa3, 0x7d, 0xca, 0x6a, 0x9f, 0x11, 0x00, 0x00,
// 1448 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xcc, 0x57, 0xcd, 0x6f, 0x1b, 0x37,
0x16, 0xcf, 0x48, 0x63, 0x7d, 0x3c, 0xd9, 0x5a, 0x2f, 0xe3, 0xf5, 0x4e, 0xb4, 0x5e, 0xc9, 0xab,
0x60, 0x8b, 0xa0, 0x08, 0xe4, 0xd4, 0x4d, 0x0a, 0xc7, 0x6d, 0xda, 0x48, 0xb6, 0xd1, 0x08, 0x69,
0x1a, 0x83, 0x49, 0x9d, 0xde, 0x54, 0x7a, 0x86, 0x51, 0xa6, 0x1a, 0x0d, 0x07, 0x43, 0x4a, 0xa9,
0x6e, 0x3d, 0xfb, 0x1f, 0x30, 0x7a, 0xe9, 0x21, 0xa7, 0xde, 0xdb, 0x4b, 0x2f, 0x3d, 0xe7, 0xd8,
0x53, 0xd1, 0x93, 0xd1, 0xe8, 0xbf, 0x28, 0xd0, 0x43, 0x41, 0x0e, 0x47, 0x1e, 0x5b, 0xe3, 0x8f,
0x14, 0x81, 0xd1, 0xd3, 0x90, 0xc3, 0xdf, 0xef, 0x7d, 0xf1, 0xbd, 0x47, 0x12, 0xe6, 0xd8, 0xee,
0x97, 0xd4, 0x16, 0xbc, 0x11, 0x84, 0x4c, 0x30, 0x84, 0x1c, 0x66, 0xf7, 0x68, 0xd8, 0xe0, 0xcf,
0x49, 0xd8, 0xef, 0xb9, 0xa2, 0x31, 0x7c, 0xa7, 0x52, 0x12, 0xa3, 0x80, 0x6a, 0x40, 0xa5, 0xc4,
0x03, 0x6a, 0xc7, 0x93, 0x5a, 0x97, 0xb1, 0xae, 0x47, 0x57, 0xd4, 0x6c, 0x77, 0xf0, 0x74, 0x45,
0xb8, 0x7d, 0xca, 0x05, 0xe9, 0x07, 0x1a, 0xb0, 0xd0, 0x65, 0x5d, 0xa6, 0x86, 0x2b, 0x72, 0xa4,
0xff, 0x5e, 0x39, 0x4e, 0x23, 0xfe, 0x48, 0x2f, 0x5d, 0x0e, 0xbc, 0x41, 0xd7, 0xf5, 0x57, 0xa2,
0x4f, 0xf4, 0xb3, 0xfe, 0xa3, 0x01, 0xe6, 0x03, 0x2a, 0x08, 0x7a, 0x1f, 0xf2, 0x43, 0x1a, 0x72,
0x97, 0xf9, 0x96, 0xb1, 0x6c, 0x5c, 0x2b, 0xad, 0xfe, 0xa7, 0x31, 0x6d, 0x6f, 0x63, 0x27, 0x82,
0xb4, 0xcc, 0x97, 0x07, 0xb5, 0x4b, 0x38, 0x66, 0xa0, 0xdb, 0x00, 0x76, 0x48, 0x89, 0xa0, 0x4e,
0x87, 0x08, 0x2b, 0xa3, 0xf8, 0x95, 0x46, 0x64, 0x4a, 0x23, 0x36, 0xa5, 0xf1, 0x38, 0xf6, 0x00,
0x17, 0x35, 0xba, 0x29, 0x24, 0x75, 0x10, 0x38, 0x31, 0x35, 0x7b, 0x36, 0x55, 0xa3, 0x9b, 0xa2,
0xfe, 0xbd, 0x09, 0xe6, 0xa7, 0xcc, 0xa1, 0x68, 0x11, 0x32, 0xae, 0xa3, 0xcc, 0x2e, 0xb6, 0x72,
0xe3, 0x83, 0x5a, 0xa6, 0xbd, 0x89, 0x33, 0xae, 0x83, 0x56, 0xc1, 0xec, 0x53, 0x41, 0xb4, 0x41,
0x56, 0x9a, 0x43, 0xd2, 0x77, 0xed, 0x8d, 0xc2, 0xa2, 0xf7, 0xc0, 0x94, 0xdb, 0xa0, 0x2d, 0x59,
0x4a, 0xe3, 0x48, 0x9d, 0x8f, 0x02, 0x6a, 0xc7, 0x3c, 0x89, 0x47, 0x5b, 0x50, 0x72, 0x28, 0xb7,
0x43, 0x37, 0x10, 0x32, 0x86, 0xa6, 0xa2, 0x5f, 0x3d, 0x89, 0xbe, 0x79, 0x08, 0xc5, 0x49, 0x1e,
0xfa, 0x00, 0x72, 0x5c, 0x10, 0x31, 0xe0, 0xd6, 0x8c, 0x92, 0x50, 0x3d, 0xd1, 0x00, 0x85, 0xd2,
0x26, 0x68, 0x0e, 0xba, 0x07, 0xe5, 0x3e, 0xf1, 0x49, 0x97, 0x86, 0x1d, 0x2d, 0x25, 0xa7, 0xa4,
0xfc, 0x2f, 0xd5, 0xf5, 0x08, 0x19, 0x09, 0xc2, 0x73, 0xfd, 0xe4, 0x14, 0x6d, 0x01, 0x10, 0x21,
0x88, 0xfd, 0xac, 0x4f, 0x7d, 0x61, 0xe5, 0x95, 0x94, 0xff, 0xa7, 0xda, 0x42, 0xc5, 0x73, 0x16,
0xf6, 0x9a, 0x13, 0x30, 0x4e, 0x10, 0xd1, 0xc7, 0x50, 0xb2, 0x69, 0x28, 0xdc, 0xa7, 0xae, 0x4d,
0x04, 0xb5, 0x0a, 0x4a, 0x4e, 0x2d, 0x4d, 0xce, 0xc6, 0x21, 0x4c, 0x3b, 0x95, 0x64, 0xa2, 0x1b,
0x60, 0x86, 0xcc, 0xa3, 0x56, 0x71, 0xd9, 0xb8, 0x56, 0x3e, 0x79, 0x5b, 0x30, 0xf3, 0x28, 0x56,
0xc8, 0xf5, 0xc5, 0xbd, 0xfd, 0x3a, 0x82, 0xf9, 0x82, 0x31, 0x6f, 0xa8, 0xd4, 0x30, 0x6e, 0x18,
0x9f, 0x1b, 0x5f, 0x18, 0xf5, 0x3f, 0xb2, 0x90, 0x7f, 0x44, 0xc3, 0xa1, 0x6b, 0xbf, 0xd9, 0xc4,
0xb9, 0x7d, 0x24, 0x71, 0x52, 0x7d, 0xd4, 0x6a, 0xa7, 0x72, 0x67, 0x0d, 0x0a, 0xd4, 0x77, 0x02,
0xe6, 0xfa, 0x42, 0x27, 0x4e, 0xaa, 0x83, 0x5b, 0x1a, 0x83, 0x27, 0x68, 0xb4, 0x05, 0x73, 0x51,
0x3d, 0x74, 0x8e, 0x64, 0xcd, 0x72, 0x1a, 0xfd, 0x33, 0x05, 0xd4, 0xdb, 0x3d, 0x3b, 0x48, 0xcc,
0xd0, 0x26, 0xcc, 0x05, 0x21, 0x1d, 0xba, 0x6c, 0xc0, 0x3b, 0xca, 0x89, 0xdc, 0xb9, 0x9c, 0xc0,
0xb3, 0x31, 0x4b, 0xce, 0xd0, 0x87, 0x30, 0x2b, 0xc9, 0x9d, 0xb8, 0x8f, 0xc0, 0x99, 0x7d, 0x04,
0xab, 0x96, 0xa7, 0x27, 0xe8, 0x21, 0xfc, 0xeb, 0x88, 0x15, 0x13, 0x41, 0xa5, 0xb3, 0x05, 0x5d,
0x4e, 0x5a, 0xa2, 0x7f, 0xae, 0xa3, 0xbd, 0xfd, 0x7a, 0x19, 0x66, 0x93, 0x29, 0x50, 0xff, 0x36,
0x03, 0x85, 0x38, 0x90, 0xe8, 0xa6, 0xde, 0x33, 0xe3, 0xe4, 0xa8, 0xc5, 0x58, 0xe5, 0x6f, 0xb4,
0x5d, 0x37, 0x61, 0x26, 0x60, 0xa1, 0xe0, 0x56, 0x66, 0x39, 0x7b, 0x52, 0x89, 0x6e, 0xb3, 0x50,
0x6c, 0x30, 0xff, 0xa9, 0xdb, 0xc5, 0x11, 0x18, 0x3d, 0x81, 0xd2, 0xd0, 0x0d, 0xc5, 0x80, 0x78,
0x1d, 0x37, 0xe0, 0x56, 0x56, 0x71, 0xdf, 0x3a, 0x4d, 0x65, 0x63, 0x27, 0xc2, 0xb7, 0xb7, 0x5b,
0xe5, 0xf1, 0x41, 0x0d, 0x26, 0x53, 0x8e, 0x41, 0x8b, 0x6a, 0x07, 0xbc, 0xf2, 0x00, 0x8a, 0x93,
0x15, 0x74, 0x1d, 0xc0, 0x8f, 0x2a, 0xb2, 0x33, 0xc9, 0xec, 0xb9, 0xf1, 0x41, 0xad, 0xa8, 0xeb,
0xb4, 0xbd, 0x89, 0x8b, 0x1a, 0xd0, 0x76, 0x10, 0x02, 0x93, 0x38, 0x4e, 0xa8, 0xf2, 0xbc, 0x88,
0xd5, 0xb8, 0xfe, 0x5d, 0x0e, 0xcc, 0xc7, 0x84, 0xf7, 0x2e, 0xba, 0xab, 0x4a, 0x9d, 0x53, 0x95,
0x71, 0x1d, 0x80, 0x47, 0xf9, 0x26, 0xdd, 0x31, 0x0f, 0xdd, 0xd1, 0x59, 0x28, 0xdd, 0xd1, 0x80,
0xc8, 0x1d, 0xee, 0x31, 0xa1, 0x8a, 0xc0, 0xc4, 0x6a, 0x8c, 0xae, 0x42, 0xde, 0x67, 0x8e, 0xa2,
0xe7, 0x14, 0x1d, 0xc6, 0x07, 0xb5, 0x9c, 0xec, 0x15, 0xed, 0x4d, 0x9c, 0x93, 0x4b, 0x6d, 0x47,
0xb6, 0x29, 0xe2, 0xfb, 0x4c, 0x10, 0xd9, 0x83, 0xb9, 0x6e, 0x77, 0xa9, 0xd9, 0xdf, 0x3c, 0x84,
0xc5, 0x6d, 0x2a, 0xc1, 0x44, 0x3b, 0x70, 0x39, 0xb6, 0x37, 0x29, 0xb0, 0xf0, 0x3a, 0x02, 0x91,
0x96, 0x90, 0x58, 0x49, 0x1c, 0x0b, 0xc5, 0x93, 0x8f, 0x05, 0x15, 0xc1, 0xb4, 0x63, 0xa1, 0x05,
0x73, 0x0e, 0xe5, 0x6e, 0x48, 0x1d, 0xd5, 0x26, 0xa8, 0xaa, 0xcc, 0xf2, 0xea, 0x7f, 0x4f, 0x13,
0x42, 0xf1, 0xac, 0xe6, 0xa8, 0x19, 0x6a, 0x42, 0x41, 0xe7, 0x0d, 0xb7, 0x4a, 0x2a, 0x77, 0xcf,
0x79, 0x1c, 0x4c, 0x68, 0x47, 0xda, 0xdc, 0xec, 0x6b, 0xb5, 0xb9, 0xdb, 0x00, 0x1e, 0xeb, 0x76,
0x9c, 0xd0, 0x1d, 0xd2, 0xd0, 0x9a, 0xd3, 0x97, 0x84, 0x14, 0xee, 0xa6, 0x42, 0xe0, 0xa2, 0xc7,
0xba, 0xd1, 0x70, 0xaa, 0x29, 0x95, 0x5f, 0xaf, 0x29, 0xad, 0x57, 0xf6, 0xf6, 0xeb, 0x8b, 0xb0,
0x90, 0xec, 0x21, 0x6b, 0xc6, 0x5d, 0xe3, 0x9e, 0xb1, 0x6d, 0xd4, 0xbf, 0xc9, 0xc0, 0x3f, 0xa7,
0x1c, 0x46, 0xb7, 0x20, 0xaf, 0x5d, 0x3e, 0xed, 0x26, 0xa5, 0x79, 0x38, 0xc6, 0xa2, 0x25, 0x28,
0xca, 0xfa, 0xa3, 0x9c, 0xd3, 0xa8, 0xb3, 0x14, 0xf1, 0xe1, 0x0f, 0x64, 0x41, 0x9e, 0x78, 0x2e,
0x91, 0x6b, 0x59, 0xb5, 0x16, 0x4f, 0xd1, 0x0e, 0x94, 0xa2, 0xb8, 0x74, 0x58, 0x20, 0xb8, 0x65,
0xaa, 0xbd, 0xb9, 0x75, 0xae, 0xbd, 0xd1, 0xe1, 0x7a, 0x18, 0x08, 0xbe, 0xe5, 0x8b, 0x70, 0x84,
0xc1, 0x99, 0xfc, 0xa8, 0xdc, 0x81, 0x7f, 0x1c, 0x5b, 0x46, 0xf3, 0x90, 0xed, 0xd1, 0x51, 0xd4,
0x12, 0xb0, 0x1c, 0xa2, 0x05, 0x98, 0x19, 0x12, 0x6f, 0x40, 0x75, 0x07, 0x89, 0x26, 0xeb, 0x99,
0x35, 0xa3, 0xfe, 0x22, 0x03, 0x79, 0xad, 0xf0, 0xa2, 0x8f, 0x59, 0xad, 0x76, 0xaa, 0x99, 0xdc,
0x81, 0x59, 0x1d, 0xa9, 0xa8, 0x0a, 0xcc, 0x33, 0xf3, 0x48, 0x47, 0x36, 0xaa, 0x80, 0x3b, 0x60,
0xba, 0x01, 0xe9, 0xeb, 0x23, 0x36, 0x55, 0x73, 0x7b, 0xbb, 0xf9, 0xe0, 0x61, 0x10, 0x15, 0x73,
0x61, 0x7c, 0x50, 0x33, 0xe5, 0x0f, 0xac, 0x68, 0xa9, 0x87, 0xd1, 0x0f, 0x33, 0x90, 0xdf, 0xf0,
0x06, 0x5c, 0xd0, 0xf0, 0xa2, 0x83, 0xa4, 0xd5, 0x4e, 0x05, 0x69, 0x03, 0xf2, 0x21, 0x63, 0xa2,
0x63, 0x93, 0xd3, 0xe2, 0x83, 0x19, 0x13, 0x1b, 0xcd, 0x56, 0x59, 0x12, 0x65, 0x3f, 0x8d, 0xe6,
0x38, 0x27, 0xa9, 0x1b, 0x04, 0x3d, 0x81, 0xc5, 0xf8, 0x14, 0xda, 0x65, 0x4c, 0x70, 0x11, 0x92,
0xa0, 0xd3, 0xa3, 0x23, 0x79, 0x3f, 0xc9, 0x9e, 0x74, 0x1f, 0xdd, 0xf2, 0xed, 0x70, 0xa4, 0x82,
0x77, 0x9f, 0x8e, 0xf0, 0x82, 0x16, 0xd0, 0x8a, 0xf9, 0xf7, 0xe9, 0x88, 0xa3, 0x8f, 0x60, 0x89,
0x4e, 0x60, 0x52, 0x62, 0xc7, 0x23, 0x7d, 0x79, 0xbe, 0x76, 0x6c, 0x8f, 0xd9, 0x3d, 0xd5, 0xe2,
0x4d, 0x7c, 0x85, 0x26, 0x45, 0x7d, 0x12, 0x21, 0x36, 0x24, 0x00, 0x71, 0xb0, 0x76, 0x3d, 0x62,
0xf7, 0x3c, 0x97, 0xcb, 0x27, 0x47, 0xe2, 0x8a, 0x29, 0xbb, 0xb4, 0xb4, 0x6d, 0xed, 0x94, 0x68,
0x35, 0x5a, 0x87, 0xdc, 0xc4, 0x85, 0x55, 0x57, 0xcf, 0xbf, 0x77, 0xd3, 0x57, 0x51, 0x0b, 0x4a,
0x03, 0x5f, 0xaa, 0x8f, 0x62, 0x50, 0x3c, 0x6f, 0x0c, 0x20, 0x62, 0x49, 0xcf, 0x2b, 0x43, 0x58,
0x3a, 0x4d, 0x79, 0x4a, 0x6d, 0xde, 0x4d, 0xd6, 0x66, 0x69, 0xf5, 0xed, 0x34, 0x7d, 0xe9, 0x22,
0x13, 0x75, 0x9c, 0x9a, 0xb6, 0x3f, 0x19, 0x90, 0x7b, 0x44, 0xed, 0x90, 0x8a, 0x37, 0x9a, 0xb5,
0x6b, 0x47, 0xb2, 0xb6, 0x9a, 0x7e, 0xf9, 0x94, 0x5a, 0xa7, 0x92, 0xb6, 0x02, 0x05, 0xd7, 0x17,
0x34, 0xf4, 0x89, 0xa7, 0xb2, 0xb6, 0x80, 0x27, 0xf3, 0x54, 0x07, 0x5e, 0x18, 0x90, 0x8b, 0x6e,
0x67, 0x17, 0xed, 0x40, 0xa4, 0xf5, 0xb8, 0x03, 0xa9, 0x46, 0xfe, 0x6e, 0x40, 0x01, 0x53, 0xce,
0x06, 0xe1, 0x1b, 0x7e, 0xa9, 0x1c, 0xbb, 0xed, 0x64, 0xff, 0xf2, 0x6d, 0x07, 0x81, 0xd9, 0x73,
0x7d, 0x7d, 0x2f, 0xc3, 0x6a, 0x8c, 0x1a, 0x90, 0x0f, 0xc8, 0xc8, 0x63, 0xc4, 0xd1, 0x8d, 0x72,
0x61, 0xea, 0x31, 0xdf, 0xf4, 0x47, 0x38, 0x06, 0xad, 0x2f, 0xec, 0xed, 0xd7, 0xe7, 0xa1, 0x9c,
0xf4, 0xfc, 0x99, 0x51, 0xff, 0xc5, 0x80, 0xe2, 0xd6, 0x57, 0x82, 0xfa, 0xea, 0x61, 0xf0, 0xb7,
0x74, 0x7e, 0x79, 0xfa, 0xc1, 0x5f, 0x3c, 0xf2, 0x96, 0x4f, 0xdb, 0xd4, 0x96, 0xf5, 0xf2, 0x55,
0xf5, 0xd2, 0xaf, 0xaf, 0xaa, 0x97, 0xbe, 0x1e, 0x57, 0x8d, 0x97, 0xe3, 0xaa, 0xf1, 0xf3, 0xb8,
0x6a, 0xfc, 0x36, 0xae, 0x1a, 0xbb, 0x39, 0x15, 0x9f, 0x77, 0xff, 0x0c, 0x00, 0x00, 0xff, 0xff,
0x92, 0x44, 0x63, 0xd8, 0x36, 0x12, 0x00, 0x00,
}

View file

@ -255,6 +255,9 @@ message NetworkAttachment {
// List of aliases by which a task is resolved in a network
repeated string aliases = 3;
// Map of all the driver options for this network
map<string,string> driver_opts = 4;
}
message Network {

View file

@ -96,7 +96,7 @@ type JoinResponse struct {
Members []*RaftMember `protobuf:"bytes,2,rep,name=members" json:"members,omitempty"`
// RemovedMembers is a list of members that have been removed from
// the cluster, so the new node can avoid communicating with them.
RemovedMembers []uint64 `protobuf:"varint,3,rep,packed,name=removed_members,json=removedMembers" json:"removed_members,omitempty"`
RemovedMembers []uint64 `protobuf:"varint,3,rep,name=removed_members,json=removedMembers" json:"removed_members,omitempty"`
}
func (m *JoinResponse) Reset() { *m = JoinResponse{} }
@ -1111,21 +1111,11 @@ func (m *JoinResponse) MarshalTo(dAtA []byte) (int, error) {
}
}
if len(m.RemovedMembers) > 0 {
dAtA3 := make([]byte, len(m.RemovedMembers)*10)
var j2 int
for _, num := range m.RemovedMembers {
for num >= 1<<7 {
dAtA3[j2] = uint8(uint64(num)&0x7f | 0x80)
num >>= 7
j2++
}
dAtA3[j2] = uint8(num)
j2++
dAtA[i] = 0x18
i++
i = encodeVarintRaft(dAtA, i, uint64(num))
}
dAtA[i] = 0x1a
i++
i = encodeVarintRaft(dAtA, i, uint64(j2))
i += copy(dAtA[i:], dAtA3[:j2])
}
return i, nil
}
@ -1149,11 +1139,11 @@ func (m *LeaveRequest) MarshalTo(dAtA []byte) (int, error) {
dAtA[i] = 0xa
i++
i = encodeVarintRaft(dAtA, i, uint64(m.Node.Size()))
n4, err := m.Node.MarshalTo(dAtA[i:])
n2, err := m.Node.MarshalTo(dAtA[i:])
if err != nil {
return 0, err
}
i += n4
i += n2
}
return i, nil
}
@ -1195,11 +1185,11 @@ func (m *ProcessRaftMessageRequest) MarshalTo(dAtA []byte) (int, error) {
dAtA[i] = 0xa
i++
i = encodeVarintRaft(dAtA, i, uint64(m.Message.Size()))
n5, err := m.Message.MarshalTo(dAtA[i:])
n3, err := m.Message.MarshalTo(dAtA[i:])
if err != nil {
return 0, err
}
i += n5
i += n3
}
return i, nil
}
@ -1325,11 +1315,11 @@ func (m *StoreAction) MarshalTo(dAtA []byte) (int, error) {
i = encodeVarintRaft(dAtA, i, uint64(m.Action))
}
if m.Target != nil {
nn6, err := m.Target.MarshalTo(dAtA[i:])
nn4, err := m.Target.MarshalTo(dAtA[i:])
if err != nil {
return 0, err
}
i += nn6
i += nn4
}
return i, nil
}
@ -1340,11 +1330,11 @@ func (m *StoreAction_Node) MarshalTo(dAtA []byte) (int, error) {
dAtA[i] = 0x12
i++
i = encodeVarintRaft(dAtA, i, uint64(m.Node.Size()))
n7, err := m.Node.MarshalTo(dAtA[i:])
n5, err := m.Node.MarshalTo(dAtA[i:])
if err != nil {
return 0, err
}
i += n7
i += n5
}
return i, nil
}
@ -1354,11 +1344,11 @@ func (m *StoreAction_Service) MarshalTo(dAtA []byte) (int, error) {
dAtA[i] = 0x1a
i++
i = encodeVarintRaft(dAtA, i, uint64(m.Service.Size()))
n8, err := m.Service.MarshalTo(dAtA[i:])
n6, err := m.Service.MarshalTo(dAtA[i:])
if err != nil {
return 0, err
}
i += n8
i += n6
}
return i, nil
}
@ -1368,11 +1358,11 @@ func (m *StoreAction_Task) MarshalTo(dAtA []byte) (int, error) {
dAtA[i] = 0x22
i++
i = encodeVarintRaft(dAtA, i, uint64(m.Task.Size()))
n9, err := m.Task.MarshalTo(dAtA[i:])
n7, err := m.Task.MarshalTo(dAtA[i:])
if err != nil {
return 0, err
}
i += n9
i += n7
}
return i, nil
}
@ -1382,11 +1372,11 @@ func (m *StoreAction_Network) MarshalTo(dAtA []byte) (int, error) {
dAtA[i] = 0x2a
i++
i = encodeVarintRaft(dAtA, i, uint64(m.Network.Size()))
n10, err := m.Network.MarshalTo(dAtA[i:])
n8, err := m.Network.MarshalTo(dAtA[i:])
if err != nil {
return 0, err
}
i += n10
i += n8
}
return i, nil
}
@ -1396,11 +1386,11 @@ func (m *StoreAction_Cluster) MarshalTo(dAtA []byte) (int, error) {
dAtA[i] = 0x32
i++
i = encodeVarintRaft(dAtA, i, uint64(m.Cluster.Size()))
n11, err := m.Cluster.MarshalTo(dAtA[i:])
n9, err := m.Cluster.MarshalTo(dAtA[i:])
if err != nil {
return 0, err
}
i += n11
i += n9
}
return i, nil
}
@ -1410,11 +1400,11 @@ func (m *StoreAction_Secret) MarshalTo(dAtA []byte) (int, error) {
dAtA[i] = 0x3a
i++
i = encodeVarintRaft(dAtA, i, uint64(m.Secret.Size()))
n12, err := m.Secret.MarshalTo(dAtA[i:])
n10, err := m.Secret.MarshalTo(dAtA[i:])
if err != nil {
return 0, err
}
i += n12
i += n10
}
return i, nil
}
@ -1424,11 +1414,11 @@ func (m *StoreAction_Resource) MarshalTo(dAtA []byte) (int, error) {
dAtA[i] = 0x42
i++
i = encodeVarintRaft(dAtA, i, uint64(m.Resource.Size()))
n13, err := m.Resource.MarshalTo(dAtA[i:])
n11, err := m.Resource.MarshalTo(dAtA[i:])
if err != nil {
return 0, err
}
i += n13
i += n11
}
return i, nil
}
@ -1438,11 +1428,11 @@ func (m *StoreAction_Extension) MarshalTo(dAtA []byte) (int, error) {
dAtA[i] = 0x4a
i++
i = encodeVarintRaft(dAtA, i, uint64(m.Extension.Size()))
n14, err := m.Extension.MarshalTo(dAtA[i:])
n12, err := m.Extension.MarshalTo(dAtA[i:])
if err != nil {
return 0, err
}
i += n14
i += n12
}
return i, nil
}
@ -1452,11 +1442,11 @@ func (m *StoreAction_Config) MarshalTo(dAtA []byte) (int, error) {
dAtA[i] = 0x52
i++
i = encodeVarintRaft(dAtA, i, uint64(m.Config.Size()))
n15, err := m.Config.MarshalTo(dAtA[i:])
n13, err := m.Config.MarshalTo(dAtA[i:])
if err != nil {
return 0, err
}
i += n15
i += n13
}
return i, nil
}
@ -1814,11 +1804,9 @@ func (m *JoinResponse) Size() (n int) {
}
}
if len(m.RemovedMembers) > 0 {
l = 0
for _, e := range m.RemovedMembers {
l += sovRaft(uint64(e))
n += 1 + sovRaft(uint64(e))
}
n += 1 + sovRaft(uint64(l)) + l
}
return n
}
@ -2525,7 +2513,24 @@ func (m *JoinResponse) Unmarshal(dAtA []byte) error {
}
iNdEx = postIndex
case 3:
if wireType == 2 {
if wireType == 0 {
var v uint64
for shift := uint(0); ; shift += 7 {
if shift >= 64 {
return ErrIntOverflowRaft
}
if iNdEx >= l {
return io.ErrUnexpectedEOF
}
b := dAtA[iNdEx]
iNdEx++
v |= (uint64(b) & 0x7F) << shift
if b < 0x80 {
break
}
}
m.RemovedMembers = append(m.RemovedMembers, v)
} else if wireType == 2 {
var packedLen int
for shift := uint(0); ; shift += 7 {
if shift >= 64 {
@ -2566,23 +2571,6 @@ func (m *JoinResponse) Unmarshal(dAtA []byte) error {
}
m.RemovedMembers = append(m.RemovedMembers, v)
}
} else if wireType == 0 {
var v uint64
for shift := uint(0); ; shift += 7 {
if shift >= 64 {
return ErrIntOverflowRaft
}
if iNdEx >= l {
return io.ErrUnexpectedEOF
}
b := dAtA[iNdEx]
iNdEx++
v |= (uint64(b) & 0x7F) << shift
if b < 0x80 {
break
}
}
m.RemovedMembers = append(m.RemovedMembers, v)
} else {
return fmt.Errorf("proto: wrong wireType = %d for field RemovedMembers", wireType)
}
@ -3586,65 +3574,65 @@ var (
func init() { proto.RegisterFile("raft.proto", fileDescriptorRaft) }
var fileDescriptorRaft = []byte{
// 949 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x96, 0x4f, 0x6f, 0x1b, 0x45,
0x18, 0xc6, 0x77, 0xed, 0xad, 0x9d, 0xbc, 0x6e, 0xe2, 0x68, 0x42, 0xc2, 0x76, 0x29, 0x8e, 0xbb,
0x45, 0xaa, 0x5b, 0x91, 0xb5, 0x30, 0x48, 0xa0, 0x42, 0x0f, 0xb1, 0x63, 0xc9, 0xa6, 0xad, 0x53,
0x6d, 0x12, 0xe8, 0x2d, 0xac, 0x77, 0x27, 0xee, 0x62, 0x7b, 0xc7, 0xcc, 0x8c, 0x1d, 0xb8, 0xa0,
0x1e, 0x51, 0xae, 0x48, 0xc0, 0xa5, 0x27, 0x38, 0xf7, 0x03, 0xf0, 0x01, 0x50, 0xc4, 0x89, 0x1b,
0x9c, 0x22, 0xea, 0x0f, 0x00, 0x5f, 0x01, 0xcd, 0xec, 0xae, 0x1d, 0x9c, 0xb5, 0x9b, 0x8b, 0x3d,
0x9e, 0xf9, 0x3d, 0xef, 0xf3, 0xce, 0xbf, 0x77, 0x0c, 0x40, 0x9d, 0x63, 0x6e, 0x0d, 0x28, 0xe1,
0x04, 0x21, 0x8f, 0xb8, 0x5d, 0x4c, 0x2d, 0x76, 0xe2, 0xd0, 0x7e, 0xd7, 0xe7, 0xd6, 0xe8, 0x3d,
0x63, 0x85, 0xb4, 0xbf, 0xc4, 0x2e, 0x67, 0x21, 0x62, 0xe4, 0xf8, 0x37, 0x03, 0x1c, 0xff, 0xd8,
0xee, 0xf8, 0xfc, 0xd9, 0xb0, 0x6d, 0xb9, 0xa4, 0x5f, 0x76, 0x09, 0xc5, 0x84, 0x95, 0x31, 0x77,
0xbd, 0xb2, 0x08, 0x29, 0x3f, 0x06, 0xed, 0xf2, 0x34, 0xbc, 0xf1, 0x46, 0x87, 0x74, 0x88, 0x6c,
0x96, 0x45, 0x2b, 0xea, 0x5d, 0x1f, 0xf4, 0x86, 0x1d, 0x3f, 0x28, 0x87, 0x5f, 0x61, 0xa7, 0xf9,
0x52, 0x05, 0xb0, 0x9d, 0x63, 0xfe, 0x18, 0xf7, 0xdb, 0x98, 0xa2, 0xdb, 0x90, 0x15, 0x71, 0x8e,
0x7c, 0x4f, 0x57, 0x8b, 0x6a, 0x49, 0xab, 0xc2, 0xf8, 0x7c, 0x2b, 0x23, 0x80, 0xe6, 0xae, 0x9d,
0x11, 0x43, 0x4d, 0x4f, 0x40, 0x01, 0xf1, 0xb0, 0x80, 0x52, 0x45, 0xb5, 0xb4, 0x1c, 0x42, 0x2d,
0xe2, 0x61, 0x01, 0x89, 0xa1, 0xa6, 0x87, 0x10, 0x68, 0x8e, 0xe7, 0x51, 0x3d, 0x2d, 0x08, 0x5b,
0xb6, 0x51, 0x15, 0x32, 0x8c, 0x3b, 0x7c, 0xc8, 0x74, 0xad, 0xa8, 0x96, 0x72, 0x95, 0x77, 0xac,
0xcb, 0xeb, 0x60, 0x4d, 0xb3, 0xd9, 0x97, 0x6c, 0x55, 0x3b, 0x3b, 0xdf, 0x52, 0xec, 0x48, 0x69,
0xde, 0x82, 0xdc, 0xa7, 0xc4, 0x0f, 0x6c, 0xfc, 0xd5, 0x10, 0x33, 0x3e, 0xb1, 0x51, 0xa7, 0x36,
0xe6, 0x0f, 0x2a, 0x5c, 0x0f, 0x19, 0x36, 0x20, 0x01, 0xc3, 0x57, 0x9b, 0xd5, 0x47, 0x90, 0xed,
0x4b, 0x5b, 0xa6, 0xa7, 0x8a, 0xe9, 0x52, 0xae, 0x52, 0x58, 0x9c, 0x9d, 0x1d, 0xe3, 0xe8, 0x0e,
0xe4, 0x29, 0xee, 0x93, 0x11, 0xf6, 0x8e, 0xe2, 0x08, 0xe9, 0x62, 0xba, 0xa4, 0xd9, 0xab, 0x51,
0x77, 0x28, 0x60, 0x66, 0x15, 0xae, 0x3f, 0xc2, 0xce, 0x08, 0xc7, 0xc9, 0x57, 0x40, 0x13, 0xab,
0x25, 0x93, 0x7a, 0xbd, 0x9f, 0x64, 0xcd, 0x3c, 0xac, 0x44, 0x31, 0xc2, 0xc9, 0x99, 0x8f, 0xe0,
0xc6, 0x13, 0x4a, 0x5c, 0xcc, 0x58, 0xc8, 0x32, 0xe6, 0x74, 0x26, 0x0e, 0x77, 0xc5, 0xa4, 0x64,
0x4f, 0x64, 0x92, 0xb7, 0xc2, 0xe3, 0x62, 0xc5, 0x60, 0x3c, 0x7e, 0x5f, 0x7b, 0xfe, 0xa3, 0xa9,
0x98, 0x37, 0xc1, 0x48, 0x8a, 0x16, 0x79, 0x7d, 0x02, 0x1b, 0x36, 0x66, 0xa4, 0x37, 0xc2, 0x3b,
0x9e, 0x47, 0x05, 0x14, 0xf9, 0x5c, 0x65, 0x85, 0xcd, 0x77, 0x61, 0x73, 0x56, 0x1d, 0x6d, 0x50,
0xd2, 0x2e, 0xf6, 0x60, 0xbd, 0x19, 0x70, 0x4c, 0x03, 0xa7, 0x27, 0xe2, 0xc4, 0x4e, 0x9b, 0x90,
0x9a, 0x98, 0x64, 0xc6, 0xe7, 0x5b, 0xa9, 0xe6, 0xae, 0x9d, 0xf2, 0x3d, 0xf4, 0x00, 0x32, 0x8e,
0xcb, 0x7d, 0x12, 0x44, 0xbb, 0xb7, 0x95, 0xb4, 0x9a, 0xfb, 0x9c, 0x50, 0xbc, 0x23, 0xb1, 0xf8,
0x58, 0x85, 0x22, 0xf3, 0x37, 0x0d, 0x72, 0x17, 0x46, 0xd1, 0xc7, 0x93, 0x70, 0xc2, 0x6a, 0xb5,
0x72, 0xfb, 0x35, 0xe1, 0x1e, 0xfa, 0x81, 0x17, 0x07, 0x43, 0x56, 0xb4, 0xaf, 0x29, 0xb9, 0xe4,
0x7a, 0x92, 0x54, 0xdc, 0x96, 0x86, 0x12, 0xee, 0x29, 0xfa, 0x10, 0xb2, 0x0c, 0xd3, 0x91, 0xef,
0x62, 0x79, 0x5d, 0x72, 0x95, 0xb7, 0x12, 0xdd, 0x42, 0xa4, 0xa1, 0xd8, 0x31, 0x2d, 0x8c, 0xb8,
0xc3, 0xba, 0xd1, 0x75, 0x4a, 0x34, 0x3a, 0x70, 0x58, 0x57, 0x18, 0x09, 0x4e, 0x18, 0x05, 0x98,
0x9f, 0x10, 0xda, 0xd5, 0xaf, 0xcd, 0x37, 0x6a, 0x85, 0x88, 0x30, 0x8a, 0x68, 0x21, 0x74, 0x7b,
0x43, 0xc6, 0x31, 0xd5, 0x33, 0xf3, 0x85, 0xb5, 0x10, 0x11, 0xc2, 0x88, 0x46, 0x1f, 0x40, 0x86,
0x61, 0x97, 0x62, 0xae, 0x67, 0xa5, 0xce, 0x48, 0x9e, 0x99, 0x20, 0x1a, 0xe2, 0x92, 0xcb, 0x16,
0xba, 0x0f, 0x4b, 0x14, 0x33, 0x32, 0xa4, 0x2e, 0xd6, 0x97, 0xa4, 0xee, 0x66, 0xe2, 0xe5, 0x88,
0x98, 0x86, 0x62, 0x4f, 0x78, 0xf4, 0x00, 0x96, 0xf1, 0xd7, 0x1c, 0x07, 0x4c, 0x6c, 0xde, 0xb2,
0x14, 0xbf, 0x9d, 0x24, 0xae, 0xc7, 0x50, 0x43, 0xb1, 0xa7, 0x0a, 0x91, 0xb0, 0x4b, 0x82, 0x63,
0xbf, 0xa3, 0xc3, 0xfc, 0x84, 0x6b, 0x92, 0x10, 0x09, 0x87, 0x6c, 0x75, 0x09, 0x32, 0xdc, 0xa1,
0x1d, 0xcc, 0xef, 0xfd, 0xab, 0x42, 0x7e, 0xe6, 0x5c, 0xa0, 0x3b, 0x90, 0x3d, 0x6c, 0x3d, 0x6c,
0xed, 0x7d, 0xde, 0x5a, 0x53, 0x0c, 0xe3, 0xf4, 0x45, 0x71, 0x73, 0x86, 0x38, 0x0c, 0xba, 0x01,
0x39, 0x09, 0x50, 0x05, 0xd6, 0xf7, 0x0f, 0xf6, 0xec, 0xfa, 0xd1, 0x4e, 0xed, 0xa0, 0xb9, 0xd7,
0x3a, 0xaa, 0xd9, 0xf5, 0x9d, 0x83, 0xfa, 0x9a, 0x6a, 0xdc, 0x38, 0x7d, 0x51, 0xdc, 0x98, 0x11,
0xd5, 0x28, 0x76, 0x38, 0xbe, 0xa4, 0x39, 0x7c, 0xb2, 0x2b, 0x34, 0xa9, 0x44, 0xcd, 0xe1, 0xc0,
0x4b, 0xd2, 0xd8, 0xf5, 0xc7, 0x7b, 0x9f, 0xd5, 0xd7, 0xd2, 0x89, 0x1a, 0x5b, 0x16, 0x31, 0xe3,
0xcd, 0xef, 0x7e, 0x2e, 0x28, 0xbf, 0xfe, 0x52, 0x98, 0x9d, 0x5d, 0xe5, 0xfb, 0x14, 0x68, 0xe2,
0x86, 0xa2, 0x53, 0x15, 0xd0, 0xe5, 0xe2, 0x81, 0xb6, 0x93, 0x56, 0x70, 0x6e, 0xc9, 0x32, 0xac,
0xab, 0xe2, 0x51, 0x4d, 0xda, 0xf8, 0xfd, 0xe5, 0x3f, 0x3f, 0xa5, 0xf2, 0xb0, 0x22, 0xf9, 0xed,
0xbe, 0x13, 0x38, 0x1d, 0x4c, 0xd1, 0xb7, 0xb0, 0xfa, 0xff, 0x62, 0x83, 0xee, 0xce, 0x3b, 0x42,
0x97, 0xca, 0x99, 0x71, 0xef, 0x2a, 0xe8, 0x42, 0xff, 0xca, 0x9f, 0x2a, 0xac, 0x4e, 0x8b, 0x37,
0x7b, 0xe6, 0x0f, 0xd0, 0x17, 0xa0, 0x89, 0x67, 0x09, 0x25, 0x96, 0xa6, 0x0b, 0x8f, 0x9a, 0x51,
0x9c, 0x0f, 0x2c, 0x9e, 0xb4, 0x0b, 0xd7, 0xe4, 0xe3, 0x80, 0x12, 0x23, 0x5c, 0x7c, 0x7b, 0x8c,
0x5b, 0x0b, 0x88, 0x85, 0x26, 0x55, 0xfd, 0xec, 0x55, 0x41, 0xf9, 0xeb, 0x55, 0x41, 0x79, 0x3e,
0x2e, 0xa8, 0x67, 0xe3, 0x82, 0xfa, 0xc7, 0xb8, 0xa0, 0xfe, 0x3d, 0x2e, 0xa8, 0x4f, 0xd3, 0x4f,
0xb5, 0x76, 0x46, 0xfe, 0xaf, 0x78, 0xff, 0xbf, 0x00, 0x00, 0x00, 0xff, 0xff, 0x70, 0x31, 0xfd,
0xe7, 0xef, 0x08, 0x00, 0x00,
// 953 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x96, 0x4d, 0x6f, 0x1b, 0x45,
0x18, 0xc7, 0x77, 0xd7, 0x5b, 0x27, 0x79, 0xdc, 0xbc, 0x68, 0x42, 0xc2, 0x76, 0x29, 0x8e, 0xbb,
0x45, 0xc2, 0x2d, 0x64, 0x2d, 0x0c, 0x12, 0xa8, 0xd0, 0x43, 0xec, 0x58, 0xb2, 0x69, 0xeb, 0x54,
0x9b, 0x04, 0x7a, 0x0b, 0xeb, 0xdd, 0x89, 0xbb, 0xd8, 0xde, 0x31, 0x33, 0x63, 0x07, 0x2e, 0xa8,
0x47, 0x94, 0x2b, 0x07, 0x10, 0x52, 0x4f, 0x70, 0xee, 0x07, 0xe0, 0x03, 0xa0, 0x88, 0x13, 0x37,
0x38, 0x45, 0xd4, 0x1f, 0x00, 0xbe, 0x02, 0x9a, 0xd9, 0x5d, 0x3b, 0x38, 0x6b, 0x37, 0x17, 0x7b,
0x3c, 0xf3, 0xfb, 0x3f, 0xff, 0x79, 0xe6, 0xe5, 0x19, 0x03, 0x50, 0xf7, 0x98, 0xdb, 0x7d, 0x4a,
0x38, 0x41, 0xc8, 0x27, 0x5e, 0x07, 0x53, 0x9b, 0x9d, 0xb8, 0xb4, 0xd7, 0x09, 0xb8, 0x3d, 0x7c,
0xcf, 0x5c, 0x26, 0xad, 0x2f, 0xb1, 0xc7, 0x59, 0x84, 0x98, 0x39, 0xfe, 0x4d, 0x1f, 0x27, 0x3f,
0xb6, 0xdb, 0x01, 0x7f, 0x3a, 0x68, 0xd9, 0x1e, 0xe9, 0x95, 0x3c, 0x42, 0x31, 0x61, 0x25, 0xcc,
0x3d, 0xbf, 0x24, 0x42, 0xca, 0x8f, 0x7e, 0xab, 0x34, 0x09, 0x6f, 0xbe, 0xd6, 0x26, 0x6d, 0x22,
0x9b, 0x25, 0xd1, 0x8a, 0x7b, 0xd7, 0xfb, 0xdd, 0x41, 0x3b, 0x08, 0x4b, 0xd1, 0x57, 0xd4, 0x69,
0xbd, 0x50, 0x01, 0x1c, 0xf7, 0x98, 0x3f, 0xc2, 0xbd, 0x16, 0xa6, 0xe8, 0x36, 0x2c, 0x88, 0x38,
0x47, 0x81, 0x6f, 0xa8, 0x05, 0xb5, 0xa8, 0x57, 0x60, 0x74, 0xbe, 0x95, 0x15, 0x40, 0x63, 0xd7,
0xc9, 0x8a, 0xa1, 0x86, 0x2f, 0xa0, 0x90, 0xf8, 0x58, 0x40, 0x5a, 0x41, 0x2d, 0x2e, 0x45, 0x50,
0x93, 0xf8, 0x58, 0x40, 0x62, 0xa8, 0xe1, 0x23, 0x04, 0xba, 0xeb, 0xfb, 0xd4, 0xc8, 0x08, 0xc2,
0x91, 0x6d, 0x54, 0x81, 0x2c, 0xe3, 0x2e, 0x1f, 0x30, 0x43, 0x2f, 0xa8, 0xc5, 0x5c, 0xf9, 0x2d,
0xfb, 0xf2, 0x3a, 0xd8, 0x93, 0xd9, 0xec, 0x4b, 0xb6, 0xa2, 0x9f, 0x9d, 0x6f, 0x29, 0x4e, 0xac,
0xb4, 0x6e, 0x41, 0xee, 0x53, 0x12, 0x84, 0x0e, 0xfe, 0x6a, 0x80, 0x19, 0x1f, 0xdb, 0xa8, 0x13,
0x1b, 0xeb, 0x27, 0x15, 0xae, 0x47, 0x0c, 0xeb, 0x93, 0x90, 0xe1, 0xab, 0x65, 0xf5, 0x11, 0x2c,
0xf4, 0xa4, 0x2d, 0x33, 0xb4, 0x42, 0xa6, 0x98, 0x2b, 0xe7, 0xe7, 0xcf, 0xce, 0x49, 0x70, 0xf4,
0x0e, 0xac, 0x52, 0xdc, 0x23, 0x43, 0xec, 0x1f, 0x25, 0x11, 0x32, 0x85, 0x4c, 0x51, 0xaf, 0x68,
0x6b, 0x8a, 0xb3, 0x12, 0x0f, 0x45, 0x22, 0x66, 0x55, 0xe0, 0xfa, 0x43, 0xec, 0x0e, 0x71, 0x92,
0x40, 0x19, 0x74, 0xb1, 0x62, 0x72, 0x62, 0xaf, 0xf6, 0x94, 0xac, 0xb5, 0x0a, 0xcb, 0x71, 0x8c,
0x28, 0x41, 0xeb, 0x21, 0xdc, 0x78, 0x4c, 0x89, 0x87, 0x19, 0x8b, 0x58, 0xc6, 0xdc, 0xf6, 0xd8,
0xe1, 0x8e, 0x48, 0x4c, 0xf6, 0xc4, 0x26, 0xab, 0x76, 0x74, 0x64, 0xec, 0x04, 0x4c, 0xc6, 0xef,
0xe9, 0xcf, 0x7e, 0xb0, 0x14, 0xeb, 0x26, 0x98, 0x69, 0xd1, 0x62, 0xaf, 0x4f, 0x60, 0xc3, 0xc1,
0x8c, 0x74, 0x87, 0x78, 0xc7, 0xf7, 0xa9, 0x80, 0x62, 0x9f, 0xab, 0xac, 0xb2, 0xf5, 0x2e, 0x6c,
0x4e, 0xab, 0xe3, 0x4d, 0x4a, 0xdb, 0xc9, 0x2e, 0xac, 0x37, 0x42, 0x8e, 0x69, 0xe8, 0x76, 0x45,
0x9c, 0xc4, 0x69, 0x13, 0xb4, 0xb1, 0x49, 0x76, 0x74, 0xbe, 0xa5, 0x35, 0x76, 0x1d, 0x2d, 0xf0,
0xd1, 0x7d, 0xc8, 0xba, 0x1e, 0x0f, 0x48, 0x18, 0xef, 0xe0, 0x56, 0xda, 0x6a, 0xee, 0x73, 0x42,
0xf1, 0x8e, 0xc4, 0x92, 0xa3, 0x15, 0x89, 0xac, 0xdf, 0x74, 0xc8, 0x5d, 0x18, 0x45, 0x1f, 0x8f,
0xc3, 0x09, 0xab, 0x95, 0xf2, 0xed, 0x57, 0x84, 0x7b, 0x10, 0x84, 0x7e, 0x12, 0x0c, 0xd9, 0xf1,
0xbe, 0x6a, 0x72, 0xc9, 0x8d, 0x34, 0xa9, 0xb8, 0x31, 0x75, 0x25, 0xda, 0x53, 0xf4, 0x21, 0x2c,
0x30, 0x4c, 0x87, 0x81, 0x87, 0xe5, 0x95, 0xc9, 0x95, 0xdf, 0x48, 0x75, 0x8b, 0x90, 0xba, 0xe2,
0x24, 0xb4, 0x30, 0xe2, 0x2e, 0xeb, 0xc4, 0x57, 0x2a, 0xd5, 0xe8, 0xc0, 0x65, 0x1d, 0x61, 0x24,
0x38, 0x61, 0x14, 0x62, 0x7e, 0x42, 0x68, 0xc7, 0xb8, 0x36, 0xdb, 0xa8, 0x19, 0x21, 0xc2, 0x28,
0xa6, 0x85, 0xd0, 0xeb, 0x0e, 0x18, 0xc7, 0xd4, 0xc8, 0xce, 0x16, 0x56, 0x23, 0x44, 0x08, 0x63,
0x1a, 0x7d, 0x00, 0x59, 0x86, 0x3d, 0x8a, 0xb9, 0xb1, 0x20, 0x75, 0x66, 0x7a, 0x66, 0x82, 0xa8,
0x8b, 0x8b, 0x2e, 0x5b, 0xe8, 0x1e, 0x2c, 0x52, 0xcc, 0xc8, 0x80, 0x7a, 0xd8, 0x58, 0x94, 0xba,
0x9b, 0xa9, 0x97, 0x23, 0x66, 0xea, 0x8a, 0x33, 0xe6, 0xd1, 0x7d, 0x58, 0xc2, 0x5f, 0x73, 0x1c,
0x32, 0xb1, 0x79, 0x4b, 0x52, 0xfc, 0x66, 0x9a, 0xb8, 0x96, 0x40, 0x75, 0xc5, 0x99, 0x28, 0xc4,
0x84, 0x3d, 0x12, 0x1e, 0x07, 0x6d, 0x03, 0x66, 0x4f, 0xb8, 0x2a, 0x09, 0x31, 0xe1, 0x88, 0xad,
0x2c, 0x42, 0x96, 0xbb, 0xb4, 0x8d, 0xf9, 0xdd, 0x7f, 0x55, 0x58, 0x9d, 0x3a, 0x17, 0xe8, 0x6d,
0x58, 0x38, 0x6c, 0x3e, 0x68, 0xee, 0x7d, 0xde, 0x5c, 0x53, 0x4c, 0xf3, 0xf4, 0x79, 0x61, 0x73,
0x8a, 0x38, 0x0c, 0x3b, 0x21, 0x39, 0x09, 0x51, 0x19, 0xd6, 0xf7, 0x0f, 0xf6, 0x9c, 0xda, 0xd1,
0x4e, 0xf5, 0xa0, 0xb1, 0xd7, 0x3c, 0xaa, 0x3a, 0xb5, 0x9d, 0x83, 0xda, 0x9a, 0x6a, 0xde, 0x38,
0x7d, 0x5e, 0xd8, 0x98, 0x12, 0x55, 0x29, 0x76, 0x39, 0xbe, 0xa4, 0x39, 0x7c, 0xbc, 0x2b, 0x34,
0x5a, 0xaa, 0xe6, 0xb0, 0xef, 0xa7, 0x69, 0x9c, 0xda, 0xa3, 0xbd, 0xcf, 0x6a, 0x6b, 0x99, 0x54,
0x8d, 0x23, 0x8b, 0x98, 0xf9, 0xfa, 0x77, 0x3f, 0xe7, 0x95, 0x5f, 0x7f, 0xc9, 0x4f, 0x67, 0x57,
0xfe, 0x5e, 0x03, 0x5d, 0xdc, 0x50, 0x74, 0xaa, 0x02, 0xba, 0x5c, 0x3c, 0xd0, 0x76, 0xda, 0x0a,
0xce, 0x2c, 0x59, 0xa6, 0x7d, 0x55, 0x3c, 0xae, 0x49, 0x1b, 0xbf, 0xbf, 0xf8, 0xe7, 0x47, 0x6d,
0x15, 0x96, 0x25, 0xbf, 0xdd, 0x73, 0x43, 0xb7, 0x8d, 0x29, 0xfa, 0x16, 0x56, 0xfe, 0x5f, 0x6c,
0xd0, 0x9d, 0x59, 0x47, 0xe8, 0x52, 0x39, 0x33, 0xef, 0x5e, 0x05, 0x9d, 0xeb, 0x5f, 0xfe, 0x53,
0x85, 0x95, 0x49, 0xf1, 0x66, 0x4f, 0x83, 0x3e, 0xfa, 0x02, 0x74, 0xf1, 0x34, 0xa1, 0xd4, 0xd2,
0x74, 0xe1, 0x61, 0x33, 0x0b, 0xb3, 0x81, 0xf9, 0x49, 0x7b, 0x70, 0x4d, 0x3e, 0x0e, 0x28, 0x35,
0xc2, 0xc5, 0xb7, 0xc7, 0xbc, 0x35, 0x87, 0x98, 0x6b, 0x52, 0x31, 0xce, 0x5e, 0xe6, 0x95, 0xbf,
0x5e, 0xe6, 0x95, 0x67, 0xa3, 0xbc, 0x7a, 0x36, 0xca, 0xab, 0x7f, 0x8c, 0xf2, 0xea, 0xdf, 0xa3,
0xbc, 0xfa, 0x24, 0xf3, 0x44, 0x6f, 0x65, 0xe5, 0x7f, 0x8b, 0xf7, 0xff, 0x0b, 0x00, 0x00, 0xff,
0xff, 0x9a, 0xef, 0x6e, 0xdb, 0xf3, 0x08, 0x00, 0x00,
}

View file

@ -66,7 +66,7 @@ message JoinResponse {
// RemovedMembers is a list of members that have been removed from
// the cluster, so the new node can avoid communicating with them.
repeated uint64 removed_members = 3;
repeated uint64 removed_members = 3 [packed=false];
}
message LeaveRequest {

View file

@ -61,7 +61,7 @@ func (*StoreSnapshot) Descriptor() ([]byte, []int) { return fileDescriptorSnapsh
// ClusterSnapshot stores cluster membership information in snapshots.
type ClusterSnapshot struct {
Members []*RaftMember `protobuf:"bytes,1,rep,name=members" json:"members,omitempty"`
Removed []uint64 `protobuf:"varint,2,rep,packed,name=removed" json:"removed,omitempty"`
Removed []uint64 `protobuf:"varint,2,rep,name=removed" json:"removed,omitempty"`
}
func (m *ClusterSnapshot) Reset() { *m = ClusterSnapshot{} }
@ -371,21 +371,11 @@ func (m *ClusterSnapshot) MarshalTo(dAtA []byte) (int, error) {
}
}
if len(m.Removed) > 0 {
dAtA2 := make([]byte, len(m.Removed)*10)
var j1 int
for _, num := range m.Removed {
for num >= 1<<7 {
dAtA2[j1] = uint8(uint64(num)&0x7f | 0x80)
num >>= 7
j1++
}
dAtA2[j1] = uint8(num)
j1++
dAtA[i] = 0x10
i++
i = encodeVarintSnapshot(dAtA, i, uint64(num))
}
dAtA[i] = 0x12
i++
i = encodeVarintSnapshot(dAtA, i, uint64(j1))
i += copy(dAtA[i:], dAtA2[:j1])
}
return i, nil
}
@ -413,19 +403,19 @@ func (m *Snapshot) MarshalTo(dAtA []byte) (int, error) {
dAtA[i] = 0x12
i++
i = encodeVarintSnapshot(dAtA, i, uint64(m.Membership.Size()))
n3, err := m.Membership.MarshalTo(dAtA[i:])
n1, err := m.Membership.MarshalTo(dAtA[i:])
if err != nil {
return 0, err
}
i += n3
i += n1
dAtA[i] = 0x1a
i++
i = encodeVarintSnapshot(dAtA, i, uint64(m.Store.Size()))
n4, err := m.Store.MarshalTo(dAtA[i:])
n2, err := m.Store.MarshalTo(dAtA[i:])
if err != nil {
return 0, err
}
i += n4
i += n2
return i, nil
}
@ -527,11 +517,9 @@ func (m *ClusterSnapshot) Size() (n int) {
}
}
if len(m.Removed) > 0 {
l = 0
for _, e := range m.Removed {
l += sovSnapshot(uint64(e))
n += 1 + sovSnapshot(uint64(e))
}
n += 1 + sovSnapshot(uint64(l)) + l
}
return n
}
@ -1001,7 +989,24 @@ func (m *ClusterSnapshot) Unmarshal(dAtA []byte) error {
}
iNdEx = postIndex
case 2:
if wireType == 2 {
if wireType == 0 {
var v uint64
for shift := uint(0); ; shift += 7 {
if shift >= 64 {
return ErrIntOverflowSnapshot
}
if iNdEx >= l {
return io.ErrUnexpectedEOF
}
b := dAtA[iNdEx]
iNdEx++
v |= (uint64(b) & 0x7F) << shift
if b < 0x80 {
break
}
}
m.Removed = append(m.Removed, v)
} else if wireType == 2 {
var packedLen int
for shift := uint(0); ; shift += 7 {
if shift >= 64 {
@ -1042,23 +1047,6 @@ func (m *ClusterSnapshot) Unmarshal(dAtA []byte) error {
}
m.Removed = append(m.Removed, v)
}
} else if wireType == 0 {
var v uint64
for shift := uint(0); ; shift += 7 {
if shift >= 64 {
return ErrIntOverflowSnapshot
}
if iNdEx >= l {
return io.ErrUnexpectedEOF
}
b := dAtA[iNdEx]
iNdEx++
v |= (uint64(b) & 0x7F) << shift
if b < 0x80 {
break
}
}
m.Removed = append(m.Removed, v)
} else {
return fmt.Errorf("proto: wrong wireType = %d for field Removed", wireType)
}
@ -1320,35 +1308,35 @@ var (
func init() { proto.RegisterFile("snapshot.proto", fileDescriptorSnapshot) }
var fileDescriptorSnapshot = []byte{
// 466 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x93, 0x3f, 0x6f, 0x13, 0x4d,
0x10, 0x87, 0xbd, 0xfe, 0x77, 0xce, 0x44, 0xc9, 0xfb, 0xb2, 0xa2, 0x58, 0x19, 0x38, 0x8c, 0xa1,
0x70, 0x75, 0x80, 0x41, 0x02, 0x21, 0x85, 0x22, 0x11, 0x05, 0x05, 0x29, 0xd6, 0x28, 0xa2, 0x3d,
0x9f, 0xc7, 0xce, 0x71, 0xf8, 0xd6, 0xda, 0xd9, 0x38, 0x94, 0xf0, 0xed, 0x5c, 0x52, 0x52, 0x21,
0xe2, 0x86, 0xaf, 0x81, 0x76, 0xf7, 0xee, 0xb0, 0xc4, 0x99, 0x6e, 0x6d, 0x3d, 0xcf, 0xcc, 0x6f,
0xf7, 0x66, 0xe0, 0x98, 0xf2, 0x78, 0x45, 0x97, 0xca, 0x44, 0x2b, 0xad, 0x8c, 0xe2, 0x7c, 0xa6,
0x92, 0x0c, 0x75, 0x44, 0xd7, 0xb1, 0x5e, 0x66, 0xa9, 0x89, 0xd6, 0x4f, 0xfb, 0x47, 0x6a, 0xfa,
0x11, 0x13, 0x43, 0x1e, 0xe9, 0x83, 0x8e, 0xe7, 0x05, 0xde, 0xbf, 0xbd, 0x50, 0x0b, 0xe5, 0x8e,
0x8f, 0xed, 0xc9, 0xff, 0x3b, 0xfc, 0xda, 0x86, 0xa3, 0x89, 0x51, 0x1a, 0x27, 0x45, 0x71, 0x1e,
0x41, 0x27, 0x57, 0x33, 0x24, 0xc1, 0x06, 0xad, 0xd1, 0xe1, 0x58, 0x44, 0x7f, 0xb7, 0x89, 0xce,
0xd5, 0x0c, 0xa5, 0xc7, 0xf8, 0x0b, 0xe8, 0x11, 0xea, 0x75, 0x9a, 0x20, 0x89, 0xa6, 0x53, 0xee,
0xd4, 0x29, 0x13, 0xcf, 0xc8, 0x0a, 0xb6, 0x62, 0x8e, 0xe6, 0x5a, 0xe9, 0x8c, 0x44, 0x6b, 0xbf,
0x78, 0xee, 0x19, 0x59, 0xc1, 0x36, 0xa1, 0x89, 0x29, 0x23, 0xd1, 0xde, 0x9f, 0xf0, 0x7d, 0x4c,
0x99, 0xf4, 0x98, 0x6d, 0x94, 0x7c, 0xba, 0x22, 0x83, 0x9a, 0x44, 0x67, 0x7f, 0xa3, 0x33, 0xcf,
0xc8, 0x0a, 0xe6, 0xcf, 0x21, 0x20, 0x4c, 0x34, 0x1a, 0x12, 0x5d, 0xe7, 0xf5, 0xeb, 0x6f, 0x66,
0x11, 0x59, 0xa2, 0xfc, 0x15, 0x1c, 0x68, 0x24, 0x75, 0xa5, 0xed, 0x8b, 0x04, 0xce, 0xbb, 0x5b,
0xe7, 0xc9, 0x02, 0x92, 0x7f, 0x70, 0x7e, 0x02, 0x80, 0x9f, 0x0d, 0xe6, 0x94, 0xaa, 0x9c, 0x44,
0xcf, 0xc9, 0xf7, 0xea, 0xe4, 0x37, 0x25, 0x25, 0x77, 0x04, 0x1b, 0x38, 0x51, 0xf9, 0x3c, 0x5d,
0x90, 0x38, 0xd8, 0x1f, 0xf8, 0xcc, 0x21, 0xb2, 0x44, 0x87, 0x08, 0xff, 0x15, 0x77, 0xaf, 0x86,
0xe0, 0x25, 0x04, 0x4b, 0x5c, 0x4e, 0xed, 0x8b, 0xf9, 0x31, 0x08, 0x6b, 0x6f, 0x10, 0xcf, 0xcd,
0x3b, 0x87, 0xc9, 0x12, 0xe7, 0x02, 0x02, 0x8d, 0x4b, 0xb5, 0xc6, 0x99, 0x9b, 0x86, 0xb6, 0x2c,
0x7f, 0x0e, 0x7f, 0x31, 0xe8, 0x55, 0x0d, 0x5e, 0x43, 0xb0, 0x46, 0x6d, 0x53, 0x0b, 0x36, 0x60,
0xa3, 0xe3, 0xf1, 0xa3, 0xda, 0xa7, 0x2d, 0x27, 0xfe, 0xc2, 0xb3, 0xb2, 0x94, 0xf8, 0x5b, 0x80,
0xa2, 0xe3, 0x65, 0xba, 0x12, 0xcd, 0x01, 0x1b, 0x1d, 0x8e, 0x1f, 0xfe, 0xe3, 0xab, 0x96, 0x95,
0x4e, 0xdb, 0x9b, 0x1f, 0xf7, 0x1b, 0x72, 0x47, 0xe6, 0x27, 0xd0, 0x21, 0xbb, 0x01, 0xa2, 0xe5,
0xaa, 0x3c, 0xa8, 0x0d, 0xb2, 0xbb, 0x22, 0x45, 0x0d, 0x6f, 0x0d, 0x6f, 0x41, 0x50, 0xa4, 0xe3,
0x5d, 0x68, 0x5e, 0x3c, 0xf9, 0xbf, 0x71, 0x2a, 0x36, 0x37, 0x61, 0xe3, 0xfb, 0x4d, 0xd8, 0xf8,
0xb2, 0x0d, 0xd9, 0x66, 0x1b, 0xb2, 0x6f, 0xdb, 0x90, 0xfd, 0xdc, 0x86, 0xec, 0x43, 0x73, 0xda,
0x75, 0x7b, 0xf7, 0xec, 0x77, 0x00, 0x00, 0x00, 0xff, 0xff, 0x8f, 0x41, 0x5b, 0x51, 0xce, 0x03,
0x00, 0x00,
// 469 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x93, 0xbf, 0x6f, 0xd3, 0x40,
0x14, 0xc7, 0x7d, 0xce, 0x0f, 0xa7, 0xaf, 0x6a, 0x29, 0x27, 0x86, 0x53, 0x28, 0x26, 0x04, 0x86,
0x4c, 0x06, 0x02, 0x12, 0x08, 0xa9, 0x0c, 0xa9, 0x18, 0x18, 0xe8, 0x70, 0x41, 0x15, 0xab, 0xe3,
0x5c, 0x52, 0x63, 0xe2, 0x8b, 0xee, 0x5d, 0x53, 0x46, 0xf8, 0xef, 0x32, 0x32, 0x32, 0x21, 0x92,
0x85, 0x7f, 0x03, 0xdd, 0x9d, 0x6d, 0x22, 0xe1, 0x74, 0xb3, 0x4e, 0x9f, 0xcf, 0x7b, 0xdf, 0x3b,
0xbf, 0x07, 0xc7, 0x98, 0xc7, 0x4b, 0xbc, 0x92, 0x3a, 0x5a, 0x2a, 0xa9, 0x25, 0xa5, 0x53, 0x99,
0x64, 0x42, 0x45, 0x78, 0x13, 0xab, 0x45, 0x96, 0xea, 0x68, 0xf5, 0xbc, 0x7b, 0x24, 0x27, 0x9f,
0x45, 0xa2, 0xd1, 0x21, 0x5d, 0x50, 0xf1, 0xac, 0xc0, 0xbb, 0xf7, 0xe6, 0x72, 0x2e, 0xed, 0xe7,
0x53, 0xf3, 0xe5, 0x4e, 0xfb, 0xdf, 0x9b, 0x70, 0x34, 0xd6, 0x52, 0x89, 0x71, 0x51, 0x9c, 0x46,
0xd0, 0xca, 0xe5, 0x54, 0x20, 0x23, 0xbd, 0xc6, 0xe0, 0x70, 0xc8, 0xa2, 0xff, 0xdb, 0x44, 0x17,
0x72, 0x2a, 0xb8, 0xc3, 0xe8, 0x2b, 0xe8, 0xa0, 0x50, 0xab, 0x34, 0x11, 0xc8, 0x7c, 0xab, 0xdc,
0xaf, 0x53, 0xc6, 0x8e, 0xe1, 0x15, 0x6c, 0xc4, 0x5c, 0xe8, 0x1b, 0xa9, 0x32, 0x64, 0x8d, 0xfd,
0xe2, 0x85, 0x63, 0x78, 0x05, 0x9b, 0x84, 0x3a, 0xc6, 0x0c, 0x59, 0x73, 0x7f, 0xc2, 0x8f, 0x31,
0x66, 0xdc, 0x61, 0xa6, 0x51, 0xf2, 0xe5, 0x1a, 0xb5, 0x50, 0xc8, 0x5a, 0xfb, 0x1b, 0x9d, 0x3b,
0x86, 0x57, 0x30, 0x7d, 0x09, 0x01, 0x8a, 0x44, 0x09, 0x8d, 0xac, 0x6d, 0xbd, 0x6e, 0xfd, 0xcd,
0x0c, 0xc2, 0x4b, 0x94, 0xbe, 0x81, 0x03, 0x25, 0x50, 0x5e, 0x2b, 0xf3, 0x22, 0x81, 0xf5, 0x4e,
0xeb, 0x3c, 0x5e, 0x40, 0xfc, 0x1f, 0x4e, 0xcf, 0x00, 0xc4, 0x57, 0x2d, 0x72, 0x4c, 0x65, 0x8e,
0xac, 0x63, 0xe5, 0x07, 0x75, 0xf2, 0xbb, 0x92, 0xe2, 0x3b, 0x82, 0x09, 0x9c, 0xc8, 0x7c, 0x96,
0xce, 0x91, 0x1d, 0xec, 0x0f, 0x7c, 0x6e, 0x11, 0x5e, 0xa2, 0xfd, 0x14, 0xee, 0x14, 0x77, 0xaf,
0x86, 0xe0, 0x35, 0x04, 0x0b, 0xb1, 0x98, 0x98, 0x17, 0x73, 0x63, 0x10, 0xd6, 0xde, 0x20, 0x9e,
0xe9, 0x0f, 0x16, 0xe3, 0x25, 0x4e, 0x4f, 0x21, 0x50, 0x62, 0x21, 0x57, 0x62, 0x6a, 0xa7, 0xa1,
0x39, 0xf2, 0x4f, 0x3c, 0x5e, 0x1e, 0xf5, 0xff, 0x10, 0xe8, 0x54, 0x4d, 0xde, 0x42, 0xb0, 0x12,
0xca, 0x24, 0x67, 0xa4, 0x47, 0x06, 0xc7, 0xc3, 0x27, 0xb5, 0xcf, 0x5b, 0x4e, 0xfd, 0xa5, 0x63,
0x79, 0x29, 0xd1, 0xf7, 0x00, 0x45, 0xd7, 0xab, 0x74, 0xc9, 0xfc, 0x1e, 0x19, 0x1c, 0x0e, 0x1f,
0xdf, 0xf2, 0x67, 0xcb, 0x4a, 0xa3, 0xe6, 0xfa, 0xd7, 0x43, 0x8f, 0xef, 0xc8, 0xf4, 0x0c, 0x5a,
0x68, 0xb6, 0x80, 0x35, 0x6c, 0x95, 0x47, 0xb5, 0x41, 0x76, 0xd7, 0xa4, 0xa8, 0xe1, 0xac, 0xfe,
0x5d, 0x08, 0x8a, 0x74, 0xb4, 0x0d, 0xfe, 0xe5, 0xb3, 0x13, 0x6f, 0xc4, 0xd6, 0x9b, 0xd0, 0xfb,
0xb9, 0x09, 0xbd, 0x6f, 0xdb, 0x90, 0xac, 0xb7, 0x21, 0xf9, 0xb1, 0x0d, 0xc9, 0xef, 0x6d, 0x48,
0x3e, 0xf9, 0x93, 0xb6, 0xdd, 0xbd, 0x17, 0x7f, 0x03, 0x00, 0x00, 0xff, 0xff, 0x8d, 0x0f, 0xc4,
0x6e, 0xd2, 0x03, 0x00, 0x00,
}

View file

@ -28,7 +28,7 @@ message StoreSnapshot {
// ClusterSnapshot stores cluster membership information in snapshots.
message ClusterSnapshot {
repeated RaftMember members = 1;
repeated uint64 removed = 2;
repeated uint64 removed = 2 [packed=false];
}
message Snapshot {

View file

@ -642,6 +642,10 @@ type NetworkSpec struct {
// swarm internally created only and it was identified by the name
// "ingress" and the label "com.docker.swarm.internal": "true".
Ingress bool `protobuf:"varint,7,opt,name=ingress,proto3" json:"ingress,omitempty"`
// ConfigFrom indicates that the network specific configuration
// for this network will be provided via another network, locally
// on the node where this network is being plumbed.
ConfigFrom string `protobuf:"bytes,8,opt,name=config_from,json=configFrom,proto3" json:"config_from,omitempty"`
}
func (m *NetworkSpec) Reset() { *m = NetworkSpec{} }
@ -2006,6 +2010,12 @@ func (m *NetworkSpec) MarshalTo(dAtA []byte) (int, error) {
}
i++
}
if len(m.ConfigFrom) > 0 {
dAtA[i] = 0x42
i++
i = encodeVarintSpecs(dAtA, i, uint64(len(m.ConfigFrom)))
i += copy(dAtA[i:], m.ConfigFrom)
}
return i, nil
}
@ -2534,6 +2544,10 @@ func (m *NetworkSpec) Size() (n int) {
if m.Ingress {
n += 2
}
l = len(m.ConfigFrom)
if l > 0 {
n += 1 + l + sovSpecs(uint64(l))
}
return n
}
@ -2817,6 +2831,7 @@ func (this *NetworkSpec) String() string {
`IPAM:` + strings.Replace(fmt.Sprintf("%v", this.IPAM), "IPAMOptions", "IPAMOptions", 1) + `,`,
`Attachable:` + fmt.Sprintf("%v", this.Attachable) + `,`,
`Ingress:` + fmt.Sprintf("%v", this.Ingress) + `,`,
`ConfigFrom:` + fmt.Sprintf("%v", this.ConfigFrom) + `,`,
`}`,
}, "")
return s
@ -5242,6 +5257,35 @@ func (m *NetworkSpec) Unmarshal(dAtA []byte) error {
}
}
m.Ingress = bool(v != 0)
case 8:
if wireType != 2 {
return fmt.Errorf("proto: wrong wireType = %d for field ConfigFrom", wireType)
}
var stringLen uint64
for shift := uint(0); ; shift += 7 {
if shift >= 64 {
return ErrIntOverflowSpecs
}
if iNdEx >= l {
return io.ErrUnexpectedEOF
}
b := dAtA[iNdEx]
iNdEx++
stringLen |= (uint64(b) & 0x7F) << shift
if b < 0x80 {
break
}
}
intStringLen := int(stringLen)
if intStringLen < 0 {
return ErrInvalidLengthSpecs
}
postIndex := iNdEx + intStringLen
if postIndex > l {
return io.ErrUnexpectedEOF
}
m.ConfigFrom = string(dAtA[iNdEx:postIndex])
iNdEx = postIndex
default:
iNdEx = preIndex
skippy, err := skipSpecs(dAtA[iNdEx:])
@ -5883,119 +5927,121 @@ var (
func init() { proto.RegisterFile("specs.proto", fileDescriptorSpecs) }
var fileDescriptorSpecs = []byte{
// 1824 bytes of a gzipped FileDescriptorProto
// 1844 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xb4, 0x57, 0x4f, 0x73, 0x1b, 0x49,
0x15, 0xb7, 0x6c, 0x59, 0x7f, 0xde, 0xc8, 0x89, 0xd2, 0x24, 0x61, 0xac, 0xb0, 0xb2, 0xa2, 0x0d,
0xc1, 0xcb, 0x16, 0x72, 0x61, 0xa8, 0x25, 0x4b, 0x58, 0x40, 0xb2, 0x84, 0x63, 0x8c, 0x1d, 0x55,
0xdb, 0x1b, 0xc8, 0x49, 0xd5, 0x9e, 0x69, 0x4b, 0x53, 0x1e, 0x75, 0x0f, 0xdd, 0x3d, 0xda, 0xd2,
0x8d, 0xe3, 0x56, 0xae, 0x9c, 0x5d, 0x1c, 0xf8, 0x32, 0xb9, 0x41, 0x71, 0xe2, 0xe4, 0x62, 0xfd,
0x15, 0xf8, 0x00, 0x50, 0xdd, 0xd3, 0xa3, 0x3f, 0xc9, 0x78, 0x93, 0x2a, 0xc2, 0xad, 0xfb, 0xcd,
0xef, 0xf7, 0xfa, 0xf5, 0xeb, 0x5f, 0xf7, 0x7b, 0x03, 0x8e, 0x8c, 0xa8, 0x27, 0x5b, 0x91, 0xe0,
0x8a, 0x23, 0xe4, 0x73, 0xef, 0x82, 0x8a, 0x96, 0xfc, 0x8a, 0x88, 0xf1, 0x45, 0xa0, 0x5a, 0x93,
0x1f, 0xd7, 0x1c, 0x35, 0x8d, 0xa8, 0x05, 0xd4, 0xee, 0x0e, 0xf9, 0x90, 0x9b, 0xe1, 0x8e, 0x1e,
0x59, 0x6b, 0x7d, 0xc8, 0xf9, 0x30, 0xa4, 0x3b, 0x66, 0x76, 0x16, 0x9f, 0xef, 0xf8, 0xb1, 0x20,
0x2a, 0xe0, 0xcc, 0x7e, 0xdf, 0x7c, 0xf3, 0x3b, 0x61, 0xd3, 0xe4, 0x53, 0xf3, 0x32, 0x0f, 0xa5,
0x63, 0xee, 0xd3, 0x93, 0x88, 0x7a, 0x68, 0x1f, 0x1c, 0xc2, 0x18, 0x57, 0x86, 0x2b, 0xdd, 0x5c,
0x23, 0xb7, 0xed, 0xec, 0x6e, 0xb5, 0xde, 0x0e, 0xaa, 0xd5, 0x9e, 0xc3, 0x3a, 0xf9, 0xd7, 0x57,
0x5b, 0x2b, 0x78, 0x91, 0x89, 0x7e, 0x05, 0x15, 0x9f, 0xca, 0x40, 0x50, 0x7f, 0x20, 0x78, 0x48,
0xdd, 0xd5, 0x46, 0x6e, 0xfb, 0xd6, 0xee, 0xf7, 0xb2, 0x3c, 0xe9, 0xc5, 0x31, 0x0f, 0x29, 0x76,
0x2c, 0x43, 0x4f, 0xd0, 0x3e, 0xc0, 0x98, 0x8e, 0xcf, 0xa8, 0x90, 0xa3, 0x20, 0x72, 0xd7, 0x0c,
0xfd, 0x07, 0x37, 0xd1, 0x75, 0xec, 0xad, 0xa3, 0x19, 0x1c, 0x2f, 0x50, 0xd1, 0x11, 0x54, 0xc8,
0x84, 0x04, 0x21, 0x39, 0x0b, 0xc2, 0x40, 0x4d, 0xdd, 0xbc, 0x71, 0xf5, 0xc9, 0xb7, 0xba, 0x6a,
0x2f, 0x10, 0xf0, 0x12, 0xbd, 0xe9, 0x03, 0xcc, 0x17, 0x42, 0x8f, 0xa1, 0xd8, 0xef, 0x1d, 0x77,
0x0f, 0x8e, 0xf7, 0xab, 0x2b, 0xb5, 0xcd, 0x57, 0x97, 0x8d, 0x7b, 0xda, 0xc7, 0x1c, 0xd0, 0xa7,
0xcc, 0x0f, 0xd8, 0x10, 0x6d, 0x43, 0xa9, 0xbd, 0xb7, 0xd7, 0xeb, 0x9f, 0xf6, 0xba, 0xd5, 0x5c,
0xad, 0xf6, 0xea, 0xb2, 0x71, 0x7f, 0x19, 0xd8, 0xf6, 0x3c, 0x1a, 0x29, 0xea, 0xd7, 0xf2, 0x5f,
0xff, 0xb5, 0xbe, 0xd2, 0xfc, 0x3a, 0x07, 0x95, 0xc5, 0x20, 0xd0, 0x63, 0x28, 0xb4, 0xf7, 0x4e,
0x0f, 0x5e, 0xf4, 0xaa, 0x2b, 0x73, 0xfa, 0x22, 0xa2, 0xed, 0xa9, 0x60, 0x42, 0xd1, 0x23, 0x58,
0xef, 0xb7, 0xbf, 0x3c, 0xe9, 0x55, 0x73, 0xf3, 0x70, 0x16, 0x61, 0x7d, 0x12, 0x4b, 0x83, 0xea,
0xe2, 0xf6, 0xc1, 0x71, 0x75, 0x35, 0x1b, 0xd5, 0x15, 0x24, 0x60, 0x36, 0x94, 0xbf, 0xe4, 0xc1,
0x39, 0xa1, 0x62, 0x12, 0x78, 0x1f, 0x58, 0x22, 0x9f, 0x41, 0x5e, 0x11, 0x79, 0x61, 0xa4, 0xe1,
0x64, 0x4b, 0xe3, 0x94, 0xc8, 0x0b, 0xbd, 0xa8, 0xa5, 0x1b, 0xbc, 0x56, 0x86, 0xa0, 0x51, 0x18,
0x78, 0x44, 0x51, 0xdf, 0x28, 0xc3, 0xd9, 0xfd, 0x7e, 0x16, 0x1b, 0xcf, 0x50, 0x36, 0xfe, 0x67,
0x2b, 0x78, 0x81, 0x8a, 0x9e, 0x42, 0x61, 0x18, 0xf2, 0x33, 0x12, 0x1a, 0x4d, 0x38, 0xbb, 0x0f,
0xb3, 0x9c, 0xec, 0x1b, 0xc4, 0xdc, 0x81, 0xa5, 0xa0, 0x27, 0x50, 0x88, 0x23, 0x9f, 0x28, 0xea,
0x16, 0x0c, 0xb9, 0x91, 0x45, 0xfe, 0xd2, 0x20, 0xf6, 0x38, 0x3b, 0x0f, 0x86, 0xd8, 0xe2, 0xd1,
0x21, 0x94, 0x18, 0x55, 0x5f, 0x71, 0x71, 0x21, 0xdd, 0x62, 0x63, 0x6d, 0xdb, 0xd9, 0xfd, 0x34,
0x53, 0x8c, 0x09, 0xa6, 0xad, 0x14, 0xf1, 0x46, 0x63, 0xca, 0x54, 0xe2, 0xa6, 0xb3, 0xea, 0xe6,
0xf0, 0xcc, 0x01, 0xfa, 0x05, 0x94, 0x28, 0xf3, 0x23, 0x1e, 0x30, 0xe5, 0x96, 0x6e, 0x0e, 0xa4,
0x67, 0x31, 0x3a, 0x99, 0x78, 0xc6, 0xd0, 0x6c, 0xc1, 0xc3, 0xf0, 0x8c, 0x78, 0x17, 0x6e, 0xf9,
0x3d, 0xb7, 0x31, 0x63, 0x74, 0x0a, 0x90, 0x1f, 0x73, 0x9f, 0x36, 0x77, 0xe0, 0xce, 0x5b, 0xa9,
0x46, 0x35, 0x28, 0xd9, 0x54, 0x27, 0x1a, 0xc9, 0xe3, 0xd9, 0xbc, 0x79, 0x1b, 0x36, 0x96, 0xd2,
0xda, 0xfc, 0x47, 0x1e, 0x4a, 0xe9, 0x59, 0xa3, 0x36, 0x94, 0x3d, 0xce, 0x14, 0x09, 0x18, 0x15,
0x56, 0x5e, 0x99, 0x27, 0xb3, 0x97, 0x82, 0x34, 0xeb, 0xd9, 0x0a, 0x9e, 0xb3, 0xd0, 0x6f, 0xa0,
0x2c, 0xa8, 0xe4, 0xb1, 0xf0, 0xa8, 0xb4, 0xfa, 0xda, 0xce, 0x56, 0x48, 0x02, 0xc2, 0xf4, 0x8f,
0x71, 0x20, 0xa8, 0xce, 0xb2, 0xc4, 0x73, 0x2a, 0x7a, 0x0a, 0x45, 0x41, 0xa5, 0x22, 0x42, 0x7d,
0x9b, 0x44, 0x70, 0x02, 0xe9, 0xf3, 0x30, 0xf0, 0xa6, 0x38, 0x65, 0xa0, 0xa7, 0x50, 0x8e, 0x42,
0xe2, 0x19, 0xaf, 0xee, 0xba, 0xa1, 0x7f, 0x94, 0x45, 0xef, 0xa7, 0x20, 0x3c, 0xc7, 0xa3, 0xcf,
0x01, 0x42, 0x3e, 0x1c, 0xf8, 0x22, 0x98, 0x50, 0x61, 0x25, 0x56, 0xcb, 0x62, 0x77, 0x0d, 0x02,
0x97, 0x43, 0x3e, 0x4c, 0x86, 0x68, 0xff, 0x7f, 0xd2, 0xd7, 0x82, 0xb6, 0x0e, 0x01, 0xc8, 0xec,
0xab, 0x55, 0xd7, 0x27, 0xef, 0xe5, 0xca, 0x9e, 0xc8, 0x02, 0x1d, 0x3d, 0x84, 0xca, 0x39, 0x17,
0x1e, 0x1d, 0xd8, 0x5b, 0x53, 0x36, 0x9a, 0x70, 0x8c, 0x2d, 0xd1, 0x17, 0xea, 0x40, 0x71, 0x48,
0x19, 0x15, 0x81, 0xe7, 0x82, 0x59, 0xec, 0x71, 0xe6, 0x85, 0x4c, 0x20, 0x38, 0x66, 0x2a, 0x18,
0x53, 0xbb, 0x52, 0x4a, 0xec, 0x94, 0xa1, 0x28, 0x92, 0x2f, 0xcd, 0x3f, 0x00, 0x7a, 0x1b, 0x8b,
0x10, 0xe4, 0x2f, 0x02, 0xe6, 0x1b, 0x61, 0x95, 0xb1, 0x19, 0xa3, 0x16, 0x14, 0x23, 0x32, 0x0d,
0x39, 0xf1, 0xad, 0x58, 0xee, 0xb6, 0x92, 0x7a, 0xd9, 0x4a, 0xeb, 0x65, 0xab, 0xcd, 0xa6, 0x38,
0x05, 0x35, 0x0f, 0xe1, 0x5e, 0xe6, 0x96, 0xd1, 0x2e, 0x54, 0x66, 0x22, 0x1c, 0x04, 0x76, 0x91,
0xce, 0xed, 0xeb, 0xab, 0x2d, 0x67, 0xa6, 0xd6, 0x83, 0x2e, 0x76, 0x66, 0xa0, 0x03, 0xbf, 0xf9,
0xe7, 0x32, 0x6c, 0x2c, 0x49, 0x19, 0xdd, 0x85, 0xf5, 0x60, 0x4c, 0x86, 0xd4, 0xc6, 0x98, 0x4c,
0x50, 0x0f, 0x0a, 0x21, 0x39, 0xa3, 0xa1, 0x16, 0xb4, 0x3e, 0xd4, 0x1f, 0xbd, 0xf3, 0x4e, 0xb4,
0x7e, 0x67, 0xf0, 0x3d, 0xa6, 0xc4, 0x14, 0x5b, 0x32, 0x72, 0xa1, 0xe8, 0xf1, 0xf1, 0x98, 0x30,
0xfd, 0x74, 0xae, 0x6d, 0x97, 0x71, 0x3a, 0xd5, 0x99, 0x21, 0x62, 0x28, 0xdd, 0xbc, 0x31, 0x9b,
0x31, 0xaa, 0xc2, 0x1a, 0x65, 0x13, 0x77, 0xdd, 0x98, 0xf4, 0x50, 0x5b, 0xfc, 0x20, 0x51, 0x64,
0x19, 0xeb, 0xa1, 0xe6, 0xc5, 0x92, 0x0a, 0xb7, 0x98, 0x64, 0x54, 0x8f, 0xd1, 0xcf, 0xa0, 0x30,
0xe6, 0x31, 0x53, 0xd2, 0x2d, 0x99, 0x60, 0x37, 0xb3, 0x82, 0x3d, 0xd2, 0x08, 0xfb, 0xb4, 0x5b,
0x38, 0xea, 0xc1, 0x1d, 0xa9, 0x78, 0x34, 0x18, 0x0a, 0xe2, 0xd1, 0x41, 0x44, 0x45, 0xc0, 0x7d,
0xfb, 0x34, 0x6d, 0xbe, 0x75, 0x28, 0x5d, 0xdb, 0xe4, 0xe0, 0xdb, 0x9a, 0xb3, 0xaf, 0x29, 0x7d,
0xc3, 0x40, 0x7d, 0xa8, 0x44, 0x71, 0x18, 0x0e, 0x78, 0x94, 0x54, 0xa9, 0x44, 0x4f, 0xef, 0x91,
0xb2, 0x7e, 0x1c, 0x86, 0xcf, 0x13, 0x12, 0x76, 0xa2, 0xf9, 0x04, 0xdd, 0x87, 0xc2, 0x50, 0xf0,
0x38, 0x92, 0xae, 0x63, 0x92, 0x61, 0x67, 0xe8, 0x0b, 0x28, 0x4a, 0xea, 0x09, 0xaa, 0xa4, 0x5b,
0x31, 0x5b, 0xfd, 0x38, 0x6b, 0x91, 0x13, 0x03, 0xc1, 0xf4, 0x9c, 0x0a, 0xca, 0x3c, 0x8a, 0x53,
0x0e, 0xda, 0x84, 0x35, 0xa5, 0xa6, 0xee, 0x46, 0x23, 0xb7, 0x5d, 0xea, 0x14, 0xaf, 0xaf, 0xb6,
0xd6, 0x4e, 0x4f, 0x5f, 0x62, 0x6d, 0xd3, 0x2f, 0xe8, 0x88, 0x4b, 0xc5, 0xc8, 0x98, 0xba, 0xb7,
0x4c, 0x6e, 0x67, 0x73, 0xf4, 0x12, 0xc0, 0x67, 0x72, 0xe0, 0x99, 0x2b, 0xeb, 0xde, 0x36, 0xbb,
0xfb, 0xf4, 0xdd, 0xbb, 0xeb, 0x1e, 0x9f, 0xd8, 0x2a, 0xb2, 0x71, 0x7d, 0xb5, 0x55, 0x9e, 0x4d,
0x71, 0xd9, 0x67, 0x32, 0x19, 0xa2, 0x0e, 0x38, 0x23, 0x4a, 0x42, 0x35, 0xf2, 0x46, 0xd4, 0xbb,
0x70, 0xab, 0x37, 0x97, 0x85, 0x67, 0x06, 0x66, 0x3d, 0x2c, 0x92, 0xb4, 0x82, 0x75, 0xa8, 0xd2,
0xbd, 0x63, 0x72, 0x95, 0x4c, 0xd0, 0x47, 0x00, 0x3c, 0xa2, 0x6c, 0x20, 0x95, 0x1f, 0x30, 0x17,
0xe9, 0x2d, 0xe3, 0xb2, 0xb6, 0x9c, 0x68, 0x03, 0x7a, 0xa0, 0x1f, 0x6d, 0xe2, 0x0f, 0x38, 0x0b,
0xa7, 0xee, 0x77, 0xcc, 0xd7, 0x92, 0x36, 0x3c, 0x67, 0xe1, 0x14, 0x6d, 0x81, 0x63, 0x74, 0x21,
0x83, 0x21, 0x23, 0xa1, 0x7b, 0xd7, 0xe4, 0x03, 0xb4, 0xe9, 0xc4, 0x58, 0xf4, 0x39, 0x24, 0xd9,
0x90, 0xee, 0xbd, 0x9b, 0xcf, 0xc1, 0x06, 0x3b, 0x3f, 0x07, 0xcb, 0x41, 0xbf, 0x04, 0x88, 0x44,
0x30, 0x09, 0x42, 0x3a, 0xa4, 0xd2, 0xbd, 0x6f, 0x36, 0x5d, 0xcf, 0x7c, 0xad, 0x67, 0x28, 0xbc,
0xc0, 0xa8, 0x7d, 0x0e, 0xce, 0xc2, 0x6d, 0xd3, 0xb7, 0xe4, 0x82, 0x4e, 0xed, 0x05, 0xd6, 0x43,
0x9d, 0x92, 0x09, 0x09, 0xe3, 0xa4, 0x13, 0x2e, 0xe3, 0x64, 0xf2, 0xf3, 0xd5, 0x27, 0xb9, 0xda,
0x2e, 0x38, 0x0b, 0xaa, 0x43, 0x1f, 0xc3, 0x86, 0xa0, 0xc3, 0x40, 0x2a, 0x31, 0x1d, 0x90, 0x58,
0x8d, 0xdc, 0x5f, 0x1b, 0x42, 0x25, 0x35, 0xb6, 0x63, 0x35, 0xaa, 0x0d, 0x60, 0x7e, 0x78, 0xa8,
0x01, 0x8e, 0x16, 0x85, 0xa4, 0x62, 0x42, 0x85, 0xae, 0xb6, 0x3a, 0xe7, 0x8b, 0x26, 0x2d, 0x5e,
0x49, 0x89, 0xf0, 0x46, 0xe6, 0xed, 0x28, 0x63, 0x3b, 0xd3, 0x8f, 0x41, 0x7a, 0x43, 0xec, 0x63,
0x60, 0xa7, 0xcd, 0x7f, 0xe7, 0xa0, 0xb2, 0xd8, 0x34, 0xa0, 0xbd, 0xa4, 0xd8, 0x9b, 0x2d, 0xdd,
0xda, 0xdd, 0x79, 0x57, 0x93, 0x61, 0x4a, 0x6b, 0x18, 0x6b, 0x67, 0x47, 0xba, 0xbf, 0x37, 0x64,
0xf4, 0x53, 0x58, 0x8f, 0xb8, 0x50, 0xe9, 0x13, 0x96, 0x9d, 0x60, 0x2e, 0xd2, 0x52, 0x94, 0x80,
0x9b, 0x23, 0xb8, 0xb5, 0xec, 0x0d, 0x3d, 0x82, 0xb5, 0x17, 0x07, 0xfd, 0xea, 0x4a, 0xed, 0xc1,
0xab, 0xcb, 0xc6, 0x77, 0x97, 0x3f, 0xbe, 0x08, 0x84, 0x8a, 0x49, 0x78, 0xd0, 0x47, 0x3f, 0x84,
0xf5, 0xee, 0xf1, 0x09, 0xc6, 0xd5, 0x5c, 0x6d, 0xeb, 0xd5, 0x65, 0xe3, 0xc1, 0x32, 0x4e, 0x7f,
0xe2, 0x31, 0xf3, 0x31, 0x3f, 0x9b, 0xf5, 0xba, 0x7f, 0x5b, 0x05, 0xc7, 0xbe, 0xec, 0x1f, 0xfa,
0x77, 0x68, 0x23, 0x29, 0xe5, 0xe9, 0x95, 0x5d, 0x7d, 0x67, 0x45, 0xaf, 0x24, 0x04, 0x7b, 0xc6,
0x0f, 0xa1, 0x12, 0x44, 0x93, 0xcf, 0x06, 0x94, 0x91, 0xb3, 0xd0, 0xb6, 0xbd, 0x25, 0xec, 0x68,
0x5b, 0x2f, 0x31, 0xe9, 0xf7, 0x22, 0x60, 0x8a, 0x0a, 0x66, 0x1b, 0xda, 0x12, 0x9e, 0xcd, 0xd1,
0x17, 0x90, 0x0f, 0x22, 0x32, 0xb6, 0x6d, 0x48, 0xe6, 0x0e, 0x0e, 0xfa, 0xed, 0x23, 0xab, 0xc1,
0x4e, 0xe9, 0xfa, 0x6a, 0x2b, 0xaf, 0x0d, 0xd8, 0xd0, 0x50, 0x3d, 0xed, 0x04, 0xf4, 0x4a, 0xe6,
0xed, 0x2f, 0xe1, 0x05, 0x8b, 0xd6, 0x51, 0xc0, 0x86, 0x82, 0x4a, 0x69, 0xaa, 0x40, 0x09, 0xa7,
0xd3, 0xe6, 0x7f, 0xf2, 0xe0, 0xec, 0x85, 0xb1, 0x54, 0xb6, 0xb6, 0x7d, 0xb0, 0x8c, 0xbe, 0x84,
0x3b, 0xc4, 0xfc, 0x33, 0x11, 0xa6, 0x0b, 0x85, 0xe9, 0xbd, 0x6c, 0x56, 0x1f, 0x65, 0xba, 0x9b,
0x81, 0x93, 0x3e, 0xad, 0x53, 0xd0, 0x3e, 0xdd, 0x1c, 0xae, 0x92, 0x37, 0xbe, 0xa0, 0x13, 0xd8,
0xe0, 0xc2, 0x1b, 0x51, 0xa9, 0x92, 0xf2, 0x62, 0xff, 0x31, 0x32, 0xff, 0x3e, 0x9f, 0x2f, 0x02,
0xed, 0xdb, 0x9a, 0x44, 0xbb, 0xec, 0x03, 0x3d, 0x81, 0xbc, 0x20, 0xe7, 0x69, 0x1f, 0x99, 0xa9,
0x7c, 0x4c, 0xce, 0xd5, 0x92, 0x0b, 0xc3, 0x40, 0xbf, 0x05, 0xf0, 0x03, 0x19, 0x11, 0xe5, 0x8d,
0xa8, 0xb0, 0x27, 0x98, 0xb9, 0xc5, 0xee, 0x0c, 0xb5, 0xe4, 0x65, 0x81, 0x8d, 0x0e, 0xa1, 0xec,
0x91, 0x54, 0x83, 0x85, 0x9b, 0x7f, 0xbc, 0xf6, 0xda, 0xd6, 0x45, 0x55, 0xbb, 0xb8, 0xbe, 0xda,
0x2a, 0xa5, 0x16, 0x5c, 0xf2, 0x88, 0xd5, 0xe4, 0x21, 0x6c, 0xe8, 0x1f, 0xb2, 0x81, 0x4f, 0xcf,
0x49, 0x1c, 0xaa, 0xe4, 0xec, 0x6f, 0xa8, 0x15, 0xba, 0xbb, 0xef, 0x5a, 0x9c, 0x8d, 0xab, 0xa2,
0x16, 0x6c, 0xe8, 0xf7, 0x70, 0x87, 0x32, 0x4f, 0x4c, 0x8d, 0x02, 0xd3, 0x08, 0x4b, 0x37, 0x6f,
0xb6, 0x37, 0x03, 0x2f, 0x6d, 0xb6, 0x4a, 0xdf, 0xb0, 0x37, 0x03, 0x80, 0xa4, 0xfa, 0x7e, 0x58,
0xfd, 0x21, 0xc8, 0xfb, 0x44, 0x11, 0x23, 0xb9, 0x0a, 0x36, 0x63, 0xbd, 0x54, 0xb2, 0xe8, 0xff,
0x7d, 0xa9, 0x8e, 0xfb, 0xfa, 0x9b, 0xfa, 0xca, 0x3f, 0xbf, 0xa9, 0xaf, 0xfc, 0xe9, 0xba, 0x9e,
0x7b, 0x7d, 0x5d, 0xcf, 0xfd, 0xfd, 0xba, 0x9e, 0xfb, 0xd7, 0x75, 0x3d, 0x77, 0x56, 0x30, 0xed,
0xd1, 0x4f, 0xfe, 0x1b, 0x00, 0x00, 0xff, 0xff, 0x90, 0x54, 0x3b, 0xfc, 0x57, 0x12, 0x00, 0x00,
0x15, 0xb7, 0x6c, 0x59, 0x7f, 0xde, 0xc8, 0x89, 0xdc, 0x24, 0x61, 0xac, 0xb0, 0xb2, 0xa2, 0x0d,
0xc1, 0xcb, 0x16, 0x72, 0x61, 0xa8, 0x25, 0x4b, 0x58, 0x40, 0xb2, 0xb4, 0x8e, 0x31, 0x76, 0x54,
0x6d, 0x6f, 0x20, 0x27, 0x55, 0x7b, 0xa6, 0x2d, 0x4d, 0x79, 0xd4, 0x3d, 0xf4, 0xf4, 0x68, 0x4b,
0x37, 0x8e, 0x5b, 0xb9, 0x72, 0x76, 0x71, 0xe0, 0xcb, 0xe4, 0x48, 0x71, 0xe2, 0xe4, 0x62, 0xf5,
0x09, 0xa8, 0xe2, 0x03, 0x40, 0x75, 0x4f, 0x8f, 0x34, 0x4a, 0xc6, 0x49, 0xaa, 0xc8, 0xde, 0xba,
0xdf, 0xfc, 0x7e, 0xaf, 0x5f, 0xbf, 0xfe, 0x75, 0xbf, 0x37, 0x60, 0x85, 0x01, 0x75, 0xc2, 0x56,
0x20, 0xb8, 0xe4, 0x08, 0xb9, 0xdc, 0xb9, 0xa4, 0xa2, 0x15, 0x7e, 0x4d, 0xc4, 0xf8, 0xd2, 0x93,
0xad, 0xc9, 0x4f, 0x6b, 0x96, 0x9c, 0x06, 0xd4, 0x00, 0x6a, 0x77, 0x86, 0x7c, 0xc8, 0xf5, 0x70,
0x57, 0x8d, 0x8c, 0xb5, 0x3e, 0xe4, 0x7c, 0xe8, 0xd3, 0x5d, 0x3d, 0x3b, 0x8f, 0x2e, 0x76, 0xdd,
0x48, 0x10, 0xe9, 0x71, 0x66, 0xbe, 0x6f, 0xbd, 0xfe, 0x9d, 0xb0, 0x69, 0xfc, 0xa9, 0x79, 0x95,
0x87, 0xd2, 0x09, 0x77, 0xe9, 0x69, 0x40, 0x1d, 0x74, 0x00, 0x16, 0x61, 0x8c, 0x4b, 0xcd, 0x0d,
0xed, 0x5c, 0x23, 0xb7, 0x63, 0xed, 0x6d, 0xb7, 0xde, 0x0c, 0xaa, 0xd5, 0x5e, 0xc0, 0x3a, 0xf9,
0x57, 0xd7, 0xdb, 0x2b, 0x38, 0xcd, 0x44, 0xbf, 0x81, 0x8a, 0x4b, 0x43, 0x4f, 0x50, 0x77, 0x20,
0xb8, 0x4f, 0xed, 0xd5, 0x46, 0x6e, 0xe7, 0xd6, 0xde, 0x0f, 0xb2, 0x3c, 0xa9, 0xc5, 0x31, 0xf7,
0x29, 0xb6, 0x0c, 0x43, 0x4d, 0xd0, 0x01, 0xc0, 0x98, 0x8e, 0xcf, 0xa9, 0x08, 0x47, 0x5e, 0x60,
0xaf, 0x69, 0xfa, 0x8f, 0x6e, 0xa2, 0xab, 0xd8, 0x5b, 0xc7, 0x73, 0x38, 0x4e, 0x51, 0xd1, 0x31,
0x54, 0xc8, 0x84, 0x78, 0x3e, 0x39, 0xf7, 0x7c, 0x4f, 0x4e, 0xed, 0xbc, 0x76, 0xf5, 0xc9, 0x5b,
0x5d, 0xb5, 0x53, 0x04, 0xbc, 0x44, 0x6f, 0xba, 0x00, 0x8b, 0x85, 0xd0, 0x23, 0x28, 0xf6, 0x7b,
0x27, 0xdd, 0xc3, 0x93, 0x83, 0xea, 0x4a, 0x6d, 0xeb, 0xe5, 0x55, 0xe3, 0xae, 0xf2, 0xb1, 0x00,
0xf4, 0x29, 0x73, 0x3d, 0x36, 0x44, 0x3b, 0x50, 0x6a, 0xef, 0xef, 0xf7, 0xfa, 0x67, 0xbd, 0x6e,
0x35, 0x57, 0xab, 0xbd, 0xbc, 0x6a, 0xdc, 0x5b, 0x06, 0xb6, 0x1d, 0x87, 0x06, 0x92, 0xba, 0xb5,
0xfc, 0x37, 0x7f, 0xab, 0xaf, 0x34, 0xbf, 0xc9, 0x41, 0x25, 0x1d, 0x04, 0x7a, 0x04, 0x85, 0xf6,
0xfe, 0xd9, 0xe1, 0xf3, 0x5e, 0x75, 0x65, 0x41, 0x4f, 0x23, 0xda, 0x8e, 0xf4, 0x26, 0x14, 0x3d,
0x84, 0xf5, 0x7e, 0xfb, 0xab, 0xd3, 0x5e, 0x35, 0xb7, 0x08, 0x27, 0x0d, 0xeb, 0x93, 0x28, 0xd4,
0xa8, 0x2e, 0x6e, 0x1f, 0x9e, 0x54, 0x57, 0xb3, 0x51, 0x5d, 0x41, 0x3c, 0x66, 0x42, 0xf9, 0x6b,
0x1e, 0xac, 0x53, 0x2a, 0x26, 0x9e, 0xf3, 0x81, 0x25, 0xf2, 0x19, 0xe4, 0x25, 0x09, 0x2f, 0xb5,
0x34, 0xac, 0x6c, 0x69, 0x9c, 0x91, 0xf0, 0x52, 0x2d, 0x6a, 0xe8, 0x1a, 0xaf, 0x94, 0x21, 0x68,
0xe0, 0x7b, 0x0e, 0x91, 0xd4, 0xd5, 0xca, 0xb0, 0xf6, 0x7e, 0x98, 0xc5, 0xc6, 0x73, 0x94, 0x89,
0xff, 0xe9, 0x0a, 0x4e, 0x51, 0xd1, 0x13, 0x28, 0x0c, 0x7d, 0x7e, 0x4e, 0x7c, 0xad, 0x09, 0x6b,
0xef, 0x41, 0x96, 0x93, 0x03, 0x8d, 0x58, 0x38, 0x30, 0x14, 0xf4, 0x18, 0x0a, 0x51, 0xe0, 0x12,
0x49, 0xed, 0x82, 0x26, 0x37, 0xb2, 0xc8, 0x5f, 0x69, 0xc4, 0x3e, 0x67, 0x17, 0xde, 0x10, 0x1b,
0x3c, 0x3a, 0x82, 0x12, 0xa3, 0xf2, 0x6b, 0x2e, 0x2e, 0x43, 0xbb, 0xd8, 0x58, 0xdb, 0xb1, 0xf6,
0x3e, 0xcd, 0x14, 0x63, 0x8c, 0x69, 0x4b, 0x49, 0x9c, 0xd1, 0x98, 0x32, 0x19, 0xbb, 0xe9, 0xac,
0xda, 0x39, 0x3c, 0x77, 0x80, 0x7e, 0x05, 0x25, 0xca, 0xdc, 0x80, 0x7b, 0x4c, 0xda, 0xa5, 0x9b,
0x03, 0xe9, 0x19, 0x8c, 0x4a, 0x26, 0x9e, 0x33, 0x14, 0x5b, 0x70, 0xdf, 0x3f, 0x27, 0xce, 0xa5,
0x5d, 0x7e, 0xcf, 0x6d, 0xcc, 0x19, 0x9d, 0x02, 0xe4, 0xc7, 0xdc, 0xa5, 0xcd, 0x5d, 0xd8, 0x7c,
0x23, 0xd5, 0xa8, 0x06, 0x25, 0x93, 0xea, 0x58, 0x23, 0x79, 0x3c, 0x9f, 0x37, 0x6f, 0xc3, 0xc6,
0x52, 0x5a, 0x9b, 0xff, 0xc8, 0x43, 0x29, 0x39, 0x6b, 0xd4, 0x86, 0xb2, 0xc3, 0x99, 0x24, 0x1e,
0xa3, 0xc2, 0xc8, 0x2b, 0xf3, 0x64, 0xf6, 0x13, 0x90, 0x62, 0x3d, 0x5d, 0xc1, 0x0b, 0x16, 0xfa,
0x12, 0xca, 0x82, 0x86, 0x3c, 0x12, 0x0e, 0x0d, 0x8d, 0xbe, 0x76, 0xb2, 0x15, 0x12, 0x83, 0x30,
0xfd, 0x53, 0xe4, 0x09, 0xaa, 0xb2, 0x1c, 0xe2, 0x05, 0x15, 0x3d, 0x81, 0xa2, 0xa0, 0xa1, 0x24,
0x42, 0xbe, 0x4d, 0x22, 0x38, 0x86, 0xf4, 0xb9, 0xef, 0x39, 0x53, 0x9c, 0x30, 0xd0, 0x13, 0x28,
0x07, 0x3e, 0x71, 0xb4, 0x57, 0x7b, 0x5d, 0xd3, 0x3f, 0xca, 0xa2, 0xf7, 0x13, 0x10, 0x5e, 0xe0,
0xd1, 0xe7, 0x00, 0x3e, 0x1f, 0x0e, 0x5c, 0xe1, 0x4d, 0xa8, 0x30, 0x12, 0xab, 0x65, 0xb1, 0xbb,
0x1a, 0x81, 0xcb, 0x3e, 0x1f, 0xc6, 0x43, 0x74, 0xf0, 0x7f, 0xe9, 0x2b, 0xa5, 0xad, 0x23, 0x00,
0x32, 0xff, 0x6a, 0xd4, 0xf5, 0xc9, 0x7b, 0xb9, 0x32, 0x27, 0x92, 0xa2, 0xa3, 0x07, 0x50, 0xb9,
0xe0, 0xc2, 0xa1, 0x03, 0x73, 0x6b, 0xca, 0x5a, 0x13, 0x96, 0xb6, 0xc5, 0xfa, 0x42, 0x1d, 0x28,
0x0e, 0x29, 0xa3, 0xc2, 0x73, 0x6c, 0xd0, 0x8b, 0x3d, 0xca, 0xbc, 0x90, 0x31, 0x04, 0x47, 0x4c,
0x7a, 0x63, 0x6a, 0x56, 0x4a, 0x88, 0x9d, 0x32, 0x14, 0x45, 0xfc, 0xa5, 0xf9, 0x47, 0x40, 0x6f,
0x62, 0x11, 0x82, 0xfc, 0xa5, 0xc7, 0x5c, 0x2d, 0xac, 0x32, 0xd6, 0x63, 0xd4, 0x82, 0x62, 0x40,
0xa6, 0x3e, 0x27, 0xae, 0x11, 0xcb, 0x9d, 0x56, 0x5c, 0x2f, 0x5b, 0x49, 0xbd, 0x6c, 0xb5, 0xd9,
0x14, 0x27, 0xa0, 0xe6, 0x11, 0xdc, 0xcd, 0xdc, 0x32, 0xda, 0x83, 0xca, 0x5c, 0x84, 0x03, 0xcf,
0x2c, 0xd2, 0xb9, 0x3d, 0xbb, 0xde, 0xb6, 0xe6, 0x6a, 0x3d, 0xec, 0x62, 0x6b, 0x0e, 0x3a, 0x74,
0x9b, 0x7f, 0x29, 0xc3, 0xc6, 0x92, 0x94, 0xd1, 0x1d, 0x58, 0xf7, 0xc6, 0x64, 0x48, 0x4d, 0x8c,
0xf1, 0x04, 0xf5, 0xa0, 0xe0, 0x93, 0x73, 0xea, 0x2b, 0x41, 0xab, 0x43, 0xfd, 0xc9, 0x3b, 0xef,
0x44, 0xeb, 0xf7, 0x1a, 0xdf, 0x63, 0x52, 0x4c, 0xb1, 0x21, 0x23, 0x1b, 0x8a, 0x0e, 0x1f, 0x8f,
0x09, 0x53, 0x4f, 0xe7, 0xda, 0x4e, 0x19, 0x27, 0x53, 0x95, 0x19, 0x22, 0x86, 0xa1, 0x9d, 0xd7,
0x66, 0x3d, 0x46, 0x55, 0x58, 0xa3, 0x6c, 0x62, 0xaf, 0x6b, 0x93, 0x1a, 0x2a, 0x8b, 0xeb, 0xc5,
0x8a, 0x2c, 0x63, 0x35, 0x54, 0xbc, 0x28, 0xa4, 0xc2, 0x2e, 0xc6, 0x19, 0x55, 0x63, 0xf4, 0x0b,
0x28, 0x8c, 0x79, 0xc4, 0x64, 0x68, 0x97, 0x74, 0xb0, 0x5b, 0x59, 0xc1, 0x1e, 0x2b, 0x84, 0x79,
0xda, 0x0d, 0x1c, 0xf5, 0x60, 0x33, 0x94, 0x3c, 0x18, 0x0c, 0x05, 0x71, 0xe8, 0x20, 0xa0, 0xc2,
0xe3, 0xae, 0x79, 0x9a, 0xb6, 0xde, 0x38, 0x94, 0xae, 0x69, 0x72, 0xf0, 0x6d, 0xc5, 0x39, 0x50,
0x94, 0xbe, 0x66, 0xa0, 0x3e, 0x54, 0x82, 0xc8, 0xf7, 0x07, 0x3c, 0x88, 0xab, 0x54, 0xac, 0xa7,
0xf7, 0x48, 0x59, 0x3f, 0xf2, 0xfd, 0x67, 0x31, 0x09, 0x5b, 0xc1, 0x62, 0x82, 0xee, 0x41, 0x61,
0x28, 0x78, 0x14, 0x84, 0xb6, 0xa5, 0x93, 0x61, 0x66, 0xe8, 0x0b, 0x28, 0x86, 0xd4, 0x11, 0x54,
0x86, 0x76, 0x45, 0x6f, 0xf5, 0xe3, 0xac, 0x45, 0x4e, 0x35, 0x04, 0xd3, 0x0b, 0x2a, 0x28, 0x73,
0x28, 0x4e, 0x38, 0x68, 0x0b, 0xd6, 0xa4, 0x9c, 0xda, 0x1b, 0x8d, 0xdc, 0x4e, 0xa9, 0x53, 0x9c,
0x5d, 0x6f, 0xaf, 0x9d, 0x9d, 0xbd, 0xc0, 0xca, 0xa6, 0x5e, 0xd0, 0x11, 0x0f, 0x25, 0x23, 0x63,
0x6a, 0xdf, 0xd2, 0xb9, 0x9d, 0xcf, 0xd1, 0x0b, 0x00, 0x97, 0x85, 0x03, 0x47, 0x5f, 0x59, 0xfb,
0xb6, 0xde, 0xdd, 0xa7, 0xef, 0xde, 0x5d, 0xf7, 0xe4, 0xd4, 0x54, 0x91, 0x8d, 0xd9, 0xf5, 0x76,
0x79, 0x3e, 0xc5, 0x65, 0x97, 0x85, 0xf1, 0x10, 0x75, 0xc0, 0x1a, 0x51, 0xe2, 0xcb, 0x91, 0x33,
0xa2, 0xce, 0xa5, 0x5d, 0xbd, 0xb9, 0x2c, 0x3c, 0xd5, 0x30, 0xe3, 0x21, 0x4d, 0x52, 0x0a, 0x56,
0xa1, 0x86, 0xf6, 0xa6, 0xce, 0x55, 0x3c, 0x41, 0x1f, 0x01, 0xf0, 0x80, 0xb2, 0x41, 0x28, 0x5d,
0x8f, 0xd9, 0x48, 0x6d, 0x19, 0x97, 0x95, 0xe5, 0x54, 0x19, 0xd0, 0x7d, 0xf5, 0x68, 0x13, 0x77,
0xc0, 0x99, 0x3f, 0xb5, 0xbf, 0xa7, 0xbf, 0x96, 0x94, 0xe1, 0x19, 0xf3, 0xa7, 0x68, 0x1b, 0x2c,
0xad, 0x8b, 0xd0, 0x1b, 0x32, 0xe2, 0xdb, 0x77, 0x74, 0x3e, 0x40, 0x99, 0x4e, 0xb5, 0x45, 0x9d,
0x43, 0x9c, 0x8d, 0xd0, 0xbe, 0x7b, 0xf3, 0x39, 0x98, 0x60, 0x17, 0xe7, 0x60, 0x38, 0xe8, 0xd7,
0x00, 0x81, 0xf0, 0x26, 0x9e, 0x4f, 0x87, 0x34, 0xb4, 0xef, 0xe9, 0x4d, 0xd7, 0x33, 0x5f, 0xeb,
0x39, 0x0a, 0xa7, 0x18, 0xb5, 0xcf, 0xc1, 0x4a, 0xdd, 0x36, 0x75, 0x4b, 0x2e, 0xe9, 0xd4, 0x5c,
0x60, 0x35, 0x54, 0x29, 0x99, 0x10, 0x3f, 0x8a, 0x3b, 0xe1, 0x32, 0x8e, 0x27, 0xbf, 0x5c, 0x7d,
0x9c, 0xab, 0xed, 0x81, 0x95, 0x52, 0x1d, 0xfa, 0x18, 0x36, 0x04, 0x1d, 0x7a, 0xa1, 0x14, 0xd3,
0x01, 0x89, 0xe4, 0xc8, 0xfe, 0xad, 0x26, 0x54, 0x12, 0x63, 0x3b, 0x92, 0xa3, 0xda, 0x00, 0x16,
0x87, 0x87, 0x1a, 0x60, 0x29, 0x51, 0x84, 0x54, 0x4c, 0xa8, 0x50, 0xd5, 0x56, 0xe5, 0x3c, 0x6d,
0x52, 0xe2, 0x0d, 0x29, 0x11, 0xce, 0x48, 0xbf, 0x1d, 0x65, 0x6c, 0x66, 0xea, 0x31, 0x48, 0x6e,
0x88, 0x79, 0x0c, 0xcc, 0xb4, 0xf9, 0x9f, 0x1c, 0x54, 0xd2, 0x4d, 0x03, 0xda, 0x8f, 0x8b, 0xbd,
0xde, 0xd2, 0xad, 0xbd, 0xdd, 0x77, 0x35, 0x19, 0xba, 0xb4, 0xfa, 0x91, 0x72, 0x76, 0xac, 0xfa,
0x7b, 0x4d, 0x46, 0x3f, 0x87, 0xf5, 0x80, 0x0b, 0x99, 0x3c, 0x61, 0xd9, 0x09, 0xe6, 0x22, 0x29,
0x45, 0x31, 0xb8, 0x39, 0x82, 0x5b, 0xcb, 0xde, 0xd0, 0x43, 0x58, 0x7b, 0x7e, 0xd8, 0xaf, 0xae,
0xd4, 0xee, 0xbf, 0xbc, 0x6a, 0x7c, 0x7f, 0xf9, 0xe3, 0x73, 0x4f, 0xc8, 0x88, 0xf8, 0x87, 0x7d,
0xf4, 0x63, 0x58, 0xef, 0x9e, 0x9c, 0x62, 0x5c, 0xcd, 0xd5, 0xb6, 0x5f, 0x5e, 0x35, 0xee, 0x2f,
0xe3, 0xd4, 0x27, 0x1e, 0x31, 0x17, 0xf3, 0xf3, 0x79, 0xaf, 0xfb, 0xef, 0x55, 0xb0, 0xcc, 0xcb,
0xfe, 0xa1, 0x7f, 0x87, 0x36, 0xe2, 0x52, 0x9e, 0x5c, 0xd9, 0xd5, 0x77, 0x56, 0xf4, 0x4a, 0x4c,
0x30, 0x67, 0xfc, 0x00, 0x2a, 0x5e, 0x30, 0xf9, 0x6c, 0x40, 0x19, 0x39, 0xf7, 0x4d, 0xdb, 0x5b,
0xc2, 0x96, 0xb2, 0xf5, 0x62, 0x93, 0x7a, 0x2f, 0x3c, 0x26, 0xa9, 0x60, 0xa6, 0xa1, 0x2d, 0xe1,
0xf9, 0x1c, 0x7d, 0x01, 0x79, 0x2f, 0x20, 0x63, 0xd3, 0x86, 0x64, 0xee, 0xe0, 0xb0, 0xdf, 0x3e,
0x36, 0x1a, 0xec, 0x94, 0x66, 0xd7, 0xdb, 0x79, 0x65, 0xc0, 0x9a, 0x86, 0xea, 0x49, 0x27, 0xa0,
0x56, 0xd2, 0x6f, 0x7f, 0x09, 0xa7, 0x2c, 0x4a, 0x47, 0x1e, 0x1b, 0x0a, 0x1a, 0x86, 0xba, 0x0a,
0x94, 0x70, 0x32, 0x55, 0xf7, 0x36, 0xde, 0xf1, 0xe0, 0x42, 0xf0, 0xb1, 0x6e, 0x22, 0xca, 0x18,
0x62, 0xd3, 0x97, 0x82, 0x8f, 0x9b, 0xff, 0xcd, 0x83, 0xb5, 0xef, 0x47, 0xa1, 0x34, 0xc5, 0xef,
0x83, 0xa5, 0xfc, 0x05, 0x6c, 0x12, 0xfd, 0x53, 0x45, 0x98, 0xaa, 0x24, 0xba, 0x39, 0x33, 0x69,
0x7f, 0x98, 0xe9, 0x6e, 0x0e, 0x8e, 0x1b, 0xb9, 0x4e, 0x41, 0xf9, 0xb4, 0x73, 0xb8, 0x4a, 0x5e,
0xfb, 0x82, 0x4e, 0x61, 0x83, 0x0b, 0x67, 0x44, 0x43, 0x19, 0xd7, 0x1f, 0xf3, 0x13, 0x92, 0xf9,
0x7b, 0xfa, 0x2c, 0x0d, 0x34, 0x8f, 0x6f, 0x1c, 0xed, 0xb2, 0x0f, 0xf4, 0x18, 0xf2, 0x82, 0x5c,
0x24, 0x8d, 0x66, 0xe6, 0xd5, 0xc0, 0xe4, 0x42, 0x2e, 0xb9, 0xd0, 0x0c, 0xf4, 0x3b, 0x00, 0xd7,
0x0b, 0x03, 0x22, 0x9d, 0x11, 0x15, 0xe6, 0x88, 0x33, 0xb7, 0xd8, 0x9d, 0xa3, 0x96, 0xbc, 0xa4,
0xd8, 0xe8, 0x08, 0xca, 0x0e, 0x49, 0x44, 0x5a, 0xb8, 0xf9, 0xcf, 0x6c, 0xbf, 0x6d, 0x5c, 0x54,
0x95, 0x8b, 0xd9, 0xf5, 0x76, 0x29, 0xb1, 0xe0, 0x92, 0x43, 0x8c, 0x68, 0x8f, 0x60, 0x43, 0xfd,
0xb1, 0x0d, 0x5c, 0x7a, 0x41, 0x22, 0x5f, 0xc6, 0xe2, 0xb8, 0xa1, 0x98, 0xa8, 0xf6, 0xbf, 0x6b,
0x70, 0x26, 0xae, 0x8a, 0x4c, 0xd9, 0xd0, 0x1f, 0x60, 0x93, 0x32, 0x47, 0x4c, 0xb5, 0x44, 0x93,
0x08, 0x4b, 0x37, 0x6f, 0xb6, 0x37, 0x07, 0x2f, 0x6d, 0xb6, 0x4a, 0x5f, 0xb3, 0x37, 0x3d, 0x80,
0xb8, 0x3c, 0x7f, 0x58, 0xfd, 0x21, 0xc8, 0xbb, 0x44, 0x12, 0x2d, 0xb9, 0x0a, 0xd6, 0x63, 0xb5,
0x54, 0xbc, 0xe8, 0x77, 0xbe, 0x54, 0xc7, 0x7e, 0xf5, 0x6d, 0x7d, 0xe5, 0x9f, 0xdf, 0xd6, 0x57,
0xfe, 0x3c, 0xab, 0xe7, 0x5e, 0xcd, 0xea, 0xb9, 0xbf, 0xcf, 0xea, 0xb9, 0x7f, 0xcd, 0xea, 0xb9,
0xf3, 0x82, 0xee, 0x9f, 0x7e, 0xf6, 0xbf, 0x00, 0x00, 0x00, 0xff, 0xff, 0xa3, 0xb7, 0x5c, 0xc9,
0x78, 0x12, 0x00, 0x00,
}

View file

@ -341,6 +341,11 @@ message NetworkSpec {
// swarm internally created only and it was identified by the name
// "ingress" and the label "com.docker.swarm.internal": "true".
bool ingress = 7;
// ConfigFrom indicates that the network specific configuration
// for this network will be provided via another network, locally
// on the node where this network is being plumbed.
string config_from = 8;
}
// ClusterSpec specifies global cluster settings.

View file

@ -240,6 +240,7 @@ import io "io"
var _ = proto.Marshal
var _ = fmt.Errorf
var _ = math.Inf
var _ = time.Kitchen
// This is a compile-time assertion to ensure that this generated file
// is compatible with the proto package it is being compiled against.
@ -1213,6 +1214,8 @@ type NetworkAttachmentConfig struct {
// preferred. If these addresses are not available then the
// attachment might fail.
Addresses []string `protobuf:"bytes,3,rep,name=addresses" json:"addresses,omitempty"`
// DriverOpts is a map of driver specific options for the network target
DriverOpts map[string]string `protobuf:"bytes,4,rep,name=driver_opts,json=driverOpts" json:"driver_opts,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"`
}
func (m *NetworkAttachmentConfig) Reset() { *m = NetworkAttachmentConfig{} }
@ -2672,6 +2675,13 @@ func (m *NetworkAttachmentConfig) CopyFrom(src interface{}) {
copy(m.Addresses, o.Addresses)
}
if o.DriverOpts != nil {
m.DriverOpts = make(map[string]string, len(o.DriverOpts))
for k, v := range o.DriverOpts {
m.DriverOpts[k] = v
}
}
}
func (m *IPAMConfig) Copy() *IPAMConfig {
@ -4436,6 +4446,23 @@ func (m *NetworkAttachmentConfig) MarshalTo(dAtA []byte) (int, error) {
i += copy(dAtA[i:], s)
}
}
if len(m.DriverOpts) > 0 {
for k, _ := range m.DriverOpts {
dAtA[i] = 0x22
i++
v := m.DriverOpts[k]
mapSize := 1 + len(k) + sovTypes(uint64(len(k))) + 1 + len(v) + sovTypes(uint64(len(v)))
i = encodeVarintTypes(dAtA, i, uint64(mapSize))
dAtA[i] = 0xa
i++
i = encodeVarintTypes(dAtA, i, uint64(len(k)))
i += copy(dAtA[i:], k)
dAtA[i] = 0x12
i++
i = encodeVarintTypes(dAtA, i, uint64(len(v)))
i += copy(dAtA[i:], v)
}
}
return i, nil
}
@ -6322,6 +6349,14 @@ func (m *NetworkAttachmentConfig) Size() (n int) {
n += 1 + l + sovTypes(uint64(l))
}
}
if len(m.DriverOpts) > 0 {
for k, v := range m.DriverOpts {
_ = k
_ = v
mapEntrySize := 1 + len(k) + sovTypes(uint64(len(k))) + 1 + len(v) + sovTypes(uint64(len(v)))
n += mapEntrySize + 1 + sovTypes(uint64(mapEntrySize))
}
}
return n
}
@ -7298,10 +7333,21 @@ func (this *NetworkAttachmentConfig) String() string {
if this == nil {
return "nil"
}
keysForDriverOpts := make([]string, 0, len(this.DriverOpts))
for k, _ := range this.DriverOpts {
keysForDriverOpts = append(keysForDriverOpts, k)
}
github_com_gogo_protobuf_sortkeys.Strings(keysForDriverOpts)
mapStringForDriverOpts := "map[string]string{"
for _, k := range keysForDriverOpts {
mapStringForDriverOpts += fmt.Sprintf("%v: %v,", k, this.DriverOpts[k])
}
mapStringForDriverOpts += "}"
s := strings.Join([]string{`&NetworkAttachmentConfig{`,
`Target:` + fmt.Sprintf("%v", this.Target) + `,`,
`Aliases:` + fmt.Sprintf("%v", this.Aliases) + `,`,
`Addresses:` + fmt.Sprintf("%v", this.Addresses) + `,`,
`DriverOpts:` + mapStringForDriverOpts + `,`,
`}`,
}, "")
return s
@ -11199,6 +11245,122 @@ func (m *NetworkAttachmentConfig) Unmarshal(dAtA []byte) error {
}
m.Addresses = append(m.Addresses, string(dAtA[iNdEx:postIndex]))
iNdEx = postIndex
case 4:
if wireType != 2 {
return fmt.Errorf("proto: wrong wireType = %d for field DriverOpts", wireType)
}
var msglen int
for shift := uint(0); ; shift += 7 {
if shift >= 64 {
return ErrIntOverflowTypes
}
if iNdEx >= l {
return io.ErrUnexpectedEOF
}
b := dAtA[iNdEx]
iNdEx++
msglen |= (int(b) & 0x7F) << shift
if b < 0x80 {
break
}
}
if msglen < 0 {
return ErrInvalidLengthTypes
}
postIndex := iNdEx + msglen
if postIndex > l {
return io.ErrUnexpectedEOF
}
var keykey uint64
for shift := uint(0); ; shift += 7 {
if shift >= 64 {
return ErrIntOverflowTypes
}
if iNdEx >= l {
return io.ErrUnexpectedEOF
}
b := dAtA[iNdEx]
iNdEx++
keykey |= (uint64(b) & 0x7F) << shift
if b < 0x80 {
break
}
}
var stringLenmapkey uint64
for shift := uint(0); ; shift += 7 {
if shift >= 64 {
return ErrIntOverflowTypes
}
if iNdEx >= l {
return io.ErrUnexpectedEOF
}
b := dAtA[iNdEx]
iNdEx++
stringLenmapkey |= (uint64(b) & 0x7F) << shift
if b < 0x80 {
break
}
}
intStringLenmapkey := int(stringLenmapkey)
if intStringLenmapkey < 0 {
return ErrInvalidLengthTypes
}
postStringIndexmapkey := iNdEx + intStringLenmapkey
if postStringIndexmapkey > l {
return io.ErrUnexpectedEOF
}
mapkey := string(dAtA[iNdEx:postStringIndexmapkey])
iNdEx = postStringIndexmapkey
if m.DriverOpts == nil {
m.DriverOpts = make(map[string]string)
}
if iNdEx < postIndex {
var valuekey uint64
for shift := uint(0); ; shift += 7 {
if shift >= 64 {
return ErrIntOverflowTypes
}
if iNdEx >= l {
return io.ErrUnexpectedEOF
}
b := dAtA[iNdEx]
iNdEx++
valuekey |= (uint64(b) & 0x7F) << shift
if b < 0x80 {
break
}
}
var stringLenmapvalue uint64
for shift := uint(0); ; shift += 7 {
if shift >= 64 {
return ErrIntOverflowTypes
}
if iNdEx >= l {
return io.ErrUnexpectedEOF
}
b := dAtA[iNdEx]
iNdEx++
stringLenmapvalue |= (uint64(b) & 0x7F) << shift
if b < 0x80 {
break
}
}
intStringLenmapvalue := int(stringLenmapvalue)
if intStringLenmapvalue < 0 {
return ErrInvalidLengthTypes
}
postStringIndexmapvalue := iNdEx + intStringLenmapvalue
if postStringIndexmapvalue > l {
return io.ErrUnexpectedEOF
}
mapvalue := string(dAtA[iNdEx:postStringIndexmapvalue])
iNdEx = postStringIndexmapvalue
m.DriverOpts[mapkey] = mapvalue
} else {
var mapvalue string
m.DriverOpts[mapkey] = mapvalue
}
iNdEx = postIndex
default:
iNdEx = preIndex
skippy, err := skipTypes(dAtA[iNdEx:])
@ -16083,297 +16245,299 @@ var (
func init() { proto.RegisterFile("types.proto", fileDescriptorTypes) }
var fileDescriptorTypes = []byte{
// 4658 bytes of a gzipped FileDescriptorProto
// 4698 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xac, 0x5a, 0x4d, 0x6c, 0x23, 0x47,
0x76, 0x16, 0x7f, 0x45, 0x3e, 0x52, 0x52, 0x4f, 0x8d, 0x3c, 0xd6, 0xd0, 0x63, 0x49, 0x6e, 0x7b,
0xd6, 0x3f, 0xeb, 0xd0, 0xf3, 0x63, 0x1b, 0x63, 0x3b, 0x6b, 0x9b, 0x7f, 0x1a, 0x71, 0x47, 0x22,
0x89, 0x22, 0x35, 0xb3, 0x3e, 0x24, 0x8d, 0x56, 0x77, 0x89, 0x6a, 0xab, 0xd9, 0xc5, 0x74, 0x17,
0xa5, 0x61, 0x7e, 0x90, 0x41, 0x0e, 0x49, 0xa0, 0x53, 0x72, 0x0b, 0x10, 0x28, 0x97, 0xe4, 0x14,
0xe4, 0x96, 0x00, 0x41, 0x72, 0x89, 0x03, 0xe4, 0xe0, 0x5b, 0x36, 0x09, 0x10, 0x2c, 0x12, 0x40,
0x89, 0x75, 0xc8, 0x2d, 0x48, 0x2e, 0x8b, 0x5c, 0x12, 0x20, 0xa8, 0x9f, 0x6e, 0x36, 0x35, 0x94,
0x34, 0x5e, 0xef, 0x45, 0xea, 0x7a, 0xef, 0x7b, 0xaf, 0x5e, 0xbd, 0x7a, 0x55, 0xf5, 0x5e, 0x15,
0xa1, 0xc0, 0xc6, 0x43, 0x12, 0x94, 0x87, 0x3e, 0x65, 0x14, 0x21, 0x9b, 0x5a, 0x07, 0xc4, 0x2f,
0x07, 0x47, 0xa6, 0x3f, 0x38, 0x70, 0x58, 0xf9, 0xf0, 0x6e, 0x69, 0xad, 0x4f, 0x69, 0xdf, 0x25,
0xef, 0x09, 0xc4, 0xee, 0x68, 0xef, 0x3d, 0xe6, 0x0c, 0x48, 0xc0, 0xcc, 0xc1, 0x50, 0x0a, 0x95,
0x56, 0xcf, 0x03, 0xec, 0x91, 0x6f, 0x32, 0x87, 0x7a, 0x8a, 0xbf, 0xdc, 0xa7, 0x7d, 0x2a, 0x3e,
0xdf, 0xe3, 0x5f, 0x92, 0xaa, 0xaf, 0xc1, 0xfc, 0x63, 0xe2, 0x07, 0x0e, 0xf5, 0xd0, 0x32, 0x64,
0x1c, 0xcf, 0x26, 0x4f, 0x57, 0x12, 0xeb, 0x89, 0xb7, 0xd2, 0x58, 0x36, 0xf4, 0x3b, 0x00, 0x4d,
0xfe, 0xd1, 0xf0, 0x98, 0x3f, 0x46, 0x1a, 0xa4, 0x0e, 0xc8, 0x58, 0x20, 0xf2, 0x98, 0x7f, 0x72,
0xca, 0xa1, 0xe9, 0xae, 0x24, 0x25, 0xe5, 0xd0, 0x74, 0xf5, 0x6f, 0x12, 0x50, 0xa8, 0x78, 0x1e,
0x65, 0xa2, 0xf7, 0x00, 0x21, 0x48, 0x7b, 0xe6, 0x80, 0x28, 0x21, 0xf1, 0x8d, 0x6a, 0x90, 0x75,
0xcd, 0x5d, 0xe2, 0x06, 0x2b, 0xc9, 0xf5, 0xd4, 0x5b, 0x85, 0x7b, 0xdf, 0x2f, 0x3f, 0x3f, 0xe4,
0x72, 0x4c, 0x49, 0x79, 0x4b, 0xa0, 0x85, 0x11, 0x58, 0x89, 0xa2, 0x4f, 0x61, 0xde, 0xf1, 0x6c,
0xc7, 0x22, 0xc1, 0x4a, 0x5a, 0x68, 0x59, 0x9d, 0xa5, 0x65, 0x62, 0x7d, 0x35, 0xfd, 0xf5, 0xe9,
0xda, 0x1c, 0x0e, 0x85, 0x4a, 0x1f, 0x41, 0x21, 0xa6, 0x76, 0xc6, 0xd8, 0x96, 0x21, 0x73, 0x68,
0xba, 0x23, 0xa2, 0x46, 0x27, 0x1b, 0x1f, 0x27, 0x1f, 0x24, 0xf4, 0x2f, 0x20, 0x8f, 0x49, 0x40,
0x47, 0xbe, 0x45, 0x02, 0xf4, 0x36, 0xe4, 0x3d, 0xd3, 0xa3, 0x86, 0x35, 0x1c, 0x05, 0x42, 0x3c,
0x55, 0x2d, 0x9e, 0x9d, 0xae, 0xe5, 0x5a, 0xa6, 0x47, 0x6b, 0x9d, 0x9d, 0x00, 0xe7, 0x38, 0xbb,
0x36, 0x1c, 0x05, 0xe8, 0x35, 0x28, 0x0e, 0xc8, 0x80, 0xfa, 0x63, 0x63, 0x77, 0xcc, 0x48, 0x20,
0x14, 0xa7, 0x70, 0x41, 0xd2, 0xaa, 0x9c, 0xa4, 0xff, 0x5e, 0x02, 0x96, 0x43, 0xdd, 0x98, 0xfc,
0xca, 0xc8, 0xf1, 0xc9, 0x80, 0x78, 0x2c, 0x40, 0x1f, 0x40, 0xd6, 0x75, 0x06, 0x0e, 0x93, 0x7d,
0x14, 0xee, 0xbd, 0x3a, 0x6b, 0xb4, 0x91, 0x55, 0x58, 0x81, 0x51, 0x05, 0x8a, 0x3e, 0x09, 0x88,
0x7f, 0x28, 0x3d, 0x29, 0xba, 0xbc, 0x52, 0x78, 0x4a, 0x44, 0xdf, 0x80, 0x5c, 0xc7, 0x35, 0xd9,
0x1e, 0xf5, 0x07, 0x48, 0x87, 0xa2, 0xe9, 0x5b, 0xfb, 0x0e, 0x23, 0x16, 0x1b, 0xf9, 0xe1, 0xac,
0x4e, 0xd1, 0xd0, 0x0d, 0x48, 0x52, 0xd9, 0x51, 0xbe, 0x9a, 0x3d, 0x3b, 0x5d, 0x4b, 0xb6, 0xbb,
0x38, 0x49, 0x03, 0xfd, 0x13, 0xb8, 0xd6, 0x71, 0x47, 0x7d, 0xc7, 0xab, 0x93, 0xc0, 0xf2, 0x9d,
0x21, 0xd7, 0xce, 0xc3, 0x83, 0xc7, 0x7e, 0x18, 0x1e, 0xfc, 0x3b, 0x0a, 0x99, 0xe4, 0x24, 0x64,
0xf4, 0xdf, 0x49, 0xc2, 0xb5, 0x86, 0xd7, 0x77, 0x3c, 0x12, 0x97, 0xbe, 0x0d, 0x8b, 0x44, 0x10,
0x8d, 0x43, 0x19, 0xc6, 0x4a, 0xcf, 0x82, 0xa4, 0x86, 0xb1, 0xdd, 0x3c, 0x17, 0x6f, 0x77, 0x67,
0x0d, 0xff, 0x39, 0xed, 0x33, 0xa3, 0xae, 0x01, 0xf3, 0x43, 0x31, 0x88, 0x60, 0x25, 0x25, 0x74,
0xdd, 0x9e, 0xa5, 0xeb, 0xb9, 0x71, 0x86, 0xc1, 0xa7, 0x64, 0xbf, 0x4b, 0xf0, 0xfd, 0x59, 0x12,
0x96, 0x5a, 0xd4, 0x9e, 0xf2, 0x43, 0x09, 0x72, 0xfb, 0x34, 0x60, 0xb1, 0x85, 0x16, 0xb5, 0xd1,
0x03, 0xc8, 0x0d, 0xd5, 0xf4, 0xa9, 0xd9, 0xbf, 0x35, 0xdb, 0x64, 0x89, 0xc1, 0x11, 0x1a, 0x7d,
0x02, 0x79, 0x3f, 0x8c, 0x89, 0x95, 0xd4, 0x8b, 0x04, 0xce, 0x04, 0x8f, 0x7e, 0x00, 0x59, 0x39,
0x09, 0x2b, 0x69, 0x21, 0x79, 0xfb, 0x85, 0x7c, 0x8e, 0x95, 0x10, 0x7a, 0x08, 0x39, 0xe6, 0x06,
0x86, 0xe3, 0xed, 0xd1, 0x95, 0x8c, 0x50, 0xb0, 0x36, 0x4b, 0x01, 0x77, 0x44, 0x6f, 0xab, 0xdb,
0xf4, 0xf6, 0x68, 0xb5, 0x70, 0x76, 0xba, 0x36, 0xaf, 0x1a, 0x78, 0x9e, 0xb9, 0x01, 0xff, 0xd0,
0x7f, 0x3f, 0x01, 0x85, 0x18, 0x0a, 0xbd, 0x0a, 0xc0, 0xfc, 0x51, 0xc0, 0x0c, 0x9f, 0x52, 0x26,
0x9c, 0x55, 0xc4, 0x79, 0x41, 0xc1, 0x94, 0x32, 0x54, 0x86, 0xeb, 0x16, 0xf1, 0x99, 0xe1, 0x04,
0xc1, 0x88, 0xf8, 0x46, 0x30, 0xda, 0xfd, 0x92, 0x58, 0x4c, 0x38, 0xae, 0x88, 0xaf, 0x71, 0x56,
0x53, 0x70, 0xba, 0x92, 0x81, 0xee, 0xc3, 0x8d, 0x38, 0x7e, 0x38, 0xda, 0x75, 0x1d, 0xcb, 0xe0,
0x93, 0x99, 0x12, 0x22, 0xd7, 0x27, 0x22, 0x1d, 0xc1, 0x7b, 0x44, 0xc6, 0xfa, 0x4f, 0x12, 0xa0,
0x61, 0x73, 0x8f, 0x6d, 0x93, 0xc1, 0x2e, 0xf1, 0xbb, 0xcc, 0x64, 0xa3, 0x00, 0xdd, 0x80, 0xac,
0x4b, 0x4c, 0x9b, 0xf8, 0xc2, 0xa8, 0x1c, 0x56, 0x2d, 0xb4, 0xc3, 0x57, 0xb0, 0x69, 0xed, 0x9b,
0xbb, 0x8e, 0xeb, 0xb0, 0xb1, 0x30, 0x65, 0x71, 0x76, 0x08, 0x9f, 0xd7, 0x59, 0xc6, 0x31, 0x41,
0x3c, 0xa5, 0x06, 0xad, 0xc0, 0xfc, 0x80, 0x04, 0x81, 0xd9, 0x27, 0xc2, 0xd2, 0x3c, 0x0e, 0x9b,
0xfa, 0x27, 0x50, 0x8c, 0xcb, 0xa1, 0x02, 0xcc, 0xef, 0xb4, 0x1e, 0xb5, 0xda, 0x4f, 0x5a, 0xda,
0x1c, 0x5a, 0x82, 0xc2, 0x4e, 0x0b, 0x37, 0x2a, 0xb5, 0xcd, 0x4a, 0x75, 0xab, 0xa1, 0x25, 0xd0,
0x02, 0xe4, 0x27, 0xcd, 0xa4, 0xfe, 0xe7, 0x09, 0x00, 0xee, 0x6e, 0x35, 0xa8, 0x8f, 0x21, 0x13,
0x30, 0x93, 0xc9, 0xa8, 0x5c, 0xbc, 0xf7, 0xc6, 0x45, 0x73, 0xa8, 0xec, 0xe5, 0xff, 0x08, 0x96,
0x22, 0x71, 0x0b, 0x93, 0x53, 0x16, 0xf2, 0x0d, 0xc2, 0xb4, 0x6d, 0x5f, 0x19, 0x2e, 0xbe, 0xf5,
0x4f, 0x20, 0x23, 0xa4, 0xa7, 0xcd, 0xcd, 0x41, 0xba, 0xce, 0xbf, 0x12, 0x28, 0x0f, 0x19, 0xdc,
0xa8, 0xd4, 0xbf, 0xd0, 0x92, 0x48, 0x83, 0x62, 0xbd, 0xd9, 0xad, 0xb5, 0x5b, 0xad, 0x46, 0xad,
0xd7, 0xa8, 0x6b, 0x29, 0xfd, 0x36, 0x64, 0x9a, 0x03, 0xae, 0xf9, 0x16, 0x0f, 0xf9, 0x3d, 0xe2,
0x13, 0xcf, 0x0a, 0x57, 0xd2, 0x84, 0xa0, 0xff, 0x38, 0x0f, 0x99, 0x6d, 0x3a, 0xf2, 0x18, 0xba,
0x17, 0xdb, 0xb6, 0x16, 0x67, 0x9f, 0x3c, 0x02, 0x58, 0xee, 0x8d, 0x87, 0x44, 0x6d, 0x6b, 0x37,
0x20, 0x2b, 0x17, 0x87, 0x1a, 0x8e, 0x6a, 0x71, 0x3a, 0x33, 0xfd, 0x3e, 0x61, 0x6a, 0x3c, 0xaa,
0x85, 0xde, 0x82, 0x9c, 0x4f, 0x4c, 0x9b, 0x7a, 0xee, 0x58, 0xac, 0xa1, 0x9c, 0x3c, 0x57, 0x30,
0x31, 0xed, 0xb6, 0xe7, 0x8e, 0x71, 0xc4, 0x45, 0x9b, 0x50, 0xdc, 0x75, 0x3c, 0xdb, 0xa0, 0x43,
0xb9, 0xc9, 0x67, 0x2e, 0x5e, 0x71, 0xd2, 0xaa, 0xaa, 0xe3, 0xd9, 0x6d, 0x09, 0xc6, 0x85, 0xdd,
0x49, 0x03, 0xb5, 0x60, 0xf1, 0x90, 0xba, 0xa3, 0x01, 0x89, 0x74, 0x65, 0x85, 0xae, 0x37, 0x2f,
0xd6, 0xf5, 0x58, 0xe0, 0x43, 0x6d, 0x0b, 0x87, 0xf1, 0x26, 0x7a, 0x04, 0x0b, 0x6c, 0x30, 0xdc,
0x0b, 0x22, 0x75, 0xf3, 0x42, 0xdd, 0xf7, 0x2e, 0x71, 0x18, 0x87, 0x87, 0xda, 0x8a, 0x2c, 0xd6,
0x2a, 0xfd, 0x56, 0x0a, 0x0a, 0x31, 0xcb, 0x51, 0x17, 0x0a, 0x43, 0x9f, 0x0e, 0xcd, 0xbe, 0x38,
0xa8, 0xd4, 0x5c, 0xdc, 0x7d, 0xa1, 0x51, 0x97, 0x3b, 0x13, 0x41, 0x1c, 0xd7, 0xa2, 0x9f, 0x24,
0xa1, 0x10, 0x63, 0xa2, 0x77, 0x20, 0x87, 0x3b, 0xb8, 0xf9, 0xb8, 0xd2, 0x6b, 0x68, 0x73, 0xa5,
0x5b, 0xc7, 0x27, 0xeb, 0x2b, 0x42, 0x5b, 0x5c, 0x41, 0xc7, 0x77, 0x0e, 0x79, 0xe8, 0xbd, 0x05,
0xf3, 0x21, 0x34, 0x51, 0x7a, 0xe5, 0xf8, 0x64, 0xfd, 0xe5, 0xf3, 0xd0, 0x18, 0x12, 0x77, 0x37,
0x2b, 0xb8, 0x51, 0xd7, 0x92, 0xb3, 0x91, 0xb8, 0xbb, 0x6f, 0xfa, 0xc4, 0x46, 0xdf, 0x83, 0xac,
0x02, 0xa6, 0x4a, 0xa5, 0xe3, 0x93, 0xf5, 0x1b, 0xe7, 0x81, 0x13, 0x1c, 0xee, 0x6e, 0x55, 0x1e,
0x37, 0xb4, 0xf4, 0x6c, 0x1c, 0xee, 0xba, 0xe6, 0x21, 0x41, 0x6f, 0x40, 0x46, 0xc2, 0x32, 0xa5,
0x9b, 0xc7, 0x27, 0xeb, 0x2f, 0x3d, 0xa7, 0x8e, 0xa3, 0x4a, 0x2b, 0xbf, 0xfb, 0xc7, 0xab, 0x73,
0x7f, 0xfd, 0x27, 0xab, 0xda, 0x79, 0x76, 0xe9, 0x7f, 0x13, 0xb0, 0x30, 0x35, 0xe5, 0x48, 0x87,
0xac, 0x47, 0x2d, 0x3a, 0x94, 0xe7, 0x57, 0xae, 0x0a, 0x67, 0xa7, 0x6b, 0xd9, 0x16, 0xad, 0xd1,
0xe1, 0x18, 0x2b, 0x0e, 0x7a, 0x74, 0xee, 0x04, 0xbe, 0xff, 0x82, 0xf1, 0x34, 0xf3, 0x0c, 0xfe,
0x0c, 0x16, 0x6c, 0xdf, 0x39, 0x24, 0xbe, 0x61, 0x51, 0x6f, 0xcf, 0xe9, 0xab, 0xb3, 0xa9, 0x34,
0x4b, 0x67, 0x5d, 0x00, 0x71, 0x51, 0x0a, 0xd4, 0x04, 0xfe, 0x3b, 0x9c, 0xbe, 0xa5, 0xc7, 0x50,
0x8c, 0x47, 0x28, 0x3f, 0x4e, 0x02, 0xe7, 0x57, 0x89, 0x4a, 0xe8, 0x44, 0xfa, 0x87, 0xf3, 0x9c,
0x22, 0xd2, 0x39, 0xf4, 0x26, 0xa4, 0x07, 0xd4, 0x96, 0x7a, 0x16, 0xaa, 0xd7, 0x79, 0x12, 0xf0,
0x2f, 0xa7, 0x6b, 0x05, 0x1a, 0x94, 0x37, 0x1c, 0x97, 0x6c, 0x53, 0x9b, 0x60, 0x01, 0xd0, 0x0f,
0x21, 0xcd, 0xb7, 0x0a, 0xf4, 0x0a, 0xa4, 0xab, 0xcd, 0x56, 0x5d, 0x9b, 0x2b, 0x5d, 0x3b, 0x3e,
0x59, 0x5f, 0x10, 0x2e, 0xe1, 0x0c, 0x1e, 0xbb, 0x68, 0x0d, 0xb2, 0x8f, 0xdb, 0x5b, 0x3b, 0xdb,
0x3c, 0xbc, 0xae, 0x1f, 0x9f, 0xac, 0x2f, 0x45, 0x6c, 0xe9, 0x34, 0xf4, 0x2a, 0x64, 0x7a, 0xdb,
0x9d, 0x8d, 0xae, 0x96, 0x2c, 0xa1, 0xe3, 0x93, 0xf5, 0xc5, 0x88, 0x2f, 0x6c, 0x2e, 0x5d, 0x53,
0xb3, 0x9a, 0x8f, 0xe8, 0xfa, 0x4f, 0x93, 0xb0, 0x80, 0x79, 0x25, 0xe1, 0xb3, 0x0e, 0x75, 0x1d,
0x6b, 0x8c, 0x3a, 0x90, 0xb7, 0xa8, 0x67, 0x3b, 0xb1, 0x35, 0x75, 0xef, 0x82, 0x53, 0x7f, 0x22,
0x15, 0xb6, 0x6a, 0xa1, 0x24, 0x9e, 0x28, 0x41, 0xef, 0x41, 0xc6, 0x26, 0xae, 0x39, 0x56, 0xe9,
0xc7, 0xcd, 0xb2, 0xac, 0x55, 0xca, 0x61, 0xad, 0x52, 0xae, 0xab, 0x5a, 0x05, 0x4b, 0x9c, 0xc8,
0x93, 0xcd, 0xa7, 0x86, 0xc9, 0x18, 0x19, 0x0c, 0x99, 0xcc, 0x3d, 0xd2, 0xb8, 0x30, 0x30, 0x9f,
0x56, 0x14, 0x09, 0xdd, 0x85, 0xec, 0x91, 0xe3, 0xd9, 0xf4, 0x48, 0xa5, 0x17, 0x97, 0x28, 0x55,
0x40, 0xfd, 0x98, 0x9f, 0xba, 0xe7, 0xcc, 0xe4, 0xfe, 0x6e, 0xb5, 0x5b, 0x8d, 0xd0, 0xdf, 0x8a,
0xdf, 0xf6, 0x5a, 0xd4, 0xe3, 0x6b, 0x05, 0xda, 0x2d, 0x63, 0xa3, 0xd2, 0xdc, 0xda, 0xc1, 0xdc,
0xe7, 0xcb, 0xc7, 0x27, 0xeb, 0x5a, 0x04, 0xd9, 0x30, 0x1d, 0x97, 0xe7, 0xbb, 0x37, 0x21, 0x55,
0x69, 0x7d, 0xa1, 0x25, 0x4b, 0xda, 0xf1, 0xc9, 0x7a, 0x31, 0x62, 0x57, 0xbc, 0xf1, 0x64, 0x19,
0x9d, 0xef, 0x57, 0xff, 0xfb, 0x14, 0x14, 0x77, 0x86, 0xb6, 0xc9, 0x88, 0x8c, 0x49, 0xb4, 0x0e,
0x85, 0xa1, 0xe9, 0x9b, 0xae, 0x4b, 0x5c, 0x27, 0x18, 0xa8, 0x2a, 0x2c, 0x4e, 0x42, 0x1f, 0xbd,
0xa8, 0x1b, 0xab, 0x39, 0x1e, 0x67, 0x7f, 0xf0, 0x6f, 0x6b, 0x89, 0xd0, 0xa1, 0x3b, 0xb0, 0xb8,
0x27, 0xad, 0x35, 0x4c, 0x4b, 0x4c, 0x6c, 0x4a, 0x4c, 0x6c, 0x79, 0xd6, 0xc4, 0xc6, 0xcd, 0x2a,
0xab, 0x41, 0x56, 0x84, 0x14, 0x5e, 0xd8, 0x8b, 0x37, 0xd1, 0x7d, 0x98, 0x1f, 0x50, 0xcf, 0x61,
0xd4, 0xbf, 0x7a, 0x16, 0x42, 0x24, 0x7a, 0x07, 0xae, 0xf1, 0xc9, 0x0d, 0xed, 0x11, 0x6c, 0x71,
0x62, 0x25, 0xf1, 0xd2, 0xc0, 0x7c, 0xaa, 0x3a, 0xc4, 0x9c, 0x8c, 0xaa, 0x90, 0xa1, 0x3e, 0x4f,
0x89, 0xb2, 0xc2, 0xdc, 0x77, 0xaf, 0x34, 0x57, 0x36, 0xda, 0x5c, 0x06, 0x4b, 0x51, 0xfd, 0x43,
0x58, 0x98, 0x1a, 0x04, 0xcf, 0x04, 0x3a, 0x95, 0x9d, 0x6e, 0x43, 0x9b, 0x43, 0x45, 0xc8, 0xd5,
0xda, 0xad, 0x5e, 0xb3, 0xb5, 0xc3, 0x53, 0x99, 0x22, 0xe4, 0x70, 0x7b, 0x6b, 0xab, 0x5a, 0xa9,
0x3d, 0xd2, 0x92, 0x7a, 0x19, 0x0a, 0x31, 0x6d, 0x68, 0x11, 0xa0, 0xdb, 0x6b, 0x77, 0x8c, 0x8d,
0x26, 0xee, 0xf6, 0x64, 0x22, 0xd4, 0xed, 0x55, 0x70, 0x4f, 0x11, 0x12, 0xfa, 0x7f, 0x25, 0xc3,
0x19, 0x55, 0xb9, 0x4f, 0x75, 0x3a, 0xf7, 0xb9, 0xc4, 0x78, 0x95, 0xfd, 0x4c, 0x1a, 0x51, 0x0e,
0xf4, 0x11, 0x80, 0x08, 0x1c, 0x62, 0x1b, 0x26, 0x53, 0x13, 0x5f, 0x7a, 0xce, 0xc9, 0xbd, 0xf0,
0x32, 0x00, 0xe7, 0x15, 0xba, 0xc2, 0xd0, 0x0f, 0xa0, 0x68, 0xd1, 0xc1, 0xd0, 0x25, 0x4a, 0x38,
0x75, 0xa5, 0x70, 0x21, 0xc2, 0x57, 0x58, 0x3c, 0xfb, 0x4a, 0x4f, 0xe7, 0x87, 0xbf, 0x9d, 0x08,
0x3d, 0x33, 0x23, 0xe1, 0x2a, 0x42, 0x6e, 0xa7, 0x53, 0xaf, 0xf4, 0x9a, 0xad, 0x87, 0x5a, 0x02,
0x01, 0x64, 0x85, 0xab, 0xeb, 0x5a, 0x92, 0x27, 0x8a, 0xb5, 0xf6, 0x76, 0x67, 0xab, 0x21, 0x52,
0x2e, 0xb4, 0x0c, 0x5a, 0xe8, 0x6c, 0x43, 0x38, 0xb2, 0x51, 0xd7, 0xd2, 0xe8, 0x3a, 0x2c, 0x45,
0x54, 0x25, 0x99, 0x41, 0x37, 0x00, 0x45, 0xc4, 0x89, 0x8a, 0xac, 0xfe, 0x1b, 0xb0, 0x54, 0xa3,
0x1e, 0x33, 0x1d, 0x2f, 0x4a, 0xa2, 0xef, 0xf1, 0x41, 0x2b, 0x92, 0xe1, 0xd8, 0x72, 0x4f, 0xaf,
0x2e, 0x9d, 0x9d, 0xae, 0x15, 0x22, 0x68, 0xb3, 0xce, 0x47, 0x1a, 0x36, 0x6c, 0xbe, 0x7e, 0x87,
0x8e, 0x2d, 0x9c, 0x9b, 0xa9, 0xce, 0x9f, 0x9d, 0xae, 0xa5, 0x3a, 0xcd, 0x3a, 0xe6, 0x34, 0xf4,
0x0a, 0xe4, 0xc9, 0x53, 0x87, 0x19, 0x16, 0xdf, 0xc3, 0xb9, 0x03, 0x33, 0x38, 0xc7, 0x09, 0x35,
0xbe, 0x65, 0x57, 0x01, 0x3a, 0xd4, 0x67, 0xaa, 0xe7, 0xf7, 0x21, 0x33, 0xa4, 0xbe, 0x28, 0xcf,
0x2f, 0xbc, 0x8c, 0xe0, 0x70, 0x19, 0xa8, 0x58, 0x82, 0xf5, 0xbf, 0x49, 0x02, 0xf4, 0xcc, 0xe0,
0x40, 0x29, 0x79, 0x00, 0xf9, 0xe8, 0x62, 0x47, 0xd5, 0xf9, 0x97, 0xce, 0x76, 0x04, 0x46, 0xf7,
0xc3, 0x60, 0x93, 0xe5, 0xc1, 0xcc, 0x3a, 0x2d, 0xec, 0x68, 0x56, 0x86, 0x3d, 0x5d, 0x03, 0xf0,
0x23, 0x91, 0xf8, 0xbe, 0x9a, 0x79, 0xfe, 0x89, 0x6a, 0xe2, 0x58, 0x90, 0x4e, 0x53, 0x09, 0xe6,
0xeb, 0xb3, 0x3a, 0x39, 0x37, 0x23, 0x9b, 0x73, 0x78, 0x22, 0x87, 0x3e, 0x83, 0x02, 0x1f, 0xb7,
0x11, 0x08, 0x9e, 0xca, 0x2d, 0x2f, 0x74, 0x95, 0xd4, 0x80, 0x61, 0x18, 0x7d, 0x57, 0x35, 0x58,
0xf4, 0x47, 0x1e, 0x1f, 0xb6, 0xd2, 0xa1, 0x3b, 0xf0, 0x72, 0x8b, 0xb0, 0x23, 0xea, 0x1f, 0x54,
0x18, 0x33, 0xad, 0xfd, 0x01, 0xf1, 0x94, 0x8f, 0x63, 0x89, 0x75, 0x62, 0x2a, 0xb1, 0x5e, 0x81,
0x79, 0xd3, 0x75, 0xcc, 0x80, 0xc8, 0x6c, 0x24, 0x8f, 0xc3, 0x26, 0x4f, 0xff, 0x79, 0x31, 0x41,
0x82, 0x80, 0xc8, 0xfa, 0x3e, 0x8f, 0x27, 0x04, 0xfd, 0x9f, 0x92, 0x00, 0xcd, 0x4e, 0x65, 0x5b,
0xa9, 0xaf, 0x43, 0x76, 0xcf, 0x1c, 0x38, 0xee, 0xf8, 0xb2, 0x05, 0x3e, 0xc1, 0x97, 0x2b, 0x52,
0xd1, 0x86, 0x90, 0xc1, 0x4a, 0x56, 0x54, 0x05, 0xa3, 0x5d, 0x8f, 0xb0, 0xa8, 0x2a, 0x10, 0x2d,
0x9e, 0x82, 0xf8, 0xa6, 0x17, 0xcd, 0x8c, 0x6c, 0x70, 0xd3, 0xfb, 0x26, 0x23, 0x47, 0xe6, 0x38,
0x5c, 0x95, 0xaa, 0x89, 0x36, 0x79, 0xb5, 0x10, 0x10, 0xff, 0x90, 0xd8, 0x2b, 0x19, 0x11, 0x82,
0x57, 0xd9, 0x83, 0x15, 0x5c, 0x26, 0x57, 0x91, 0x74, 0xe9, 0x13, 0x91, 0x11, 0x4c, 0x58, 0xdf,
0xea, 0x76, 0xe2, 0x0e, 0x2c, 0x4c, 0x8d, 0xf3, 0xb9, 0x72, 0xac, 0xd9, 0x79, 0xfc, 0xbe, 0x96,
0x56, 0x5f, 0x1f, 0x6a, 0x59, 0xfd, 0x4f, 0x53, 0x72, 0x1d, 0x29, 0xaf, 0xce, 0xbe, 0x2f, 0xcc,
0x89, 0xe8, 0xb7, 0xa8, 0xab, 0xe2, 0xfb, 0xcd, 0xcb, 0x97, 0x17, 0x4f, 0xef, 0x05, 0x1c, 0x47,
0x82, 0x68, 0x0d, 0x0a, 0x72, 0xfe, 0x0d, 0x1e, 0x4f, 0xc2, 0xad, 0x0b, 0x18, 0x24, 0x89, 0x4b,
0xa2, 0xdb, 0xb0, 0x28, 0xca, 0xf7, 0x60, 0x9f, 0xd8, 0x12, 0x93, 0x16, 0x98, 0x85, 0x88, 0x2a,
0x60, 0xdb, 0x50, 0x54, 0x04, 0x43, 0xa4, 0x76, 0x19, 0x61, 0xd0, 0x3b, 0x57, 0x19, 0x24, 0x45,
0x44, 0xc6, 0x57, 0x18, 0x4e, 0x1a, 0x7a, 0x1d, 0x72, 0xa1, 0xb1, 0x68, 0x05, 0x52, 0xbd, 0x5a,
0x47, 0x9b, 0x2b, 0x2d, 0x1d, 0x9f, 0xac, 0x17, 0x42, 0x72, 0xaf, 0xd6, 0xe1, 0x9c, 0x9d, 0x7a,
0x47, 0x4b, 0x4c, 0x73, 0x76, 0xea, 0x9d, 0x52, 0x9a, 0xa7, 0x18, 0xfa, 0x1e, 0x14, 0x62, 0x3d,
0xa0, 0xd7, 0x61, 0xbe, 0xd9, 0x7a, 0x88, 0x1b, 0xdd, 0xae, 0x36, 0x57, 0xba, 0x71, 0x7c, 0xb2,
0x8e, 0x62, 0xdc, 0xa6, 0xd7, 0xe7, 0xf3, 0x83, 0x5e, 0x85, 0xf4, 0x66, 0x9b, 0x1f, 0x5d, 0x32,
0x97, 0x8c, 0x21, 0x36, 0x69, 0xc0, 0x4a, 0xd7, 0x55, 0xee, 0x12, 0x57, 0xac, 0xff, 0x61, 0x02,
0xb2, 0x32, 0xa5, 0x9e, 0x39, 0x51, 0x15, 0x98, 0x0f, 0x0b, 0x3d, 0x99, 0xe7, 0xbf, 0x79, 0x71,
0x4e, 0x5e, 0x56, 0x29, 0xb4, 0x0c, 0xbf, 0x50, 0xae, 0xf4, 0x31, 0x14, 0xe3, 0x8c, 0x6f, 0x15,
0x7c, 0xbf, 0x06, 0x05, 0x1e, 0xdf, 0x61, 0x6e, 0x7e, 0x0f, 0xb2, 0x32, 0xed, 0x8f, 0xb6, 0xd2,
0x8b, 0x0b, 0x04, 0x85, 0x44, 0x0f, 0x60, 0x5e, 0x16, 0x15, 0xe1, 0xfd, 0xde, 0xea, 0xe5, 0xab,
0x08, 0x87, 0x70, 0xfd, 0x33, 0x48, 0x77, 0x08, 0xf1, 0xb9, 0xef, 0x3d, 0x6a, 0x93, 0xc9, 0xe9,
0xa3, 0xea, 0x21, 0x9b, 0x34, 0xeb, 0xbc, 0x1e, 0xb2, 0x49, 0xd3, 0x8e, 0x6e, 0x30, 0x92, 0xb1,
0x1b, 0x8c, 0x1e, 0x14, 0x9f, 0x10, 0xa7, 0xbf, 0xcf, 0x88, 0x2d, 0x14, 0xbd, 0x0b, 0xe9, 0x21,
0x89, 0x8c, 0x5f, 0x99, 0x19, 0x60, 0x84, 0xf8, 0x58, 0xa0, 0xf8, 0x3e, 0x72, 0x24, 0xa4, 0xd5,
0xad, 0xb2, 0x6a, 0xe9, 0xff, 0x98, 0x84, 0xc5, 0x66, 0x10, 0x8c, 0x4c, 0xcf, 0x0a, 0x13, 0x93,
0x4f, 0xa7, 0x13, 0x93, 0xb7, 0x66, 0x8e, 0x70, 0x4a, 0x64, 0xfa, 0x62, 0x46, 0x1d, 0x0e, 0xc9,
0xe8, 0x70, 0xd0, 0xff, 0x33, 0x11, 0xde, 0xbe, 0xdc, 0x8e, 0x2d, 0xf7, 0xd2, 0xca, 0xf1, 0xc9,
0xfa, 0x72, 0x5c, 0x13, 0xd9, 0xf1, 0x0e, 0x3c, 0x7a, 0xe4, 0xa1, 0xd7, 0x20, 0x83, 0x1b, 0xad,
0xc6, 0x13, 0x2d, 0x21, 0xc3, 0x73, 0x0a, 0x84, 0x89, 0x47, 0x8e, 0xb8, 0xa6, 0x4e, 0xa3, 0x55,
0xe7, 0x89, 0x44, 0x72, 0x86, 0xa6, 0x0e, 0xf1, 0x6c, 0xc7, 0xeb, 0xa3, 0xd7, 0x21, 0xdb, 0xec,
0x76, 0x77, 0x44, 0x7d, 0xfc, 0xf2, 0xf1, 0xc9, 0xfa, 0xf5, 0x29, 0x94, 0xb8, 0x79, 0xb3, 0x39,
0x88, 0x67, 0xf1, 0x3c, 0xc5, 0x98, 0x01, 0xe2, 0xe9, 0xa1, 0x04, 0xe1, 0x76, 0x8f, 0x17, 0xef,
0x99, 0x19, 0x20, 0x4c, 0xf9, 0x5f, 0xb5, 0xdc, 0xfe, 0x35, 0x09, 0x5a, 0xc5, 0xb2, 0xc8, 0x90,
0x71, 0xbe, 0x2a, 0x9c, 0x7a, 0x90, 0x1b, 0xf2, 0x2f, 0x87, 0x84, 0x49, 0xc0, 0x83, 0x99, 0xef,
0x1a, 0xe7, 0xe4, 0xca, 0x98, 0xba, 0xa4, 0x62, 0x0f, 0x9c, 0x20, 0x70, 0xa8, 0x27, 0x69, 0x38,
0xd2, 0x54, 0xfa, 0xef, 0x04, 0x5c, 0x9f, 0x81, 0x40, 0x77, 0x20, 0xed, 0x53, 0x37, 0x9c, 0xc3,
0x5b, 0x17, 0x5d, 0xac, 0x71, 0x51, 0x2c, 0x90, 0x68, 0x15, 0xc0, 0x1c, 0x31, 0x6a, 0x8a, 0xfe,
0xc5, 0xec, 0xe5, 0x70, 0x8c, 0x82, 0x9e, 0x40, 0x36, 0x20, 0x96, 0x4f, 0xc2, 0x54, 0xf1, 0xb3,
0x9f, 0xd5, 0xfa, 0x72, 0x57, 0xa8, 0xc1, 0x4a, 0x5d, 0xa9, 0x0c, 0x59, 0x49, 0xe1, 0x61, 0x6f,
0x9b, 0xcc, 0x54, 0xd7, 0xae, 0xe2, 0x9b, 0x47, 0x93, 0xe9, 0xf6, 0xc3, 0x68, 0x32, 0xdd, 0xbe,
0xfe, 0x77, 0x49, 0x80, 0xc6, 0x53, 0x46, 0x7c, 0xcf, 0x74, 0x6b, 0x15, 0xd4, 0x88, 0xed, 0xfe,
0x72, 0xb4, 0x6f, 0xcf, 0xbc, 0x4b, 0x8e, 0x24, 0xca, 0xb5, 0xca, 0x8c, 0xfd, 0xff, 0x26, 0xa4,
0x46, 0xbe, 0x7a, 0xaa, 0x92, 0x69, 0xde, 0x0e, 0xde, 0xc2, 0x9c, 0x86, 0x1a, 0x93, 0x6d, 0x2b,
0x75, 0xf1, 0x83, 0x54, 0xac, 0x83, 0x99, 0x5b, 0x17, 0x5f, 0xf9, 0x96, 0x69, 0x58, 0x44, 0x9d,
0x1c, 0x45, 0xb9, 0xf2, 0x6b, 0x95, 0x1a, 0xf1, 0x19, 0xce, 0x5a, 0x26, 0xff, 0xff, 0x9d, 0xf6,
0xb7, 0x77, 0x01, 0x26, 0x43, 0x43, 0xab, 0x90, 0xa9, 0x6d, 0x74, 0xbb, 0x5b, 0xda, 0x9c, 0xdc,
0xc0, 0x27, 0x2c, 0x41, 0xd6, 0xff, 0x2a, 0x09, 0xb9, 0x5a, 0x45, 0x1d, 0xab, 0x35, 0xd0, 0xc4,
0xae, 0x24, 0x2e, 0xab, 0xc9, 0xd3, 0xa1, 0xe3, 0x8f, 0xd5, 0xc6, 0x72, 0x49, 0xcd, 0xb6, 0xc8,
0x45, 0xb8, 0xd5, 0x0d, 0x21, 0x80, 0x30, 0x14, 0x89, 0x72, 0x82, 0x61, 0x99, 0xe1, 0x1e, 0xbf,
0x7a, 0xb9, 0xb3, 0x64, 0xf6, 0x3d, 0x69, 0x07, 0xb8, 0x10, 0x2a, 0xa9, 0x99, 0x01, 0xfa, 0x08,
0x96, 0x02, 0xa7, 0xef, 0x39, 0x5e, 0xdf, 0x08, 0x9d, 0x27, 0x6e, 0xce, 0xab, 0xd7, 0xce, 0x4e,
0xd7, 0x16, 0xba, 0x92, 0xa5, 0x7c, 0xb8, 0xa0, 0x90, 0x35, 0xe1, 0x4a, 0xf4, 0x21, 0x2c, 0xc6,
0x44, 0xb9, 0x17, 0xa5, 0xdb, 0xb5, 0xb3, 0xd3, 0xb5, 0x62, 0x24, 0xf9, 0x88, 0x8c, 0x71, 0x31,
0x12, 0x7c, 0x44, 0xc4, 0xf5, 0xc2, 0x1e, 0xf5, 0x2d, 0x62, 0xf8, 0x62, 0x4d, 0x8b, 0x13, 0x3c,
0x8d, 0x0b, 0x82, 0x26, 0x97, 0xb9, 0xfe, 0x18, 0xae, 0xb7, 0x7d, 0x6b, 0x9f, 0x04, 0x4c, 0xba,
0x42, 0x79, 0xf1, 0x33, 0xb8, 0xc5, 0xcc, 0xe0, 0xc0, 0xd8, 0x77, 0x02, 0x46, 0xfd, 0xb1, 0xe1,
0x13, 0x46, 0x3c, 0xce, 0x37, 0xc4, 0x73, 0x9b, 0xba, 0xff, 0xb9, 0xc9, 0x31, 0x9b, 0x12, 0x82,
0x43, 0xc4, 0x16, 0x07, 0xe8, 0x4d, 0x28, 0xf2, 0x2c, 0xbc, 0x4e, 0xf6, 0xcc, 0x91, 0xcb, 0xf8,
0xe8, 0xc1, 0xa5, 0x7d, 0xe3, 0x85, 0x8f, 0xa9, 0xbc, 0x4b, 0xfb, 0xf2, 0x53, 0xff, 0x11, 0x68,
0x75, 0x27, 0x18, 0x9a, 0xcc, 0xda, 0x0f, 0x2f, 0xb6, 0x50, 0x1d, 0xb4, 0x7d, 0x62, 0xfa, 0x6c,
0x97, 0x98, 0xcc, 0x18, 0x12, 0xdf, 0xa1, 0xf6, 0xd5, 0xb3, 0xbc, 0x14, 0x89, 0x74, 0x84, 0x84,
0xfe, 0x3f, 0x09, 0x00, 0x6c, 0xee, 0x85, 0x19, 0xd9, 0xf7, 0xe1, 0x5a, 0xe0, 0x99, 0xc3, 0x60,
0x9f, 0x32, 0xc3, 0xf1, 0x18, 0xf1, 0x0f, 0x4d, 0x57, 0xdd, 0x4f, 0x68, 0x21, 0xa3, 0xa9, 0xe8,
0xe8, 0x5d, 0x40, 0x07, 0x84, 0x0c, 0x0d, 0xea, 0xda, 0x46, 0xc8, 0x94, 0x8f, 0x81, 0x69, 0xac,
0x71, 0x4e, 0xdb, 0xb5, 0xbb, 0x21, 0x1d, 0x55, 0x61, 0x95, 0x0f, 0x9f, 0x78, 0xcc, 0x77, 0x48,
0x60, 0xec, 0x51, 0xdf, 0x08, 0x5c, 0x7a, 0x64, 0xec, 0x51, 0xd7, 0xa5, 0x47, 0xc4, 0x0f, 0xaf,
0x7e, 0x4a, 0x2e, 0xed, 0x37, 0x24, 0x68, 0x83, 0xfa, 0x5d, 0x97, 0x1e, 0x6d, 0x84, 0x08, 0x9e,
0xb6, 0x4d, 0xc6, 0xcc, 0x1c, 0xeb, 0x20, 0x4c, 0xdb, 0x22, 0x6a, 0xcf, 0xb1, 0x0e, 0xd0, 0xeb,
0xb0, 0x40, 0x5c, 0x22, 0x6e, 0x00, 0x24, 0x2a, 0x23, 0x50, 0xc5, 0x90, 0xc8, 0x41, 0xfa, 0xe7,
0xa0, 0x35, 0x3c, 0xcb, 0x1f, 0x0f, 0x63, 0x73, 0xfe, 0x2e, 0x20, 0xbe, 0x49, 0x1a, 0x2e, 0xb5,
0x0e, 0x8c, 0x81, 0xe9, 0x99, 0x7d, 0x6e, 0x97, 0x7c, 0xa3, 0xd1, 0x38, 0x67, 0x8b, 0x5a, 0x07,
0xdb, 0x8a, 0xae, 0x7f, 0x04, 0xd0, 0x1d, 0xfa, 0xc4, 0xb4, 0xdb, 0x3c, 0x9b, 0xe0, 0xae, 0x13,
0x2d, 0xc3, 0x56, 0x6f, 0x5c, 0xd4, 0x57, 0x4b, 0x5d, 0x93, 0x8c, 0x7a, 0x44, 0xd7, 0x7f, 0x09,
0xae, 0x77, 0x5c, 0xd3, 0x12, 0xef, 0xbd, 0x9d, 0xe8, 0xd1, 0x01, 0x3d, 0x80, 0xac, 0x84, 0xaa,
0x99, 0x9c, 0xb9, 0xdc, 0x26, 0x7d, 0x6e, 0xce, 0x61, 0x85, 0xaf, 0x16, 0x01, 0x26, 0x7a, 0xf4,
0xbf, 0x48, 0x40, 0x3e, 0xd2, 0x8f, 0xd6, 0x81, 0xd7, 0xc0, 0x3c, 0xbc, 0x1d, 0x4f, 0x15, 0xad,
0x79, 0x1c, 0x27, 0xa1, 0x26, 0x14, 0x86, 0x91, 0xf4, 0xa5, 0xf9, 0xdc, 0x0c, 0xab, 0x71, 0x5c,
0x16, 0x7d, 0x0c, 0xf9, 0xf0, 0x51, 0x31, 0xdc, 0x61, 0x2f, 0x7f, 0x83, 0x9c, 0xc0, 0xf5, 0x4f,
0x01, 0x7e, 0x48, 0x1d, 0xaf, 0x47, 0x0f, 0x88, 0x27, 0x1e, 0xc9, 0x78, 0xa9, 0x47, 0x42, 0x2f,
0xaa, 0x96, 0xa8, 0x64, 0xe5, 0x14, 0x44, 0x6f, 0x45, 0xb2, 0xa9, 0xff, 0x6d, 0x12, 0xb2, 0x98,
0x52, 0x56, 0xab, 0xa0, 0x75, 0xc8, 0xaa, 0x7d, 0x42, 0x9c, 0x3f, 0xd5, 0xfc, 0xd9, 0xe9, 0x5a,
0x46, 0x6e, 0x10, 0x19, 0x4b, 0xec, 0x0c, 0xb1, 0x1d, 0x3c, 0x79, 0xd1, 0x0e, 0x8e, 0xee, 0x40,
0x51, 0x81, 0x8c, 0x7d, 0x33, 0xd8, 0x97, 0x05, 0x5a, 0x75, 0xf1, 0xec, 0x74, 0x0d, 0x24, 0x72,
0xd3, 0x0c, 0xf6, 0x31, 0x48, 0x34, 0xff, 0x46, 0x0d, 0x28, 0x7c, 0x49, 0x1d, 0xcf, 0x60, 0x62,
0x10, 0xea, 0xae, 0x6c, 0xe6, 0x3c, 0x4e, 0x86, 0xaa, 0x5e, 0x8c, 0xe1, 0xcb, 0xc9, 0xe0, 0x1b,
0xb0, 0xe0, 0x53, 0xca, 0xe4, 0xb6, 0xe5, 0x50, 0x4f, 0x95, 0xe1, 0xeb, 0x33, 0x6f, 0x67, 0x29,
0x65, 0x58, 0xe1, 0x70, 0xd1, 0x8f, 0xb5, 0xd0, 0x1d, 0x58, 0x76, 0xcd, 0x80, 0x19, 0x62, 0xbf,
0xb3, 0x27, 0xda, 0xb2, 0x62, 0xa9, 0x21, 0xce, 0xdb, 0x10, 0xac, 0x50, 0x42, 0xff, 0xe7, 0x04,
0x14, 0xf8, 0x60, 0x9c, 0x3d, 0xc7, 0xe2, 0x49, 0xde, 0xb7, 0xcf, 0x3d, 0x6e, 0x42, 0xca, 0x0a,
0x7c, 0xe5, 0x54, 0x71, 0xf8, 0xd6, 0xba, 0x18, 0x73, 0x1a, 0xfa, 0x1c, 0xb2, 0xea, 0x3a, 0x40,
0xa6, 0x1d, 0xfa, 0xd5, 0xe9, 0xa8, 0xf2, 0x8d, 0x92, 0x13, 0xb1, 0x3c, 0xb1, 0x4e, 0x1e, 0x02,
0x38, 0x4e, 0x42, 0x37, 0x20, 0x69, 0x49, 0x77, 0xa9, 0x9f, 0x24, 0xd4, 0x5a, 0x38, 0x69, 0x79,
0xfa, 0x3f, 0x24, 0x60, 0x61, 0xb2, 0xe0, 0x79, 0x04, 0xdc, 0x82, 0x7c, 0x30, 0xda, 0x0d, 0xc6,
0x01, 0x23, 0x83, 0xf0, 0x01, 0x30, 0x22, 0xa0, 0x26, 0xe4, 0x4d, 0xb7, 0x4f, 0x7d, 0x87, 0xed,
0x0f, 0x54, 0x25, 0x3a, 0x3b, 0x55, 0x88, 0xeb, 0x2c, 0x57, 0x42, 0x11, 0x3c, 0x91, 0x0e, 0xcf,
0x7d, 0xf9, 0x4a, 0x2c, 0xce, 0xfd, 0xd7, 0xa0, 0xe8, 0x9a, 0x03, 0x71, 0x3f, 0xc2, 0x9c, 0x81,
0x1c, 0x47, 0x1a, 0x17, 0x14, 0xad, 0xe7, 0x0c, 0x88, 0xae, 0x43, 0x3e, 0x52, 0x86, 0x96, 0xa0,
0x50, 0x69, 0x74, 0x8d, 0xbb, 0xf7, 0x1e, 0x18, 0x0f, 0x6b, 0xdb, 0xda, 0x9c, 0xca, 0x4d, 0xff,
0x32, 0x01, 0x0b, 0x6a, 0x3b, 0x52, 0xf9, 0xfe, 0xeb, 0x30, 0xef, 0x9b, 0x7b, 0x2c, 0xac, 0x48,
0xd2, 0x32, 0xaa, 0xf9, 0x0e, 0xcf, 0x2b, 0x12, 0xce, 0x9a, 0x5d, 0x91, 0xc4, 0x9e, 0xa4, 0x53,
0x97, 0x3e, 0x49, 0xa7, 0x7f, 0x2e, 0x4f, 0xd2, 0xfa, 0x6f, 0x02, 0x6c, 0x38, 0x2e, 0xe9, 0xc9,
0x5b, 0x9a, 0x59, 0xf5, 0x25, 0xcf, 0xe1, 0xd4, 0x55, 0x5d, 0x98, 0xc3, 0x35, 0xeb, 0x98, 0xd3,
0x38, 0xab, 0xef, 0xd8, 0x6a, 0x31, 0x0a, 0xd6, 0x43, 0xce, 0xea, 0x3b, 0x76, 0xf4, 0x08, 0x93,
0xbe, 0xea, 0x11, 0xe6, 0x24, 0x01, 0x4b, 0x2a, 0x77, 0x8d, 0xb6, 0xdf, 0xb7, 0x21, 0x2f, 0xd3,
0xd8, 0x49, 0x41, 0x27, 0x9e, 0x61, 0x25, 0xae, 0x59, 0xc7, 0x39, 0xc9, 0x6e, 0xda, 0x68, 0x0d,
0x0a, 0x0a, 0x1a, 0xfb, 0xf9, 0x0a, 0x48, 0x52, 0x8b, 0x9b, 0xff, 0x3e, 0xa4, 0xf7, 0x1c, 0x97,
0xa8, 0x40, 0x9f, 0xb9, 0x01, 0x4c, 0x1c, 0xb0, 0x39, 0x87, 0x05, 0xba, 0x9a, 0x0b, 0xaf, 0xb1,
0x84, 0x7d, 0xaa, 0xec, 0x8c, 0xdb, 0x27, 0x2b, 0xd0, 0x73, 0xf6, 0x49, 0x1c, 0xb7, 0x4f, 0xb2,
0xa5, 0x7d, 0x0a, 0x1a, 0xb7, 0x4f, 0x92, 0x7e, 0x2e, 0xf6, 0x6d, 0xc1, 0x8d, 0xaa, 0x6b, 0x5a,
0x07, 0xae, 0x13, 0x30, 0x62, 0xc7, 0x77, 0x8c, 0x7b, 0x90, 0x9d, 0x4a, 0x3a, 0x2f, 0xbb, 0xd5,
0x54, 0x48, 0xfd, 0x3f, 0x12, 0x50, 0xdc, 0x24, 0xa6, 0xcb, 0xf6, 0x27, 0x57, 0x43, 0x8c, 0x04,
0x4c, 0x1d, 0x56, 0xe2, 0x1b, 0x7d, 0x00, 0xb9, 0x28, 0x27, 0xb9, 0xf2, 0x79, 0x29, 0x82, 0xa2,
0xfb, 0x30, 0xcf, 0xd7, 0x18, 0x1d, 0x85, 0xc5, 0xce, 0x65, 0x2f, 0x17, 0x0a, 0xc9, 0x0f, 0x19,
0x9f, 0x88, 0x24, 0x44, 0x84, 0x52, 0x06, 0x87, 0x4d, 0xf4, 0x8b, 0x50, 0x14, 0x17, 0xef, 0x61,
0xce, 0x95, 0xb9, 0x4a, 0x67, 0x41, 0xbe, 0x9d, 0xc9, 0x7c, 0xeb, 0xff, 0x12, 0xb0, 0xbc, 0x6d,
0x8e, 0x77, 0x89, 0xda, 0x36, 0x88, 0x8d, 0x89, 0x45, 0x7d, 0x1b, 0x75, 0xe2, 0xdb, 0xcd, 0x25,
0x4f, 0x71, 0xb3, 0x84, 0x67, 0xef, 0x3a, 0x61, 0x01, 0x96, 0x8c, 0x15, 0x60, 0xcb, 0x90, 0xf1,
0xa8, 0x67, 0x11, 0xb5, 0x17, 0xc9, 0x86, 0xee, 0xc4, 0xb7, 0x9a, 0x52, 0xf4, 0x4a, 0x26, 0xde,
0xb8, 0x5a, 0x94, 0x45, 0xbd, 0xa1, 0xcf, 0xa1, 0xd4, 0x6d, 0xd4, 0x70, 0xa3, 0x57, 0x6d, 0xff,
0xc8, 0xe8, 0x56, 0xb6, 0xba, 0x95, 0x7b, 0x77, 0x8c, 0x4e, 0x7b, 0xeb, 0x8b, 0xbb, 0xf7, 0xef,
0x7c, 0xa0, 0x25, 0x4a, 0xeb, 0xc7, 0x27, 0xeb, 0xb7, 0x5a, 0x95, 0xda, 0x96, 0x5c, 0x31, 0xbb,
0xf4, 0x69, 0xd7, 0x74, 0x03, 0xf3, 0xde, 0x9d, 0x0e, 0x75, 0xc7, 0x1c, 0xc3, 0xc3, 0xba, 0x18,
0x3f, 0xaf, 0xe2, 0xc7, 0x70, 0xe2, 0xc2, 0x63, 0x78, 0x72, 0x9a, 0x27, 0x2f, 0x38, 0xcd, 0x37,
0x60, 0xd9, 0xf2, 0x69, 0x10, 0x18, 0x3c, 0xfb, 0x27, 0xf6, 0xb9, 0xfa, 0xe2, 0xa5, 0xb3, 0xd3,
0xb5, 0x6b, 0x35, 0xce, 0xef, 0x0a, 0xb6, 0x52, 0x7f, 0xcd, 0x8a, 0x91, 0x44, 0x4f, 0xfa, 0x1f,
0xa5, 0x78, 0x22, 0xe5, 0x1c, 0x3a, 0x2e, 0xe9, 0x93, 0x00, 0x3d, 0x86, 0x25, 0xcb, 0x27, 0x36,
0x4f, 0xeb, 0x4d, 0xd7, 0x08, 0x86, 0xc4, 0x52, 0x41, 0xfd, 0x0b, 0x33, 0x73, 0x9a, 0x48, 0xb0,
0x5c, 0x8b, 0xa4, 0xba, 0x43, 0x62, 0xe1, 0x45, 0x6b, 0xaa, 0x8d, 0xbe, 0x84, 0xa5, 0x80, 0xb8,
0x8e, 0x37, 0x7a, 0x6a, 0x58, 0xd4, 0x63, 0xe4, 0x69, 0xf8, 0xe0, 0x73, 0x95, 0xde, 0x6e, 0x63,
0x8b, 0x4b, 0xd5, 0xa4, 0x50, 0x15, 0x9d, 0x9d, 0xae, 0x2d, 0x4e, 0xd3, 0xf0, 0xa2, 0xd2, 0xac,
0xda, 0xa5, 0x16, 0x2c, 0x4e, 0x5b, 0x83, 0x96, 0xd5, 0xda, 0x17, 0x5b, 0x48, 0xb8, 0xb6, 0xd1,
0x2d, 0xc8, 0xf9, 0xa4, 0xef, 0x04, 0xcc, 0x97, 0x6e, 0xe6, 0x9c, 0x88, 0xc2, 0x57, 0xbe, 0xfc,
0x0d, 0x4b, 0xe9, 0xd7, 0xe1, 0x5c, 0x8f, 0x7c, 0xb1, 0xd8, 0x4e, 0x60, 0xee, 0x2a, 0x95, 0x39,
0x1c, 0x36, 0x79, 0x0c, 0x8e, 0x82, 0x28, 0x51, 0x13, 0xdf, 0x9c, 0x26, 0x32, 0x0a, 0xf5, 0x8b,
0x1e, 0x91, 0x33, 0x84, 0x3f, 0x0d, 0x4c, 0xc7, 0x7e, 0x1a, 0xb8, 0x0c, 0x19, 0x97, 0x1c, 0x12,
0x57, 0x9e, 0xe5, 0x58, 0x36, 0xde, 0xf9, 0x69, 0x0a, 0xf2, 0xd1, 0xe3, 0x06, 0x3f, 0x09, 0x5a,
0x8d, 0x27, 0x61, 0xac, 0x46, 0xf4, 0x16, 0x39, 0x42, 0xaf, 0x4d, 0xee, 0x94, 0x3e, 0x97, 0xaf,
0xb9, 0x11, 0x3b, 0xbc, 0x4f, 0x7a, 0x03, 0x72, 0x95, 0x6e, 0xb7, 0xf9, 0xb0, 0xd5, 0xa8, 0x6b,
0x5f, 0x25, 0x4a, 0x2f, 0x1d, 0x9f, 0xac, 0x5f, 0x8b, 0x40, 0x95, 0x40, 0x86, 0x92, 0x40, 0xd5,
0x6a, 0x8d, 0x4e, 0xaf, 0x51, 0xd7, 0x9e, 0x25, 0xcf, 0xa3, 0xc4, 0x1d, 0x89, 0xf8, 0x4d, 0x46,
0xbe, 0x83, 0x1b, 0x9d, 0x0a, 0xe6, 0x1d, 0x7e, 0x95, 0x94, 0x57, 0x5d, 0x93, 0x1e, 0x7d, 0x32,
0x34, 0x7d, 0xde, 0xe7, 0x6a, 0xf8, 0xdb, 0xa4, 0x67, 0x29, 0xf9, 0x6e, 0x3f, 0x79, 0xa9, 0x21,
0xa6, 0x3d, 0xe6, 0xbd, 0x89, 0x27, 0x32, 0xa1, 0x26, 0x75, 0xae, 0xb7, 0x2e, 0xdf, 0x49, 0xb8,
0x16, 0x1d, 0xe6, 0xf1, 0x4e, 0xab, 0xc5, 0x41, 0xcf, 0xd2, 0xe7, 0x46, 0x87, 0x47, 0x1e, 0xaf,
0x7f, 0xd1, 0x6d, 0xc8, 0x85, 0x2f, 0x68, 0xda, 0x57, 0xe9, 0x73, 0x06, 0xd5, 0xc2, 0xe7, 0x3f,
0xd1, 0xe1, 0xe6, 0x4e, 0x4f, 0xfc, 0x74, 0xea, 0x59, 0xe6, 0x7c, 0x87, 0xfb, 0x23, 0x66, 0xd3,
0x23, 0x8f, 0xaf, 0x40, 0x75, 0xab, 0xf6, 0x55, 0x46, 0x5e, 0x41, 0x44, 0x18, 0x75, 0xa5, 0xf6,
0x06, 0xe4, 0x70, 0xe3, 0x87, 0xf2, 0x57, 0x56, 0xcf, 0xb2, 0xe7, 0xf4, 0x60, 0xf2, 0x25, 0xb1,
0x54, 0x6f, 0x6d, 0xdc, 0xd9, 0xac, 0x08, 0x97, 0x9f, 0x47, 0xb5, 0xfd, 0xe1, 0xbe, 0xe9, 0x11,
0x7b, 0xf2, 0xe3, 0x85, 0x88, 0xf5, 0xce, 0x2f, 0x43, 0x2e, 0xcc, 0x33, 0xd1, 0x2a, 0x64, 0x9f,
0xb4, 0xf1, 0xa3, 0x06, 0xd6, 0xe6, 0xa4, 0x0f, 0x43, 0xce, 0x13, 0x59, 0x21, 0xac, 0xc3, 0xfc,
0x76, 0xa5, 0x55, 0x79, 0xd8, 0xc0, 0xe1, 0x85, 0x77, 0x08, 0x50, 0xc9, 0x52, 0x49, 0x53, 0x1d,
0x44, 0x3a, 0xab, 0x2b, 0x5f, 0x7f, 0xb3, 0x3a, 0xf7, 0x93, 0x6f, 0x56, 0xe7, 0x9e, 0x9d, 0xad,
0x26, 0xbe, 0x3e, 0x5b, 0x4d, 0xfc, 0xf8, 0x6c, 0x35, 0xf1, 0xef, 0x67, 0xab, 0x89, 0xdd, 0xac,
0xd8, 0xd2, 0xef, 0xff, 0x7f, 0x00, 0x00, 0x00, 0xff, 0xff, 0xa9, 0x00, 0x24, 0x61, 0xb9, 0x2d,
0x00, 0x00,
0x76, 0x16, 0x7f, 0x45, 0x3e, 0x52, 0x52, 0x4f, 0x8d, 0x3c, 0xd6, 0xd0, 0x63, 0x89, 0x6e, 0x7b,
0xd6, 0x3f, 0xeb, 0xd0, 0x33, 0x1a, 0xdb, 0x18, 0x7b, 0xe2, 0x1f, 0xfe, 0x69, 0xc4, 0x1d, 0x89,
0x24, 0x8a, 0xd4, 0xcc, 0x1a, 0x48, 0xd2, 0x68, 0x75, 0x97, 0xa8, 0xb6, 0x9a, 0x5d, 0x4c, 0x77,
0x53, 0x1a, 0xe6, 0x07, 0x19, 0xe4, 0xb0, 0x09, 0x74, 0x4a, 0x6e, 0x01, 0x02, 0xe5, 0x92, 0x9c,
0x82, 0xdc, 0x12, 0x20, 0x48, 0x2e, 0x71, 0x80, 0x1c, 0x7c, 0xcb, 0x26, 0x01, 0x82, 0x45, 0x02,
0x28, 0xb1, 0x0e, 0xb9, 0x05, 0xc9, 0x65, 0x91, 0x4b, 0x02, 0x04, 0xf5, 0xd3, 0xcd, 0xa6, 0xa6,
0x25, 0x8d, 0xd7, 0x7b, 0x91, 0xba, 0xde, 0xfb, 0xde, 0xab, 0x57, 0xaf, 0x5e, 0x55, 0xbd, 0x57,
0x45, 0x28, 0xf8, 0x93, 0x11, 0xf1, 0x2a, 0x23, 0x97, 0xfa, 0x14, 0x21, 0x93, 0x1a, 0x07, 0xc4,
0xad, 0x78, 0x47, 0xba, 0x3b, 0x3c, 0xb0, 0xfc, 0xca, 0xe1, 0xdd, 0xd2, 0xda, 0x80, 0xd2, 0x81,
0x4d, 0xde, 0xe3, 0x88, 0xdd, 0xf1, 0xde, 0x7b, 0xbe, 0x35, 0x24, 0x9e, 0xaf, 0x0f, 0x47, 0x42,
0xa8, 0xb4, 0x7a, 0x1e, 0x60, 0x8e, 0x5d, 0xdd, 0xb7, 0xa8, 0x23, 0xf9, 0xcb, 0x03, 0x3a, 0xa0,
0xfc, 0xf3, 0x3d, 0xf6, 0x25, 0xa8, 0xea, 0x1a, 0xcc, 0x3f, 0x26, 0xae, 0x67, 0x51, 0x07, 0x2d,
0x43, 0xc6, 0x72, 0x4c, 0xf2, 0x74, 0x25, 0x51, 0x4e, 0xbc, 0x95, 0xc6, 0xa2, 0xa1, 0xde, 0x01,
0x68, 0xb1, 0x8f, 0xa6, 0xe3, 0xbb, 0x13, 0xa4, 0x40, 0xea, 0x80, 0x4c, 0x38, 0x22, 0x8f, 0xd9,
0x27, 0xa3, 0x1c, 0xea, 0xf6, 0x4a, 0x52, 0x50, 0x0e, 0x75, 0x5b, 0xfd, 0x26, 0x01, 0x85, 0xaa,
0xe3, 0x50, 0x9f, 0xf7, 0xee, 0x21, 0x04, 0x69, 0x47, 0x1f, 0x12, 0x29, 0xc4, 0xbf, 0x51, 0x1d,
0xb2, 0xb6, 0xbe, 0x4b, 0x6c, 0x6f, 0x25, 0x59, 0x4e, 0xbd, 0x55, 0x58, 0xff, 0x7e, 0xe5, 0xf9,
0x21, 0x57, 0x22, 0x4a, 0x2a, 0x5b, 0x1c, 0xcd, 0x8d, 0xc0, 0x52, 0x14, 0x7d, 0x0a, 0xf3, 0x96,
0x63, 0x5a, 0x06, 0xf1, 0x56, 0xd2, 0x5c, 0xcb, 0x6a, 0x9c, 0x96, 0xa9, 0xf5, 0xb5, 0xf4, 0xd7,
0xa7, 0x6b, 0x73, 0x38, 0x10, 0x2a, 0x7d, 0x04, 0x85, 0x88, 0xda, 0x98, 0xb1, 0x2d, 0x43, 0xe6,
0x50, 0xb7, 0xc7, 0x44, 0x8e, 0x4e, 0x34, 0x3e, 0x4e, 0xde, 0x4f, 0xa8, 0x5f, 0x40, 0x1e, 0x13,
0x8f, 0x8e, 0x5d, 0x83, 0x78, 0xe8, 0x6d, 0xc8, 0x3b, 0xba, 0x43, 0x35, 0x63, 0x34, 0xf6, 0xb8,
0x78, 0xaa, 0x56, 0x3c, 0x3b, 0x5d, 0xcb, 0xb5, 0x75, 0x87, 0xd6, 0xbb, 0x3b, 0x1e, 0xce, 0x31,
0x76, 0x7d, 0x34, 0xf6, 0xd0, 0x6b, 0x50, 0x1c, 0x92, 0x21, 0x75, 0x27, 0xda, 0xee, 0xc4, 0x27,
0x1e, 0x57, 0x9c, 0xc2, 0x05, 0x41, 0xab, 0x31, 0x92, 0xfa, 0x7b, 0x09, 0x58, 0x0e, 0x74, 0x63,
0xf2, 0xab, 0x63, 0xcb, 0x25, 0x43, 0xe2, 0xf8, 0x1e, 0xfa, 0x00, 0xb2, 0xb6, 0x35, 0xb4, 0x7c,
0xd1, 0x47, 0x61, 0xfd, 0xd5, 0xb8, 0xd1, 0x86, 0x56, 0x61, 0x09, 0x46, 0x55, 0x28, 0xba, 0xc4,
0x23, 0xee, 0xa1, 0xf0, 0x24, 0xef, 0xf2, 0x4a, 0xe1, 0x19, 0x11, 0x75, 0x03, 0x72, 0x5d, 0x5b,
0xf7, 0xf7, 0xa8, 0x3b, 0x44, 0x2a, 0x14, 0x75, 0xd7, 0xd8, 0xb7, 0x7c, 0x62, 0xf8, 0x63, 0x37,
0x98, 0xd5, 0x19, 0x1a, 0xba, 0x01, 0x49, 0x2a, 0x3a, 0xca, 0xd7, 0xb2, 0x67, 0xa7, 0x6b, 0xc9,
0x4e, 0x0f, 0x27, 0xa9, 0xa7, 0x3e, 0x80, 0x6b, 0x5d, 0x7b, 0x3c, 0xb0, 0x9c, 0x06, 0xf1, 0x0c,
0xd7, 0x1a, 0x31, 0xed, 0x2c, 0x3c, 0x58, 0xec, 0x07, 0xe1, 0xc1, 0xbe, 0xc3, 0x90, 0x49, 0x4e,
0x43, 0x46, 0xfd, 0x9d, 0x24, 0x5c, 0x6b, 0x3a, 0x03, 0xcb, 0x21, 0x51, 0xe9, 0xdb, 0xb0, 0x48,
0x38, 0x51, 0x3b, 0x14, 0x61, 0x2c, 0xf5, 0x2c, 0x08, 0x6a, 0x10, 0xdb, 0xad, 0x73, 0xf1, 0x76,
0x37, 0x6e, 0xf8, 0xcf, 0x69, 0x8f, 0x8d, 0xba, 0x26, 0xcc, 0x8f, 0xf8, 0x20, 0xbc, 0x95, 0x14,
0xd7, 0x75, 0x3b, 0x4e, 0xd7, 0x73, 0xe3, 0x0c, 0x82, 0x4f, 0xca, 0x7e, 0x97, 0xe0, 0xfb, 0xb3,
0x24, 0x2c, 0xb5, 0xa9, 0x39, 0xe3, 0x87, 0x12, 0xe4, 0xf6, 0xa9, 0xe7, 0x47, 0x16, 0x5a, 0xd8,
0x46, 0xf7, 0x21, 0x37, 0x92, 0xd3, 0x27, 0x67, 0xff, 0x56, 0xbc, 0xc9, 0x02, 0x83, 0x43, 0x34,
0x7a, 0x00, 0x79, 0x37, 0x88, 0x89, 0x95, 0xd4, 0x8b, 0x04, 0xce, 0x14, 0x8f, 0x3e, 0x81, 0xac,
0x98, 0x84, 0x95, 0x34, 0x97, 0xbc, 0xfd, 0x42, 0x3e, 0xc7, 0x52, 0x08, 0x3d, 0x84, 0x9c, 0x6f,
0x7b, 0x9a, 0xe5, 0xec, 0xd1, 0x95, 0x0c, 0x57, 0xb0, 0x16, 0xa7, 0x80, 0x39, 0xa2, 0xbf, 0xd5,
0x6b, 0x39, 0x7b, 0xb4, 0x56, 0x38, 0x3b, 0x5d, 0x9b, 0x97, 0x0d, 0x3c, 0xef, 0xdb, 0x1e, 0xfb,
0x50, 0x7f, 0x3f, 0x01, 0x85, 0x08, 0x0a, 0xbd, 0x0a, 0xe0, 0xbb, 0x63, 0xcf, 0xd7, 0x5c, 0x4a,
0x7d, 0xee, 0xac, 0x22, 0xce, 0x73, 0x0a, 0xa6, 0xd4, 0x47, 0x15, 0xb8, 0x6e, 0x10, 0xd7, 0xd7,
0x2c, 0xcf, 0x1b, 0x13, 0x57, 0xf3, 0xc6, 0xbb, 0x5f, 0x12, 0xc3, 0xe7, 0x8e, 0x2b, 0xe2, 0x6b,
0x8c, 0xd5, 0xe2, 0x9c, 0x9e, 0x60, 0xa0, 0x7b, 0x70, 0x23, 0x8a, 0x1f, 0x8d, 0x77, 0x6d, 0xcb,
0xd0, 0xd8, 0x64, 0xa6, 0xb8, 0xc8, 0xf5, 0xa9, 0x48, 0x97, 0xf3, 0x1e, 0x91, 0x89, 0xfa, 0x93,
0x04, 0x28, 0x58, 0xdf, 0xf3, 0xb7, 0xc9, 0x70, 0x97, 0xb8, 0x3d, 0x5f, 0xf7, 0xc7, 0x1e, 0xba,
0x01, 0x59, 0x9b, 0xe8, 0x26, 0x71, 0xb9, 0x51, 0x39, 0x2c, 0x5b, 0x68, 0x87, 0xad, 0x60, 0xdd,
0xd8, 0xd7, 0x77, 0x2d, 0xdb, 0xf2, 0x27, 0xdc, 0x94, 0xc5, 0xf8, 0x10, 0x3e, 0xaf, 0xb3, 0x82,
0x23, 0x82, 0x78, 0x46, 0x0d, 0x5a, 0x81, 0xf9, 0x21, 0xf1, 0x3c, 0x7d, 0x40, 0xb8, 0xa5, 0x79,
0x1c, 0x34, 0xd5, 0x07, 0x50, 0x8c, 0xca, 0xa1, 0x02, 0xcc, 0xef, 0xb4, 0x1f, 0xb5, 0x3b, 0x4f,
0xda, 0xca, 0x1c, 0x5a, 0x82, 0xc2, 0x4e, 0x1b, 0x37, 0xab, 0xf5, 0xcd, 0x6a, 0x6d, 0xab, 0xa9,
0x24, 0xd0, 0x02, 0xe4, 0xa7, 0xcd, 0xa4, 0xfa, 0xe7, 0x09, 0x00, 0xe6, 0x6e, 0x39, 0xa8, 0x8f,
0x21, 0xe3, 0xf9, 0xba, 0x2f, 0xa2, 0x72, 0x71, 0xfd, 0x8d, 0x8b, 0xe6, 0x50, 0xda, 0xcb, 0xfe,
0x11, 0x2c, 0x44, 0xa2, 0x16, 0x26, 0x67, 0x2c, 0x64, 0x1b, 0x84, 0x6e, 0x9a, 0xae, 0x34, 0x9c,
0x7f, 0xab, 0x0f, 0x20, 0xc3, 0xa5, 0x67, 0xcd, 0xcd, 0x41, 0xba, 0xc1, 0xbe, 0x12, 0x28, 0x0f,
0x19, 0xdc, 0xac, 0x36, 0xbe, 0x50, 0x92, 0x48, 0x81, 0x62, 0xa3, 0xd5, 0xab, 0x77, 0xda, 0xed,
0x66, 0xbd, 0xdf, 0x6c, 0x28, 0x29, 0xf5, 0x36, 0x64, 0x5a, 0x43, 0xa6, 0xf9, 0x16, 0x0b, 0xf9,
0x3d, 0xe2, 0x12, 0xc7, 0x08, 0x56, 0xd2, 0x94, 0xa0, 0xfe, 0x38, 0x0f, 0x99, 0x6d, 0x3a, 0x76,
0x7c, 0xb4, 0x1e, 0xd9, 0xb6, 0x16, 0xe3, 0x4f, 0x1e, 0x0e, 0xac, 0xf4, 0x27, 0x23, 0x22, 0xb7,
0xb5, 0x1b, 0x90, 0x15, 0x8b, 0x43, 0x0e, 0x47, 0xb6, 0x18, 0xdd, 0xd7, 0xdd, 0x01, 0xf1, 0xe5,
0x78, 0x64, 0x0b, 0xbd, 0x05, 0x39, 0x97, 0xe8, 0x26, 0x75, 0xec, 0x09, 0x5f, 0x43, 0x39, 0x71,
0xae, 0x60, 0xa2, 0x9b, 0x1d, 0xc7, 0x9e, 0xe0, 0x90, 0x8b, 0x36, 0xa1, 0xb8, 0x6b, 0x39, 0xa6,
0x46, 0x47, 0x62, 0x93, 0xcf, 0x5c, 0xbc, 0xe2, 0x84, 0x55, 0x35, 0xcb, 0x31, 0x3b, 0x02, 0x8c,
0x0b, 0xbb, 0xd3, 0x06, 0x6a, 0xc3, 0xe2, 0x21, 0xb5, 0xc7, 0x43, 0x12, 0xea, 0xca, 0x72, 0x5d,
0x6f, 0x5e, 0xac, 0xeb, 0x31, 0xc7, 0x07, 0xda, 0x16, 0x0e, 0xa3, 0x4d, 0xf4, 0x08, 0x16, 0xfc,
0xe1, 0x68, 0xcf, 0x0b, 0xd5, 0xcd, 0x73, 0x75, 0xdf, 0xbb, 0xc4, 0x61, 0x0c, 0x1e, 0x68, 0x2b,
0xfa, 0x91, 0x56, 0xe9, 0xb7, 0x53, 0x50, 0x88, 0x58, 0x8e, 0x7a, 0x50, 0x18, 0xb9, 0x74, 0xa4,
0x0f, 0xf8, 0x41, 0x25, 0xe7, 0xe2, 0xee, 0x0b, 0x8d, 0xba, 0xd2, 0x9d, 0x0a, 0xe2, 0xa8, 0x16,
0xf5, 0x24, 0x09, 0x85, 0x08, 0x13, 0xbd, 0x03, 0x39, 0xdc, 0xc5, 0xad, 0xc7, 0xd5, 0x7e, 0x53,
0x99, 0x2b, 0xdd, 0x3a, 0x3e, 0x29, 0xaf, 0x70, 0x6d, 0x51, 0x05, 0x5d, 0xd7, 0x3a, 0x64, 0xa1,
0xf7, 0x16, 0xcc, 0x07, 0xd0, 0x44, 0xe9, 0x95, 0xe3, 0x93, 0xf2, 0xcb, 0xe7, 0xa1, 0x11, 0x24,
0xee, 0x6d, 0x56, 0x71, 0xb3, 0xa1, 0x24, 0xe3, 0x91, 0xb8, 0xb7, 0xaf, 0xbb, 0xc4, 0x44, 0xdf,
0x83, 0xac, 0x04, 0xa6, 0x4a, 0xa5, 0xe3, 0x93, 0xf2, 0x8d, 0xf3, 0xc0, 0x29, 0x0e, 0xf7, 0xb6,
0xaa, 0x8f, 0x9b, 0x4a, 0x3a, 0x1e, 0x87, 0x7b, 0xb6, 0x7e, 0x48, 0xd0, 0x1b, 0x90, 0x11, 0xb0,
0x4c, 0xe9, 0xe6, 0xf1, 0x49, 0xf9, 0xa5, 0xe7, 0xd4, 0x31, 0x54, 0x69, 0xe5, 0x77, 0xff, 0x78,
0x75, 0xee, 0xaf, 0xff, 0x64, 0x55, 0x39, 0xcf, 0x2e, 0xfd, 0x6f, 0x02, 0x16, 0x66, 0xa6, 0x1c,
0xa9, 0x90, 0x75, 0xa8, 0x41, 0x47, 0xe2, 0xfc, 0xca, 0xd5, 0xe0, 0xec, 0x74, 0x2d, 0xdb, 0xa6,
0x75, 0x3a, 0x9a, 0x60, 0xc9, 0x41, 0x8f, 0xce, 0x9d, 0xc0, 0xf7, 0x5e, 0x30, 0x9e, 0x62, 0xcf,
0xe0, 0xcf, 0x60, 0xc1, 0x74, 0xad, 0x43, 0xe2, 0x6a, 0x06, 0x75, 0xf6, 0xac, 0x81, 0x3c, 0x9b,
0x4a, 0x71, 0x3a, 0x1b, 0x1c, 0x88, 0x8b, 0x42, 0xa0, 0xce, 0xf1, 0xdf, 0xe1, 0xf4, 0x2d, 0x3d,
0x86, 0x62, 0x34, 0x42, 0xd9, 0x71, 0xe2, 0x59, 0xbf, 0x46, 0x64, 0x42, 0xc7, 0xd3, 0x3f, 0x9c,
0x67, 0x14, 0x9e, 0xce, 0xa1, 0x37, 0x21, 0x3d, 0xa4, 0xa6, 0xd0, 0xb3, 0x50, 0xbb, 0xce, 0x92,
0x80, 0x7f, 0x39, 0x5d, 0x2b, 0x50, 0xaf, 0xb2, 0x61, 0xd9, 0x64, 0x9b, 0x9a, 0x04, 0x73, 0x80,
0x7a, 0x08, 0x69, 0xb6, 0x55, 0xa0, 0x57, 0x20, 0x5d, 0x6b, 0xb5, 0x1b, 0xca, 0x5c, 0xe9, 0xda,
0xf1, 0x49, 0x79, 0x81, 0xbb, 0x84, 0x31, 0x58, 0xec, 0xa2, 0x35, 0xc8, 0x3e, 0xee, 0x6c, 0xed,
0x6c, 0xb3, 0xf0, 0xba, 0x7e, 0x7c, 0x52, 0x5e, 0x0a, 0xd9, 0xc2, 0x69, 0xe8, 0x55, 0xc8, 0xf4,
0xb7, 0xbb, 0x1b, 0x3d, 0x25, 0x59, 0x42, 0xc7, 0x27, 0xe5, 0xc5, 0x90, 0xcf, 0x6d, 0x2e, 0x5d,
0x93, 0xb3, 0x9a, 0x0f, 0xe9, 0xea, 0x4f, 0x93, 0xb0, 0x80, 0x59, 0x25, 0xe1, 0xfa, 0x5d, 0x6a,
0x5b, 0xc6, 0x04, 0x75, 0x21, 0x6f, 0x50, 0xc7, 0xb4, 0x22, 0x6b, 0x6a, 0xfd, 0x82, 0x53, 0x7f,
0x2a, 0x15, 0xb4, 0xea, 0x81, 0x24, 0x9e, 0x2a, 0x41, 0xef, 0x41, 0xc6, 0x24, 0xb6, 0x3e, 0x91,
0xe9, 0xc7, 0xcd, 0x8a, 0xa8, 0x55, 0x2a, 0x41, 0xad, 0x52, 0x69, 0xc8, 0x5a, 0x05, 0x0b, 0x1c,
0xcf, 0x93, 0xf5, 0xa7, 0x9a, 0xee, 0xfb, 0x64, 0x38, 0xf2, 0x45, 0xee, 0x91, 0xc6, 0x85, 0xa1,
0xfe, 0xb4, 0x2a, 0x49, 0xe8, 0x2e, 0x64, 0x8f, 0x2c, 0xc7, 0xa4, 0x47, 0x32, 0xbd, 0xb8, 0x44,
0xa9, 0x04, 0xaa, 0xc7, 0xec, 0xd4, 0x3d, 0x67, 0x26, 0xf3, 0x77, 0xbb, 0xd3, 0x6e, 0x06, 0xfe,
0x96, 0xfc, 0x8e, 0xd3, 0xa6, 0x0e, 0x5b, 0x2b, 0xd0, 0x69, 0x6b, 0x1b, 0xd5, 0xd6, 0xd6, 0x0e,
0x66, 0x3e, 0x5f, 0x3e, 0x3e, 0x29, 0x2b, 0x21, 0x64, 0x43, 0xb7, 0x6c, 0x96, 0xef, 0xde, 0x84,
0x54, 0xb5, 0xfd, 0x85, 0x92, 0x2c, 0x29, 0xc7, 0x27, 0xe5, 0x62, 0xc8, 0xae, 0x3a, 0x93, 0xe9,
0x32, 0x3a, 0xdf, 0xaf, 0xfa, 0xf7, 0x29, 0x28, 0xee, 0x8c, 0x4c, 0xdd, 0x27, 0x22, 0x26, 0x51,
0x19, 0x0a, 0x23, 0xdd, 0xd5, 0x6d, 0x9b, 0xd8, 0x96, 0x37, 0x94, 0x55, 0x58, 0x94, 0x84, 0x3e,
0x7a, 0x51, 0x37, 0xd6, 0x72, 0x2c, 0xce, 0xfe, 0xe0, 0xdf, 0xd6, 0x12, 0x81, 0x43, 0x77, 0x60,
0x71, 0x4f, 0x58, 0xab, 0xe9, 0x06, 0x9f, 0xd8, 0x14, 0x9f, 0xd8, 0x4a, 0xdc, 0xc4, 0x46, 0xcd,
0xaa, 0xc8, 0x41, 0x56, 0xb9, 0x14, 0x5e, 0xd8, 0x8b, 0x36, 0xd1, 0x3d, 0x98, 0x1f, 0x52, 0xc7,
0xf2, 0xa9, 0x7b, 0xf5, 0x2c, 0x04, 0x48, 0xf4, 0x0e, 0x5c, 0x63, 0x93, 0x1b, 0xd8, 0xc3, 0xd9,
0xfc, 0xc4, 0x4a, 0xe2, 0xa5, 0xa1, 0xfe, 0x54, 0x76, 0x88, 0x19, 0x19, 0xd5, 0x20, 0x43, 0x5d,
0x96, 0x12, 0x65, 0xb9, 0xb9, 0xef, 0x5e, 0x69, 0xae, 0x68, 0x74, 0x98, 0x0c, 0x16, 0xa2, 0xea,
0x87, 0xb0, 0x30, 0x33, 0x08, 0x96, 0x09, 0x74, 0xab, 0x3b, 0xbd, 0xa6, 0x32, 0x87, 0x8a, 0x90,
0xab, 0x77, 0xda, 0xfd, 0x56, 0x7b, 0x87, 0xa5, 0x32, 0x45, 0xc8, 0xe1, 0xce, 0xd6, 0x56, 0xad,
0x5a, 0x7f, 0xa4, 0x24, 0xd5, 0x0a, 0x14, 0x22, 0xda, 0xd0, 0x22, 0x40, 0xaf, 0xdf, 0xe9, 0x6a,
0x1b, 0x2d, 0xdc, 0xeb, 0x8b, 0x44, 0xa8, 0xd7, 0xaf, 0xe2, 0xbe, 0x24, 0x24, 0xd4, 0xff, 0x4a,
0x06, 0x33, 0x2a, 0x73, 0x9f, 0xda, 0x6c, 0xee, 0x73, 0x89, 0xf1, 0x32, 0xfb, 0x99, 0x36, 0xc2,
0x1c, 0xe8, 0x23, 0x00, 0x1e, 0x38, 0xc4, 0xd4, 0x74, 0x5f, 0x4e, 0x7c, 0xe9, 0x39, 0x27, 0xf7,
0x83, 0xcb, 0x00, 0x9c, 0x97, 0xe8, 0xaa, 0x8f, 0x3e, 0x81, 0xa2, 0x41, 0x87, 0x23, 0x9b, 0x48,
0xe1, 0xd4, 0x95, 0xc2, 0x85, 0x10, 0x5f, 0xf5, 0xa3, 0xd9, 0x57, 0x7a, 0x36, 0x3f, 0xfc, 0x51,
0x22, 0xf0, 0x4c, 0x4c, 0xc2, 0x55, 0x84, 0xdc, 0x4e, 0xb7, 0x51, 0xed, 0xb7, 0xda, 0x0f, 0x95,
0x04, 0x02, 0xc8, 0x72, 0x57, 0x37, 0x94, 0x24, 0x4b, 0x14, 0xeb, 0x9d, 0xed, 0xee, 0x56, 0x93,
0xa7, 0x5c, 0x68, 0x19, 0x94, 0xc0, 0xd9, 0x1a, 0x77, 0x64, 0xb3, 0xa1, 0xa4, 0xd1, 0x75, 0x58,
0x0a, 0xa9, 0x52, 0x32, 0x83, 0x6e, 0x00, 0x0a, 0x89, 0x53, 0x15, 0x59, 0xf5, 0x37, 0x61, 0xa9,
0x4e, 0x1d, 0x5f, 0xb7, 0x9c, 0x30, 0x89, 0x5e, 0x67, 0x83, 0x96, 0x24, 0xcd, 0x32, 0xc5, 0x9e,
0x5e, 0x5b, 0x3a, 0x3b, 0x5d, 0x2b, 0x84, 0xd0, 0x56, 0x83, 0x8d, 0x34, 0x68, 0x98, 0x6c, 0xfd,
0x8e, 0x2c, 0x93, 0x3b, 0x37, 0x53, 0x9b, 0x3f, 0x3b, 0x5d, 0x4b, 0x75, 0x5b, 0x0d, 0xcc, 0x68,
0xe8, 0x15, 0xc8, 0x93, 0xa7, 0x96, 0xaf, 0x19, 0x6c, 0x0f, 0x67, 0x0e, 0xcc, 0xe0, 0x1c, 0x23,
0xd4, 0xd9, 0x96, 0x5d, 0x03, 0xe8, 0x52, 0xd7, 0x97, 0x3d, 0xbf, 0x0f, 0x99, 0x11, 0x75, 0x79,
0x79, 0x7e, 0xe1, 0x65, 0x04, 0x83, 0x8b, 0x40, 0xc5, 0x02, 0xac, 0xfe, 0x4d, 0x12, 0xa0, 0xaf,
0x7b, 0x07, 0x52, 0xc9, 0x7d, 0xc8, 0x87, 0x17, 0x3b, 0xb2, 0xce, 0xbf, 0x74, 0xb6, 0x43, 0x30,
0xba, 0x17, 0x04, 0x9b, 0x28, 0x0f, 0x62, 0xeb, 0xb4, 0xa0, 0xa3, 0xb8, 0x0c, 0x7b, 0xb6, 0x06,
0x60, 0x47, 0x22, 0x71, 0x5d, 0x39, 0xf3, 0xec, 0x13, 0xd5, 0xf9, 0xb1, 0x20, 0x9c, 0x26, 0x13,
0xcc, 0xd7, 0xe3, 0x3a, 0x39, 0x37, 0x23, 0x9b, 0x73, 0x78, 0x2a, 0x87, 0x3e, 0x83, 0x02, 0x1b,
0xb7, 0xe6, 0x71, 0x9e, 0xcc, 0x2d, 0x2f, 0x74, 0x95, 0xd0, 0x80, 0x61, 0x14, 0x7e, 0xd7, 0x14,
0x58, 0x74, 0xc7, 0x0e, 0x1b, 0xb6, 0xd4, 0xa1, 0xfe, 0x28, 0x09, 0x2f, 0xb7, 0x89, 0x7f, 0x44,
0xdd, 0x83, 0xaa, 0xef, 0xeb, 0xc6, 0xfe, 0x90, 0x38, 0xd2, 0xc9, 0x91, 0xcc, 0x3a, 0x31, 0x93,
0x59, 0xaf, 0xc0, 0xbc, 0x6e, 0x5b, 0xba, 0x47, 0x44, 0x3a, 0x92, 0xc7, 0x41, 0x93, 0xe5, 0xff,
0xac, 0x9a, 0x20, 0x9e, 0x47, 0x44, 0x81, 0x9f, 0xc7, 0x53, 0x02, 0xfa, 0x25, 0x28, 0xc8, 0xc4,
0x83, 0xb2, 0x63, 0x49, 0x5c, 0x3b, 0x3d, 0x88, 0xad, 0x69, 0xe2, 0x2d, 0x92, 0xe9, 0x48, 0x67,
0xe4, 0xcb, 0x94, 0x06, 0xcc, 0x90, 0x50, 0xfa, 0x04, 0x96, 0xce, 0xb1, 0xbf, 0xd5, 0xbd, 0xc0,
0x3f, 0x25, 0x01, 0x5a, 0xdd, 0xea, 0xb6, 0x1c, 0x7b, 0x03, 0xb2, 0x7b, 0xfa, 0xd0, 0xb2, 0x27,
0x97, 0x6d, 0x3f, 0x53, 0x7c, 0xa5, 0x2a, 0x46, 0xb9, 0xc1, 0x65, 0xb0, 0x94, 0xe5, 0x35, 0xcb,
0x78, 0xd7, 0x21, 0x7e, 0x58, 0xb3, 0xf0, 0x16, 0x33, 0xc3, 0xd5, 0x9d, 0x30, 0x6e, 0x44, 0x83,
0xf9, 0x75, 0xa0, 0xfb, 0xe4, 0x48, 0x9f, 0x04, 0x7b, 0x86, 0x6c, 0xa2, 0x4d, 0x56, 0xcb, 0x78,
0xc4, 0x3d, 0x24, 0xe6, 0x4a, 0x86, 0xbb, 0xed, 0x2a, 0x7b, 0xb0, 0x84, 0x0b, 0x3f, 0x85, 0xd2,
0xa5, 0x07, 0x3c, 0x5f, 0x99, 0xb2, 0xbe, 0x95, 0x8f, 0xee, 0xc0, 0xc2, 0xcc, 0x38, 0x9f, 0x2b,
0x16, 0x5b, 0xdd, 0xc7, 0xef, 0x2b, 0x69, 0xf9, 0xf5, 0xa1, 0x92, 0x55, 0xff, 0x34, 0x25, 0x56,
0xb9, 0xf4, 0x6a, 0xfc, 0x6d, 0x66, 0x8e, 0xaf, 0x4d, 0x83, 0xda, 0x72, 0xf5, 0xbd, 0x79, 0xf9,
0xe2, 0x67, 0xc5, 0x07, 0x87, 0xe3, 0x50, 0x10, 0xad, 0x41, 0x41, 0x04, 0xa7, 0xc6, 0xa2, 0x9d,
0xbb, 0x75, 0x01, 0x83, 0x20, 0x31, 0x49, 0x74, 0x1b, 0x16, 0xf9, 0xe5, 0x82, 0xb7, 0x4f, 0x4c,
0x81, 0x49, 0x73, 0xcc, 0x42, 0x48, 0xe5, 0xb0, 0x6d, 0x28, 0x4a, 0x82, 0xc6, 0x13, 0xcf, 0x0c,
0x37, 0xe8, 0x9d, 0xab, 0x0c, 0x12, 0x22, 0x3c, 0x1f, 0x2d, 0x8c, 0xa6, 0x0d, 0xb5, 0x01, 0xb9,
0xc0, 0x58, 0xb4, 0x02, 0xa9, 0x7e, 0xbd, 0xab, 0xcc, 0x95, 0x96, 0x8e, 0x4f, 0xca, 0x85, 0x80,
0xdc, 0xaf, 0x77, 0x19, 0x67, 0xa7, 0xd1, 0x55, 0x12, 0xb3, 0x9c, 0x9d, 0x46, 0xb7, 0x94, 0x66,
0x09, 0x90, 0xba, 0x07, 0x85, 0x48, 0x0f, 0xe8, 0x75, 0x98, 0x6f, 0xb5, 0x1f, 0xe2, 0x66, 0xaf,
0xa7, 0xcc, 0x95, 0x6e, 0x1c, 0x9f, 0x94, 0x51, 0x84, 0xdb, 0x72, 0x06, 0x6c, 0x7e, 0xd0, 0xab,
0x90, 0xde, 0xec, 0xb0, 0x83, 0x55, 0x64, 0xba, 0x11, 0xc4, 0x26, 0xf5, 0xfc, 0xd2, 0x75, 0x99,
0x59, 0x45, 0x15, 0xab, 0x7f, 0x98, 0x80, 0xac, 0x58, 0x42, 0xb1, 0x13, 0x55, 0x85, 0xf9, 0xa0,
0x0c, 0x15, 0x55, 0xc8, 0x9b, 0x17, 0x57, 0x0c, 0x15, 0x99, 0xe0, 0x8b, 0xf0, 0x0b, 0xe4, 0x4a,
0x1f, 0x43, 0x31, 0xca, 0xf8, 0x56, 0xc1, 0xf7, 0xeb, 0x50, 0x60, 0xf1, 0x1d, 0x54, 0x0e, 0xeb,
0x90, 0x15, 0x8b, 0x3f, 0xdc, 0xe8, 0x2f, 0x2e, 0x5f, 0x24, 0x12, 0xdd, 0x87, 0x79, 0x51, 0xf2,
0x04, 0xb7, 0x8f, 0xab, 0x97, 0xaf, 0x22, 0x1c, 0xc0, 0xd5, 0xcf, 0x20, 0xdd, 0x25, 0xc4, 0x65,
0xbe, 0x77, 0xa8, 0x49, 0xa6, 0x67, 0xa3, 0xac, 0xd6, 0x4c, 0xd2, 0x6a, 0xb0, 0x6a, 0xcd, 0x24,
0x2d, 0x33, 0xbc, 0x5f, 0x49, 0x46, 0xee, 0x57, 0xfa, 0x50, 0x7c, 0x42, 0xac, 0xc1, 0xbe, 0x4f,
0x4c, 0xae, 0xe8, 0x5d, 0x48, 0x8f, 0x48, 0x68, 0xfc, 0x4a, 0x6c, 0x80, 0x11, 0xe2, 0x62, 0x8e,
0x62, 0xfb, 0xc8, 0x11, 0x97, 0x96, 0x77, 0xde, 0xb2, 0xa5, 0xfe, 0x63, 0x12, 0x16, 0x5b, 0x9e,
0x37, 0xd6, 0x1d, 0x23, 0x48, 0x9b, 0x3e, 0x9d, 0x4d, 0x9b, 0xde, 0x8a, 0x1d, 0xe1, 0x8c, 0xc8,
0xec, 0xb5, 0x91, 0x3c, 0xba, 0x92, 0xe1, 0xd1, 0xa5, 0xfe, 0x67, 0x22, 0xb8, 0x1b, 0xba, 0x1d,
0x59, 0xee, 0xa5, 0x95, 0xe3, 0x93, 0xf2, 0x72, 0x54, 0x13, 0xd9, 0x71, 0x0e, 0x1c, 0x7a, 0xe4,
0xa0, 0xd7, 0x20, 0x83, 0x9b, 0xed, 0xe6, 0x13, 0x25, 0x21, 0xc2, 0x73, 0x06, 0x84, 0x89, 0x43,
0x8e, 0x98, 0xa6, 0x6e, 0xb3, 0xdd, 0x60, 0x69, 0x4e, 0x32, 0x46, 0x53, 0x97, 0x38, 0xa6, 0xe5,
0x0c, 0xd0, 0xeb, 0x90, 0x6d, 0xf5, 0x7a, 0x3b, 0xbc, 0x7a, 0x7f, 0xf9, 0xf8, 0xa4, 0x7c, 0x7d,
0x06, 0xc5, 0xef, 0x05, 0x4d, 0x06, 0x62, 0x35, 0x06, 0x4b, 0x80, 0x62, 0x40, 0x2c, 0x79, 0x15,
0x20, 0xdc, 0xe9, 0x57, 0xfb, 0xac, 0x70, 0x7f, 0x1e, 0x84, 0x29, 0xfb, 0x2b, 0x97, 0xdb, 0xbf,
0x26, 0x41, 0xa9, 0x1a, 0x06, 0x19, 0xf9, 0x8c, 0x2f, 0xcb, 0xba, 0x3e, 0xe4, 0x46, 0xec, 0xcb,
0x22, 0x41, 0x8a, 0x72, 0x3f, 0xf6, 0xd5, 0xe5, 0x9c, 0x5c, 0x05, 0x53, 0x9b, 0x54, 0xcd, 0xa1,
0xe5, 0x79, 0x16, 0x75, 0x04, 0x0d, 0x87, 0x9a, 0x4a, 0xff, 0x9d, 0x80, 0xeb, 0x31, 0x08, 0x74,
0x07, 0xd2, 0x2e, 0xb5, 0x83, 0x39, 0xbc, 0x75, 0xd1, 0xb5, 0x1f, 0x13, 0xc5, 0x1c, 0x89, 0x56,
0x01, 0xf4, 0xb1, 0x4f, 0x75, 0xde, 0x3f, 0x9f, 0xbd, 0x1c, 0x8e, 0x50, 0xd0, 0x13, 0xc8, 0x7a,
0xc4, 0x70, 0x49, 0x90, 0xc8, 0x7e, 0xf6, 0xb3, 0x5a, 0x5f, 0xe9, 0x71, 0x35, 0x58, 0xaa, 0x2b,
0x55, 0x20, 0x2b, 0x28, 0x2c, 0xec, 0x4d, 0xdd, 0xd7, 0xe5, 0xa5, 0x30, 0xff, 0x66, 0xd1, 0xa4,
0xdb, 0x83, 0x20, 0x9a, 0x74, 0x7b, 0xa0, 0xfe, 0x5d, 0x12, 0xa0, 0xf9, 0xd4, 0x27, 0xae, 0xa3,
0xdb, 0xf5, 0x2a, 0x6a, 0x46, 0x76, 0x7f, 0x31, 0xda, 0xb7, 0x63, 0x6f, 0xba, 0x43, 0x89, 0x4a,
0xbd, 0x1a, 0xb3, 0xff, 0xdf, 0x84, 0xd4, 0xd8, 0x95, 0x0f, 0x69, 0x22, 0x09, 0xdd, 0xc1, 0x5b,
0x98, 0xd1, 0x50, 0x73, 0xba, 0x6d, 0xa5, 0x2e, 0x7e, 0x2e, 0x8b, 0x74, 0x10, 0xbb, 0x75, 0xb1,
0x95, 0x6f, 0xe8, 0x9a, 0x41, 0xe4, 0xc9, 0x51, 0x14, 0x2b, 0xbf, 0x5e, 0xad, 0x13, 0xd7, 0xc7,
0x59, 0x43, 0x67, 0xff, 0xbf, 0xd3, 0xfe, 0xf6, 0x2e, 0xc0, 0x74, 0x68, 0x68, 0x15, 0x32, 0xf5,
0x8d, 0x5e, 0x6f, 0x4b, 0x99, 0x13, 0x1b, 0xf8, 0x94, 0xc5, 0xc9, 0xea, 0x5f, 0x25, 0x21, 0x57,
0xaf, 0xca, 0x63, 0xb5, 0x0e, 0x0a, 0xdf, 0x95, 0xf8, 0x55, 0x3a, 0x79, 0x3a, 0xb2, 0xdc, 0x89,
0xdc, 0x58, 0x2e, 0xa9, 0x28, 0x17, 0x99, 0x08, 0xb3, 0xba, 0xc9, 0x05, 0x10, 0x86, 0x22, 0x91,
0x4e, 0xd0, 0x0c, 0x3d, 0xd8, 0xe3, 0x57, 0x2f, 0x77, 0x96, 0xa8, 0x0d, 0xa6, 0x6d, 0x0f, 0x17,
0x02, 0x25, 0x75, 0xdd, 0x43, 0x1f, 0xc1, 0x92, 0x67, 0x0d, 0x1c, 0xcb, 0x19, 0x68, 0x81, 0xf3,
0xf8, 0xbd, 0x7e, 0xed, 0xda, 0xd9, 0xe9, 0xda, 0x42, 0x4f, 0xb0, 0xa4, 0x0f, 0x17, 0x24, 0xb2,
0xce, 0x5d, 0x89, 0x3e, 0x84, 0xc5, 0x88, 0x28, 0xf3, 0xa2, 0x70, 0xbb, 0x72, 0x76, 0xba, 0x56,
0x0c, 0x25, 0x1f, 0x91, 0x09, 0x2e, 0x86, 0x82, 0x8f, 0x08, 0xbf, 0xfc, 0xd8, 0xa3, 0xae, 0x41,
0x34, 0x97, 0xaf, 0x69, 0x7e, 0x82, 0xa7, 0x71, 0x81, 0xd3, 0xc4, 0x32, 0x57, 0x1f, 0xc3, 0xf5,
0x8e, 0x6b, 0xec, 0x13, 0xcf, 0x17, 0xae, 0x90, 0x5e, 0xfc, 0x0c, 0x6e, 0xf9, 0xba, 0x77, 0xa0,
0xed, 0x5b, 0x9e, 0x4f, 0xdd, 0x89, 0xe6, 0x12, 0x9f, 0x38, 0x8c, 0xaf, 0xf1, 0xc7, 0x40, 0x79,
0x3b, 0x75, 0x93, 0x61, 0x36, 0x05, 0x04, 0x07, 0x88, 0x2d, 0x06, 0x50, 0x5b, 0x50, 0x64, 0x35,
0x42, 0x83, 0xec, 0xe9, 0x63, 0xdb, 0x67, 0xa3, 0x07, 0x9b, 0x0e, 0xb4, 0x17, 0x3e, 0xa6, 0xf2,
0x36, 0x1d, 0x88, 0x4f, 0xf5, 0x87, 0xa0, 0x34, 0x2c, 0x6f, 0xa4, 0xfb, 0xc6, 0x7e, 0x70, 0xed,
0x86, 0x1a, 0xa0, 0xec, 0x13, 0xdd, 0xf5, 0x77, 0x89, 0xee, 0x6b, 0x23, 0xe2, 0x5a, 0xd4, 0xbc,
0x7a, 0x96, 0x97, 0x42, 0x91, 0x2e, 0x97, 0x50, 0xff, 0x27, 0x01, 0x80, 0xf5, 0xbd, 0x20, 0x23,
0xfb, 0x3e, 0x5c, 0xf3, 0x1c, 0x7d, 0xe4, 0xed, 0x53, 0x5f, 0xb3, 0x1c, 0x9f, 0xb8, 0x87, 0xba,
0x2d, 0x6f, 0x4f, 0x94, 0x80, 0xd1, 0x92, 0x74, 0xf4, 0x2e, 0xa0, 0x03, 0x42, 0x46, 0x1a, 0xb5,
0x4d, 0x2d, 0x60, 0x8a, 0xa7, 0xca, 0x34, 0x56, 0x18, 0xa7, 0x63, 0x9b, 0xbd, 0x80, 0x8e, 0x6a,
0xb0, 0xca, 0x86, 0x4f, 0x1c, 0xdf, 0xb5, 0x88, 0xa7, 0xed, 0x51, 0x57, 0xf3, 0x6c, 0x7a, 0xa4,
0xed, 0x51, 0xdb, 0xa6, 0x47, 0xc4, 0x0d, 0x2e, 0xa6, 0x4a, 0x36, 0x1d, 0x34, 0x05, 0x68, 0x83,
0xba, 0x3d, 0x9b, 0x1e, 0x6d, 0x04, 0x08, 0x96, 0xb6, 0x4d, 0xc7, 0xec, 0x5b, 0xc6, 0x41, 0x90,
0xb6, 0x85, 0xd4, 0xbe, 0x65, 0x1c, 0xa0, 0xd7, 0x61, 0x81, 0xd8, 0x84, 0xdf, 0x4f, 0x08, 0x54,
0x86, 0xa3, 0x8a, 0x01, 0x91, 0x81, 0xd4, 0xcf, 0x41, 0x69, 0x3a, 0x86, 0x3b, 0x19, 0x45, 0xe6,
0xfc, 0x5d, 0x40, 0x6c, 0x93, 0xd4, 0x6c, 0x6a, 0x1c, 0x68, 0x43, 0xdd, 0xd1, 0x07, 0xcc, 0x2e,
0xf1, 0x82, 0xa4, 0x30, 0xce, 0x16, 0x35, 0x0e, 0xb6, 0x25, 0x5d, 0xfd, 0x08, 0xa0, 0x37, 0x72,
0x89, 0x6e, 0x76, 0x58, 0x36, 0xc1, 0x5c, 0xc7, 0x5b, 0x9a, 0x29, 0x5f, 0xe0, 0xa8, 0x2b, 0x97,
0xba, 0x22, 0x18, 0x8d, 0x90, 0xae, 0xfe, 0x32, 0x5c, 0xef, 0xda, 0xba, 0xc1, 0x5f, 0xa3, 0xbb,
0xe1, 0x93, 0x08, 0xba, 0x0f, 0x59, 0x01, 0x95, 0x33, 0x19, 0xbb, 0xdc, 0xa6, 0x7d, 0x6e, 0xce,
0x61, 0x89, 0xaf, 0x15, 0x01, 0xa6, 0x7a, 0xd4, 0xbf, 0x48, 0x40, 0x3e, 0xd4, 0x8f, 0xca, 0xc0,
0x2a, 0x74, 0x16, 0xde, 0x96, 0x23, 0x4b, 0xea, 0x3c, 0x8e, 0x92, 0x50, 0x0b, 0x0a, 0xa3, 0x50,
0xfa, 0xd2, 0x7c, 0x2e, 0xc6, 0x6a, 0x1c, 0x95, 0x45, 0x1f, 0x43, 0x3e, 0x78, 0xf2, 0x0c, 0x76,
0xd8, 0xcb, 0x5f, 0x48, 0xa7, 0x70, 0xf5, 0x53, 0x80, 0x1f, 0x50, 0xcb, 0xe9, 0xd3, 0x03, 0xe2,
0xf0, 0x27, 0x3c, 0x56, 0xf5, 0x91, 0xc0, 0x8b, 0xb2, 0xc5, 0xeb, 0x6c, 0x31, 0x05, 0xe1, 0x4b,
0x96, 0x68, 0xaa, 0x7f, 0x9b, 0x84, 0x2c, 0xa6, 0xd4, 0xaf, 0x57, 0x51, 0x19, 0xb2, 0x72, 0x9f,
0xe0, 0xe7, 0x4f, 0x2d, 0x7f, 0x76, 0xba, 0x96, 0x11, 0x1b, 0x44, 0xc6, 0xe0, 0x3b, 0x43, 0x64,
0x07, 0x4f, 0x5e, 0xb4, 0x83, 0xa3, 0x3b, 0x50, 0x94, 0x20, 0x6d, 0x5f, 0xf7, 0xf6, 0x45, 0x81,
0x56, 0x5b, 0x3c, 0x3b, 0x5d, 0x03, 0x81, 0xdc, 0xd4, 0xbd, 0x7d, 0x0c, 0x02, 0xcd, 0xbe, 0x51,
0x13, 0x0a, 0x5f, 0x52, 0xcb, 0xd1, 0x7c, 0x3e, 0x08, 0x79, 0x93, 0x17, 0x3b, 0x8f, 0xd3, 0xa1,
0xca, 0xf7, 0x6c, 0xf8, 0x72, 0x3a, 0xf8, 0x26, 0x2c, 0xb8, 0x94, 0xfa, 0x62, 0xdb, 0xb2, 0xa8,
0x23, 0x2f, 0x09, 0xca, 0xb1, 0x77, 0xc7, 0x94, 0xfa, 0x58, 0xe2, 0x70, 0xd1, 0x8d, 0xb4, 0xd0,
0x1d, 0x58, 0xb6, 0x75, 0xcf, 0xd7, 0xf8, 0x7e, 0x67, 0x4e, 0xb5, 0x65, 0xf9, 0x52, 0x43, 0x8c,
0xb7, 0xc1, 0x59, 0x81, 0x84, 0xfa, 0xcf, 0x09, 0x28, 0xb0, 0xc1, 0x58, 0x7b, 0x96, 0xc1, 0x92,
0xbc, 0x6f, 0x9f, 0x7b, 0xdc, 0x84, 0x94, 0xe1, 0xb9, 0xd2, 0xa9, 0xfc, 0xf0, 0xad, 0xf7, 0x30,
0x66, 0x34, 0xf4, 0x39, 0x64, 0xe5, 0x65, 0x85, 0x48, 0x3b, 0xd4, 0xab, 0xd3, 0x51, 0xe9, 0x1b,
0x29, 0xc7, 0x63, 0x79, 0x6a, 0x9d, 0x38, 0x04, 0x70, 0x94, 0x84, 0x6e, 0x40, 0xd2, 0x10, 0xee,
0x92, 0x3f, 0x98, 0xa8, 0xb7, 0x71, 0xd2, 0x70, 0xd4, 0x7f, 0x48, 0xc0, 0xc2, 0x74, 0xc1, 0xb3,
0x08, 0xb8, 0x05, 0x79, 0x6f, 0xbc, 0xeb, 0x4d, 0x3c, 0x9f, 0x0c, 0x83, 0xe7, 0xc9, 0x90, 0x80,
0x5a, 0x90, 0xd7, 0xed, 0x01, 0x75, 0x2d, 0x7f, 0x7f, 0x28, 0x2b, 0xd1, 0xf8, 0x54, 0x21, 0xaa,
0xb3, 0x52, 0x0d, 0x44, 0xf0, 0x54, 0x3a, 0x38, 0xf7, 0xc5, 0x1b, 0x36, 0x3f, 0xf7, 0x5f, 0x83,
0xa2, 0xad, 0x0f, 0xf9, 0xed, 0x8d, 0x6f, 0x0d, 0xc5, 0x38, 0xd2, 0xb8, 0x20, 0x69, 0x7d, 0x6b,
0x48, 0x54, 0x15, 0xf2, 0xa1, 0x32, 0xb4, 0x04, 0x85, 0x6a, 0xb3, 0xa7, 0xdd, 0x5d, 0xbf, 0xaf,
0x3d, 0xac, 0x6f, 0x2b, 0x73, 0x32, 0x37, 0xfd, 0xcb, 0x04, 0x2c, 0xc8, 0xed, 0x48, 0xe6, 0xfb,
0xaf, 0xc3, 0xbc, 0xab, 0xef, 0xf9, 0x41, 0x45, 0x92, 0x16, 0x51, 0xcd, 0x76, 0x78, 0x56, 0x91,
0x30, 0x56, 0x7c, 0x45, 0x12, 0x79, 0x30, 0x4f, 0x5d, 0xfa, 0x60, 0x9e, 0xfe, 0xb9, 0x3c, 0x98,
0xab, 0xbf, 0x05, 0xb0, 0x61, 0xd9, 0xa4, 0x2f, 0xae, 0x90, 0xe2, 0xea, 0x4b, 0x96, 0xc3, 0xc9,
0x8b, 0xc4, 0x20, 0x87, 0x6b, 0x35, 0x30, 0xa3, 0x31, 0xd6, 0xc0, 0x32, 0xe5, 0x62, 0xe4, 0xac,
0x87, 0x8c, 0x35, 0xb0, 0xcc, 0xf0, 0x89, 0x28, 0x7d, 0xd5, 0x13, 0xd1, 0x49, 0x02, 0x96, 0x64,
0xee, 0x1a, 0x6e, 0xbf, 0x6f, 0x43, 0x5e, 0xa4, 0xb1, 0xd3, 0x82, 0x8e, 0x3f, 0x12, 0x0b, 0x5c,
0xab, 0x81, 0x73, 0x82, 0xdd, 0x32, 0xd1, 0x1a, 0x14, 0x24, 0x34, 0xf2, 0xe3, 0x1a, 0x10, 0xa4,
0x36, 0x33, 0xff, 0x7d, 0x48, 0xef, 0x59, 0x36, 0x91, 0x81, 0x1e, 0xbb, 0x01, 0x4c, 0x1d, 0xb0,
0x39, 0x87, 0x39, 0xba, 0x96, 0x0b, 0xee, 0xd8, 0xb8, 0x7d, 0xb2, 0xec, 0x8c, 0xda, 0x27, 0x2a,
0xd0, 0x73, 0xf6, 0x09, 0x1c, 0xb3, 0x4f, 0xb0, 0x85, 0x7d, 0x12, 0x1a, 0xb5, 0x4f, 0x90, 0x7e,
0x2e, 0xf6, 0x6d, 0xc1, 0x8d, 0x9a, 0xad, 0x1b, 0x07, 0xb6, 0xe5, 0xf9, 0xc4, 0x8c, 0xee, 0x18,
0xeb, 0x90, 0x9d, 0x49, 0x3a, 0x2f, 0xbb, 0x73, 0x95, 0x48, 0xf5, 0x3f, 0x12, 0x50, 0xdc, 0x24,
0xba, 0xed, 0xef, 0x4f, 0xaf, 0x86, 0x7c, 0xe2, 0xf9, 0xf2, 0xb0, 0xe2, 0xdf, 0xe8, 0x03, 0xc8,
0x85, 0x39, 0xc9, 0x95, 0x8f, 0x5f, 0x21, 0x14, 0xdd, 0x83, 0x79, 0xb6, 0xc6, 0xe8, 0x38, 0x28,
0x76, 0x2e, 0x7b, 0x57, 0x91, 0x48, 0x76, 0xc8, 0xb8, 0x84, 0x27, 0x21, 0x3c, 0x94, 0x32, 0x38,
0x68, 0xa2, 0x5f, 0x84, 0x22, 0x7f, 0x16, 0x08, 0x72, 0xae, 0xcc, 0x55, 0x3a, 0x0b, 0xe2, 0x65,
0x4f, 0xe4, 0x5b, 0xff, 0x97, 0x80, 0xe5, 0x6d, 0x7d, 0xb2, 0x4b, 0xe4, 0xb6, 0x41, 0x4c, 0x4c,
0x0c, 0xea, 0x9a, 0xa8, 0x1b, 0xdd, 0x6e, 0x2e, 0x79, 0x28, 0x8c, 0x13, 0x8e, 0xdf, 0x75, 0x82,
0x02, 0x2c, 0x19, 0x29, 0xc0, 0x96, 0x21, 0xe3, 0x50, 0xc7, 0x20, 0x72, 0x2f, 0x12, 0x0d, 0xd5,
0x8a, 0x6e, 0x35, 0xa5, 0xf0, 0x0d, 0x8f, 0xbf, 0xc0, 0xb5, 0xa9, 0x1f, 0xf6, 0x86, 0x3e, 0x87,
0x52, 0xaf, 0x59, 0xc7, 0xcd, 0x7e, 0xad, 0xf3, 0x43, 0xad, 0x57, 0xdd, 0xea, 0x55, 0xd7, 0xef,
0x68, 0xdd, 0xce, 0xd6, 0x17, 0x77, 0xef, 0xdd, 0xf9, 0x40, 0x49, 0x94, 0xca, 0xc7, 0x27, 0xe5,
0x5b, 0xed, 0x6a, 0x7d, 0x4b, 0xac, 0x98, 0x5d, 0xfa, 0xb4, 0xa7, 0xdb, 0x9e, 0xbe, 0x7e, 0xa7,
0x4b, 0xed, 0x09, 0xc3, 0xb0, 0xb0, 0x2e, 0x46, 0xcf, 0xab, 0xe8, 0x31, 0x9c, 0xb8, 0xf0, 0x18,
0x9e, 0x9e, 0xe6, 0xc9, 0x0b, 0x4e, 0xf3, 0x0d, 0x58, 0x36, 0x5c, 0xea, 0x79, 0x1a, 0xcb, 0xfe,
0x89, 0x79, 0xae, 0xbe, 0x78, 0xe9, 0xec, 0x74, 0xed, 0x5a, 0x9d, 0xf1, 0x7b, 0x9c, 0x2d, 0xd5,
0x5f, 0x33, 0x22, 0x24, 0xde, 0x93, 0xfa, 0x47, 0x29, 0x96, 0x48, 0x59, 0x87, 0x96, 0x4d, 0x06,
0xc4, 0x43, 0x8f, 0x61, 0xc9, 0x70, 0x89, 0xc9, 0xd2, 0x7a, 0xdd, 0xd6, 0xbc, 0x11, 0x31, 0x64,
0x50, 0xff, 0x42, 0x6c, 0x4e, 0x13, 0x0a, 0x56, 0xea, 0xa1, 0x54, 0x6f, 0x44, 0x0c, 0xbc, 0x68,
0xcc, 0xb4, 0xd1, 0x97, 0xb0, 0xe4, 0x11, 0xdb, 0x72, 0xc6, 0x4f, 0x35, 0x83, 0x3a, 0x3e, 0x79,
0x1a, 0x3c, 0x47, 0x5d, 0xa5, 0xb7, 0xd7, 0xdc, 0x62, 0x52, 0x75, 0x21, 0x54, 0x43, 0x67, 0xa7,
0x6b, 0x8b, 0xb3, 0x34, 0xbc, 0x28, 0x35, 0xcb, 0x76, 0xa9, 0x0d, 0x8b, 0xb3, 0xd6, 0xa0, 0x65,
0xb9, 0xf6, 0xf9, 0x16, 0x12, 0xac, 0x6d, 0x74, 0x0b, 0x72, 0x2e, 0x19, 0x58, 0x9e, 0xef, 0x0a,
0x37, 0x33, 0x4e, 0x48, 0x61, 0x2b, 0x5f, 0xfc, 0xc2, 0xa6, 0xf4, 0x1b, 0x70, 0xae, 0x47, 0xb6,
0x58, 0x4c, 0xcb, 0xd3, 0x77, 0xa5, 0xca, 0x1c, 0x0e, 0x9a, 0x2c, 0x06, 0xc7, 0x5e, 0x98, 0xa8,
0xf1, 0x6f, 0x46, 0xe3, 0x19, 0x85, 0xfc, 0xbd, 0x11, 0xcf, 0x19, 0x82, 0x1f, 0x2e, 0xa6, 0x23,
0x3f, 0x5c, 0x5c, 0x86, 0x8c, 0x4d, 0x0e, 0x89, 0x2d, 0xce, 0x72, 0x2c, 0x1a, 0xef, 0xfc, 0x34,
0x05, 0xf9, 0xf0, 0xe9, 0x85, 0x9d, 0x04, 0xed, 0xe6, 0x93, 0x20, 0x56, 0x43, 0x7a, 0x9b, 0x1c,
0xa1, 0xd7, 0xa6, 0x77, 0x4a, 0x9f, 0x8b, 0xb7, 0xe6, 0x90, 0x1d, 0xdc, 0x27, 0xbd, 0x01, 0xb9,
0x6a, 0xaf, 0xd7, 0x7a, 0xd8, 0x6e, 0x36, 0x94, 0xaf, 0x12, 0xa5, 0x97, 0x8e, 0x4f, 0xca, 0xd7,
0x42, 0x50, 0xd5, 0x13, 0xa1, 0xc4, 0x51, 0xf5, 0x7a, 0xb3, 0xdb, 0x6f, 0x36, 0x94, 0x67, 0xc9,
0xf3, 0x28, 0x7e, 0x47, 0xc2, 0x7f, 0x31, 0x92, 0xef, 0xe2, 0x66, 0xb7, 0x8a, 0x59, 0x87, 0x5f,
0x25, 0xc5, 0x55, 0xd7, 0xb4, 0x47, 0x97, 0x8c, 0x74, 0x97, 0xf5, 0xb9, 0x1a, 0xfc, 0x72, 0xea,
0x59, 0x4a, 0xfc, 0xaa, 0x60, 0xfa, 0x8e, 0x44, 0x74, 0x73, 0xc2, 0x7a, 0xe3, 0x0f, 0x78, 0x5c,
0x4d, 0xea, 0x5c, 0x6f, 0x3d, 0xb6, 0x93, 0x30, 0x2d, 0x2a, 0xcc, 0xe3, 0x9d, 0x76, 0x9b, 0x81,
0x9e, 0xa5, 0xcf, 0x8d, 0x0e, 0x8f, 0x1d, 0x56, 0xff, 0xa2, 0xdb, 0x90, 0x0b, 0xde, 0xf7, 0x94,
0xaf, 0xd2, 0xe7, 0x0c, 0xaa, 0x07, 0x8f, 0x93, 0xbc, 0xc3, 0xcd, 0x9d, 0x3e, 0xff, 0x61, 0xd7,
0xb3, 0xcc, 0xf9, 0x0e, 0xf7, 0xc7, 0xbe, 0x49, 0x8f, 0x1c, 0xb6, 0x02, 0xe5, 0xad, 0xda, 0x57,
0x19, 0x71, 0x05, 0x11, 0x62, 0xe4, 0x95, 0xda, 0x1b, 0x90, 0xc3, 0xcd, 0x1f, 0x88, 0xdf, 0x80,
0x3d, 0xcb, 0x9e, 0xd3, 0x83, 0xc9, 0x97, 0xc4, 0x90, 0xbd, 0x75, 0x70, 0x77, 0xb3, 0xca, 0x5d,
0x7e, 0x1e, 0xd5, 0x71, 0x47, 0xfb, 0xba, 0x43, 0xcc, 0xe9, 0x4f, 0x2b, 0x42, 0xd6, 0x3b, 0xbf,
0x02, 0xb9, 0x20, 0xcf, 0x44, 0xab, 0x90, 0x7d, 0xd2, 0xc1, 0x8f, 0x9a, 0x58, 0x99, 0x13, 0x3e,
0x0c, 0x38, 0x4f, 0x44, 0x85, 0x50, 0x86, 0xf9, 0xed, 0x6a, 0xbb, 0xfa, 0xb0, 0x89, 0x83, 0x0b,
0xef, 0x00, 0x20, 0x93, 0xa5, 0x92, 0x22, 0x3b, 0x08, 0x75, 0xd6, 0x56, 0xbe, 0xfe, 0x66, 0x75,
0xee, 0x27, 0xdf, 0xac, 0xce, 0x3d, 0x3b, 0x5b, 0x4d, 0x7c, 0x7d, 0xb6, 0x9a, 0xf8, 0xf1, 0xd9,
0x6a, 0xe2, 0xdf, 0xcf, 0x56, 0x13, 0xbb, 0x59, 0xbe, 0xa5, 0xdf, 0xfb, 0xff, 0x00, 0x00, 0x00,
0xff, 0xff, 0x69, 0xd9, 0x83, 0x1d, 0x57, 0x2e, 0x00, 0x00,
}

View file

@ -495,6 +495,8 @@ message NetworkAttachmentConfig {
// preferred. If these addresses are not available then the
// attachment might fail.
repeated string addresses = 3;
// DriverOpts is a map of driver specific options for the network target
map<string, string> driver_opts = 4;
}
// IPAMConfig specifies parameters for IP Address Management.

View file

@ -593,7 +593,7 @@ func (a *Allocator) taskCreateNetworkAttachments(t *api.Task, s *api.Service) {
attachment := api.NetworkAttachment{Network: n}
attachment.Aliases = append(attachment.Aliases, na.Aliases...)
attachment.Addresses = append(attachment.Addresses, na.Addresses...)
attachment.DriverOpts = na.DriverOpts
networks = append(networks, &attachment)
}
})

View file

@ -3,11 +3,15 @@ package networkallocator
import (
"github.com/docker/libnetwork/drivers/overlay/ovmanager"
"github.com/docker/libnetwork/drivers/remote"
"github.com/docker/libnetwork/drvregistry"
)
func getInitializers() []initializer {
return []initializer{
{remote.Init, "remote"},
{ovmanager.Init, "overlay"},
}
const initializers = []initializer{
{remote.Init, "remote"},
{ovmanager.Init, "overlay"},
}
// PredefinedNetworks returns the list of predefined network structures
func PredefinedNetworks() []PredefinedNetworkData {
return nil
}

View file

@ -1,15 +0,0 @@
// +build linux windows
package networkallocator
import (
"github.com/docker/libnetwork/drivers/overlay/ovmanager"
"github.com/docker/libnetwork/drivers/remote"
)
func getInitializers() []initializer {
return []initializer{
{remote.Init, "remote"},
{ovmanager.Init, "overlay"},
}
}

View file

@ -0,0 +1,27 @@
package networkallocator
import (
"github.com/docker/libnetwork/drivers/bridge/brmanager"
"github.com/docker/libnetwork/drivers/host"
"github.com/docker/libnetwork/drivers/ipvlan/ivmanager"
"github.com/docker/libnetwork/drivers/macvlan/mvmanager"
"github.com/docker/libnetwork/drivers/overlay/ovmanager"
"github.com/docker/libnetwork/drivers/remote"
)
var initializers = []initializer{
{remote.Init, "remote"},
{ovmanager.Init, "overlay"},
{mvmanager.Init, "macvlan"},
{brmanager.Init, "bridge"},
{ivmanager.Init, "ipvlan"},
{host.Init, "host"},
}
// PredefinedNetworks returns the list of predefined network structures
func PredefinedNetworks() []PredefinedNetworkData {
return []PredefinedNetworkData{
{"bridge", "bridge"},
{"host", "host"},
}
}

View file

@ -0,0 +1,16 @@
package networkallocator
import (
"github.com/docker/libnetwork/drivers/overlay/ovmanager"
"github.com/docker/libnetwork/drivers/remote"
)
var initializers = []initializer{
{remote.Init, "remote"},
{ovmanager.Init, "overlay"},
}
// PredefinedNetworks returns the list of predefined network structures
func PredefinedNetworks() []PredefinedNetworkData {
return nil
}

View file

@ -2,6 +2,9 @@
package networkallocator
func getInitializers() []initializer {
const initializers = nil
// PredefinedNetworks returns the list of predefined network structures
func PredefinedNetworks() []PredefinedNetworkData {
return nil
}

View file

@ -3,6 +3,7 @@ package networkallocator
import (
"fmt"
"net"
"strings"
"github.com/docker/docker/pkg/plugingetter"
"github.com/docker/libnetwork/datastore"
@ -21,6 +22,10 @@ const (
// default if a network without any driver name specified is
// created.
DefaultDriver = "overlay"
// PredefinedLabel identifies internally allocated swarm networks
// corresponding to the node-local predefined networks on the host.
PredefinedLabel = "com.docker.swarm.predefined"
)
// NetworkAllocator acts as the controller for all network related operations
@ -62,6 +67,18 @@ type network struct {
// endpoints is a map of endpoint IP to the poolID from which it
// was allocated.
endpoints map[string]string
// isNodeLocal indicates whether the scope of the network's resources
// is local to the node. If true, it means the resources can only be
// allocated locally by the node where the network will be deployed.
// In this the swarm manager will skip the allocations.
isNodeLocal bool
}
type networkDriver struct {
driver driverapi.Driver
name string
capability *driverapi.Capability
}
type initializer struct {
@ -69,6 +86,13 @@ type initializer struct {
ntype string
}
// PredefinedNetworkData contains the minimum set of data needed
// to create the correspondent predefined network object in the store.
type PredefinedNetworkData struct {
Name string
Driver string
}
// New returns a new NetworkAllocator handle
func New(pg plugingetter.PluginGetter) (*NetworkAllocator, error) {
na := &NetworkAllocator{
@ -110,22 +134,38 @@ func (na *NetworkAllocator) Allocate(n *api.Network) error {
return fmt.Errorf("network %s already allocated", n.ID)
}
pools, err := na.allocatePools(n)
d, err := na.resolveDriver(n)
if err != nil {
return errors.Wrapf(err, "failed allocating pools and gateway IP for network %s", n.ID)
return err
}
if err := na.allocateDriverState(n); err != nil {
na.freePools(n, pools)
return errors.Wrapf(err, "failed while allocating driver state for network %s", n.ID)
nw := &network{
nw: n,
endpoints: make(map[string]string),
isNodeLocal: d.capability.DataScope == datastore.LocalScope,
}
na.networks[n.ID] = &network{
nw: n,
pools: pools,
endpoints: make(map[string]string),
// No swarm-level allocation can be provided by the network driver for
// node-local networks. Only thing needed is populating the driver's name
// in the driver's state.
if nw.isNodeLocal {
n.DriverState = &api.Driver{
Name: d.name,
}
} else {
nw.pools, err = na.allocatePools(n)
if err != nil {
return errors.Wrapf(err, "failed allocating pools and gateway IP for network %s", n.ID)
}
if err := na.allocateDriverState(n); err != nil {
na.freePools(n, nw.pools)
return errors.Wrapf(err, "failed while allocating driver state for network %s", n.ID)
}
}
na.networks[n.ID] = nw
return nil
}
@ -141,11 +181,18 @@ func (na *NetworkAllocator) Deallocate(n *api.Network) error {
return fmt.Errorf("could not get networker state for network %s", n.ID)
}
// No swarm-level resource deallocation needed for node-local networks
if localNet.isNodeLocal {
delete(na.networks, n.ID)
return nil
}
if err := na.freeDriverState(n); err != nil {
return errors.Wrapf(err, "failed to free driver state for network %s", n.ID)
}
delete(na.networks, n.ID)
return na.freePools(n, localNet.pools)
}
@ -282,24 +329,32 @@ func (na *NetworkAllocator) IsTaskAllocated(t *api.Task) bool {
}
// To determine whether the task has its resources allocated,
// we just need to look at one network(in case of
// we just need to look at one global scope network (in case of
// multi-network attachment). This is because we make sure we
// allocate for every network or we allocate for none.
// If the network is not allocated, the task cannot be allocated.
localNet, ok := na.networks[t.Networks[0].Network.ID]
if !ok {
return false
}
// Find the first global scope network
for _, nAttach := range t.Networks {
// If the network is not allocated, the task cannot be allocated.
localNet, ok := na.networks[nAttach.Network.ID]
if !ok {
return false
}
// Addresses empty. Task is not allocated.
if len(t.Networks[0].Addresses) == 0 {
return false
}
// Nothing else to check for local scope network
if localNet.isNodeLocal {
continue
}
// The allocated IP address not found in local endpoint state. Not allocated.
if _, ok := localNet.endpoints[t.Networks[0].Addresses[0]]; !ok {
return false
// Addresses empty. Task is not allocated.
if len(nAttach.Addresses) == 0 {
return false
}
// The allocated IP address not found in local endpoint state. Not allocated.
if _, ok := localNet.endpoints[nAttach.Addresses[0]]; !ok {
return false
}
}
return true
@ -445,6 +500,9 @@ func (na *NetworkAllocator) DeallocateNode(node *api.Node) error {
// networks that a task is attached to.
func (na *NetworkAllocator) AllocateTask(t *api.Task) error {
for i, nAttach := range t.Networks {
if localNet := na.getNetwork(nAttach.Network.ID); localNet != nil && localNet.isNodeLocal {
continue
}
if err := na.allocateNetworkIPs(nAttach); err != nil {
if err := na.releaseEndpoints(t.Networks[:i]); err != nil {
log.G(context.TODO()).WithError(err).Errorf("Failed to release IP addresses while rolling back allocation for task %s network %s", t.ID, nAttach.Network.ID)
@ -467,16 +525,20 @@ func (na *NetworkAllocator) DeallocateTask(t *api.Task) error {
func (na *NetworkAllocator) releaseEndpoints(networks []*api.NetworkAttachment) error {
for _, nAttach := range networks {
ipam, _, _, err := na.resolveIPAM(nAttach.Network)
if err != nil {
return errors.Wrapf(err, "failed to resolve IPAM while allocating")
}
localNet := na.getNetwork(nAttach.Network.ID)
if localNet == nil {
return fmt.Errorf("could not find network allocator state for network %s", nAttach.Network.ID)
}
if localNet.isNodeLocal {
continue
}
ipam, _, _, err := na.resolveIPAM(nAttach.Network)
if err != nil {
return errors.Wrap(err, "failed to resolve IPAM while releasing")
}
// Do not fail and bail out if we fail to release IP
// address here. Keep going and try releasing as many
// addresses as possible.
@ -512,6 +574,10 @@ func (na *NetworkAllocator) allocateVIP(vip *api.Endpoint_VirtualIP) error {
return errors.New("networkallocator: could not find local network state")
}
if localNet.isNodeLocal {
return nil
}
// If this IP is already allocated in memory we don't need to
// do anything.
if _, ok := localNet.endpoints[vip.Addr]; ok {
@ -556,7 +622,9 @@ func (na *NetworkAllocator) deallocateVIP(vip *api.Endpoint_VirtualIP) error {
if localNet == nil {
return errors.New("networkallocator: could not find local network state")
}
if localNet.isNodeLocal {
return nil
}
ipam, _, _, err := na.resolveIPAM(localNet.nw)
if err != nil {
return errors.Wrap(err, "failed to resolve IPAM while allocating")
@ -637,16 +705,16 @@ func (na *NetworkAllocator) allocateNetworkIPs(nAttach *api.NetworkAttachment) e
}
func (na *NetworkAllocator) freeDriverState(n *api.Network) error {
d, _, err := na.resolveDriver(n)
d, err := na.resolveDriver(n)
if err != nil {
return err
}
return d.NetworkFree(n.ID)
return d.driver.NetworkFree(n.ID)
}
func (na *NetworkAllocator) allocateDriverState(n *api.Network) error {
d, dName, err := na.resolveDriver(n)
d, err := na.resolveDriver(n)
if err != nil {
return err
}
@ -691,14 +759,14 @@ func (na *NetworkAllocator) allocateDriverState(n *api.Network) error {
ipv4Data = append(ipv4Data, data)
}
ds, err := d.NetworkAllocate(n.ID, options, ipv4Data, nil)
ds, err := d.driver.NetworkAllocate(n.ID, options, ipv4Data, nil)
if err != nil {
return err
}
// Update network object with the obtained driver state.
n.DriverState = &api.Driver{
Name: dName,
Name: d.name,
Options: ds,
}
@ -706,7 +774,7 @@ func (na *NetworkAllocator) allocateDriverState(n *api.Network) error {
}
// Resolve network driver
func (na *NetworkAllocator) resolveDriver(n *api.Network) (driverapi.Driver, string, error) {
func (na *NetworkAllocator) resolveDriver(n *api.Network) (*networkDriver, error) {
dName := DefaultDriver
if n.Spec.DriverConfig != nil && n.Spec.DriverConfig.Name != "" {
dName = n.Spec.DriverConfig.Name
@ -717,21 +785,16 @@ func (na *NetworkAllocator) resolveDriver(n *api.Network) (driverapi.Driver, str
var err error
err = na.loadDriver(dName)
if err != nil {
return nil, "", err
return nil, err
}
d, drvcap = na.drvRegistry.Driver(dName)
if d == nil {
return nil, "", fmt.Errorf("could not resolve network driver %s", dName)
return nil, fmt.Errorf("could not resolve network driver %s", dName)
}
}
if drvcap.DataScope != datastore.GlobalScope {
return nil, "", fmt.Errorf("swarm can allocate network resources only for global scoped networks. network driver (%s) is scoped %s", dName, drvcap.DataScope)
}
return d, dName, nil
return &networkDriver{driver: d, capability: drvcap, name: dName}, nil
}
func (na *NetworkAllocator) loadDriver(name string) error {
@ -873,7 +936,7 @@ func (na *NetworkAllocator) allocatePools(n *api.Network) (map[string]string, er
}
func initializeDrivers(reg *drvregistry.DrvRegistry) error {
for _, i := range getInitializers() {
for _, i := range initializers {
if err := reg.AddDriver(i.ntype, i.fn, nil); err != nil {
return err
}
@ -934,3 +997,14 @@ func IsIngressNetworkNeeded(s *api.Service) bool {
return false
}
// IsBuiltInDriver returns whether the passed driver is an internal network driver
func IsBuiltInDriver(name string) bool {
n := strings.ToLower(name)
for _, d := range initializers {
if n == d.ntype {
return true
}
}
return false
}

View file

@ -104,8 +104,16 @@ func validateDriver(driver *api.Driver, pg plugingetter.PluginGetter, pluginType
return grpc.Errorf(codes.InvalidArgument, "driver name: if driver is specified name is required")
}
if strings.ToLower(driver.Name) == networkallocator.DefaultDriver || strings.ToLower(driver.Name) == ipamapi.DefaultIPAM {
return nil
// First check against the known drivers
switch pluginType {
case ipamapi.PluginEndpointType:
if strings.ToLower(driver.Name) == ipamapi.DefaultIPAM {
return nil
}
default:
if networkallocator.IsBuiltInDriver(driver.Name) {
return nil
}
}
if pg == nil {

View file

@ -9,6 +9,7 @@ import (
"github.com/docker/swarmkit/api"
"github.com/docker/swarmkit/identity"
"github.com/docker/swarmkit/manager/allocator"
"github.com/docker/swarmkit/manager/allocator/networkallocator"
"github.com/docker/swarmkit/manager/state/store"
"golang.org/x/net/context"
"google.golang.org/grpc"
@ -87,6 +88,10 @@ func validateNetworkSpec(spec *api.NetworkSpec, pg plugingetter.PluginGetter) er
return err
}
if _, ok := spec.Annotations.Labels[networkallocator.PredefinedLabel]; ok {
return grpc.Errorf(codes.PermissionDenied, "label %s is for internally created predefined networks and cannot be applied by users",
networkallocator.PredefinedLabel)
}
if err := validateDriver(spec.DriverConfig, pg, driverapi.NetworkPluginEndpointType); err != nil {
return err
}
@ -177,6 +182,11 @@ func (s *Server) RemoveNetwork(ctx context.Context, request *api.RemoveNetworkRe
rm = s.removeIngressNetwork
}
if v, ok := n.Spec.Annotations.Labels[networkallocator.PredefinedLabel]; ok && v == "true" {
return nil, grpc.Errorf(codes.FailedPrecondition, "network %s (%s) is a swarm predefined network and cannot be removed",
request.NetworkID, n.Spec.Annotations.Name)
}
if err := rm(n.ID); err != nil {
if err == store.ErrNotExist {
return nil, grpc.Errorf(codes.NotFound, "network %s not found", request.NetworkID)

View file

@ -427,13 +427,14 @@ func (d *Dispatcher) markNodeReady(ctx context.Context, nodeID string, descripti
// Wait until the node update batch happens before unblocking register.
d.processUpdatesLock.Lock()
defer d.processUpdatesLock.Unlock()
select {
case <-ctx.Done():
return ctx.Err()
default:
}
d.processUpdatesCond.Wait()
d.processUpdatesLock.Unlock()
return nil
}

View file

@ -23,6 +23,7 @@ import (
"github.com/docker/swarmkit/identity"
"github.com/docker/swarmkit/log"
"github.com/docker/swarmkit/manager/allocator"
"github.com/docker/swarmkit/manager/allocator/networkallocator"
"github.com/docker/swarmkit/manager/controlapi"
"github.com/docker/swarmkit/manager/dispatcher"
"github.com/docker/swarmkit/manager/health"
@ -938,6 +939,16 @@ func (m *Manager) becomeLeader(ctx context.Context) {
if err := store.CreateNetwork(tx, newIngressNetwork()); err != nil {
log.G(ctx).WithError(err).Error("failed to create default ingress network")
}
// Create now the static predefined node-local networks which
// are known to be present in each cluster node. This is needed
// in order to allow running services on the predefined docker
// networks like `bridge` and `host`.
log.G(ctx).Info("Creating node-local predefined networks")
for _, p := range networkallocator.PredefinedNetworks() {
if err := store.CreateNetwork(tx, newPredefinedNetwork(p.Name, p.Driver)); err != nil {
log.G(ctx).WithError(err).Error("failed to create predefined network " + p.Name)
}
}
}
return nil
@ -1156,3 +1167,24 @@ func newIngressNetwork() *api.Network {
},
}
}
// Creates a network object representing one of the predefined networks
// known to be statically created on the cluster nodes. These objects
// are populated in the store at cluster creation solely in order to
// support running services on the nodes' predefined networks.
// External clients can filter these predefined networks by looking
// at the predefined label.
func newPredefinedNetwork(name, driver string) *api.Network {
return &api.Network{
ID: identity.NewID(),
Spec: api.NetworkSpec{
Annotations: api.Annotations{
Name: name,
Labels: map[string]string{
networkallocator.PredefinedLabel: "true",
},
},
DriverConfig: &api.Driver{Name: driver},
},
}
}

View file

@ -244,15 +244,33 @@ func (f *PlatformFilter) Check(n *NodeInfo) bool {
return true
}
// check if the platform for the node is supported
nodePlatform := n.Description.Platform
for _, p := range f.supportedPlatforms {
if (p.Architecture == "" || p.Architecture == nodePlatform.Architecture) && (p.OS == "" || p.OS == nodePlatform.OS) {
return true
if n.Description != nil {
if nodePlatform := n.Description.Platform; nodePlatform != nil {
for _, p := range f.supportedPlatforms {
if f.platformEqual(*p, *nodePlatform) {
return true
}
}
}
}
return false
}
func (f *PlatformFilter) platformEqual(imgPlatform, nodePlatform api.Platform) bool {
// normalize "x86_64" architectures to "amd64"
if imgPlatform.Architecture == "x86_64" {
imgPlatform.Architecture = "amd64"
}
if nodePlatform.Architecture == "x86_64" {
nodePlatform.Architecture = "amd64"
}
if (imgPlatform.Architecture == "" || imgPlatform.Architecture == nodePlatform.Architecture) && (imgPlatform.OS == "" || imgPlatform.OS == nodePlatform.OS) {
return true
}
return false
}
// Explain returns an explanation of a failure.
func (f *PlatformFilter) Explain(nodes int) string {
if nodes == 1 {

View file

@ -92,6 +92,7 @@ var E_Deepcopy = &proto.ExtensionDesc{
Field: 70000,
Name: "docker.protobuf.plugin.deepcopy",
Tag: "varint,70000,opt,name=deepcopy,def=1",
Filename: "plugin.proto",
}
var E_StoreObject = &proto.ExtensionDesc{
@ -100,6 +101,7 @@ var E_StoreObject = &proto.ExtensionDesc{
Field: 70001,
Name: "docker.protobuf.plugin.store_object",
Tag: "bytes,70001,opt,name=store_object,json=storeObject",
Filename: "plugin.proto",
}
var E_TlsAuthorization = &proto.ExtensionDesc{
@ -108,6 +110,7 @@ var E_TlsAuthorization = &proto.ExtensionDesc{
Field: 73626345,
Name: "docker.protobuf.plugin.tls_authorization",
Tag: "bytes,73626345,opt,name=tls_authorization,json=tlsAuthorization",
Filename: "plugin.proto",
}
func init() {

View file

@ -1,6 +1,6 @@
# grpc and protobuf
google.golang.org/grpc v1.0.4
github.com/gogo/protobuf 8d70fb3182befc465c4a1eac8ad4d38ff49778e2
github.com/gogo/protobuf v0.4
github.com/golang/protobuf 8ee79997227bf9b34611aee7946ae64735e6fd93
github.com/matttproud/golang_protobuf_extensions v1.0.0
@ -23,7 +23,7 @@ github.com/docker/go-connections 34b5052da6b11e27f5f2e357b38b571ddddd3928
github.com/docker/go-events 37d35add5005832485c0225ec870121b78fcff1c
github.com/docker/go-units 954fed01cc617c55d838fa2230073f2cb17386c8
github.com/docker/libkv 9fd56606e928ff1f309808f5d5a0b7a2ef73f9a8
github.com/docker/libnetwork 4610dd67c7b9828bb4719d8aa2ac53a7f1f739d2
github.com/docker/libnetwork 37e20af882e13dd01ade3658b7aabdae3412118b
github.com/docker/libtrust 9cbd2a1374f46905c68a4eb3694a130610adc62a
github.com/opencontainers/runc 8e8d01d38d7b4fb0a35bf89b72bc3e18c98882d7
github.com/opencontainers/go-digest a6d0ee40d4207ea02364bd3b9e8e77b9159ba1eb

View file

@ -5,7 +5,7 @@
gogoprotobuf is a fork of <a href="https://github.com/golang/protobuf">golang/protobuf</a> with extra code generation features.
This code generation is used to achieve:
- fast marshalling and unmarshalling
- more canonical Go structures
- goprotobuf compatibility
@ -23,7 +23,7 @@ These projects use gogoprotobuf:
- <a href="http://godoc.org/github.com/coreos/etcd">etcd</a> - <a href="https://blog.gopheracademy.com/advent-2015/etcd-distributed-key-value-store-with-grpc-http2/">blog</a> - <a href="https://github.com/coreos/etcd/blob/master/etcdserver/etcdserverpb/etcdserver.proto">sample proto file</a>
- <a href="https://www.spacemonkey.com/">spacemonkey</a> - <a href="https://www.spacemonkey.com/blog/posts/go-space-monkey">blog</a>
- <a href="http://badoo.com">badoo</a> - <a href="https://github.com/badoo/lsd/blob/32061f501c5eca9c76c596d790b450501ba27b2f/proto/lsd.proto">sample proto file</a>
- <a href="https://github.com/mesos/mesos-go">mesos-go</a> - <a href="https://github.com/mesos/mesos-go/blob/master/mesosproto/mesos.proto">sample proto file</a>
- <a href="https://github.com/mesos/mesos-go">mesos-go</a> - <a href="https://github.com/mesos/mesos-go/blob/f9e5fb7c2f50ab5f23299f26b6b07c5d6afdd252/api/v0/mesosproto/authentication.proto">sample proto file</a>
- <a href="https://github.com/mozilla-services/heka">heka</a> - <a href="https://github.com/mozilla-services/heka/commit/eb72fbf7d2d28249fbaf8d8dc6607f4eb6f03351">the switch from golang/protobuf to gogo/protobuf when it was still on code.google.com</a>
- <a href="https://github.com/cockroachdb/cockroach">cockroachdb</a> - <a href="https://github.com/cockroachdb/cockroach/blob/651d54d393e391a30154e9117ab4b18d9ee6d845/roachpb/metadata.proto">sample proto file</a>
- <a href="https://github.com/jbenet/go-ipfs">go-ipfs</a> - <a href="https://github.com/ipfs/go-ipfs/blob/2b6da0c024f28abeb16947fb452787196a6b56a2/merkledag/pb/merkledag.proto">sample proto file</a>
@ -38,6 +38,7 @@ These projects use gogoprotobuf:
- <a href="https://github.com/docker/swarmkit">docker swarmkit</a> - <a href="https://github.com/docker/swarmkit/blob/63600e01af3b8da2a0ed1c9fa6e1ae4299d75edb/api/objects.proto">sample proto file</a>
- <a href="https://nats.io/">nats.io</a> - <a href="https://github.com/nats-io/go-nats-streaming/blob/master/pb/protocol.proto">go-nats-streaming</a>
- <a href="https://github.com/pingcap/tidb">tidb</a> - Communication between <a href="https://github.com/pingcap/tipb/blob/master/generate-go.sh#L4">tidb</a> and <a href="https://github.com/pingcap/kvproto/blob/master/generate_go.sh#L3">tikv</a>
- <a href="https://github.com/AsynkronIT/protoactor-go">protoactor-go</a> - <a href="https://github.com/AsynkronIT/protoactor-go/blob/dev/protobuf/protoc-gen-protoactor/main.go">vanity command</a> that also generates actors from service definitions
Please lets us know if you are using gogoprotobuf by posting on our <a href="https://groups.google.com/forum/#!topic/gogoprotobuf/Brw76BxmFpQ">GoogleGroup</a>.
@ -47,21 +48,21 @@ Please lets us know if you are using gogoprotobuf by posting on our <a href="htt
- <a href="http://gophercon.sourcegraph.com/post/83747547505/writing-a-high-performance-database-in-go">gophercon</a>
- <a href="https://github.com/alecthomas/go_serialization_benchmarks">alecthomas' go serialization benchmarks</a>
## Getting Started
## Getting Started
There are several ways to use gogoprotobuf, but for all you need to install go and protoc.
After that you can choose:
- Speed
- More Speed and more generated code
- Most Speed and most customization
### Installation
To install it, you must first have Go (at least version 1.3.3) installed (see [http://golang.org/doc/install](http://golang.org/doc/install)). Go 1.5.4, 1.6.3 and 1.7.1 are continuously tested.
To install it, you must first have Go (at least version 1.6.3) installed (see [http://golang.org/doc/install](http://golang.org/doc/install)). Go 1.7.1 and 1.8 is continuously tested.
Next, install the standard protocol buffer implementation from [https://github.com/google/protobuf](https://github.com/google/protobuf).
Most versions from 2.3.1 should not give any problems, but 2.5.0, 2.6.1 and 3.0.2 are continuously tested.
Most versions from 2.3.1 should not give any problems, but 2.6.1, 3.0.2 and 3.1.0 are continuously tested.
### Speed

View file

@ -148,6 +148,7 @@ The enumprefix, getters and stringer extensions can be used to remove some of th
- goproto_stringer, if false, the message is generated without the default string method, this is useful for rather using stringer, or allowing you to write your own string method.
- goproto_extensions_map (beta), if false, the extensions field is generated as type []byte instead of type map[int32]proto.Extension
- goproto_unrecognized (beta), if false, XXX_unrecognized field is not generated. This is useful in conjunction with gogoproto.nullable=false, to generate structures completely devoid of pointers and reduce GC pressure at the cost of losing information about unrecognized fields.
- goproto_registration (beta), if true, the generated files will register all messages and types against both gogo/protobuf and golang/protobuf. This is necessary when using third-party packages which read registrations from golang/protobuf (such as the grpc-gateway).
Less Typing and Peace of Mind is explained in their specific plugin folders godoc:

View file

@ -34,6 +34,7 @@ var E_GoprotoEnumPrefix = &proto.ExtensionDesc{
Field: 62001,
Name: "gogoproto.goproto_enum_prefix",
Tag: "varint,62001,opt,name=goproto_enum_prefix,json=goprotoEnumPrefix",
Filename: "gogo.proto",
}
var E_GoprotoEnumStringer = &proto.ExtensionDesc{
@ -42,6 +43,7 @@ var E_GoprotoEnumStringer = &proto.ExtensionDesc{
Field: 62021,
Name: "gogoproto.goproto_enum_stringer",
Tag: "varint,62021,opt,name=goproto_enum_stringer,json=goprotoEnumStringer",
Filename: "gogo.proto",
}
var E_EnumStringer = &proto.ExtensionDesc{
@ -50,6 +52,7 @@ var E_EnumStringer = &proto.ExtensionDesc{
Field: 62022,
Name: "gogoproto.enum_stringer",
Tag: "varint,62022,opt,name=enum_stringer,json=enumStringer",
Filename: "gogo.proto",
}
var E_EnumCustomname = &proto.ExtensionDesc{
@ -58,6 +61,16 @@ var E_EnumCustomname = &proto.ExtensionDesc{
Field: 62023,
Name: "gogoproto.enum_customname",
Tag: "bytes,62023,opt,name=enum_customname,json=enumCustomname",
Filename: "gogo.proto",
}
var E_Enumdecl = &proto.ExtensionDesc{
ExtendedType: (*google_protobuf.EnumOptions)(nil),
ExtensionType: (*bool)(nil),
Field: 62024,
Name: "gogoproto.enumdecl",
Tag: "varint,62024,opt,name=enumdecl",
Filename: "gogo.proto",
}
var E_EnumvalueCustomname = &proto.ExtensionDesc{
@ -66,6 +79,7 @@ var E_EnumvalueCustomname = &proto.ExtensionDesc{
Field: 66001,
Name: "gogoproto.enumvalue_customname",
Tag: "bytes,66001,opt,name=enumvalue_customname,json=enumvalueCustomname",
Filename: "gogo.proto",
}
var E_GoprotoGettersAll = &proto.ExtensionDesc{
@ -74,6 +88,7 @@ var E_GoprotoGettersAll = &proto.ExtensionDesc{
Field: 63001,
Name: "gogoproto.goproto_getters_all",
Tag: "varint,63001,opt,name=goproto_getters_all,json=goprotoGettersAll",
Filename: "gogo.proto",
}
var E_GoprotoEnumPrefixAll = &proto.ExtensionDesc{
@ -82,6 +97,7 @@ var E_GoprotoEnumPrefixAll = &proto.ExtensionDesc{
Field: 63002,
Name: "gogoproto.goproto_enum_prefix_all",
Tag: "varint,63002,opt,name=goproto_enum_prefix_all,json=goprotoEnumPrefixAll",
Filename: "gogo.proto",
}
var E_GoprotoStringerAll = &proto.ExtensionDesc{
@ -90,6 +106,7 @@ var E_GoprotoStringerAll = &proto.ExtensionDesc{
Field: 63003,
Name: "gogoproto.goproto_stringer_all",
Tag: "varint,63003,opt,name=goproto_stringer_all,json=goprotoStringerAll",
Filename: "gogo.proto",
}
var E_VerboseEqualAll = &proto.ExtensionDesc{
@ -98,6 +115,7 @@ var E_VerboseEqualAll = &proto.ExtensionDesc{
Field: 63004,
Name: "gogoproto.verbose_equal_all",
Tag: "varint,63004,opt,name=verbose_equal_all,json=verboseEqualAll",
Filename: "gogo.proto",
}
var E_FaceAll = &proto.ExtensionDesc{
@ -106,6 +124,7 @@ var E_FaceAll = &proto.ExtensionDesc{
Field: 63005,
Name: "gogoproto.face_all",
Tag: "varint,63005,opt,name=face_all,json=faceAll",
Filename: "gogo.proto",
}
var E_GostringAll = &proto.ExtensionDesc{
@ -114,6 +133,7 @@ var E_GostringAll = &proto.ExtensionDesc{
Field: 63006,
Name: "gogoproto.gostring_all",
Tag: "varint,63006,opt,name=gostring_all,json=gostringAll",
Filename: "gogo.proto",
}
var E_PopulateAll = &proto.ExtensionDesc{
@ -122,6 +142,7 @@ var E_PopulateAll = &proto.ExtensionDesc{
Field: 63007,
Name: "gogoproto.populate_all",
Tag: "varint,63007,opt,name=populate_all,json=populateAll",
Filename: "gogo.proto",
}
var E_StringerAll = &proto.ExtensionDesc{
@ -130,6 +151,7 @@ var E_StringerAll = &proto.ExtensionDesc{
Field: 63008,
Name: "gogoproto.stringer_all",
Tag: "varint,63008,opt,name=stringer_all,json=stringerAll",
Filename: "gogo.proto",
}
var E_OnlyoneAll = &proto.ExtensionDesc{
@ -138,6 +160,7 @@ var E_OnlyoneAll = &proto.ExtensionDesc{
Field: 63009,
Name: "gogoproto.onlyone_all",
Tag: "varint,63009,opt,name=onlyone_all,json=onlyoneAll",
Filename: "gogo.proto",
}
var E_EqualAll = &proto.ExtensionDesc{
@ -146,6 +169,7 @@ var E_EqualAll = &proto.ExtensionDesc{
Field: 63013,
Name: "gogoproto.equal_all",
Tag: "varint,63013,opt,name=equal_all,json=equalAll",
Filename: "gogo.proto",
}
var E_DescriptionAll = &proto.ExtensionDesc{
@ -154,6 +178,7 @@ var E_DescriptionAll = &proto.ExtensionDesc{
Field: 63014,
Name: "gogoproto.description_all",
Tag: "varint,63014,opt,name=description_all,json=descriptionAll",
Filename: "gogo.proto",
}
var E_TestgenAll = &proto.ExtensionDesc{
@ -162,6 +187,7 @@ var E_TestgenAll = &proto.ExtensionDesc{
Field: 63015,
Name: "gogoproto.testgen_all",
Tag: "varint,63015,opt,name=testgen_all,json=testgenAll",
Filename: "gogo.proto",
}
var E_BenchgenAll = &proto.ExtensionDesc{
@ -170,6 +196,7 @@ var E_BenchgenAll = &proto.ExtensionDesc{
Field: 63016,
Name: "gogoproto.benchgen_all",
Tag: "varint,63016,opt,name=benchgen_all,json=benchgenAll",
Filename: "gogo.proto",
}
var E_MarshalerAll = &proto.ExtensionDesc{
@ -178,6 +205,7 @@ var E_MarshalerAll = &proto.ExtensionDesc{
Field: 63017,
Name: "gogoproto.marshaler_all",
Tag: "varint,63017,opt,name=marshaler_all,json=marshalerAll",
Filename: "gogo.proto",
}
var E_UnmarshalerAll = &proto.ExtensionDesc{
@ -186,6 +214,7 @@ var E_UnmarshalerAll = &proto.ExtensionDesc{
Field: 63018,
Name: "gogoproto.unmarshaler_all",
Tag: "varint,63018,opt,name=unmarshaler_all,json=unmarshalerAll",
Filename: "gogo.proto",
}
var E_StableMarshalerAll = &proto.ExtensionDesc{
@ -194,6 +223,7 @@ var E_StableMarshalerAll = &proto.ExtensionDesc{
Field: 63019,
Name: "gogoproto.stable_marshaler_all",
Tag: "varint,63019,opt,name=stable_marshaler_all,json=stableMarshalerAll",
Filename: "gogo.proto",
}
var E_SizerAll = &proto.ExtensionDesc{
@ -202,6 +232,7 @@ var E_SizerAll = &proto.ExtensionDesc{
Field: 63020,
Name: "gogoproto.sizer_all",
Tag: "varint,63020,opt,name=sizer_all,json=sizerAll",
Filename: "gogo.proto",
}
var E_GoprotoEnumStringerAll = &proto.ExtensionDesc{
@ -210,6 +241,7 @@ var E_GoprotoEnumStringerAll = &proto.ExtensionDesc{
Field: 63021,
Name: "gogoproto.goproto_enum_stringer_all",
Tag: "varint,63021,opt,name=goproto_enum_stringer_all,json=goprotoEnumStringerAll",
Filename: "gogo.proto",
}
var E_EnumStringerAll = &proto.ExtensionDesc{
@ -218,6 +250,7 @@ var E_EnumStringerAll = &proto.ExtensionDesc{
Field: 63022,
Name: "gogoproto.enum_stringer_all",
Tag: "varint,63022,opt,name=enum_stringer_all,json=enumStringerAll",
Filename: "gogo.proto",
}
var E_UnsafeMarshalerAll = &proto.ExtensionDesc{
@ -226,6 +259,7 @@ var E_UnsafeMarshalerAll = &proto.ExtensionDesc{
Field: 63023,
Name: "gogoproto.unsafe_marshaler_all",
Tag: "varint,63023,opt,name=unsafe_marshaler_all,json=unsafeMarshalerAll",
Filename: "gogo.proto",
}
var E_UnsafeUnmarshalerAll = &proto.ExtensionDesc{
@ -234,6 +268,7 @@ var E_UnsafeUnmarshalerAll = &proto.ExtensionDesc{
Field: 63024,
Name: "gogoproto.unsafe_unmarshaler_all",
Tag: "varint,63024,opt,name=unsafe_unmarshaler_all,json=unsafeUnmarshalerAll",
Filename: "gogo.proto",
}
var E_GoprotoExtensionsMapAll = &proto.ExtensionDesc{
@ -242,6 +277,7 @@ var E_GoprotoExtensionsMapAll = &proto.ExtensionDesc{
Field: 63025,
Name: "gogoproto.goproto_extensions_map_all",
Tag: "varint,63025,opt,name=goproto_extensions_map_all,json=goprotoExtensionsMapAll",
Filename: "gogo.proto",
}
var E_GoprotoUnrecognizedAll = &proto.ExtensionDesc{
@ -250,6 +286,7 @@ var E_GoprotoUnrecognizedAll = &proto.ExtensionDesc{
Field: 63026,
Name: "gogoproto.goproto_unrecognized_all",
Tag: "varint,63026,opt,name=goproto_unrecognized_all,json=goprotoUnrecognizedAll",
Filename: "gogo.proto",
}
var E_GogoprotoImport = &proto.ExtensionDesc{
@ -258,6 +295,7 @@ var E_GogoprotoImport = &proto.ExtensionDesc{
Field: 63027,
Name: "gogoproto.gogoproto_import",
Tag: "varint,63027,opt,name=gogoproto_import,json=gogoprotoImport",
Filename: "gogo.proto",
}
var E_ProtosizerAll = &proto.ExtensionDesc{
@ -266,6 +304,7 @@ var E_ProtosizerAll = &proto.ExtensionDesc{
Field: 63028,
Name: "gogoproto.protosizer_all",
Tag: "varint,63028,opt,name=protosizer_all,json=protosizerAll",
Filename: "gogo.proto",
}
var E_CompareAll = &proto.ExtensionDesc{
@ -274,6 +313,34 @@ var E_CompareAll = &proto.ExtensionDesc{
Field: 63029,
Name: "gogoproto.compare_all",
Tag: "varint,63029,opt,name=compare_all,json=compareAll",
Filename: "gogo.proto",
}
var E_TypedeclAll = &proto.ExtensionDesc{
ExtendedType: (*google_protobuf.FileOptions)(nil),
ExtensionType: (*bool)(nil),
Field: 63030,
Name: "gogoproto.typedecl_all",
Tag: "varint,63030,opt,name=typedecl_all,json=typedeclAll",
Filename: "gogo.proto",
}
var E_EnumdeclAll = &proto.ExtensionDesc{
ExtendedType: (*google_protobuf.FileOptions)(nil),
ExtensionType: (*bool)(nil),
Field: 63031,
Name: "gogoproto.enumdecl_all",
Tag: "varint,63031,opt,name=enumdecl_all,json=enumdeclAll",
Filename: "gogo.proto",
}
var E_GoprotoRegistration = &proto.ExtensionDesc{
ExtendedType: (*google_protobuf.FileOptions)(nil),
ExtensionType: (*bool)(nil),
Field: 63032,
Name: "gogoproto.goproto_registration",
Tag: "varint,63032,opt,name=goproto_registration,json=goprotoRegistration",
Filename: "gogo.proto",
}
var E_GoprotoGetters = &proto.ExtensionDesc{
@ -282,6 +349,7 @@ var E_GoprotoGetters = &proto.ExtensionDesc{
Field: 64001,
Name: "gogoproto.goproto_getters",
Tag: "varint,64001,opt,name=goproto_getters,json=goprotoGetters",
Filename: "gogo.proto",
}
var E_GoprotoStringer = &proto.ExtensionDesc{
@ -290,6 +358,7 @@ var E_GoprotoStringer = &proto.ExtensionDesc{
Field: 64003,
Name: "gogoproto.goproto_stringer",
Tag: "varint,64003,opt,name=goproto_stringer,json=goprotoStringer",
Filename: "gogo.proto",
}
var E_VerboseEqual = &proto.ExtensionDesc{
@ -298,6 +367,7 @@ var E_VerboseEqual = &proto.ExtensionDesc{
Field: 64004,
Name: "gogoproto.verbose_equal",
Tag: "varint,64004,opt,name=verbose_equal,json=verboseEqual",
Filename: "gogo.proto",
}
var E_Face = &proto.ExtensionDesc{
@ -306,6 +376,7 @@ var E_Face = &proto.ExtensionDesc{
Field: 64005,
Name: "gogoproto.face",
Tag: "varint,64005,opt,name=face",
Filename: "gogo.proto",
}
var E_Gostring = &proto.ExtensionDesc{
@ -314,6 +385,7 @@ var E_Gostring = &proto.ExtensionDesc{
Field: 64006,
Name: "gogoproto.gostring",
Tag: "varint,64006,opt,name=gostring",
Filename: "gogo.proto",
}
var E_Populate = &proto.ExtensionDesc{
@ -322,6 +394,7 @@ var E_Populate = &proto.ExtensionDesc{
Field: 64007,
Name: "gogoproto.populate",
Tag: "varint,64007,opt,name=populate",
Filename: "gogo.proto",
}
var E_Stringer = &proto.ExtensionDesc{
@ -330,6 +403,7 @@ var E_Stringer = &proto.ExtensionDesc{
Field: 67008,
Name: "gogoproto.stringer",
Tag: "varint,67008,opt,name=stringer",
Filename: "gogo.proto",
}
var E_Onlyone = &proto.ExtensionDesc{
@ -338,6 +412,7 @@ var E_Onlyone = &proto.ExtensionDesc{
Field: 64009,
Name: "gogoproto.onlyone",
Tag: "varint,64009,opt,name=onlyone",
Filename: "gogo.proto",
}
var E_Equal = &proto.ExtensionDesc{
@ -346,6 +421,7 @@ var E_Equal = &proto.ExtensionDesc{
Field: 64013,
Name: "gogoproto.equal",
Tag: "varint,64013,opt,name=equal",
Filename: "gogo.proto",
}
var E_Description = &proto.ExtensionDesc{
@ -354,6 +430,7 @@ var E_Description = &proto.ExtensionDesc{
Field: 64014,
Name: "gogoproto.description",
Tag: "varint,64014,opt,name=description",
Filename: "gogo.proto",
}
var E_Testgen = &proto.ExtensionDesc{
@ -362,6 +439,7 @@ var E_Testgen = &proto.ExtensionDesc{
Field: 64015,
Name: "gogoproto.testgen",
Tag: "varint,64015,opt,name=testgen",
Filename: "gogo.proto",
}
var E_Benchgen = &proto.ExtensionDesc{
@ -370,6 +448,7 @@ var E_Benchgen = &proto.ExtensionDesc{
Field: 64016,
Name: "gogoproto.benchgen",
Tag: "varint,64016,opt,name=benchgen",
Filename: "gogo.proto",
}
var E_Marshaler = &proto.ExtensionDesc{
@ -378,6 +457,7 @@ var E_Marshaler = &proto.ExtensionDesc{
Field: 64017,
Name: "gogoproto.marshaler",
Tag: "varint,64017,opt,name=marshaler",
Filename: "gogo.proto",
}
var E_Unmarshaler = &proto.ExtensionDesc{
@ -386,6 +466,7 @@ var E_Unmarshaler = &proto.ExtensionDesc{
Field: 64018,
Name: "gogoproto.unmarshaler",
Tag: "varint,64018,opt,name=unmarshaler",
Filename: "gogo.proto",
}
var E_StableMarshaler = &proto.ExtensionDesc{
@ -394,6 +475,7 @@ var E_StableMarshaler = &proto.ExtensionDesc{
Field: 64019,
Name: "gogoproto.stable_marshaler",
Tag: "varint,64019,opt,name=stable_marshaler,json=stableMarshaler",
Filename: "gogo.proto",
}
var E_Sizer = &proto.ExtensionDesc{
@ -402,6 +484,7 @@ var E_Sizer = &proto.ExtensionDesc{
Field: 64020,
Name: "gogoproto.sizer",
Tag: "varint,64020,opt,name=sizer",
Filename: "gogo.proto",
}
var E_UnsafeMarshaler = &proto.ExtensionDesc{
@ -410,6 +493,7 @@ var E_UnsafeMarshaler = &proto.ExtensionDesc{
Field: 64023,
Name: "gogoproto.unsafe_marshaler",
Tag: "varint,64023,opt,name=unsafe_marshaler,json=unsafeMarshaler",
Filename: "gogo.proto",
}
var E_UnsafeUnmarshaler = &proto.ExtensionDesc{
@ -418,6 +502,7 @@ var E_UnsafeUnmarshaler = &proto.ExtensionDesc{
Field: 64024,
Name: "gogoproto.unsafe_unmarshaler",
Tag: "varint,64024,opt,name=unsafe_unmarshaler,json=unsafeUnmarshaler",
Filename: "gogo.proto",
}
var E_GoprotoExtensionsMap = &proto.ExtensionDesc{
@ -426,6 +511,7 @@ var E_GoprotoExtensionsMap = &proto.ExtensionDesc{
Field: 64025,
Name: "gogoproto.goproto_extensions_map",
Tag: "varint,64025,opt,name=goproto_extensions_map,json=goprotoExtensionsMap",
Filename: "gogo.proto",
}
var E_GoprotoUnrecognized = &proto.ExtensionDesc{
@ -434,6 +520,7 @@ var E_GoprotoUnrecognized = &proto.ExtensionDesc{
Field: 64026,
Name: "gogoproto.goproto_unrecognized",
Tag: "varint,64026,opt,name=goproto_unrecognized,json=goprotoUnrecognized",
Filename: "gogo.proto",
}
var E_Protosizer = &proto.ExtensionDesc{
@ -442,6 +529,7 @@ var E_Protosizer = &proto.ExtensionDesc{
Field: 64028,
Name: "gogoproto.protosizer",
Tag: "varint,64028,opt,name=protosizer",
Filename: "gogo.proto",
}
var E_Compare = &proto.ExtensionDesc{
@ -450,6 +538,16 @@ var E_Compare = &proto.ExtensionDesc{
Field: 64029,
Name: "gogoproto.compare",
Tag: "varint,64029,opt,name=compare",
Filename: "gogo.proto",
}
var E_Typedecl = &proto.ExtensionDesc{
ExtendedType: (*google_protobuf.MessageOptions)(nil),
ExtensionType: (*bool)(nil),
Field: 64030,
Name: "gogoproto.typedecl",
Tag: "varint,64030,opt,name=typedecl",
Filename: "gogo.proto",
}
var E_Nullable = &proto.ExtensionDesc{
@ -458,6 +556,7 @@ var E_Nullable = &proto.ExtensionDesc{
Field: 65001,
Name: "gogoproto.nullable",
Tag: "varint,65001,opt,name=nullable",
Filename: "gogo.proto",
}
var E_Embed = &proto.ExtensionDesc{
@ -466,6 +565,7 @@ var E_Embed = &proto.ExtensionDesc{
Field: 65002,
Name: "gogoproto.embed",
Tag: "varint,65002,opt,name=embed",
Filename: "gogo.proto",
}
var E_Customtype = &proto.ExtensionDesc{
@ -474,6 +574,7 @@ var E_Customtype = &proto.ExtensionDesc{
Field: 65003,
Name: "gogoproto.customtype",
Tag: "bytes,65003,opt,name=customtype",
Filename: "gogo.proto",
}
var E_Customname = &proto.ExtensionDesc{
@ -482,6 +583,7 @@ var E_Customname = &proto.ExtensionDesc{
Field: 65004,
Name: "gogoproto.customname",
Tag: "bytes,65004,opt,name=customname",
Filename: "gogo.proto",
}
var E_Jsontag = &proto.ExtensionDesc{
@ -490,6 +592,7 @@ var E_Jsontag = &proto.ExtensionDesc{
Field: 65005,
Name: "gogoproto.jsontag",
Tag: "bytes,65005,opt,name=jsontag",
Filename: "gogo.proto",
}
var E_Moretags = &proto.ExtensionDesc{
@ -498,6 +601,7 @@ var E_Moretags = &proto.ExtensionDesc{
Field: 65006,
Name: "gogoproto.moretags",
Tag: "bytes,65006,opt,name=moretags",
Filename: "gogo.proto",
}
var E_Casttype = &proto.ExtensionDesc{
@ -506,6 +610,7 @@ var E_Casttype = &proto.ExtensionDesc{
Field: 65007,
Name: "gogoproto.casttype",
Tag: "bytes,65007,opt,name=casttype",
Filename: "gogo.proto",
}
var E_Castkey = &proto.ExtensionDesc{
@ -514,6 +619,7 @@ var E_Castkey = &proto.ExtensionDesc{
Field: 65008,
Name: "gogoproto.castkey",
Tag: "bytes,65008,opt,name=castkey",
Filename: "gogo.proto",
}
var E_Castvalue = &proto.ExtensionDesc{
@ -522,6 +628,7 @@ var E_Castvalue = &proto.ExtensionDesc{
Field: 65009,
Name: "gogoproto.castvalue",
Tag: "bytes,65009,opt,name=castvalue",
Filename: "gogo.proto",
}
var E_Stdtime = &proto.ExtensionDesc{
@ -530,6 +637,7 @@ var E_Stdtime = &proto.ExtensionDesc{
Field: 65010,
Name: "gogoproto.stdtime",
Tag: "varint,65010,opt,name=stdtime",
Filename: "gogo.proto",
}
var E_Stdduration = &proto.ExtensionDesc{
@ -538,6 +646,7 @@ var E_Stdduration = &proto.ExtensionDesc{
Field: 65011,
Name: "gogoproto.stdduration",
Tag: "varint,65011,opt,name=stdduration",
Filename: "gogo.proto",
}
func init() {
@ -545,6 +654,7 @@ func init() {
proto.RegisterExtension(E_GoprotoEnumStringer)
proto.RegisterExtension(E_EnumStringer)
proto.RegisterExtension(E_EnumCustomname)
proto.RegisterExtension(E_Enumdecl)
proto.RegisterExtension(E_EnumvalueCustomname)
proto.RegisterExtension(E_GoprotoGettersAll)
proto.RegisterExtension(E_GoprotoEnumPrefixAll)
@ -572,6 +682,9 @@ func init() {
proto.RegisterExtension(E_GogoprotoImport)
proto.RegisterExtension(E_ProtosizerAll)
proto.RegisterExtension(E_CompareAll)
proto.RegisterExtension(E_TypedeclAll)
proto.RegisterExtension(E_EnumdeclAll)
proto.RegisterExtension(E_GoprotoRegistration)
proto.RegisterExtension(E_GoprotoGetters)
proto.RegisterExtension(E_GoprotoStringer)
proto.RegisterExtension(E_VerboseEqual)
@ -594,6 +707,7 @@ func init() {
proto.RegisterExtension(E_GoprotoUnrecognized)
proto.RegisterExtension(E_Protosizer)
proto.RegisterExtension(E_Compare)
proto.RegisterExtension(E_Typedecl)
proto.RegisterExtension(E_Nullable)
proto.RegisterExtension(E_Embed)
proto.RegisterExtension(E_Customtype)
@ -610,76 +724,81 @@ func init() {
func init() { proto.RegisterFile("gogo.proto", fileDescriptorGogo) }
var fileDescriptorGogo = []byte{
// 1129 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x09, 0x6e, 0x88, 0x02, 0xff, 0x94, 0x97, 0xc9, 0x6f, 0x1c, 0x45,
0x14, 0x87, 0x85, 0x70, 0x64, 0xcf, 0xf3, 0x86, 0xc7, 0xc6, 0x84, 0x08, 0x44, 0x72, 0xe3, 0xe4,
0x9c, 0x22, 0x94, 0xb2, 0x22, 0xcb, 0xb1, 0x9c, 0x51, 0x10, 0x86, 0x91, 0x89, 0x03, 0x88, 0xc3,
0xa8, 0x67, 0xa6, 0xdc, 0x69, 0xe8, 0xee, 0x6a, 0xba, 0xaa, 0xa3, 0x38, 0x37, 0x14, 0x16, 0x21,
0xc4, 0x8e, 0x04, 0x09, 0x09, 0xcb, 0x81, 0x7d, 0x0d, 0xcb, 0x9d, 0x0b, 0x70, 0xe6, 0x7f, 0xe0,
0x02, 0x84, 0xdd, 0x37, 0x5f, 0x50, 0x75, 0xbf, 0xd7, 0x53, 0xdd, 0x1e, 0xa9, 0x6a, 0x6e, 0xe3,
0x71, 0x7d, 0xdf, 0x54, 0xbf, 0x37, 0xf5, 0x7e, 0x53, 0x00, 0xbe, 0xf0, 0xc5, 0x52, 0x92, 0x0a,
0x25, 0x9a, 0x0d, 0xfd, 0x3a, 0x7f, 0x79, 0xe8, 0xb0, 0x2f, 0x84, 0x1f, 0xf2, 0xa3, 0xf9, 0x5f,
0xdd, 0x6c, 0xfb, 0x68, 0x9f, 0xcb, 0x5e, 0x1a, 0x24, 0x4a, 0xa4, 0xc5, 0x62, 0x76, 0x3f, 0xcc,
0xe3, 0xe2, 0x0e, 0x8f, 0xb3, 0xa8, 0x93, 0xa4, 0x7c, 0x3b, 0xb8, 0xd0, 0xbc, 0x63, 0xa9, 0x20,
0x97, 0x88, 0x5c, 0x5a, 0x8f, 0xb3, 0xe8, 0x81, 0x44, 0x05, 0x22, 0x96, 0x07, 0xaf, 0xff, 0x72,
0xf3, 0xe1, 0x9b, 0xee, 0x9e, 0xd8, 0x9c, 0x43, 0x54, 0xff, 0xaf, 0x9d, 0x83, 0x6c, 0x13, 0x6e,
0xad, 0xf8, 0xa4, 0x4a, 0x83, 0xd8, 0xe7, 0xa9, 0xc5, 0xf8, 0x03, 0x1a, 0xe7, 0x0d, 0xe3, 0x83,
0x88, 0xb2, 0x35, 0x98, 0x1e, 0xc5, 0xf5, 0x23, 0xba, 0xa6, 0xb8, 0x29, 0x69, 0xc1, 0x6c, 0x2e,
0xe9, 0x65, 0x52, 0x89, 0x28, 0xf6, 0x22, 0x6e, 0xd1, 0xfc, 0x94, 0x6b, 0x1a, 0x9b, 0x33, 0x1a,
0x5b, 0x2b, 0x29, 0x76, 0x16, 0x16, 0xf4, 0x3b, 0xe7, 0xbd, 0x30, 0xe3, 0xa6, 0xed, 0xc8, 0x50,
0xdb, 0x59, 0xbd, 0x8c, 0x94, 0x3f, 0x5f, 0x1a, 0xcb, 0x95, 0xf3, 0xa5, 0xc0, 0xf0, 0x1a, 0x9d,
0xf0, 0xb9, 0x52, 0x3c, 0x95, 0x1d, 0x2f, 0x0c, 0x87, 0x6c, 0xf2, 0x54, 0x10, 0x96, 0xc6, 0xcb,
0x37, 0xaa, 0x9d, 0x68, 0x15, 0xe4, 0x6a, 0x18, 0xb2, 0x2d, 0xb8, 0x6d, 0x48, 0x67, 0x1d, 0x9c,
0x57, 0xd0, 0xb9, 0xb0, 0xaf, 0xbb, 0x5a, 0xdb, 0x06, 0x7a, 0xbf, 0xec, 0x87, 0x83, 0xf3, 0x2d,
0x74, 0x36, 0x91, 0xa5, 0xb6, 0x68, 0xe3, 0xbd, 0x30, 0x77, 0x9e, 0xa7, 0x5d, 0x21, 0x79, 0x87,
0x3f, 0x91, 0x79, 0xa1, 0x83, 0xee, 0x2a, 0xea, 0x66, 0x11, 0x5c, 0xd7, 0x9c, 0x76, 0x1d, 0x87,
0x89, 0x6d, 0xaf, 0xc7, 0x1d, 0x14, 0xd7, 0x50, 0x31, 0xae, 0xd7, 0x6b, 0x74, 0x15, 0xa6, 0x7c,
0x51, 0x3c, 0x92, 0x03, 0xfe, 0x36, 0xe2, 0x93, 0xc4, 0xa0, 0x22, 0x11, 0x49, 0x16, 0x7a, 0xca,
0x65, 0x07, 0xef, 0x90, 0x82, 0x18, 0x54, 0x8c, 0x50, 0xd6, 0x77, 0x49, 0x21, 0x8d, 0x7a, 0xae,
0xc0, 0xa4, 0x88, 0xc3, 0x1d, 0x11, 0xbb, 0x6c, 0xe2, 0x3d, 0x34, 0x00, 0x22, 0x5a, 0xb0, 0x0c,
0x0d, 0xd7, 0x46, 0xbc, 0x8f, 0xf8, 0x04, 0xa7, 0x0e, 0xb4, 0x60, 0x96, 0x86, 0x4c, 0x20, 0x62,
0x07, 0xc5, 0x07, 0xa8, 0x98, 0x31, 0x30, 0x7c, 0x0c, 0xc5, 0xa5, 0xf2, 0xb9, 0x8b, 0xe4, 0x43,
0x7a, 0x0c, 0x44, 0xb0, 0x94, 0x5d, 0x1e, 0xf7, 0xce, 0xb9, 0x19, 0x3e, 0xa2, 0x52, 0x12, 0xa3,
0x15, 0x6b, 0x30, 0x1d, 0x79, 0xa9, 0x3c, 0xe7, 0x85, 0x4e, 0xed, 0xf8, 0x18, 0x1d, 0x53, 0x25,
0x84, 0x15, 0xc9, 0xe2, 0x51, 0x34, 0x9f, 0x50, 0x45, 0x0c, 0x0c, 0x8f, 0x9e, 0x54, 0x5e, 0x37,
0xe4, 0x9d, 0x51, 0x6c, 0x9f, 0xd2, 0xd1, 0x2b, 0xd8, 0x0d, 0xd3, 0xb8, 0x0c, 0x0d, 0x19, 0x5c,
0x74, 0xd2, 0x7c, 0x46, 0x9d, 0xce, 0x01, 0x0d, 0x3f, 0x02, 0xb7, 0x0f, 0x1d, 0xf5, 0x0e, 0xb2,
0xcf, 0x51, 0xb6, 0x38, 0x64, 0xdc, 0xe3, 0x48, 0x18, 0x55, 0xf9, 0x05, 0x8d, 0x04, 0x5e, 0x73,
0xb5, 0x61, 0x21, 0x8b, 0xa5, 0xb7, 0x3d, 0x5a, 0xd5, 0xbe, 0xa4, 0xaa, 0x15, 0x6c, 0xa5, 0x6a,
0x67, 0x60, 0x11, 0x8d, 0xa3, 0xf5, 0xf5, 0x2b, 0x1a, 0xac, 0x05, 0xbd, 0x55, 0xed, 0xee, 0xa3,
0x70, 0xa8, 0x2c, 0xe7, 0x05, 0xc5, 0x63, 0xa9, 0x99, 0x4e, 0xe4, 0x25, 0x0e, 0xe6, 0xeb, 0x68,
0xa6, 0x89, 0xbf, 0x5e, 0x0a, 0x36, 0xbc, 0x44, 0xcb, 0x1f, 0x86, 0x83, 0x24, 0xcf, 0xe2, 0x94,
0xf7, 0x84, 0x1f, 0x07, 0x17, 0x79, 0xdf, 0x41, 0xfd, 0x75, 0xad, 0x55, 0x5b, 0x06, 0xae, 0xcd,
0xa7, 0xe1, 0x96, 0xf2, 0xf7, 0x46, 0x27, 0x88, 0x12, 0x91, 0x2a, 0x8b, 0xf1, 0x1b, 0xea, 0x54,
0xc9, 0x9d, 0xce, 0x31, 0xb6, 0x0e, 0x33, 0xf9, 0x9f, 0xae, 0x5f, 0xc9, 0x6f, 0x51, 0x34, 0x3d,
0xa0, 0x70, 0x70, 0xf4, 0x44, 0x94, 0x78, 0xa9, 0xcb, 0xfc, 0xfb, 0x8e, 0x06, 0x07, 0x22, 0xc5,
0xb7, 0x6f, 0xb6, 0x96, 0xc4, 0xcd, 0xbb, 0xf6, 0x49, 0x36, 0xb8, 0x94, 0x9e, 0x5f, 0x7a, 0x9e,
0xdc, 0xc5, 0x33, 0x5b, 0x0d, 0x62, 0x76, 0x9f, 0x2e, 0x4f, 0x35, 0x2e, 0xed, 0xb2, 0x4b, 0xbb,
0x65, 0x85, 0x2a, 0x69, 0xc9, 0x4e, 0xc1, 0x74, 0x25, 0x2a, 0xed, 0xaa, 0xa7, 0x50, 0x35, 0x65,
0x26, 0x25, 0x3b, 0x06, 0x63, 0x3a, 0xf6, 0xec, 0xf8, 0xd3, 0x88, 0xe7, 0xcb, 0xd9, 0x09, 0x98,
0xa0, 0xb8, 0xb3, 0xa3, 0xcf, 0x20, 0x5a, 0x22, 0x1a, 0xa7, 0xa8, 0xb3, 0xe3, 0xcf, 0x12, 0x4e,
0x88, 0xc6, 0xdd, 0x4b, 0xf8, 0xfd, 0xf3, 0x63, 0x38, 0xae, 0xa8, 0x76, 0xcb, 0x30, 0x8e, 0x19,
0x67, 0xa7, 0x9f, 0xc3, 0x0f, 0x27, 0x82, 0xdd, 0x03, 0x07, 0x1c, 0x0b, 0xfe, 0x02, 0xa2, 0xc5,
0x7a, 0xb6, 0x06, 0x93, 0x46, 0xae, 0xd9, 0xf1, 0x17, 0x11, 0x37, 0x29, 0xbd, 0x75, 0xcc, 0x35,
0xbb, 0xe0, 0x25, 0xda, 0x3a, 0x12, 0xba, 0x6c, 0x14, 0x69, 0x76, 0xfa, 0x65, 0xaa, 0x3a, 0x21,
0x6c, 0x05, 0x1a, 0xe5, 0x98, 0xb2, 0xf3, 0xaf, 0x20, 0x3f, 0x60, 0x74, 0x05, 0x8c, 0x31, 0x69,
0x57, 0xbc, 0x4a, 0x15, 0x30, 0x28, 0x7d, 0x8c, 0xea, 0xd1, 0x67, 0x37, 0xbd, 0x46, 0xc7, 0xa8,
0x96, 0x7c, 0xba, 0x9b, 0xf9, 0xb4, 0xb0, 0x2b, 0x5e, 0xa7, 0x6e, 0xe6, 0xeb, 0xf5, 0x36, 0xea,
0x59, 0x62, 0x77, 0xbc, 0x41, 0xdb, 0xa8, 0x45, 0x09, 0x6b, 0x43, 0x73, 0x7f, 0x8e, 0xd8, 0x7d,
0x6f, 0xa2, 0x6f, 0x6e, 0x5f, 0x8c, 0xb0, 0x87, 0x60, 0x71, 0x78, 0x86, 0xd8, 0xad, 0x97, 0x77,
0x6b, 0xbf, 0xfa, 0xcd, 0x08, 0x61, 0x67, 0x06, 0xbf, 0xfa, 0xcd, 0xfc, 0xb0, 0x6b, 0xaf, 0xec,
0x56, 0x2f, 0x76, 0x66, 0x7c, 0xb0, 0x55, 0x80, 0xc1, 0xe8, 0xb6, 0xbb, 0xae, 0xa2, 0xcb, 0x80,
0xf4, 0xd1, 0xc0, 0xc9, 0x6d, 0xe7, 0xaf, 0xd1, 0xd1, 0x40, 0x82, 0x2d, 0xc3, 0x44, 0x9c, 0x85,
0xa1, 0xfe, 0x72, 0x34, 0xef, 0x1c, 0x12, 0x13, 0x3c, 0xec, 0x13, 0xfb, 0xeb, 0x1e, 0x1e, 0x0c,
0x02, 0xd8, 0x31, 0x38, 0xc0, 0xa3, 0x2e, 0xef, 0xdb, 0xc8, 0xdf, 0xf6, 0x68, 0x20, 0xe8, 0xd5,
0x6c, 0x05, 0xa0, 0xb8, 0x34, 0xaa, 0x9d, 0xc4, 0xfa, 0xa9, 0xbf, 0xef, 0x15, 0x77, 0x50, 0x03,
0x19, 0x08, 0xf2, 0x5b, 0xa7, 0x45, 0x70, 0xa3, 0x2a, 0xc8, 0x2f, 0x9a, 0xc7, 0x61, 0xfc, 0x31,
0x29, 0x62, 0xe5, 0xf9, 0x36, 0xfa, 0x0f, 0xa4, 0x69, 0xbd, 0x2e, 0x58, 0x24, 0x52, 0xae, 0x3c,
0x5f, 0xda, 0xd8, 0x3f, 0x91, 0x2d, 0x01, 0x0d, 0xf7, 0x3c, 0xa9, 0x5c, 0x9e, 0xfb, 0x2f, 0x82,
0x09, 0xd0, 0x9b, 0xd6, 0xaf, 0x1f, 0xe7, 0x3b, 0x36, 0xf6, 0x6f, 0xda, 0x34, 0xae, 0x67, 0x27,
0xa0, 0xa1, 0x5f, 0xe6, 0xf7, 0x6d, 0x1b, 0xfc, 0x0f, 0xc2, 0x03, 0x42, 0x7f, 0xb2, 0x54, 0x7d,
0x15, 0xd8, 0x8b, 0xfd, 0x2f, 0x76, 0x9a, 0xd6, 0xb3, 0x55, 0x98, 0x94, 0xaa, 0xdf, 0xcf, 0x52,
0x2f, 0x1f, 0xfe, 0x16, 0xfc, 0xbf, 0xbd, 0xf2, 0x32, 0x57, 0x32, 0x27, 0x8f, 0xc0, 0x7c, 0x4f,
0x44, 0x75, 0xf0, 0x24, 0xb4, 0x44, 0x4b, 0xb4, 0xf3, 0x63, 0xf0, 0x7f, 0x00, 0x00, 0x00, 0xff,
0xff, 0x3f, 0x9b, 0x2b, 0x54, 0xfc, 0x11, 0x00, 0x00,
// 1201 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x94, 0x98, 0xcb, 0x6f, 0x1c, 0x45,
0x13, 0xc0, 0xf5, 0xe9, 0x73, 0x64, 0x6f, 0xf9, 0x85, 0xd7, 0xc6, 0x84, 0x08, 0x44, 0x72, 0xe3,
0xe4, 0x9c, 0x22, 0x94, 0xb6, 0x22, 0xcb, 0xb1, 0x1c, 0x2b, 0x11, 0x06, 0x63, 0xe2, 0x00, 0xe2,
0xb0, 0x9a, 0xdd, 0x6d, 0x4f, 0x06, 0x66, 0xa6, 0x87, 0x99, 0x9e, 0x28, 0xce, 0x0d, 0x85, 0x87,
0x10, 0xe2, 0x8d, 0x04, 0x09, 0x49, 0x80, 0x03, 0xef, 0x67, 0x78, 0x1f, 0xb9, 0xf0, 0xb8, 0xf2,
0x3f, 0x70, 0x01, 0xcc, 0xdb, 0x37, 0x5f, 0x50, 0xcd, 0x56, 0xcd, 0xf6, 0xac, 0x57, 0xea, 0xde,
0xdb, 0xec, 0xba, 0x7f, 0xbf, 0xad, 0xa9, 0x9a, 0xae, 0xea, 0x31, 0x80, 0xaf, 0x7c, 0x35, 0x97,
0xa4, 0x4a, 0xab, 0x7a, 0x0d, 0xaf, 0x8b, 0xcb, 0x03, 0x07, 0x7d, 0xa5, 0xfc, 0x50, 0x1e, 0x2e,
0x3e, 0x35, 0xf3, 0xcd, 0xc3, 0x6d, 0x99, 0xb5, 0xd2, 0x20, 0xd1, 0x2a, 0xed, 0x2c, 0x16, 0x77,
0xc1, 0x34, 0x2d, 0x6e, 0xc8, 0x38, 0x8f, 0x1a, 0x49, 0x2a, 0x37, 0x83, 0xf3, 0xf5, 0x5b, 0xe6,
0x3a, 0xe4, 0x1c, 0x93, 0x73, 0xcb, 0x71, 0x1e, 0xdd, 0x9d, 0xe8, 0x40, 0xc5, 0xd9, 0xfe, 0xeb,
0x3f, 0xff, 0xff, 0xe0, 0xff, 0x6e, 0x1f, 0x59, 0x9f, 0x22, 0x14, 0xff, 0xb6, 0x56, 0x80, 0x62,
0x1d, 0x6e, 0xac, 0xf8, 0x32, 0x9d, 0x06, 0xb1, 0x2f, 0x53, 0x8b, 0xf1, 0x3b, 0x32, 0x4e, 0x1b,
0xc6, 0x7b, 0x09, 0x15, 0x4b, 0x30, 0x3e, 0x88, 0xeb, 0x7b, 0x72, 0x8d, 0x49, 0x53, 0xb2, 0x02,
0x93, 0x85, 0xa4, 0x95, 0x67, 0x5a, 0x45, 0xb1, 0x17, 0x49, 0x8b, 0xe6, 0x87, 0x42, 0x53, 0x5b,
0x9f, 0x40, 0x6c, 0xa9, 0xa4, 0x84, 0x80, 0x11, 0xfc, 0xa6, 0x2d, 0x5b, 0xa1, 0xc5, 0xf0, 0x23,
0x05, 0x52, 0xae, 0x17, 0x67, 0x60, 0x06, 0xaf, 0xcf, 0x79, 0x61, 0x2e, 0xcd, 0x48, 0x0e, 0xf5,
0xf5, 0x9c, 0xc1, 0x65, 0x2c, 0xfb, 0xe9, 0xe2, 0x50, 0x11, 0xce, 0x74, 0x29, 0x30, 0x62, 0x32,
0xaa, 0xe8, 0x4b, 0xad, 0x65, 0x9a, 0x35, 0xbc, 0xb0, 0x5f, 0x78, 0x27, 0x82, 0xb0, 0x34, 0x5e,
0xda, 0xae, 0x56, 0x71, 0xa5, 0x43, 0x2e, 0x86, 0xa1, 0xd8, 0x80, 0x9b, 0xfa, 0x3c, 0x15, 0x0e,
0xce, 0xcb, 0xe4, 0x9c, 0xd9, 0xf3, 0x64, 0xa0, 0x76, 0x0d, 0xf8, 0xfb, 0xb2, 0x96, 0x0e, 0xce,
0xd7, 0xc8, 0x59, 0x27, 0x96, 0x4b, 0x8a, 0xc6, 0x53, 0x30, 0x75, 0x4e, 0xa6, 0x4d, 0x95, 0xc9,
0x86, 0x7c, 0x24, 0xf7, 0x42, 0x07, 0xdd, 0x15, 0xd2, 0x4d, 0x12, 0xb8, 0x8c, 0x1c, 0xba, 0x8e,
0xc2, 0xc8, 0xa6, 0xd7, 0x92, 0x0e, 0x8a, 0xab, 0xa4, 0x18, 0xc6, 0xf5, 0x88, 0x2e, 0xc2, 0x98,
0xaf, 0x3a, 0xb7, 0xe4, 0x80, 0x5f, 0x23, 0x7c, 0x94, 0x19, 0x52, 0x24, 0x2a, 0xc9, 0x43, 0x4f,
0xbb, 0x44, 0xf0, 0x3a, 0x2b, 0x98, 0x21, 0xc5, 0x00, 0x69, 0x7d, 0x83, 0x15, 0x99, 0x91, 0xcf,
0x05, 0x18, 0x55, 0x71, 0xb8, 0xa5, 0x62, 0x97, 0x20, 0xde, 0x24, 0x03, 0x10, 0x82, 0x82, 0x79,
0xa8, 0xb9, 0x16, 0xe2, 0xad, 0x6d, 0xde, 0x1e, 0x5c, 0x81, 0x15, 0x98, 0xe4, 0x06, 0x15, 0xa8,
0xd8, 0x41, 0xf1, 0x36, 0x29, 0x26, 0x0c, 0x8c, 0x6e, 0x43, 0xcb, 0x4c, 0xfb, 0xd2, 0x45, 0xf2,
0x0e, 0xdf, 0x06, 0x21, 0x94, 0xca, 0xa6, 0x8c, 0x5b, 0x67, 0xdd, 0x0c, 0xef, 0x72, 0x2a, 0x99,
0x41, 0xc5, 0x12, 0x8c, 0x47, 0x5e, 0x9a, 0x9d, 0xf5, 0x42, 0xa7, 0x72, 0xbc, 0x47, 0x8e, 0xb1,
0x12, 0xa2, 0x8c, 0xe4, 0xf1, 0x20, 0x9a, 0xf7, 0x39, 0x23, 0x06, 0x46, 0x5b, 0x2f, 0xd3, 0x5e,
0x33, 0x94, 0x8d, 0x41, 0x6c, 0x1f, 0xf0, 0xd6, 0xeb, 0xb0, 0xab, 0xa6, 0x71, 0x1e, 0x6a, 0x59,
0x70, 0xc1, 0x49, 0xf3, 0x21, 0x57, 0xba, 0x00, 0x10, 0x7e, 0x00, 0x6e, 0xee, 0x3b, 0x26, 0x1c,
0x64, 0x1f, 0x91, 0x6c, 0xb6, 0xcf, 0xa8, 0xa0, 0x96, 0x30, 0xa8, 0xf2, 0x63, 0x6e, 0x09, 0xb2,
0xc7, 0xb5, 0x06, 0x33, 0x79, 0x9c, 0x79, 0x9b, 0x83, 0x65, 0xed, 0x13, 0xce, 0x5a, 0x87, 0xad,
0x64, 0xed, 0x34, 0xcc, 0x92, 0x71, 0xb0, 0xba, 0x7e, 0xca, 0x8d, 0xb5, 0x43, 0x6f, 0x54, 0xab,
0xfb, 0x20, 0x1c, 0x28, 0xd3, 0x79, 0x5e, 0xcb, 0x38, 0x43, 0xa6, 0x11, 0x79, 0x89, 0x83, 0xf9,
0x3a, 0x99, 0xb9, 0xe3, 0x2f, 0x97, 0x82, 0x55, 0x2f, 0x41, 0xf9, 0xfd, 0xb0, 0x9f, 0xe5, 0x79,
0x9c, 0xca, 0x96, 0xf2, 0xe3, 0xe0, 0x82, 0x6c, 0x3b, 0xa8, 0x3f, 0xeb, 0x29, 0xd5, 0x86, 0x81,
0xa3, 0xf9, 0x24, 0xdc, 0x50, 0x9e, 0x55, 0x1a, 0x41, 0x94, 0xa8, 0x54, 0x5b, 0x8c, 0x9f, 0x73,
0xa5, 0x4a, 0xee, 0x64, 0x81, 0x89, 0x65, 0x98, 0x28, 0x3e, 0xba, 0x3e, 0x92, 0x5f, 0x90, 0x68,
0xbc, 0x4b, 0x51, 0xe3, 0x68, 0xa9, 0x28, 0xf1, 0x52, 0x97, 0xfe, 0xf7, 0x25, 0x37, 0x0e, 0x42,
0xa8, 0x71, 0xe8, 0xad, 0x44, 0xe2, 0xb4, 0x77, 0x30, 0x7c, 0xc5, 0x8d, 0x83, 0x19, 0x52, 0xf0,
0x81, 0xc1, 0x41, 0xf1, 0x35, 0x2b, 0x98, 0x41, 0xc5, 0x3d, 0xdd, 0x41, 0x9b, 0x4a, 0x3f, 0xc8,
0x74, 0xea, 0xe1, 0x6a, 0x8b, 0xea, 0x9b, 0xed, 0xea, 0x21, 0x6c, 0xdd, 0x40, 0xc5, 0x29, 0x98,
0xec, 0x39, 0x62, 0xd4, 0x6f, 0xdb, 0x63, 0x5b, 0x95, 0x59, 0xe6, 0xf9, 0xa5, 0xf0, 0xd1, 0x1d,
0x6a, 0x46, 0xd5, 0x13, 0x86, 0xb8, 0x13, 0xeb, 0x5e, 0x3d, 0x07, 0xd8, 0x65, 0x17, 0x77, 0xca,
0xd2, 0x57, 0x8e, 0x01, 0xe2, 0x04, 0x8c, 0x57, 0xce, 0x00, 0x76, 0xd5, 0x63, 0xa4, 0x1a, 0x33,
0x8f, 0x00, 0xe2, 0x08, 0x0c, 0xe1, 0x3c, 0xb7, 0xe3, 0x8f, 0x13, 0x5e, 0x2c, 0x17, 0xc7, 0x60,
0x84, 0xe7, 0xb8, 0x1d, 0x7d, 0x82, 0xd0, 0x12, 0x41, 0x9c, 0x67, 0xb8, 0x1d, 0x7f, 0x92, 0x71,
0x46, 0x10, 0x77, 0x4f, 0xe1, 0xb7, 0x4f, 0x0f, 0x51, 0x1f, 0xe6, 0xdc, 0xcd, 0xc3, 0x30, 0x0d,
0x6f, 0x3b, 0xfd, 0x14, 0xfd, 0x38, 0x13, 0xe2, 0x0e, 0xd8, 0xe7, 0x98, 0xf0, 0x67, 0x08, 0xed,
0xac, 0x17, 0x4b, 0x30, 0x6a, 0x0c, 0x6c, 0x3b, 0xfe, 0x2c, 0xe1, 0x26, 0x85, 0xa1, 0xd3, 0xc0,
0xb6, 0x0b, 0x9e, 0xe3, 0xd0, 0x89, 0xc0, 0xb4, 0xf1, 0xac, 0xb6, 0xd3, 0xcf, 0x73, 0xd6, 0x19,
0x11, 0x0b, 0x50, 0x2b, 0xfb, 0xaf, 0x9d, 0x7f, 0x81, 0xf8, 0x2e, 0x83, 0x19, 0x30, 0xfa, 0xbf,
0x5d, 0xf1, 0x22, 0x67, 0xc0, 0xa0, 0x70, 0x1b, 0xf5, 0xce, 0x74, 0xbb, 0xe9, 0x25, 0xde, 0x46,
0x3d, 0x23, 0x1d, 0xab, 0x59, 0xb4, 0x41, 0xbb, 0xe2, 0x65, 0xae, 0x66, 0xb1, 0x1e, 0xc3, 0xe8,
0x1d, 0x92, 0x76, 0xc7, 0x2b, 0x1c, 0x46, 0xcf, 0x8c, 0x14, 0x6b, 0x50, 0xdf, 0x3b, 0x20, 0xed,
0xbe, 0x57, 0xc9, 0x37, 0xb5, 0x67, 0x3e, 0x8a, 0xfb, 0x60, 0xb6, 0xff, 0x70, 0xb4, 0x5b, 0x2f,
0xed, 0xf4, 0xbc, 0xce, 0x98, 0xb3, 0x51, 0x9c, 0xee, 0x76, 0x59, 0x73, 0x30, 0xda, 0xb5, 0x97,
0x77, 0xaa, 0x8d, 0xd6, 0x9c, 0x8b, 0x62, 0x11, 0xa0, 0x3b, 0x93, 0xec, 0xae, 0x2b, 0xe4, 0x32,
0x20, 0xdc, 0x1a, 0x34, 0x92, 0xec, 0xfc, 0x55, 0xde, 0x1a, 0x44, 0xe0, 0xd6, 0xe0, 0x69, 0x64,
0xa7, 0xaf, 0xf1, 0xd6, 0x60, 0x44, 0xcc, 0xc3, 0x48, 0x9c, 0x87, 0x21, 0x3e, 0x5b, 0xf5, 0x5b,
0xfb, 0x8c, 0x1b, 0x19, 0xb6, 0x19, 0xfe, 0x65, 0x97, 0x60, 0x06, 0xc4, 0x11, 0xd8, 0x27, 0xa3,
0xa6, 0x6c, 0xdb, 0xc8, 0x5f, 0x77, 0xb9, 0x9f, 0xe0, 0x6a, 0xb1, 0x00, 0xd0, 0x79, 0x99, 0xc6,
0x28, 0x6c, 0xec, 0x6f, 0xbb, 0x9d, 0xf7, 0x7a, 0x03, 0xe9, 0x0a, 0x8a, 0xb7, 0x71, 0x8b, 0x60,
0xbb, 0x2a, 0x28, 0x5e, 0xc0, 0x8f, 0xc2, 0xf0, 0x43, 0x99, 0x8a, 0xb5, 0xe7, 0xdb, 0xe8, 0xdf,
0x89, 0xe6, 0xf5, 0x98, 0xb0, 0x48, 0xa5, 0x52, 0x7b, 0x7e, 0x66, 0x63, 0xff, 0x20, 0xb6, 0x04,
0x10, 0x6e, 0x79, 0x99, 0x76, 0xb9, 0xef, 0x3f, 0x19, 0x66, 0x00, 0x83, 0xc6, 0xeb, 0x87, 0xe5,
0x96, 0x8d, 0xfd, 0x8b, 0x83, 0xa6, 0xf5, 0xe2, 0x18, 0xd4, 0xf0, 0xb2, 0xf8, 0x3f, 0x84, 0x0d,
0xfe, 0x9b, 0xe0, 0x2e, 0x81, 0xbf, 0x9c, 0xe9, 0xb6, 0x0e, 0xec, 0xc9, 0xfe, 0x87, 0x2a, 0xcd,
0xeb, 0xc5, 0x22, 0x8c, 0x66, 0xba, 0xdd, 0xce, 0xe9, 0x44, 0x63, 0xc1, 0xff, 0xdd, 0x2d, 0x5f,
0x72, 0x4b, 0xe6, 0xf8, 0x21, 0x98, 0x6e, 0xa9, 0xa8, 0x17, 0x3c, 0x0e, 0x2b, 0x6a, 0x45, 0xad,
0x15, 0xbb, 0xe8, 0xbf, 0x00, 0x00, 0x00, 0xff, 0xff, 0x0a, 0x9c, 0xec, 0xd8, 0x50, 0x13, 0x00,
0x00,
}

View file

@ -39,6 +39,7 @@ extend google.protobuf.EnumOptions {
optional bool goproto_enum_stringer = 62021;
optional bool enum_stringer = 62022;
optional string enum_customname = 62023;
optional bool enumdecl = 62024;
}
extend google.protobuf.EnumValueOptions {
@ -77,6 +78,10 @@ extend google.protobuf.FileOptions {
optional bool gogoproto_import = 63027;
optional bool protosizer_all = 63028;
optional bool compare_all = 63029;
optional bool typedecl_all = 63030;
optional bool enumdecl_all = 63031;
optional bool goproto_registration = 63032;
}
extend google.protobuf.MessageOptions {
@ -107,6 +112,8 @@ extend google.protobuf.MessageOptions {
optional bool protosizer = 64028;
optional bool compare = 64029;
optional bool typedecl = 64030;
}
extend google.protobuf.FieldOptions {

View file

@ -90,6 +90,14 @@ func IsCastValue(field *google_protobuf.FieldDescriptorProto) bool {
return false
}
func HasEnumDecl(file *google_protobuf.FileDescriptorProto, enum *google_protobuf.EnumDescriptorProto) bool {
return proto.GetBoolExtension(enum.Options, E_Enumdecl, proto.GetBoolExtension(file.Options, E_EnumdeclAll, true))
}
func HasTypeDecl(file *google_protobuf.FileDescriptorProto, message *google_protobuf.DescriptorProto) bool {
return proto.GetBoolExtension(message.Options, E_Typedecl, proto.GetBoolExtension(file.Options, E_TypedeclAll, true))
}
func GetCustomType(field *google_protobuf.FieldDescriptorProto) string {
if field == nil {
return ""
@ -343,3 +351,7 @@ func ImportsGoGoProto(file *google_protobuf.FileDescriptorProto) bool {
func HasCompare(file *google_protobuf.FileDescriptorProto, message *google_protobuf.DescriptorProto) bool {
return proto.GetBoolExtension(message.Options, E_Compare, proto.GetBoolExtension(file.Options, E_CompareAll, false))
}
func RegistersGolangProto(file *google_protobuf.FileDescriptorProto) bool {
return proto.GetBoolExtension(file.Options, E_GoprotoRegistration, false)
}

View file

@ -98,7 +98,7 @@ func setPtrCustomType(base structPointer, f field, v interface{}) {
if v == nil {
return
}
structPointer_SetStructPointer(base, f, structPointer(reflect.ValueOf(v).Pointer()))
structPointer_SetStructPointer(base, f, toStructPointer(reflect.ValueOf(v)))
}
func setCustomType(base structPointer, f field, value interface{}) {
@ -165,7 +165,8 @@ func (o *Buffer) dec_custom_slice_bytes(p *Properties, base structPointer) error
}
newBas := appendStructPointer(base, p.field, p.ctype)
setCustomType(newBas, 0, custom)
var zero field
setCustomType(newBas, zero, custom)
return nil
}

View file

@ -84,7 +84,8 @@ func (o *Buffer) dec_slice_duration(p *Properties, base structPointer) error {
return err
}
newBas := appendStructPointer(base, p.field, reflect.SliceOf(reflect.PtrTo(durationType)))
setPtrCustomType(newBas, 0, &d)
var zero field
setPtrCustomType(newBas, zero, &d)
return nil
}

View file

@ -1075,10 +1075,17 @@ func (o *Buffer) enc_map(p *Properties, base structPointer) error {
func (o *Buffer) enc_exts(p *Properties, base structPointer) error {
exts := structPointer_Extensions(base, p.field)
if err := encodeExtensions(exts); err != nil {
v, mu := exts.extensionsRead()
if v == nil {
return nil
}
mu.Lock()
defer mu.Unlock()
if err := encodeExtensionsMap(v); err != nil {
return err
}
v, _ := exts.extensionsRead()
return o.enc_map_body(v)
}

View file

@ -196,12 +196,10 @@ func size_ref_struct_message(p *Properties, base structPointer) int {
// Encode a slice of references to message struct pointers ([]struct).
func (o *Buffer) enc_slice_ref_struct_message(p *Properties, base structPointer) error {
var state errorState
ss := structPointer_GetStructPointer(base, p.field)
ss1 := structPointer_GetRefStructPointer(ss, field(0))
size := p.stype.Size()
l := structPointer_Len(base, p.field)
ss := structPointer_StructRefSlice(base, p.field, p.stype.Size())
l := ss.Len()
for i := 0; i < l; i++ {
structp := structPointer_Add(ss1, field(uintptr(i)*size))
structp := ss.Index(i)
if structPointer_IsNil(structp) {
return errRepeatedHasNil
}
@ -233,13 +231,11 @@ func (o *Buffer) enc_slice_ref_struct_message(p *Properties, base structPointer)
//TODO this is only copied, please fix this
func size_slice_ref_struct_message(p *Properties, base structPointer) (n int) {
ss := structPointer_GetStructPointer(base, p.field)
ss1 := structPointer_GetRefStructPointer(ss, field(0))
size := p.stype.Size()
l := structPointer_Len(base, p.field)
ss := structPointer_StructRefSlice(base, p.field, p.stype.Size())
l := ss.Len()
n += l * len(p.tagcode)
for i := 0; i < l; i++ {
structp := structPointer_Add(ss1, field(uintptr(i)*size))
structp := ss.Index(i)
if structPointer_IsNil(structp) {
return // return the size up to this point
}

View file

@ -167,6 +167,7 @@ type ExtensionDesc struct {
Field int32 // field number
Name string // fully-qualified name of extension, for text formatting
Tag string // protobuf tag style
Filename string // name of the file in which the extension is defined
}
func (ed *ExtensionDesc) repeated() bool {

View file

@ -0,0 +1,85 @@
// Protocol Buffers for Go with Gadgets
//
// Copyright (c) 2016, The GoGo Authors. All rights reserved.
// http://github.com/gogo/protobuf
//
// Redistribution and use in source and binary forms, with or without
// modification, are permitted provided that the following conditions are
// met:
//
// * Redistributions of source code must retain the above copyright
// notice, this list of conditions and the following disclaimer.
// * Redistributions in binary form must reproduce the above
// copyright notice, this list of conditions and the following disclaimer
// in the documentation and/or other materials provided with the
// distribution.
//
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
// +build appengine js
package proto
import (
"reflect"
)
func structPointer_FieldPointer(p structPointer, f field) structPointer {
panic("not implemented")
}
func appendStructPointer(base structPointer, f field, typ reflect.Type) structPointer {
panic("not implemented")
}
func structPointer_InterfaceAt(p structPointer, f field, t reflect.Type) interface{} {
panic("not implemented")
}
func structPointer_InterfaceRef(p structPointer, f field, t reflect.Type) interface{} {
panic("not implemented")
}
func structPointer_GetRefStructPointer(p structPointer, f field) structPointer {
panic("not implemented")
}
func structPointer_Add(p structPointer, size field) structPointer {
panic("not implemented")
}
func structPointer_Len(p structPointer, f field) int {
panic("not implemented")
}
func structPointer_GetSliceHeader(p structPointer, f field) *reflect.SliceHeader {
panic("not implemented")
}
func structPointer_Copy(oldptr structPointer, newptr structPointer, size int) {
panic("not implemented")
}
func structPointer_StructRefSlice(p structPointer, f field, size uintptr) *structRefSlice {
panic("not implemented")
}
type structRefSlice struct{}
func (v *structRefSlice) Len() int {
panic("not implemented")
}
func (v *structRefSlice) Index(i int) structPointer {
panic("not implemented")
}

View file

@ -26,7 +26,7 @@
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
// +build !appengine
// +build !appengine,!js
// This file contains the implementation of the proto field accesses using package unsafe.
@ -105,3 +105,24 @@ func structPointer_Add(p structPointer, size field) structPointer {
func structPointer_Len(p structPointer, f field) int {
return len(*(*[]interface{})(unsafe.Pointer(structPointer_GetRefStructPointer(p, f))))
}
func structPointer_StructRefSlice(p structPointer, f field, size uintptr) *structRefSlice {
return &structRefSlice{p: p, f: f, size: size}
}
// A structRefSlice represents a slice of structs (themselves submessages or groups).
type structRefSlice struct {
p structPointer
f field
size uintptr
}
func (v *structRefSlice) Len() int {
return structPointer_Len(v.p, v.f)
}
func (v *structRefSlice) Index(i int) structPointer {
ss := structPointer_GetStructPointer(v.p, v.f)
ss1 := structPointer_GetRefStructPointer(ss, 0)
return structPointer_Add(ss1, field(uintptr(i)*v.size))
}

View file

@ -84,7 +84,8 @@ func (o *Buffer) dec_slice_time(p *Properties, base structPointer) error {
return err
}
newBas := appendStructPointer(base, p.field, reflect.SliceOf(reflect.PtrTo(timeType)))
setPtrCustomType(newBas, 0, &t)
var zero field
setPtrCustomType(newBas, zero, &t)
return nil
}
@ -94,7 +95,8 @@ func (o *Buffer) dec_slice_ref_time(p *Properties, base structPointer) error {
return err
}
newBas := appendStructPointer(base, p.field, reflect.SliceOf(timeType))
setCustomType(newBas, 0, &t)
var zero field
setCustomType(newBas, zero, &t)
return nil
}

View file

@ -0,0 +1,118 @@
// Go support for Protocol Buffers - Google's data interchange format
//
// Copyright 2016 The Go Authors. All rights reserved.
// https://github.com/golang/protobuf
//
// Redistribution and use in source and binary forms, with or without
// modification, are permitted provided that the following conditions are
// met:
//
// * Redistributions of source code must retain the above copyright
// notice, this list of conditions and the following disclaimer.
// * Redistributions in binary form must reproduce the above
// copyright notice, this list of conditions and the following disclaimer
// in the documentation and/or other materials provided with the
// distribution.
// * Neither the name of Google Inc. nor the names of its
// contributors may be used to endorse or promote products derived from
// this software without specific prior written permission.
//
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
// Package descriptor provides functions for obtaining protocol buffer
// descriptors for generated Go types.
//
// These functions cannot go in package proto because they depend on the
// generated protobuf descriptor messages, which themselves depend on proto.
package descriptor
import (
"bytes"
"compress/gzip"
"fmt"
"io/ioutil"
"github.com/gogo/protobuf/proto"
)
// extractFile extracts a FileDescriptorProto from a gzip'd buffer.
func extractFile(gz []byte) (*FileDescriptorProto, error) {
r, err := gzip.NewReader(bytes.NewReader(gz))
if err != nil {
return nil, fmt.Errorf("failed to open gzip reader: %v", err)
}
defer r.Close()
b, err := ioutil.ReadAll(r)
if err != nil {
return nil, fmt.Errorf("failed to uncompress descriptor: %v", err)
}
fd := new(FileDescriptorProto)
if err := proto.Unmarshal(b, fd); err != nil {
return nil, fmt.Errorf("malformed FileDescriptorProto: %v", err)
}
return fd, nil
}
// Message is a proto.Message with a method to return its descriptor.
//
// Message types generated by the protocol compiler always satisfy
// the Message interface.
type Message interface {
proto.Message
Descriptor() ([]byte, []int)
}
// ForMessage returns a FileDescriptorProto and a DescriptorProto from within it
// describing the given message.
func ForMessage(msg Message) (fd *FileDescriptorProto, md *DescriptorProto) {
gz, path := msg.Descriptor()
fd, err := extractFile(gz)
if err != nil {
panic(fmt.Sprintf("invalid FileDescriptorProto for %T: %v", msg, err))
}
md = fd.MessageType[path[0]]
for _, i := range path[1:] {
md = md.NestedType[i]
}
return fd, md
}
// Is this field a scalar numeric type?
func (field *FieldDescriptorProto) IsScalar() bool {
if field.Type == nil {
return false
}
switch *field.Type {
case FieldDescriptorProto_TYPE_DOUBLE,
FieldDescriptorProto_TYPE_FLOAT,
FieldDescriptorProto_TYPE_INT64,
FieldDescriptorProto_TYPE_UINT64,
FieldDescriptorProto_TYPE_INT32,
FieldDescriptorProto_TYPE_FIXED64,
FieldDescriptorProto_TYPE_FIXED32,
FieldDescriptorProto_TYPE_BOOL,
FieldDescriptorProto_TYPE_UINT32,
FieldDescriptorProto_TYPE_ENUM,
FieldDescriptorProto_TYPE_SFIXED32,
FieldDescriptorProto_TYPE_SFIXED64,
FieldDescriptorProto_TYPE_SINT32,
FieldDescriptorProto_TYPE_SINT64:
return true
default:
return false
}
}

View file

@ -1942,7 +1942,7 @@ func init() { proto.RegisterFile("descriptor.proto", fileDescriptorDescriptor) }
var fileDescriptorDescriptor = []byte{
// 2273 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x09, 0x6e, 0x88, 0x02, 0xff, 0xcc, 0x59, 0xcd, 0x6f, 0xdb, 0xc8,
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xcc, 0x59, 0xcd, 0x6f, 0xdb, 0xc8,
0x15, 0x5f, 0xea, 0xcb, 0xd2, 0x93, 0x2c, 0x8f, 0xc7, 0xde, 0x84, 0x71, 0x36, 0x1b, 0x47, 0x9b,
0x34, 0x4e, 0xd2, 0x3a, 0x0b, 0xe7, 0x63, 0xb3, 0xde, 0x62, 0x0b, 0x59, 0x62, 0xbc, 0x0a, 0x64,
0x4b, 0xa5, 0xec, 0x36, 0xbb, 0x3d, 0x10, 0x63, 0x72, 0x24, 0x33, 0xa1, 0x86, 0x2c, 0x49, 0x25,

View file

@ -99,6 +99,17 @@ func (field *FieldDescriptorProto) GetKeyUint64() (x uint64) {
return x
}
func (field *FieldDescriptorProto) GetKey3Uint64() (x uint64) {
packed := field.IsPacked3()
wireType := field.WireType()
fieldNumber := field.GetNumber()
if packed {
wireType = 2
}
x = uint64(uint32(fieldNumber)<<3 | uint32(wireType))
return x
}
func (field *FieldDescriptorProto) GetKey() []byte {
x := field.GetKeyUint64()
i := 0
@ -111,6 +122,18 @@ func (field *FieldDescriptorProto) GetKey() []byte {
return keybuf
}
func (field *FieldDescriptorProto) GetKey3() []byte {
x := field.GetKey3Uint64()
i := 0
keybuf := make([]byte, 0)
for i = 0; x > 127; i++ {
keybuf = append(keybuf, 0x80|uint8(x&0x7F))
x >>= 7
}
keybuf = append(keybuf, uint8(x))
return keybuf
}
func (desc *FileDescriptorSet) GetField(packageName, messageName, fieldName string) *FieldDescriptorProto {
msg := desc.GetMessage(packageName, messageName)
if msg == nil {
@ -352,6 +375,16 @@ func (f *FieldDescriptorProto) IsPacked() bool {
return f.Options != nil && f.GetOptions().GetPacked()
}
func (f *FieldDescriptorProto) IsPacked3() bool {
if f.IsRepeated() && f.IsScalar() {
if f.Options == nil || f.GetOptions().Packed == nil {
return true
}
return f.Options != nil && f.GetOptions().GetPacked()
}
return false
}
func (m *DescriptorProto) HasExtension() bool {
return len(m.ExtensionRange) > 0
}

View file

@ -20,9 +20,6 @@ import math "math"
import bytes "bytes"
import strings "strings"
import github_com_gogo_protobuf_proto "github.com/gogo/protobuf/proto"
import sort "sort"
import strconv "strconv"
import reflect "reflect"
import io "io"
@ -141,9 +138,59 @@ func (*Any) ProtoMessage() {}
func (*Any) Descriptor() ([]byte, []int) { return fileDescriptorAny, []int{0} }
func (*Any) XXX_WellKnownType() string { return "Any" }
func (m *Any) GetTypeUrl() string {
if m != nil {
return m.TypeUrl
}
return ""
}
func (m *Any) GetValue() []byte {
if m != nil {
return m.Value
}
return nil
}
func init() {
proto.RegisterType((*Any)(nil), "google.protobuf.Any")
}
func (this *Any) Compare(that interface{}) int {
if that == nil {
if this == nil {
return 0
}
return 1
}
that1, ok := that.(*Any)
if !ok {
that2, ok := that.(Any)
if ok {
that1 = &that2
} else {
return 1
}
}
if that1 == nil {
if this == nil {
return 0
}
return 1
} else if this == nil {
return -1
}
if this.TypeUrl != that1.TypeUrl {
if this.TypeUrl < that1.TypeUrl {
return -1
}
return 1
}
if c := bytes.Compare(this.Value, that1.Value); c != 0 {
return c
}
return 0
}
func (this *Any) Equal(that interface{}) bool {
if that == nil {
if this == nil {
@ -196,24 +243,6 @@ func valueToGoStringAny(v interface{}, typ string) string {
pv := reflect.Indirect(rv).Interface()
return fmt.Sprintf("func(v %v) *%v { return &v } ( %#v )", typ, typ, pv)
}
func extensionToGoStringAny(m github_com_gogo_protobuf_proto.Message) string {
e := github_com_gogo_protobuf_proto.GetUnsafeExtensionsMap(m)
if e == nil {
return "nil"
}
s := "proto.NewUnsafeXXX_InternalExtensions(map[int32]proto.Extension{"
keys := make([]int, 0, len(e))
for k := range e {
keys = append(keys, int(k))
}
sort.Ints(keys)
ss := []string{}
for _, k := range keys {
ss = append(ss, strconv.Itoa(k)+": "+e[int32(k)].GoString())
}
s += strings.Join(ss, ",") + "})"
return s
}
func (m *Any) Marshal() (dAtA []byte, err error) {
size := m.Size()
dAtA = make([]byte, size)
@ -620,18 +649,18 @@ var (
func init() { proto.RegisterFile("any.proto", fileDescriptorAny) }
var fileDescriptorAny = []byte{
// 206 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x09, 0x6e, 0x88, 0x02, 0xff, 0xe2, 0xe2, 0x4c, 0xcc, 0xab, 0xd4,
// 208 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0xe2, 0x4c, 0xcc, 0xab, 0xd4,
0x2b, 0x28, 0xca, 0x2f, 0xc9, 0x17, 0xe2, 0x4f, 0xcf, 0xcf, 0x4f, 0xcf, 0x49, 0x85, 0xf0, 0x92,
0x4a, 0xd3, 0x94, 0xcc, 0xb8, 0x98, 0x1d, 0xf3, 0x2a, 0x85, 0x24, 0xb9, 0x38, 0x4a, 0x2a, 0x0b,
0x52, 0xe3, 0x4b, 0x8b, 0x72, 0x24, 0x18, 0x15, 0x18, 0x35, 0x38, 0x83, 0xd8, 0x41, 0xfc, 0xd0,
0xa2, 0x1c, 0x21, 0x11, 0x2e, 0xd6, 0xb2, 0xc4, 0x9c, 0xd2, 0x54, 0x09, 0x26, 0x05, 0x46, 0x0d,
0x9e, 0x20, 0x08, 0xc7, 0xa9, 0xee, 0xc2, 0x43, 0x39, 0x86, 0x1b, 0x0f, 0xe5, 0x18, 0x3e, 0x3c,
0x94, 0x63, 0xfc, 0xf1, 0x50, 0x8e, 0xb1, 0xe1, 0x91, 0x1c, 0xe3, 0x8a, 0x47, 0x72, 0x8c, 0x27,
0x1e, 0xc9, 0x31, 0x5e, 0x78, 0x24, 0xc7, 0xf8, 0xe0, 0x91, 0x1c, 0xe3, 0x8b, 0x47, 0x72, 0x0c,
0x1f, 0x1e, 0xc9, 0x31, 0x72, 0x09, 0x27, 0xe7, 0xe7, 0xea, 0xa1, 0x59, 0xed, 0xc4, 0xe1, 0x98,
0x57, 0x19, 0x00, 0xe2, 0x04, 0x30, 0x46, 0xb1, 0x82, 0x6c, 0x2b, 0x5e, 0xc0, 0xc8, 0xb8, 0x88,
0x89, 0xd9, 0x3d, 0xc0, 0x69, 0x15, 0x93, 0x9c, 0x3b, 0x44, 0x75, 0x00, 0x54, 0xb5, 0x5e, 0x78,
0x6a, 0x4e, 0x8e, 0x77, 0x5e, 0x7e, 0x79, 0x5e, 0x08, 0x48, 0x65, 0x12, 0x1b, 0xd8, 0x18, 0x63,
0x40, 0x00, 0x00, 0x00, 0xff, 0xff, 0x9f, 0x90, 0x29, 0x9f, 0xdc, 0x00, 0x00, 0x00,
0x9e, 0x20, 0x08, 0xc7, 0xa9, 0x89, 0xf1, 0xc2, 0x43, 0x39, 0x86, 0x1b, 0x0f, 0xe5, 0x18, 0x3e,
0x3c, 0x94, 0x63, 0xfc, 0xf1, 0x50, 0x8e, 0xb1, 0xe1, 0x91, 0x1c, 0xe3, 0x8a, 0x47, 0x72, 0x8c,
0x27, 0x1e, 0xc9, 0x31, 0x5e, 0x78, 0x24, 0xc7, 0xf8, 0xe0, 0x91, 0x1c, 0xe3, 0x8b, 0x47, 0x72,
0x0c, 0x1f, 0x40, 0xe2, 0x8f, 0xe5, 0x18, 0xb9, 0x84, 0x93, 0xf3, 0x73, 0xf5, 0xd0, 0xec, 0x77,
0xe2, 0x70, 0xcc, 0xab, 0x0c, 0x00, 0x71, 0x02, 0x18, 0xa3, 0x58, 0x41, 0x56, 0x16, 0x2f, 0x60,
0x64, 0x5c, 0xc4, 0xc4, 0xec, 0x1e, 0xe0, 0xb4, 0x8a, 0x49, 0xce, 0x1d, 0xa2, 0x3a, 0x00, 0xaa,
0x5a, 0x2f, 0x3c, 0x35, 0x27, 0xc7, 0x3b, 0x2f, 0xbf, 0x3c, 0x2f, 0x04, 0xa4, 0x32, 0x89, 0x0d,
0x6c, 0x8c, 0x31, 0x20, 0x00, 0x00, 0xff, 0xff, 0x63, 0x5d, 0x2d, 0x27, 0xe1, 0x00, 0x00, 0x00,
}

View file

@ -18,9 +18,6 @@ import fmt "fmt"
import math "math"
import strings "strings"
import github_com_gogo_protobuf_proto "github.com/gogo/protobuf/proto"
import sort "sort"
import strconv "strconv"
import reflect "reflect"
import io "io"
@ -96,9 +93,62 @@ func (*Duration) ProtoMessage() {}
func (*Duration) Descriptor() ([]byte, []int) { return fileDescriptorDuration, []int{0} }
func (*Duration) XXX_WellKnownType() string { return "Duration" }
func (m *Duration) GetSeconds() int64 {
if m != nil {
return m.Seconds
}
return 0
}
func (m *Duration) GetNanos() int32 {
if m != nil {
return m.Nanos
}
return 0
}
func init() {
proto.RegisterType((*Duration)(nil), "google.protobuf.Duration")
}
func (this *Duration) Compare(that interface{}) int {
if that == nil {
if this == nil {
return 0
}
return 1
}
that1, ok := that.(*Duration)
if !ok {
that2, ok := that.(Duration)
if ok {
that1 = &that2
} else {
return 1
}
}
if that1 == nil {
if this == nil {
return 0
}
return 1
} else if this == nil {
return -1
}
if this.Seconds != that1.Seconds {
if this.Seconds < that1.Seconds {
return -1
}
return 1
}
if this.Nanos != that1.Nanos {
if this.Nanos < that1.Nanos {
return -1
}
return 1
}
return 0
}
func (this *Duration) Equal(that interface{}) bool {
if that == nil {
if this == nil {
@ -151,24 +201,6 @@ func valueToGoStringDuration(v interface{}, typ string) string {
pv := reflect.Indirect(rv).Interface()
return fmt.Sprintf("func(v %v) *%v { return &v } ( %#v )", typ, typ, pv)
}
func extensionToGoStringDuration(m github_com_gogo_protobuf_proto.Message) string {
e := github_com_gogo_protobuf_proto.GetUnsafeExtensionsMap(m)
if e == nil {
return "nil"
}
s := "proto.NewUnsafeXXX_InternalExtensions(map[int32]proto.Extension{"
keys := make([]int, 0, len(e))
for k := range e {
keys = append(keys, int(k))
}
sort.Ints(keys)
ss := []string{}
for _, k := range keys {
ss = append(ss, strconv.Itoa(k)+": "+e[int32(k)].GoString())
}
s += strings.Join(ss, ",") + "})"
return s
}
func (m *Duration) Marshal() (dAtA []byte, err error) {
size := m.Size()
dAtA = make([]byte, size)
@ -445,18 +477,18 @@ var (
func init() { proto.RegisterFile("duration.proto", fileDescriptorDuration) }
var fileDescriptorDuration = []byte{
// 198 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x09, 0x6e, 0x88, 0x02, 0xff, 0xe2, 0xe2, 0x4b, 0x29, 0x2d, 0x4a,
// 203 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0xe2, 0x4b, 0x29, 0x2d, 0x4a,
0x2c, 0xc9, 0xcc, 0xcf, 0xd3, 0x2b, 0x28, 0xca, 0x2f, 0xc9, 0x17, 0xe2, 0x4f, 0xcf, 0xcf, 0x4f,
0xcf, 0x49, 0x85, 0xf0, 0x92, 0x4a, 0xd3, 0x94, 0xac, 0xb8, 0x38, 0x5c, 0xa0, 0x4a, 0x84, 0x24,
0xb8, 0xd8, 0x8b, 0x53, 0x93, 0xf3, 0xf3, 0x52, 0x8a, 0x25, 0x18, 0x15, 0x18, 0x35, 0x98, 0x83,
0x60, 0x5c, 0x21, 0x11, 0x2e, 0xd6, 0xbc, 0xc4, 0xbc, 0xfc, 0x62, 0x09, 0x26, 0x05, 0x46, 0x0d,
0xd6, 0x20, 0x08, 0xc7, 0xa9, 0xfa, 0xc2, 0x43, 0x39, 0x86, 0x1b, 0x0f, 0xe5, 0x18, 0x3e, 0x3c,
0xd6, 0x20, 0x08, 0xc7, 0xa9, 0xfe, 0xc2, 0x43, 0x39, 0x86, 0x1b, 0x0f, 0xe5, 0x18, 0x3e, 0x3c,
0x94, 0x63, 0x5c, 0xf1, 0x48, 0x8e, 0xf1, 0xc4, 0x23, 0x39, 0xc6, 0x0b, 0x8f, 0xe4, 0x18, 0x1f,
0x3c, 0x92, 0x63, 0x7c, 0xf1, 0x48, 0x8e, 0xe1, 0xc3, 0x23, 0x39, 0x46, 0x2e, 0xe1, 0xe4, 0xfc,
0x5c, 0x3d, 0x34, 0x6b, 0x9d, 0x78, 0x61, 0x96, 0x06, 0x80, 0x44, 0x02, 0x18, 0xa3, 0x58, 0x4b,
0x2a, 0x0b, 0x52, 0x8b, 0x17, 0x30, 0x32, 0x2e, 0x62, 0x62, 0x76, 0x0f, 0x70, 0x5a, 0xc5, 0x24,
0xe7, 0x0e, 0xd1, 0x12, 0x00, 0xd5, 0xa2, 0x17, 0x9e, 0x9a, 0x93, 0xe3, 0x9d, 0x97, 0x5f, 0x9e,
0x17, 0x02, 0x52, 0x99, 0xc4, 0x06, 0x36, 0xcb, 0x18, 0x10, 0x00, 0x00, 0xff, 0xff, 0x16, 0x32,
0xda, 0x86, 0xe2, 0x00, 0x00, 0x00,
0x3c, 0x92, 0x63, 0x7c, 0xf1, 0x48, 0x8e, 0xe1, 0xc3, 0x23, 0x39, 0xc6, 0x15, 0x8f, 0xe5, 0x18,
0xb9, 0x84, 0x93, 0xf3, 0x73, 0xf5, 0xd0, 0xac, 0x76, 0xe2, 0x85, 0x59, 0x1c, 0x00, 0x12, 0x09,
0x60, 0x8c, 0x62, 0x2d, 0xa9, 0x2c, 0x48, 0x2d, 0x5e, 0xc0, 0xc8, 0xb8, 0x88, 0x89, 0xd9, 0x3d,
0xc0, 0x69, 0x15, 0x93, 0x9c, 0x3b, 0x44, 0x4b, 0x00, 0x54, 0x8b, 0x5e, 0x78, 0x6a, 0x4e, 0x8e,
0x77, 0x5e, 0x7e, 0x79, 0x5e, 0x08, 0x48, 0x65, 0x12, 0x1b, 0xd8, 0x2c, 0x63, 0x40, 0x00, 0x00,
0x00, 0xff, 0xff, 0xba, 0xfb, 0x15, 0xc9, 0xe6, 0x00, 0x00, 0x00,
}

View file

@ -18,9 +18,6 @@ import fmt "fmt"
import math "math"
import strings "strings"
import github_com_gogo_protobuf_proto "github.com/gogo/protobuf/proto"
import sort "sort"
import strconv "strconv"
import reflect "reflect"
import io "io"
@ -56,6 +53,33 @@ func (*Empty) XXX_WellKnownType() string { return "Empty" }
func init() {
proto.RegisterType((*Empty)(nil), "google.protobuf.Empty")
}
func (this *Empty) Compare(that interface{}) int {
if that == nil {
if this == nil {
return 0
}
return 1
}
that1, ok := that.(*Empty)
if !ok {
that2, ok := that.(Empty)
if ok {
that1 = &that2
} else {
return 1
}
}
if that1 == nil {
if this == nil {
return 0
}
return 1
} else if this == nil {
return -1
}
return 0
}
func (this *Empty) Equal(that interface{}) bool {
if that == nil {
if this == nil {
@ -100,24 +124,6 @@ func valueToGoStringEmpty(v interface{}, typ string) string {
pv := reflect.Indirect(rv).Interface()
return fmt.Sprintf("func(v %v) *%v { return &v } ( %#v )", typ, typ, pv)
}
func extensionToGoStringEmpty(m github_com_gogo_protobuf_proto.Message) string {
e := github_com_gogo_protobuf_proto.GetUnsafeExtensionsMap(m)
if e == nil {
return "nil"
}
s := "proto.NewUnsafeXXX_InternalExtensions(map[int32]proto.Extension{"
keys := make([]int, 0, len(e))
for k := range e {
keys = append(keys, int(k))
}
sort.Ints(keys)
ss := []string{}
for _, k := range keys {
ss = append(ss, strconv.Itoa(k)+": "+e[int32(k)].GoString())
}
s += strings.Join(ss, ",") + "})"
return s
}
func (m *Empty) Marshal() (dAtA []byte, err error) {
size := m.Size()
dAtA = make([]byte, size)
@ -436,16 +442,16 @@ var (
func init() { proto.RegisterFile("empty.proto", fileDescriptorEmpty) }
var fileDescriptorEmpty = []byte{
// 170 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x09, 0x6e, 0x88, 0x02, 0xff, 0xe2, 0xe2, 0x4e, 0xcd, 0x2d, 0x28,
// 172 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0xe2, 0x4e, 0xcd, 0x2d, 0x28,
0xa9, 0xd4, 0x2b, 0x28, 0xca, 0x2f, 0xc9, 0x17, 0xe2, 0x4f, 0xcf, 0xcf, 0x4f, 0xcf, 0x49, 0x85,
0xf0, 0x92, 0x4a, 0xd3, 0x94, 0xd8, 0xb9, 0x58, 0x5d, 0x41, 0xf2, 0x4e, 0xcd, 0x8c, 0x17, 0x1e,
0xf0, 0x92, 0x4a, 0xd3, 0x94, 0xd8, 0xb9, 0x58, 0x5d, 0x41, 0xf2, 0x4e, 0xed, 0x8c, 0x17, 0x1e,
0xca, 0x31, 0xdc, 0x78, 0x28, 0xc7, 0xf0, 0xe1, 0xa1, 0x1c, 0xe3, 0x8f, 0x87, 0x72, 0x8c, 0x0d,
0x8f, 0xe4, 0x18, 0x57, 0x3c, 0x92, 0x63, 0x3c, 0xf1, 0x48, 0x8e, 0xf1, 0xc2, 0x23, 0x39, 0xc6,
0x07, 0x8f, 0xe4, 0x18, 0x5f, 0x3c, 0x92, 0x63, 0xf8, 0xf0, 0x48, 0x8e, 0x91, 0x4b, 0x38, 0x39,
0x3f, 0x57, 0x0f, 0xcd, 0x30, 0x27, 0x2e, 0xb0, 0x51, 0x01, 0x20, 0x6e, 0x00, 0x63, 0x14, 0x6b,
0x49, 0x65, 0x41, 0x6a, 0xf1, 0x02, 0x46, 0xc6, 0x1f, 0x8c, 0x8c, 0x8b, 0x98, 0x98, 0xdd, 0x03,
0x9c, 0x56, 0x31, 0xc9, 0xb9, 0x43, 0xb4, 0x04, 0x40, 0xb5, 0xe8, 0x85, 0xa7, 0xe6, 0xe4, 0x78,
0xe7, 0xe5, 0x97, 0xe7, 0x85, 0x80, 0x14, 0x27, 0xb1, 0x81, 0xcd, 0x32, 0x06, 0x04, 0x00, 0x00,
0xff, 0xff, 0xb6, 0x8f, 0x29, 0x84, 0xb5, 0x00, 0x00, 0x00,
0x07, 0x8f, 0xe4, 0x18, 0x5f, 0x3c, 0x92, 0x63, 0xf8, 0x00, 0x12, 0x7f, 0x2c, 0xc7, 0xc8, 0x25,
0x9c, 0x9c, 0x9f, 0xab, 0x87, 0x66, 0xa0, 0x13, 0x17, 0xd8, 0xb8, 0x00, 0x10, 0x37, 0x80, 0x31,
0x8a, 0xb5, 0xa4, 0xb2, 0x20, 0xb5, 0x78, 0x01, 0x23, 0xe3, 0x0f, 0x46, 0xc6, 0x45, 0x4c, 0xcc,
0xee, 0x01, 0x4e, 0xab, 0x98, 0xe4, 0xdc, 0x21, 0x5a, 0x02, 0xa0, 0x5a, 0xf4, 0xc2, 0x53, 0x73,
0x72, 0xbc, 0xf3, 0xf2, 0xcb, 0xf3, 0x42, 0x40, 0x8a, 0x93, 0xd8, 0xc0, 0x66, 0x19, 0x03, 0x02,
0x00, 0x00, 0xff, 0xff, 0x97, 0x6c, 0x95, 0xdd, 0xb9, 0x00, 0x00, 0x00,
}

View file

@ -18,9 +18,6 @@ import fmt "fmt"
import math "math"
import strings "strings"
import github_com_gogo_protobuf_proto "github.com/gogo/protobuf/proto"
import sort "sort"
import strconv "strconv"
import reflect "reflect"
import io "io"
@ -246,9 +243,57 @@ func (m *FieldMask) Reset() { *m = FieldMask{} }
func (*FieldMask) ProtoMessage() {}
func (*FieldMask) Descriptor() ([]byte, []int) { return fileDescriptorFieldMask, []int{0} }
func (m *FieldMask) GetPaths() []string {
if m != nil {
return m.Paths
}
return nil
}
func init() {
proto.RegisterType((*FieldMask)(nil), "google.protobuf.FieldMask")
}
func (this *FieldMask) Compare(that interface{}) int {
if that == nil {
if this == nil {
return 0
}
return 1
}
that1, ok := that.(*FieldMask)
if !ok {
that2, ok := that.(FieldMask)
if ok {
that1 = &that2
} else {
return 1
}
}
if that1 == nil {
if this == nil {
return 0
}
return 1
} else if this == nil {
return -1
}
if len(this.Paths) != len(that1.Paths) {
if len(this.Paths) < len(that1.Paths) {
return -1
}
return 1
}
for i := range this.Paths {
if this.Paths[i] != that1.Paths[i] {
if this.Paths[i] < that1.Paths[i] {
return -1
}
return 1
}
}
return 0
}
func (this *FieldMask) Equal(that interface{}) bool {
if that == nil {
if this == nil {
@ -302,24 +347,6 @@ func valueToGoStringFieldMask(v interface{}, typ string) string {
pv := reflect.Indirect(rv).Interface()
return fmt.Sprintf("func(v %v) *%v { return &v } ( %#v )", typ, typ, pv)
}
func extensionToGoStringFieldMask(m github_com_gogo_protobuf_proto.Message) string {
e := github_com_gogo_protobuf_proto.GetUnsafeExtensionsMap(m)
if e == nil {
return "nil"
}
s := "proto.NewUnsafeXXX_InternalExtensions(map[int32]proto.Extension{"
keys := make([]int, 0, len(e))
for k := range e {
keys = append(keys, int(k))
}
sort.Ints(keys)
ss := []string{}
for _, k := range keys {
ss = append(ss, strconv.Itoa(k)+": "+e[int32(k)].GoString())
}
s += strings.Join(ss, ",") + "})"
return s
}
func (m *FieldMask) Marshal() (dAtA []byte, err error) {
size := m.Size()
dAtA = make([]byte, size)
@ -694,18 +721,18 @@ var (
func init() { proto.RegisterFile("field_mask.proto", fileDescriptorFieldMask) }
var fileDescriptorFieldMask = []byte{
// 194 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x09, 0x6e, 0x88, 0x02, 0xff, 0xe2, 0x12, 0x48, 0xcb, 0x4c, 0xcd,
// 196 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x12, 0x48, 0xcb, 0x4c, 0xcd,
0x49, 0x89, 0xcf, 0x4d, 0x2c, 0xce, 0xd6, 0x2b, 0x28, 0xca, 0x2f, 0xc9, 0x17, 0xe2, 0x4f, 0xcf,
0xcf, 0x4f, 0xcf, 0x49, 0x85, 0xf0, 0x92, 0x4a, 0xd3, 0x94, 0x14, 0xb9, 0x38, 0xdd, 0x40, 0x8a,
0x7c, 0x13, 0x8b, 0xb3, 0x85, 0x44, 0xb8, 0x58, 0x0b, 0x12, 0x4b, 0x32, 0x8a, 0x25, 0x18, 0x15,
0x98, 0x35, 0x38, 0x83, 0x20, 0x1c, 0xa7, 0x16, 0xc6, 0x0b, 0x0f, 0xe5, 0x18, 0x6e, 0x3c, 0x94,
0x98, 0x35, 0x38, 0x83, 0x20, 0x1c, 0xa7, 0x0e, 0xc6, 0x0b, 0x0f, 0xe5, 0x18, 0x6e, 0x3c, 0x94,
0x63, 0xf8, 0xf0, 0x50, 0x8e, 0xf1, 0xc7, 0x43, 0x39, 0xc6, 0x86, 0x47, 0x72, 0x8c, 0x2b, 0x1e,
0xc9, 0x31, 0x9e, 0x78, 0x24, 0xc7, 0x78, 0xe1, 0x91, 0x1c, 0xe3, 0x83, 0x47, 0x72, 0x8c, 0x2f,
0x1e, 0xc9, 0x31, 0x7c, 0x78, 0x24, 0xc7, 0xc8, 0x25, 0x9c, 0x9c, 0x9f, 0xab, 0x87, 0x66, 0x8d,
0x13, 0x1f, 0xdc, 0x92, 0x00, 0x90, 0x50, 0x00, 0x63, 0x14, 0x6b, 0x49, 0x65, 0x41, 0x6a, 0xf1,
0x02, 0x46, 0xc6, 0x45, 0x4c, 0xcc, 0xee, 0x01, 0x4e, 0xab, 0x98, 0xe4, 0xdc, 0x21, 0x7a, 0x02,
0xa0, 0x7a, 0xf4, 0xc2, 0x53, 0x73, 0x72, 0xbc, 0xf3, 0xf2, 0xcb, 0xf3, 0x42, 0x40, 0x2a, 0x93,
0xd8, 0xc0, 0x86, 0x19, 0x03, 0x02, 0x00, 0x00, 0xff, 0xff, 0xad, 0xd3, 0x2d, 0xcf, 0xd5, 0x00,
0x00, 0x00,
0x1e, 0xc9, 0x31, 0x7c, 0x00, 0x89, 0x3f, 0x96, 0x63, 0xe4, 0x12, 0x4e, 0xce, 0xcf, 0xd5, 0x43,
0xb3, 0xca, 0x89, 0x0f, 0x6e, 0x51, 0x00, 0x48, 0x28, 0x80, 0x31, 0x8a, 0xb5, 0xa4, 0xb2, 0x20,
0xb5, 0x78, 0x01, 0x23, 0xe3, 0x22, 0x26, 0x66, 0xf7, 0x00, 0xa7, 0x55, 0x4c, 0x72, 0xee, 0x10,
0x3d, 0x01, 0x50, 0x3d, 0x7a, 0xe1, 0xa9, 0x39, 0x39, 0xde, 0x79, 0xf9, 0xe5, 0x79, 0x21, 0x20,
0x95, 0x49, 0x6c, 0x60, 0xc3, 0x8c, 0x01, 0x01, 0x00, 0x00, 0xff, 0xff, 0xea, 0xb1, 0x3a, 0xd5,
0xd9, 0x00, 0x00, 0x00,
}

View file

@ -22,8 +22,6 @@ import math "math"
import strconv "strconv"
import strings "strings"
import github_com_gogo_protobuf_proto "github.com/gogo/protobuf/proto"
import sort "sort"
import reflect "reflect"
import github_com_gogo_protobuf_sortkeys "github.com/gogo/protobuf/sortkeys"
@ -748,24 +746,6 @@ func valueToGoStringStruct(v interface{}, typ string) string {
pv := reflect.Indirect(rv).Interface()
return fmt.Sprintf("func(v %v) *%v { return &v } ( %#v )", typ, typ, pv)
}
func extensionToGoStringStruct(m github_com_gogo_protobuf_proto.Message) string {
e := github_com_gogo_protobuf_proto.GetUnsafeExtensionsMap(m)
if e == nil {
return "nil"
}
s := "proto.NewUnsafeXXX_InternalExtensions(map[int32]proto.Extension{"
keys := make([]int, 0, len(e))
for k := range e {
keys = append(keys, int(k))
}
sort.Ints(keys)
ss := []string{}
for _, k := range keys {
ss = append(ss, strconv.Itoa(k)+": "+e[int32(k)].GoString())
}
s += strings.Join(ss, ",") + "})"
return s
}
func (m *Struct) Marshal() (dAtA []byte, err error) {
size := m.Size()
dAtA = make([]byte, size)
@ -1878,7 +1858,7 @@ func init() { proto.RegisterFile("struct.proto", fileDescriptorStruct) }
var fileDescriptorStruct = []byte{
// 432 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x09, 0x6e, 0x88, 0x02, 0xff, 0x74, 0x91, 0xc1, 0x6b, 0xd4, 0x40,
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x74, 0x91, 0xc1, 0x6b, 0xd4, 0x40,
0x14, 0xc6, 0xf3, 0xb2, 0xdd, 0xe0, 0xbe, 0x94, 0x5a, 0x46, 0xd0, 0xa5, 0xc2, 0xb8, 0x6c, 0x2f,
0x41, 0x24, 0x87, 0xf5, 0x22, 0xae, 0x17, 0x03, 0xb5, 0x05, 0x43, 0x89, 0xd1, 0x56, 0xf0, 0xb2,
0x98, 0x6d, 0xba, 0x84, 0x4e, 0x67, 0x4a, 0x32, 0x51, 0xf6, 0xa6, 0xff, 0x85, 0x47, 0xf1, 0x24,

View file

@ -18,9 +18,6 @@ import fmt "fmt"
import math "math"
import strings "strings"
import github_com_gogo_protobuf_proto "github.com/gogo/protobuf/proto"
import sort "sort"
import strconv "strconv"
import reflect "reflect"
import io "io"
@ -108,9 +105,62 @@ func (*Timestamp) ProtoMessage() {}
func (*Timestamp) Descriptor() ([]byte, []int) { return fileDescriptorTimestamp, []int{0} }
func (*Timestamp) XXX_WellKnownType() string { return "Timestamp" }
func (m *Timestamp) GetSeconds() int64 {
if m != nil {
return m.Seconds
}
return 0
}
func (m *Timestamp) GetNanos() int32 {
if m != nil {
return m.Nanos
}
return 0
}
func init() {
proto.RegisterType((*Timestamp)(nil), "google.protobuf.Timestamp")
}
func (this *Timestamp) Compare(that interface{}) int {
if that == nil {
if this == nil {
return 0
}
return 1
}
that1, ok := that.(*Timestamp)
if !ok {
that2, ok := that.(Timestamp)
if ok {
that1 = &that2
} else {
return 1
}
}
if that1 == nil {
if this == nil {
return 0
}
return 1
} else if this == nil {
return -1
}
if this.Seconds != that1.Seconds {
if this.Seconds < that1.Seconds {
return -1
}
return 1
}
if this.Nanos != that1.Nanos {
if this.Nanos < that1.Nanos {
return -1
}
return 1
}
return 0
}
func (this *Timestamp) Equal(that interface{}) bool {
if that == nil {
if this == nil {
@ -163,24 +213,6 @@ func valueToGoStringTimestamp(v interface{}, typ string) string {
pv := reflect.Indirect(rv).Interface()
return fmt.Sprintf("func(v %v) *%v { return &v } ( %#v )", typ, typ, pv)
}
func extensionToGoStringTimestamp(m github_com_gogo_protobuf_proto.Message) string {
e := github_com_gogo_protobuf_proto.GetUnsafeExtensionsMap(m)
if e == nil {
return "nil"
}
s := "proto.NewUnsafeXXX_InternalExtensions(map[int32]proto.Extension{"
keys := make([]int, 0, len(e))
for k := range e {
keys = append(keys, int(k))
}
sort.Ints(keys)
ss := []string{}
for _, k := range keys {
ss = append(ss, strconv.Itoa(k)+": "+e[int32(k)].GoString())
}
s += strings.Join(ss, ",") + "})"
return s
}
func (m *Timestamp) Marshal() (dAtA []byte, err error) {
size := m.Size()
dAtA = make([]byte, size)
@ -457,18 +489,18 @@ var (
func init() { proto.RegisterFile("timestamp.proto", fileDescriptorTimestamp) }
var fileDescriptorTimestamp = []byte{
// 202 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x09, 0x6e, 0x88, 0x02, 0xff, 0xe2, 0xe2, 0x2f, 0xc9, 0xcc, 0x4d,
// 208 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0xe2, 0x2f, 0xc9, 0xcc, 0x4d,
0x2d, 0x2e, 0x49, 0xcc, 0x2d, 0xd0, 0x2b, 0x28, 0xca, 0x2f, 0xc9, 0x17, 0xe2, 0x4f, 0xcf, 0xcf,
0x4f, 0xcf, 0x49, 0x85, 0xf0, 0x92, 0x4a, 0xd3, 0x94, 0xac, 0xb9, 0x38, 0x43, 0x60, 0x6a, 0x84,
0x24, 0xb8, 0xd8, 0x8b, 0x53, 0x93, 0xf3, 0xf3, 0x52, 0x8a, 0x25, 0x18, 0x15, 0x18, 0x35, 0x98,
0x83, 0x60, 0x5c, 0x21, 0x11, 0x2e, 0xd6, 0xbc, 0xc4, 0xbc, 0xfc, 0x62, 0x09, 0x26, 0x05, 0x46,
0x0d, 0xd6, 0x20, 0x08, 0xc7, 0xa9, 0xfe, 0xc2, 0x43, 0x39, 0x86, 0x1b, 0x0f, 0xe5, 0x18, 0x3e,
0x3c, 0x94, 0x63, 0x5c, 0xf1, 0x48, 0x8e, 0xf1, 0xc4, 0x23, 0x39, 0xc6, 0x0b, 0x8f, 0xe4, 0x18,
0x1f, 0x3c, 0x92, 0x63, 0x7c, 0xf1, 0x48, 0x8e, 0xe1, 0xc3, 0x23, 0x39, 0x46, 0x2e, 0xe1, 0xe4,
0xfc, 0x5c, 0x3d, 0x34, 0x7b, 0x9d, 0xf8, 0xe0, 0xb6, 0x06, 0x80, 0x84, 0x02, 0x18, 0xa3, 0x58,
0x4b, 0x2a, 0x0b, 0x52, 0x8b, 0x17, 0x30, 0x32, 0xfe, 0x60, 0x64, 0x5c, 0xc4, 0xc4, 0xec, 0x1e,
0xe0, 0xb4, 0x8a, 0x49, 0xce, 0x1d, 0xa2, 0x2d, 0x00, 0xaa, 0x4d, 0x2f, 0x3c, 0x35, 0x27, 0xc7,
0x3b, 0x2f, 0xbf, 0x3c, 0x2f, 0x04, 0xa4, 0x38, 0x89, 0x0d, 0x6c, 0x9e, 0x31, 0x20, 0x00, 0x00,
0xff, 0xff, 0xfd, 0x1c, 0xfa, 0x58, 0xe8, 0x00, 0x00, 0x00,
0x0d, 0xd6, 0x20, 0x08, 0xc7, 0xa9, 0x99, 0xf1, 0xc2, 0x43, 0x39, 0x86, 0x1b, 0x0f, 0xe5, 0x18,
0x3e, 0x3c, 0x94, 0x63, 0x5c, 0xf1, 0x48, 0x8e, 0xf1, 0xc4, 0x23, 0x39, 0xc6, 0x0b, 0x8f, 0xe4,
0x18, 0x1f, 0x3c, 0x92, 0x63, 0x7c, 0xf1, 0x48, 0x8e, 0xe1, 0xc3, 0x23, 0x39, 0xc6, 0x15, 0x8f,
0xe5, 0x18, 0xb9, 0x84, 0x93, 0xf3, 0x73, 0xf5, 0xd0, 0x2c, 0x77, 0xe2, 0x83, 0x5b, 0x1d, 0x00,
0x12, 0x0a, 0x60, 0x8c, 0x62, 0x2d, 0xa9, 0x2c, 0x48, 0x2d, 0x5e, 0xc0, 0xc8, 0xf8, 0x83, 0x91,
0x71, 0x11, 0x13, 0xb3, 0x7b, 0x80, 0xd3, 0x2a, 0x26, 0x39, 0x77, 0x88, 0xb6, 0x00, 0xa8, 0x36,
0xbd, 0xf0, 0xd4, 0x9c, 0x1c, 0xef, 0xbc, 0xfc, 0xf2, 0xbc, 0x10, 0x90, 0xe2, 0x24, 0x36, 0xb0,
0x79, 0xc6, 0x80, 0x00, 0x00, 0x00, 0xff, 0xff, 0x7c, 0x4d, 0xbd, 0x9c, 0xed, 0x00, 0x00, 0x00,
}

View file

@ -28,9 +28,6 @@ import math "math"
import bytes "bytes"
import strings "strings"
import github_com_gogo_protobuf_proto "github.com/gogo/protobuf/proto"
import sort "sort"
import strconv "strconv"
import reflect "reflect"
import io "io"
@ -59,6 +56,13 @@ func (*DoubleValue) ProtoMessage() {}
func (*DoubleValue) Descriptor() ([]byte, []int) { return fileDescriptorWrappers, []int{0} }
func (*DoubleValue) XXX_WellKnownType() string { return "DoubleValue" }
func (m *DoubleValue) GetValue() float64 {
if m != nil {
return m.Value
}
return 0
}
// Wrapper message for `float`.
//
// The JSON representation for `FloatValue` is JSON number.
@ -72,6 +76,13 @@ func (*FloatValue) ProtoMessage() {}
func (*FloatValue) Descriptor() ([]byte, []int) { return fileDescriptorWrappers, []int{1} }
func (*FloatValue) XXX_WellKnownType() string { return "FloatValue" }
func (m *FloatValue) GetValue() float32 {
if m != nil {
return m.Value
}
return 0
}
// Wrapper message for `int64`.
//
// The JSON representation for `Int64Value` is JSON string.
@ -85,6 +96,13 @@ func (*Int64Value) ProtoMessage() {}
func (*Int64Value) Descriptor() ([]byte, []int) { return fileDescriptorWrappers, []int{2} }
func (*Int64Value) XXX_WellKnownType() string { return "Int64Value" }
func (m *Int64Value) GetValue() int64 {
if m != nil {
return m.Value
}
return 0
}
// Wrapper message for `uint64`.
//
// The JSON representation for `UInt64Value` is JSON string.
@ -98,6 +116,13 @@ func (*UInt64Value) ProtoMessage() {}
func (*UInt64Value) Descriptor() ([]byte, []int) { return fileDescriptorWrappers, []int{3} }
func (*UInt64Value) XXX_WellKnownType() string { return "UInt64Value" }
func (m *UInt64Value) GetValue() uint64 {
if m != nil {
return m.Value
}
return 0
}
// Wrapper message for `int32`.
//
// The JSON representation for `Int32Value` is JSON number.
@ -111,6 +136,13 @@ func (*Int32Value) ProtoMessage() {}
func (*Int32Value) Descriptor() ([]byte, []int) { return fileDescriptorWrappers, []int{4} }
func (*Int32Value) XXX_WellKnownType() string { return "Int32Value" }
func (m *Int32Value) GetValue() int32 {
if m != nil {
return m.Value
}
return 0
}
// Wrapper message for `uint32`.
//
// The JSON representation for `UInt32Value` is JSON number.
@ -124,6 +156,13 @@ func (*UInt32Value) ProtoMessage() {}
func (*UInt32Value) Descriptor() ([]byte, []int) { return fileDescriptorWrappers, []int{5} }
func (*UInt32Value) XXX_WellKnownType() string { return "UInt32Value" }
func (m *UInt32Value) GetValue() uint32 {
if m != nil {
return m.Value
}
return 0
}
// Wrapper message for `bool`.
//
// The JSON representation for `BoolValue` is JSON `true` and `false`.
@ -137,6 +176,13 @@ func (*BoolValue) ProtoMessage() {}
func (*BoolValue) Descriptor() ([]byte, []int) { return fileDescriptorWrappers, []int{6} }
func (*BoolValue) XXX_WellKnownType() string { return "BoolValue" }
func (m *BoolValue) GetValue() bool {
if m != nil {
return m.Value
}
return false
}
// Wrapper message for `string`.
//
// The JSON representation for `StringValue` is JSON string.
@ -150,6 +196,13 @@ func (*StringValue) ProtoMessage() {}
func (*StringValue) Descriptor() ([]byte, []int) { return fileDescriptorWrappers, []int{7} }
func (*StringValue) XXX_WellKnownType() string { return "StringValue" }
func (m *StringValue) GetValue() string {
if m != nil {
return m.Value
}
return ""
}
// Wrapper message for `bytes`.
//
// The JSON representation for `BytesValue` is JSON string.
@ -163,6 +216,13 @@ func (*BytesValue) ProtoMessage() {}
func (*BytesValue) Descriptor() ([]byte, []int) { return fileDescriptorWrappers, []int{8} }
func (*BytesValue) XXX_WellKnownType() string { return "BytesValue" }
func (m *BytesValue) GetValue() []byte {
if m != nil {
return m.Value
}
return nil
}
func init() {
proto.RegisterType((*DoubleValue)(nil), "google.protobuf.DoubleValue")
proto.RegisterType((*FloatValue)(nil), "google.protobuf.FloatValue")
@ -174,6 +234,300 @@ func init() {
proto.RegisterType((*StringValue)(nil), "google.protobuf.StringValue")
proto.RegisterType((*BytesValue)(nil), "google.protobuf.BytesValue")
}
func (this *DoubleValue) Compare(that interface{}) int {
if that == nil {
if this == nil {
return 0
}
return 1
}
that1, ok := that.(*DoubleValue)
if !ok {
that2, ok := that.(DoubleValue)
if ok {
that1 = &that2
} else {
return 1
}
}
if that1 == nil {
if this == nil {
return 0
}
return 1
} else if this == nil {
return -1
}
if this.Value != that1.Value {
if this.Value < that1.Value {
return -1
}
return 1
}
return 0
}
func (this *FloatValue) Compare(that interface{}) int {
if that == nil {
if this == nil {
return 0
}
return 1
}
that1, ok := that.(*FloatValue)
if !ok {
that2, ok := that.(FloatValue)
if ok {
that1 = &that2
} else {
return 1
}
}
if that1 == nil {
if this == nil {
return 0
}
return 1
} else if this == nil {
return -1
}
if this.Value != that1.Value {
if this.Value < that1.Value {
return -1
}
return 1
}
return 0
}
func (this *Int64Value) Compare(that interface{}) int {
if that == nil {
if this == nil {
return 0
}
return 1
}
that1, ok := that.(*Int64Value)
if !ok {
that2, ok := that.(Int64Value)
if ok {
that1 = &that2
} else {
return 1
}
}
if that1 == nil {
if this == nil {
return 0
}
return 1
} else if this == nil {
return -1
}
if this.Value != that1.Value {
if this.Value < that1.Value {
return -1
}
return 1
}
return 0
}
func (this *UInt64Value) Compare(that interface{}) int {
if that == nil {
if this == nil {
return 0
}
return 1
}
that1, ok := that.(*UInt64Value)
if !ok {
that2, ok := that.(UInt64Value)
if ok {
that1 = &that2
} else {
return 1
}
}
if that1 == nil {
if this == nil {
return 0
}
return 1
} else if this == nil {
return -1
}
if this.Value != that1.Value {
if this.Value < that1.Value {
return -1
}
return 1
}
return 0
}
func (this *Int32Value) Compare(that interface{}) int {
if that == nil {
if this == nil {
return 0
}
return 1
}
that1, ok := that.(*Int32Value)
if !ok {
that2, ok := that.(Int32Value)
if ok {
that1 = &that2
} else {
return 1
}
}
if that1 == nil {
if this == nil {
return 0
}
return 1
} else if this == nil {
return -1
}
if this.Value != that1.Value {
if this.Value < that1.Value {
return -1
}
return 1
}
return 0
}
func (this *UInt32Value) Compare(that interface{}) int {
if that == nil {
if this == nil {
return 0
}
return 1
}
that1, ok := that.(*UInt32Value)
if !ok {
that2, ok := that.(UInt32Value)
if ok {
that1 = &that2
} else {
return 1
}
}
if that1 == nil {
if this == nil {
return 0
}
return 1
} else if this == nil {
return -1
}
if this.Value != that1.Value {
if this.Value < that1.Value {
return -1
}
return 1
}
return 0
}
func (this *BoolValue) Compare(that interface{}) int {
if that == nil {
if this == nil {
return 0
}
return 1
}
that1, ok := that.(*BoolValue)
if !ok {
that2, ok := that.(BoolValue)
if ok {
that1 = &that2
} else {
return 1
}
}
if that1 == nil {
if this == nil {
return 0
}
return 1
} else if this == nil {
return -1
}
if this.Value != that1.Value {
if !this.Value {
return -1
}
return 1
}
return 0
}
func (this *StringValue) Compare(that interface{}) int {
if that == nil {
if this == nil {
return 0
}
return 1
}
that1, ok := that.(*StringValue)
if !ok {
that2, ok := that.(StringValue)
if ok {
that1 = &that2
} else {
return 1
}
}
if that1 == nil {
if this == nil {
return 0
}
return 1
} else if this == nil {
return -1
}
if this.Value != that1.Value {
if this.Value < that1.Value {
return -1
}
return 1
}
return 0
}
func (this *BytesValue) Compare(that interface{}) int {
if that == nil {
if this == nil {
return 0
}
return 1
}
that1, ok := that.(*BytesValue)
if !ok {
that2, ok := that.(BytesValue)
if ok {
that1 = &that2
} else {
return 1
}
}
if that1 == nil {
if this == nil {
return 0
}
return 1
} else if this == nil {
return -1
}
if c := bytes.Compare(this.Value, that1.Value); c != 0 {
return c
}
return 0
}
func (this *DoubleValue) Equal(that interface{}) bool {
if that == nil {
if this == nil {
@ -542,24 +896,6 @@ func valueToGoStringWrappers(v interface{}, typ string) string {
pv := reflect.Indirect(rv).Interface()
return fmt.Sprintf("func(v %v) *%v { return &v } ( %#v )", typ, typ, pv)
}
func extensionToGoStringWrappers(m github_com_gogo_protobuf_proto.Message) string {
e := github_com_gogo_protobuf_proto.GetUnsafeExtensionsMap(m)
if e == nil {
return "nil"
}
s := "proto.NewUnsafeXXX_InternalExtensions(map[int32]proto.Extension{"
keys := make([]int, 0, len(e))
for k := range e {
keys = append(keys, int(k))
}
sort.Ints(keys)
ss := []string{}
for _, k := range keys {
ss = append(ss, strconv.Itoa(k)+": "+e[int32(k)].GoString())
}
s += strings.Join(ss, ",") + "})"
return s
}
func (m *DoubleValue) Marshal() (dAtA []byte, err error) {
size := m.Size()
dAtA = make([]byte, size)
@ -1901,8 +2237,8 @@ var (
func init() { proto.RegisterFile("wrappers.proto", fileDescriptorWrappers) }
var fileDescriptorWrappers = []byte{
// 280 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x09, 0x6e, 0x88, 0x02, 0xff, 0xe2, 0xe2, 0x2b, 0x2f, 0x4a, 0x2c,
// 281 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0xe2, 0x2b, 0x2f, 0x4a, 0x2c,
0x28, 0x48, 0x2d, 0x2a, 0xd6, 0x2b, 0x28, 0xca, 0x2f, 0xc9, 0x17, 0xe2, 0x4f, 0xcf, 0xcf, 0x4f,
0xcf, 0x49, 0x85, 0xf0, 0x92, 0x4a, 0xd3, 0x94, 0x94, 0xb9, 0xb8, 0x5d, 0xf2, 0x4b, 0x93, 0x72,
0x52, 0xc3, 0x12, 0x73, 0x4a, 0x53, 0x85, 0x44, 0xb8, 0x58, 0xcb, 0x40, 0x0c, 0x09, 0x46, 0x05,
@ -1911,13 +2247,13 @@ var fileDescriptorWrappers = []byte{
0x71, 0x87, 0xe2, 0x52, 0xc4, 0x82, 0x6a, 0x90, 0xb1, 0x11, 0x16, 0x35, 0xac, 0x68, 0x06, 0x61,
0x55, 0xc4, 0x0b, 0x53, 0xa4, 0xc8, 0xc5, 0xe9, 0x94, 0x9f, 0x9f, 0x83, 0x45, 0x09, 0x07, 0x92,
0x39, 0xc1, 0x25, 0x45, 0x99, 0x79, 0xe9, 0x58, 0x14, 0x71, 0x22, 0x39, 0xc8, 0xa9, 0xb2, 0x24,
0xb5, 0x18, 0x8b, 0x1a, 0x1e, 0xa8, 0x1a, 0xa7, 0x36, 0xc6, 0x0b, 0x0f, 0xe5, 0x18, 0x6e, 0x3c,
0xb5, 0x18, 0x8b, 0x1a, 0x1e, 0xa8, 0x1a, 0xa7, 0x2e, 0xc6, 0x0b, 0x0f, 0xe5, 0x18, 0x6e, 0x3c,
0x94, 0x63, 0xf8, 0xf0, 0x50, 0x8e, 0xf1, 0xc7, 0x43, 0x39, 0xc6, 0x86, 0x47, 0x72, 0x8c, 0x2b,
0x1e, 0xc9, 0x31, 0x9e, 0x78, 0x24, 0xc7, 0x78, 0xe1, 0x91, 0x1c, 0xe3, 0x83, 0x47, 0x72, 0x8c,
0x2f, 0x1e, 0xc9, 0x31, 0x7c, 0x78, 0x24, 0xc7, 0xc8, 0x25, 0x9c, 0x9c, 0x9f, 0xab, 0x87, 0x16,
0x15, 0x4e, 0xbc, 0xe1, 0xd0, 0xb8, 0x0a, 0x00, 0x89, 0x04, 0x30, 0x46, 0xb1, 0x96, 0x54, 0x16,
0xa4, 0x16, 0x2f, 0x60, 0x64, 0xfc, 0xc1, 0xc8, 0xb8, 0x88, 0x89, 0xd9, 0x3d, 0xc0, 0x69, 0x15,
0x93, 0x9c, 0x3b, 0x44, 0x57, 0x00, 0x54, 0x97, 0x5e, 0x78, 0x6a, 0x4e, 0x8e, 0x77, 0x5e, 0x7e,
0x79, 0x5e, 0x08, 0x48, 0x71, 0x12, 0x1b, 0xd8, 0x38, 0x63, 0x40, 0x00, 0x00, 0x00, 0xff, 0xff,
0x1b, 0x0c, 0xe0, 0x38, 0xf9, 0x01, 0x00, 0x00,
0x2f, 0x1e, 0xc9, 0x31, 0x7c, 0x00, 0x89, 0x3f, 0x96, 0x63, 0xe4, 0x12, 0x4e, 0xce, 0xcf, 0xd5,
0x43, 0x8b, 0x0e, 0x27, 0xde, 0x70, 0x68, 0x7c, 0x05, 0x80, 0x44, 0x02, 0x18, 0xa3, 0x58, 0x4b,
0x2a, 0x0b, 0x52, 0x8b, 0x17, 0x30, 0x32, 0xfe, 0x60, 0x64, 0x5c, 0xc4, 0xc4, 0xec, 0x1e, 0xe0,
0xb4, 0x8a, 0x49, 0xce, 0x1d, 0xa2, 0x2b, 0x00, 0xaa, 0x4b, 0x2f, 0x3c, 0x35, 0x27, 0xc7, 0x3b,
0x2f, 0xbf, 0x3c, 0x2f, 0x04, 0xa4, 0x38, 0x89, 0x0d, 0x6c, 0x9c, 0x31, 0x20, 0x00, 0x00, 0xff,
0xff, 0xac, 0x8b, 0x9f, 0x55, 0xfd, 0x01, 0x00, 0x00,
}