From bd3f74da28eb326b4a3f2912de96df75520c86a3 Mon Sep 17 00:00:00 2001 From: Simon Ferquel Date: Mon, 7 Aug 2017 16:29:01 +0200 Subject: [PATCH] Added isolation on service update/create and compose files Signed-off-by: Simon Ferquel --- cli/command/service/opts.go | 6 + cli/command/service/update.go | 1 + cli/compose/convert/service.go | 1 + cli/compose/types/types.go | 1 + vendor.conf | 4 +- .../docker/docker/api/types/mount/mount.go | 2 + .../docker/api/types/swarm/container.go | 1 + .../daemon/cluster/convert/container.go | 2 + .../docker/docker/pkg/term/termios_linux.go | 2 + vendor/github.com/docker/docker/vendor.conf | 2 +- .../docker/docker/volume/validate.go | 38 +- .../github.com/docker/docker/volume/volume.go | 10 +- .../docker/docker/volume/volume_unix.go | 14 +- .../docker/docker/volume/volume_windows.go | 41 +- .../docker/swarmkit/api/specs.pb.go | 554 +++++++++--- .../docker/swarmkit/api/specs.proto | 20 + .../docker/swarmkit/api/types.pb.go | 831 ++++++++++-------- .../docker/swarmkit/api/types.proto | 15 + .../github.com/docker/swarmkit/ca/config.go | 46 +- .../github.com/docker/swarmkit/ca/external.go | 44 +- .../github.com/docker/swarmkit/ca/server.go | 286 +++--- vendor/github.com/docker/swarmkit/vendor.conf | 16 +- 22 files changed, 1241 insertions(+), 696 deletions(-) mode change 100755 => 100644 vendor.conf diff --git a/cli/command/service/opts.go b/cli/command/service/opts.go index fc94c7d913a1..6da8231aa75a 100644 --- a/cli/command/service/opts.go +++ b/cli/command/service/opts.go @@ -505,6 +505,8 @@ type serviceOptions struct { healthcheck healthCheckOptions secrets opts.SecretOpt configs opts.ConfigOpt + + isolation string } func newServiceOptions() *serviceOptions { @@ -614,6 +616,7 @@ func (options *serviceOptions) ToService(ctx context.Context, apiClient client.N Hosts: convertExtraHostsToSwarmHosts(options.hosts.GetAll()), StopGracePeriod: options.ToStopGracePeriod(flags), Healthcheck: healthConfig, + Isolation: options.isolation, }, Networks: networks, Resources: options.resources.ToResourceRequirements(), @@ -784,6 +787,8 @@ func addServiceFlags(flags *pflag.FlagSet, opts *serviceOptions, defaultFlagValu flags.StringVar(&opts.stopSignal, flagStopSignal, "", "Signal to stop the container") flags.SetAnnotation(flagStopSignal, "version", []string{"1.28"}) + flags.StringVar(&opts.isolation, flagIsolation, "", "defines the isolation mode (hyperv, process)") + flags.SetAnnotation(flagIsolation, "version", []string{"1.32"}) } const ( @@ -879,4 +884,5 @@ const ( flagConfig = "config" flagConfigAdd = "config-add" flagConfigRemove = "config-rm" + flagIsolation = "isolation" ) diff --git a/cli/command/service/update.go b/cli/command/service/update.go index 03783d8c2c0d..d6629cb07a8c 100644 --- a/cli/command/service/update.go +++ b/cli/command/service/update.go @@ -289,6 +289,7 @@ func updateService(ctx context.Context, apiClient client.NetworkAPIClient, flags updateString(flagWorkdir, &cspec.Dir) updateString(flagUser, &cspec.User) updateString(flagHostname, &cspec.Hostname) + updateString(flagIsolation, &cspec.Isolation) if err := updateMounts(flags, &cspec.Mounts); err != nil { return err } diff --git a/cli/compose/convert/service.go b/cli/compose/convert/service.go index acbd234a6bd9..c8da78f29d49 100644 --- a/cli/compose/convert/service.go +++ b/cli/compose/convert/service.go @@ -149,6 +149,7 @@ func Service( Configs: configs, ReadOnly: service.ReadOnly, Privileges: &privileges, + Isolation: service.Isolation, }, LogDriver: logDriver, Resources: resources, diff --git a/cli/compose/types/types.go b/cli/compose/types/types.go index 8feaf4289daa..0f3d68ea9a8c 100644 --- a/cli/compose/types/types.go +++ b/cli/compose/types/types.go @@ -123,6 +123,7 @@ type ServiceConfig struct { User string Volumes []ServiceVolumeConfig WorkingDir string `mapstructure:"working_dir"` + Isolation string `mapstructure:"isolation"` } // ShellCommand is a string or list of string args diff --git a/vendor.conf b/vendor.conf old mode 100755 new mode 100644 index fb8b2a9819b4..f36e74ac719d --- a/vendor.conf +++ b/vendor.conf @@ -1,6 +1,6 @@ # docker -github.com/docker/docker d4f6db83c21cfc6af54fffb1f13e8acb7199f96a https://github.com/simonferquel/docker.git +github.com/docker/docker 2488cfa1ba00ee649c7ce07d4fd28c35c3ad9072 https://github.com/simonferquel/docker.git github.com/docker/docker-credential-helpers v0.5.1 github.com/docker/distribution edc3ab29cdff8694dd6feb85cfeb4b5f1b38ed9c github.com/docker/libnetwork 248fd5ea6a67f8810da322e6e7441e8de96a9045 https://github.com/dmcgowan/libnetwork.git @@ -13,7 +13,7 @@ github.com/docker/go-events 9461782956ad83b30282bf90e31fa6a70c255ba9 github.com/docker/go-units 9e638d38cf6977a37a8ea0078f3ee75a7cdb2dd1 github.com/docker/libtrust 9cbd2a1374f46905c68a4eb3694a130610adc62a github.com/docker/notary v0.4.2-sirupsen https://github.com/simonferquel/notary.git -github.com/docker/swarmkit 8bdecc57887ffc598b63d6433f58e0d2852112c3 https://github.com/dmcgowan/swarmkit.git +github.com/docker/swarmkit 0d860379bc362b5b93ca90ab465513ec2cd9a948 https://github.com/simonferquel/swarmkit.git github.com/moby/buildkit da2b9dc7dab99e824b2b1067ad7d0523e32dd2d9 https://github.com/dmcgowan/buildkit.git github.com/stevvooe/continuity cd7a8e21e2b6f84799f5dd4b65faf49c8d3ee02d github.com/tonistiigi/fsutil 0ac4c11b053b9c5c7c47558f81f96c7100ce50fb diff --git a/vendor/github.com/docker/docker/api/types/mount/mount.go b/vendor/github.com/docker/docker/api/types/mount/mount.go index 2744f85d6d10..71368643dd64 100644 --- a/vendor/github.com/docker/docker/api/types/mount/mount.go +++ b/vendor/github.com/docker/docker/api/types/mount/mount.go @@ -15,6 +15,8 @@ const ( TypeVolume Type = "volume" // TypeTmpfs is the type for mounting tmpfs TypeTmpfs Type = "tmpfs" + // TypeNamedPipe is the type for mounting Windows named pipes + TypeNamedPipe Type = "npipe" ) // Mount represents a mount (volume). diff --git a/vendor/github.com/docker/docker/api/types/swarm/container.go b/vendor/github.com/docker/docker/api/types/swarm/container.go index 6f8b45f6bb4e..64d5c0b231cf 100644 --- a/vendor/github.com/docker/docker/api/types/swarm/container.go +++ b/vendor/github.com/docker/docker/api/types/swarm/container.go @@ -69,4 +69,5 @@ type ContainerSpec struct { DNSConfig *DNSConfig `json:",omitempty"` Secrets []*SecretReference `json:",omitempty"` Configs []*ConfigReference `json:",omitempty"` + Isolation string `json:",omitempty"` } diff --git a/vendor/github.com/docker/docker/daemon/cluster/convert/container.go b/vendor/github.com/docker/docker/daemon/cluster/convert/container.go index 795e944ae164..59e94cd5dec2 100644 --- a/vendor/github.com/docker/docker/daemon/cluster/convert/container.go +++ b/vendor/github.com/docker/docker/daemon/cluster/convert/container.go @@ -34,6 +34,7 @@ func containerSpecFromGRPC(c *swarmapi.ContainerSpec) *types.ContainerSpec { Hosts: c.Hosts, Secrets: secretReferencesFromGRPC(c.Secrets), Configs: configReferencesFromGRPC(c.Configs), + Isolation: c.Isolation, } if c.DNSConfig != nil { @@ -232,6 +233,7 @@ func containerToGRPC(c *types.ContainerSpec) (*swarmapi.ContainerSpec, error) { Hosts: c.Hosts, Secrets: secretReferencesToGRPC(c.Secrets), Configs: configReferencesToGRPC(c.Configs), + Isolation: c.Isolation, } if c.DNSConfig != nil { diff --git a/vendor/github.com/docker/docker/pkg/term/termios_linux.go b/vendor/github.com/docker/docker/pkg/term/termios_linux.go index 3e25eb7a4131..0f21abcc2fa1 100644 --- a/vendor/github.com/docker/docker/pkg/term/termios_linux.go +++ b/vendor/github.com/docker/docker/pkg/term/termios_linux.go @@ -29,6 +29,8 @@ func MakeRaw(fd uintptr) (*State, error) { termios.Lflag &^= (unix.ECHO | unix.ECHONL | unix.ICANON | unix.ISIG | unix.IEXTEN) termios.Cflag &^= (unix.CSIZE | unix.PARENB) termios.Cflag |= unix.CS8 + termios.Cc[unix.VMIN] = 1 + termios.Cc[unix.VTIME] = 0 if err := unix.IoctlSetTermios(int(fd), setTermios, termios); err != nil { return nil, err diff --git a/vendor/github.com/docker/docker/vendor.conf b/vendor/github.com/docker/docker/vendor.conf index 7608b0e33703..c26af11edafb 100644 --- a/vendor/github.com/docker/docker/vendor.conf +++ b/vendor/github.com/docker/docker/vendor.conf @@ -107,7 +107,7 @@ github.com/stevvooe/continuity cd7a8e21e2b6f84799f5dd4b65faf49c8d3ee02d github.com/tonistiigi/fsutil 0ac4c11b053b9c5c7c47558f81f96c7100ce50fb # cluster -github.com/docker/swarmkit 8bdecc57887ffc598b63d6433f58e0d2852112c3 https://github.com/dmcgowan/swarmkit.git +github.com/docker/swarmkit 0d860379bc362b5b93ca90ab465513ec2cd9a948 https://github.com/simonferquel/swarmkit.git github.com/gogo/protobuf v0.4 github.com/cloudflare/cfssl 7fb22c8cba7ecaf98e4082d22d65800cf45e042a github.com/google/certificate-transparency d90e65c3a07988180c5b1ece71791c0b6506826e diff --git a/vendor/github.com/docker/docker/volume/validate.go b/vendor/github.com/docker/docker/volume/validate.go index 42396a0dadd4..5de46198f6f1 100644 --- a/vendor/github.com/docker/docker/volume/validate.go +++ b/vendor/github.com/docker/docker/volume/validate.go @@ -4,7 +4,7 @@ import ( "errors" "fmt" "os" - "path/filepath" + "runtime" "github.com/docker/docker/api/types/mount" ) @@ -12,8 +12,7 @@ import ( var errBindNotExist = errors.New("bind source path does not exist") type validateOpts struct { - skipBindSourceCheck bool - skipAbsolutePathCheck bool + skipBindSourceCheck bool } func validateMountConfig(mnt *mount.Mount, options ...func(*validateOpts)) error { @@ -30,10 +29,8 @@ func validateMountConfig(mnt *mount.Mount, options ...func(*validateOpts)) error return &errMountConfig{mnt, err} } - if !opts.skipAbsolutePathCheck { - if err := validateAbsolute(mnt.Target); err != nil { - return &errMountConfig{mnt, err} - } + if err := validateAbsolute(mnt.Target); err != nil { + return &errMountConfig{mnt, err} } switch mnt.Type { @@ -97,6 +94,31 @@ func validateMountConfig(mnt *mount.Mount, options ...func(*validateOpts)) error if _, err := ConvertTmpfsOptions(mnt.TmpfsOptions, mnt.ReadOnly); err != nil { return &errMountConfig{mnt, err} } + case mount.TypeNamedPipe: + if runtime.GOOS != "windows" { + return &errMountConfig{mnt, errors.New("named pipe bind mounts are not supported on this OS")} + } + + if len(mnt.Source) == 0 { + return &errMountConfig{mnt, errMissingField("Source")} + } + + if mnt.BindOptions != nil { + return &errMountConfig{mnt, errExtraField("BindOptions")} + } + + if mnt.ReadOnly { + return &errMountConfig{mnt, errExtraField("ReadOnly")} + } + + if detectMountType(mnt.Source) != mount.TypeNamedPipe { + return &errMountConfig{mnt, fmt.Errorf("'%s' is not a valid pipe path", mnt.Source)} + } + + if detectMountType(mnt.Target) != mount.TypeNamedPipe { + return &errMountConfig{mnt, fmt.Errorf("'%s' is not a valid pipe path", mnt.Target)} + } + default: return &errMountConfig{mnt, errors.New("mount type unknown")} } @@ -121,7 +143,7 @@ func errMissingField(name string) error { func validateAbsolute(p string) error { p = convertSlash(p) - if filepath.IsAbs(p) { + if isAbsPath(p) { return nil } return fmt.Errorf("invalid mount path: '%s' mount path must be absolute", p) diff --git a/vendor/github.com/docker/docker/volume/volume.go b/vendor/github.com/docker/docker/volume/volume.go index 8598d4cb8f8c..7e8d16cc68cb 100644 --- a/vendor/github.com/docker/docker/volume/volume.go +++ b/vendor/github.com/docker/docker/volume/volume.go @@ -3,7 +3,6 @@ package volume import ( "fmt" "os" - "path/filepath" "strings" "syscall" "time" @@ -284,12 +283,7 @@ func ParseMountRaw(raw, volumeDriver string) (*MountPoint, error) { return nil, errInvalidMode(mode) } - if filepath.IsAbs(spec.Source) { - spec.Type = mounttypes.TypeBind - } else { - spec.Type = mounttypes.TypeVolume - } - + spec.Type = detectMountType(spec.Source) spec.ReadOnly = !ReadWrite(mode) // cannot assume that if a volume driver is passed in that we should set it @@ -350,7 +344,7 @@ func ParseMountSpec(cfg mounttypes.Mount, options ...func(*validateOpts)) (*Moun mp.CopyData = false } } - case mounttypes.TypeBind: + case mounttypes.TypeBind, mounttypes.TypeNamedPipe: mp.Source = clean(convertSlash(cfg.Source)) if cfg.BindOptions != nil && len(cfg.BindOptions.Propagation) > 0 { mp.Propagation = cfg.BindOptions.Propagation diff --git a/vendor/github.com/docker/docker/volume/volume_unix.go b/vendor/github.com/docker/docker/volume/volume_unix.go index e35b70c03ba9..5dde82147fa5 100644 --- a/vendor/github.com/docker/docker/volume/volume_unix.go +++ b/vendor/github.com/docker/docker/volume/volume_unix.go @@ -124,7 +124,12 @@ func validateCopyMode(mode bool) error { } func convertSlash(p string) string { - return filepath.ToSlash(p) + return p +} + +// isAbsPath reports whether the path is absolute. +func isAbsPath(p string) bool { + return filepath.IsAbs(p) } func splitRawSpec(raw string) ([]string, error) { @@ -139,6 +144,13 @@ func splitRawSpec(raw string) ([]string, error) { return arr, nil } +func detectMountType(p string) mounttypes.Type { + if filepath.IsAbs(p) { + return mounttypes.TypeBind + } + return mounttypes.TypeVolume +} + func clean(p string) string { return filepath.Clean(p) } diff --git a/vendor/github.com/docker/docker/volume/volume_windows.go b/vendor/github.com/docker/docker/volume/volume_windows.go index 22f6fc7a1498..d792b385f86b 100644 --- a/vendor/github.com/docker/docker/volume/volume_windows.go +++ b/vendor/github.com/docker/docker/volume/volume_windows.go @@ -6,6 +6,8 @@ import ( "path/filepath" "regexp" "strings" + + mounttypes "github.com/docker/docker/api/types/mount" ) // read-write modes @@ -18,14 +20,7 @@ var roModes = map[string]bool{ "ro": true, } -var platformRawValidationOpts = []func(*validateOpts){ - // filepath.IsAbs is weird on Windows: - // `c:` is not considered an absolute path - // `c:\` is considered an absolute path - // In any case, the regex matching below ensures absolute paths - // TODO: consider this a bug with filepath.IsAbs (?) - func(o *validateOpts) { o.skipAbsolutePathCheck = true }, -} +var platformRawValidationOpts = []func(*validateOpts){} const ( // Spec should be in the format [source:]destination[:mode] @@ -49,11 +44,13 @@ const ( RXHostDir = `[a-z]:\\(?:[^\\/:*?"<>|\r\n]+\\?)*` // RXName is the second option of a source RXName = `[^\\/:*?"<>|\r\n]+` + // RXPipe is a named path pipe (starts with `\\.\pipe\`, possibly with / instead of \) + RXPipe = `[/\\]{2}.[/\\]pipe[/\\][^:*?"<>|\r\n]+` // RXReservedNames are reserved names not possible on Windows RXReservedNames = `(con)|(prn)|(nul)|(aux)|(com[1-9])|(lpt[1-9])` // RXSource is the combined possibilities for a source - RXSource = `((?P((` + RXHostDir + `)|(` + RXName + `))):)?` + RXSource = `((?P((` + RXHostDir + `)|(` + RXName + `)|(` + RXPipe + `))):)?` // Source. Can be either a host directory, a name, or omitted: // HostDir: @@ -69,8 +66,10 @@ const ( // - And then followed by a colon which is not in the capture group // - And can be optional + // RXDestinationDir is the file path option for the mount destination + RXDestinationDir = `([a-z]):((?:\\[^\\/:*?"<>\r\n]+)*\\?)` // RXDestination is the regex expression for the mount destination - RXDestination = `(?P([a-z]):((?:\\[^\\/:*?"<>\r\n]+)*\\?))` + RXDestination = `(?P(` + RXDestinationDir + `)|(` + RXPipe + `))` // Destination (aka container path): // - Variation on hostdir but can be a drive followed by colon as well // - If a path, must be absolute. Can include spaces @@ -140,6 +139,15 @@ func splitRawSpec(raw string) ([]string, error) { return split, nil } +func detectMountType(p string) mounttypes.Type { + if strings.HasPrefix(filepath.FromSlash(p), `\\.\pipe\`) { + return mounttypes.TypeNamedPipe + } else if filepath.IsAbs(p) { + return mounttypes.TypeBind + } + return mounttypes.TypeVolume +} + // IsVolumeNameValid checks a volume name in a platform specific manner. func IsVolumeNameValid(name string) (bool, error) { nameExp := regexp.MustCompile(`^` + RXName + `$`) @@ -186,8 +194,19 @@ func convertSlash(p string) string { return filepath.FromSlash(p) } +// isAbsPath returns whether a path is absolute for the purposes of mounting into a container +// (absolute paths, drive letter paths such as X:, and paths starting with `\\.\` to support named pipes). +func isAbsPath(p string) bool { + return filepath.IsAbs(p) || + strings.HasPrefix(p, `\\.\`) || + (len(p) == 2 && p[1] == ':' && ((p[0] >= 'a' && p[0] <= 'z') || (p[0] >= 'A' && p[0] <= 'Z'))) +} + +// Do not clean plain drive letters or paths starting with `\\.\`. +var cleanRegexp = regexp.MustCompile(`^([a-z]:|[/\\]{2}\.[/\\].*)$`) + func clean(p string) string { - if match, _ := regexp.MatchString("^[a-z]:$", p); match { + if match := cleanRegexp.MatchString(p); match { return p } return filepath.Clean(p) diff --git a/vendor/github.com/docker/swarmkit/api/specs.pb.go b/vendor/github.com/docker/swarmkit/api/specs.pb.go index bb9b0db9187f..99e9d02cc646 100644 --- a/vendor/github.com/docker/swarmkit/api/specs.pb.go +++ b/vendor/github.com/docker/swarmkit/api/specs.pb.go @@ -107,7 +107,7 @@ func (x EndpointSpec_ResolutionMode) String() string { return proto.EnumName(EndpointSpec_ResolutionMode_name, int32(x)) } func (EndpointSpec_ResolutionMode) EnumDescriptor() ([]byte, []int) { - return fileDescriptorSpecs, []int{8, 0} + return fileDescriptorSpecs, []int{9, 0} } type NodeSpec struct { @@ -310,6 +310,15 @@ type TaskSpec struct { // using the same reconciliation-based mechanism that performs rolling // updates. ForceUpdate uint64 `protobuf:"varint,9,opt,name=force_update,json=forceUpdate,proto3" json:"force_update,omitempty"` + // ResourceReferences provides a generic way to specify resources that + // are used by this task, and should be sent down to agents along with + // the task. Inside the runtime field there may be more specific + // information about how to use the resource, but ResourceReferences + // establishes the relationship at the store level, and instructs the + // dispatcher to send the related objects. + // + // ResourceReferences is a list of ResourceReferences used by the task. + ResourceReferences []ResourceReference `protobuf:"bytes,11,rep,name=resource_references,json=resourceReferences" json:"resource_references"` } func (m *TaskSpec) Reset() { *m = TaskSpec{} } @@ -457,6 +466,15 @@ func _TaskSpec_OneofSizer(msg proto.Message) (n int) { return n } +type ResourceReference struct { + ResourceID string `protobuf:"bytes,1,opt,name=resource_id,json=resourceId,proto3" json:"resource_id,omitempty"` + ResourceType ResourceType `protobuf:"varint,2,opt,name=resource_type,json=resourceType,proto3,enum=docker.swarmkit.v1.ResourceType" json:"resource_type,omitempty"` +} + +func (m *ResourceReference) Reset() { *m = ResourceReference{} } +func (*ResourceReference) ProtoMessage() {} +func (*ResourceReference) Descriptor() ([]byte, []int) { return fileDescriptorSpecs, []int{5} } + type GenericRuntimeSpec struct { Kind string `protobuf:"bytes,1,opt,name=kind,proto3" json:"kind,omitempty"` Payload *google_protobuf3.Any `protobuf:"bytes,2,opt,name=payload" json:"payload,omitempty"` @@ -464,7 +482,7 @@ type GenericRuntimeSpec struct { func (m *GenericRuntimeSpec) Reset() { *m = GenericRuntimeSpec{} } func (*GenericRuntimeSpec) ProtoMessage() {} -func (*GenericRuntimeSpec) Descriptor() ([]byte, []int) { return fileDescriptorSpecs, []int{5} } +func (*GenericRuntimeSpec) Descriptor() ([]byte, []int) { return fileDescriptorSpecs, []int{6} } // NetworkAttachmentSpec specifies runtime parameters required to attach // a container to a network. @@ -476,7 +494,7 @@ type NetworkAttachmentSpec struct { func (m *NetworkAttachmentSpec) Reset() { *m = NetworkAttachmentSpec{} } func (*NetworkAttachmentSpec) ProtoMessage() {} -func (*NetworkAttachmentSpec) Descriptor() ([]byte, []int) { return fileDescriptorSpecs, []int{6} } +func (*NetworkAttachmentSpec) Descriptor() ([]byte, []int) { return fileDescriptorSpecs, []int{7} } // Container specifies runtime parameters for a container. type ContainerSpec struct { @@ -567,11 +585,15 @@ type ContainerSpec struct { // task will exit and a new task will be rescheduled elsewhere. A container // is considered unhealthy after `Retries` number of consecutive failures. Healthcheck *HealthConfig `protobuf:"bytes,16,opt,name=healthcheck" json:"healthcheck,omitempty"` + // Isolation defines the isolation level for engines supporting multiple isolation modes + // ie: docker on windows server supports "process" or "hyperv" + // on engines that does not support it, value should be either "" or "default" + Isolation string `protobuf:"bytes,23,opt,name=isolation,proto3" json:"isolation,omitempty"` } func (m *ContainerSpec) Reset() { *m = ContainerSpec{} } func (*ContainerSpec) ProtoMessage() {} -func (*ContainerSpec) Descriptor() ([]byte, []int) { return fileDescriptorSpecs, []int{7} } +func (*ContainerSpec) Descriptor() ([]byte, []int) { return fileDescriptorSpecs, []int{8} } // PullOptions allows one to parameterize an image pull. type ContainerSpec_PullOptions struct { @@ -585,7 +607,7 @@ type ContainerSpec_PullOptions struct { func (m *ContainerSpec_PullOptions) Reset() { *m = ContainerSpec_PullOptions{} } func (*ContainerSpec_PullOptions) ProtoMessage() {} func (*ContainerSpec_PullOptions) Descriptor() ([]byte, []int) { - return fileDescriptorSpecs, []int{7, 1} + return fileDescriptorSpecs, []int{8, 1} } // DNSConfig specifies DNS related configurations in resolver configuration file (resolv.conf) @@ -603,7 +625,7 @@ type ContainerSpec_DNSConfig struct { func (m *ContainerSpec_DNSConfig) Reset() { *m = ContainerSpec_DNSConfig{} } func (*ContainerSpec_DNSConfig) ProtoMessage() {} -func (*ContainerSpec_DNSConfig) Descriptor() ([]byte, []int) { return fileDescriptorSpecs, []int{7, 2} } +func (*ContainerSpec_DNSConfig) Descriptor() ([]byte, []int) { return fileDescriptorSpecs, []int{8, 2} } // EndpointSpec defines the properties that can be configured to // access and loadbalance the service. @@ -616,7 +638,7 @@ type EndpointSpec struct { func (m *EndpointSpec) Reset() { *m = EndpointSpec{} } func (*EndpointSpec) ProtoMessage() {} -func (*EndpointSpec) Descriptor() ([]byte, []int) { return fileDescriptorSpecs, []int{8} } +func (*EndpointSpec) Descriptor() ([]byte, []int) { return fileDescriptorSpecs, []int{9} } // NetworkSpec specifies user defined network parameters. type NetworkSpec struct { @@ -651,7 +673,7 @@ type NetworkSpec struct { func (m *NetworkSpec) Reset() { *m = NetworkSpec{} } func (*NetworkSpec) ProtoMessage() {} -func (*NetworkSpec) Descriptor() ([]byte, []int) { return fileDescriptorSpecs, []int{9} } +func (*NetworkSpec) Descriptor() ([]byte, []int) { return fileDescriptorSpecs, []int{10} } type isNetworkSpec_ConfigFrom interface { isNetworkSpec_ConfigFrom() @@ -753,7 +775,7 @@ type ClusterSpec struct { func (m *ClusterSpec) Reset() { *m = ClusterSpec{} } func (*ClusterSpec) ProtoMessage() {} -func (*ClusterSpec) Descriptor() ([]byte, []int) { return fileDescriptorSpecs, []int{10} } +func (*ClusterSpec) Descriptor() ([]byte, []int) { return fileDescriptorSpecs, []int{11} } // SecretSpec specifies a user-provided secret. type SecretSpec struct { @@ -772,7 +794,7 @@ type SecretSpec struct { func (m *SecretSpec) Reset() { *m = SecretSpec{} } func (*SecretSpec) ProtoMessage() {} -func (*SecretSpec) Descriptor() ([]byte, []int) { return fileDescriptorSpecs, []int{11} } +func (*SecretSpec) Descriptor() ([]byte, []int) { return fileDescriptorSpecs, []int{12} } // ConfigSpec specifies user-provided configuration files. type ConfigSpec struct { @@ -791,7 +813,7 @@ type ConfigSpec struct { func (m *ConfigSpec) Reset() { *m = ConfigSpec{} } func (*ConfigSpec) ProtoMessage() {} -func (*ConfigSpec) Descriptor() ([]byte, []int) { return fileDescriptorSpecs, []int{12} } +func (*ConfigSpec) Descriptor() ([]byte, []int) { return fileDescriptorSpecs, []int{13} } func init() { proto.RegisterType((*NodeSpec)(nil), "docker.swarmkit.v1.NodeSpec") @@ -799,6 +821,7 @@ func init() { proto.RegisterType((*ReplicatedService)(nil), "docker.swarmkit.v1.ReplicatedService") proto.RegisterType((*GlobalService)(nil), "docker.swarmkit.v1.GlobalService") proto.RegisterType((*TaskSpec)(nil), "docker.swarmkit.v1.TaskSpec") + proto.RegisterType((*ResourceReference)(nil), "docker.swarmkit.v1.ResourceReference") proto.RegisterType((*GenericRuntimeSpec)(nil), "docker.swarmkit.v1.GenericRuntimeSpec") proto.RegisterType((*NetworkAttachmentSpec)(nil), "docker.swarmkit.v1.NetworkAttachmentSpec") proto.RegisterType((*ContainerSpec)(nil), "docker.swarmkit.v1.ContainerSpec") @@ -946,6 +969,13 @@ func (m *TaskSpec) CopyFrom(src interface{}) { } } + if o.ResourceReferences != nil { + m.ResourceReferences = make([]ResourceReference, len(o.ResourceReferences)) + for i := range m.ResourceReferences { + github_com_docker_swarmkit_api_deepcopy.Copy(&m.ResourceReferences[i], &o.ResourceReferences[i]) + } + } + if o.Runtime != nil { switch o.Runtime.(type) { case *TaskSpec_Attachment: @@ -971,6 +1001,21 @@ func (m *TaskSpec) CopyFrom(src interface{}) { } +func (m *ResourceReference) Copy() *ResourceReference { + if m == nil { + return nil + } + o := &ResourceReference{} + o.CopyFrom(m) + return o +} + +func (m *ResourceReference) CopyFrom(src interface{}) { + + o := src.(*ResourceReference) + *m = *o +} + func (m *GenericRuntimeSpec) Copy() *GenericRuntimeSpec { if m == nil { return nil @@ -1544,6 +1589,18 @@ func (m *TaskSpec) MarshalTo(dAtA []byte) (int, error) { i++ i = encodeVarintSpecs(dAtA, i, uint64(m.ForceUpdate)) } + if len(m.ResourceReferences) > 0 { + for _, msg := range m.ResourceReferences { + dAtA[i] = 0x5a + i++ + i = encodeVarintSpecs(dAtA, i, uint64(msg.Size())) + n, err := msg.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n + } + } return i, nil } @@ -1589,6 +1646,35 @@ func (m *TaskSpec_Generic) MarshalTo(dAtA []byte) (int, error) { } return i, nil } +func (m *ResourceReference) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalTo(dAtA) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *ResourceReference) MarshalTo(dAtA []byte) (int, error) { + var i int + _ = i + var l int + _ = l + if len(m.ResourceID) > 0 { + dAtA[i] = 0xa + i++ + i = encodeVarintSpecs(dAtA, i, uint64(len(m.ResourceID))) + i += copy(dAtA[i:], m.ResourceID) + } + if m.ResourceType != 0 { + dAtA[i] = 0x10 + i++ + i = encodeVarintSpecs(dAtA, i, uint64(m.ResourceType)) + } + return i, nil +} + func (m *GenericRuntimeSpec) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) @@ -1914,6 +2000,14 @@ func (m *ContainerSpec) MarshalTo(dAtA []byte) (int, error) { } i += n23 } + if len(m.Isolation) > 0 { + dAtA[i] = 0xba + i++ + dAtA[i] = 0x1 + i++ + i = encodeVarintSpecs(dAtA, i, uint64(len(m.Isolation))) + i += copy(dAtA[i:], m.Isolation) + } return i, nil } @@ -2458,6 +2552,12 @@ func (m *TaskSpec) Size() (n int) { if m.ForceUpdate != 0 { n += 1 + sovSpecs(uint64(m.ForceUpdate)) } + if len(m.ResourceReferences) > 0 { + for _, e := range m.ResourceReferences { + l = e.Size() + n += 1 + l + sovSpecs(uint64(l)) + } + } return n } @@ -2488,6 +2588,19 @@ func (m *TaskSpec_Generic) Size() (n int) { } return n } +func (m *ResourceReference) Size() (n int) { + var l int + _ = l + l = len(m.ResourceID) + if l > 0 { + n += 1 + l + sovSpecs(uint64(l)) + } + if m.ResourceType != 0 { + n += 1 + sovSpecs(uint64(m.ResourceType)) + } + return n +} + func (m *GenericRuntimeSpec) Size() (n int) { var l int _ = l @@ -2620,6 +2733,10 @@ func (m *ContainerSpec) Size() (n int) { l = m.Privileges.Size() n += 2 + l + sovSpecs(uint64(l)) } + l = len(m.Isolation) + if l > 0 { + n += 2 + l + sovSpecs(uint64(l)) + } return n } @@ -2861,6 +2978,7 @@ func (this *TaskSpec) String() string { `LogDriver:` + strings.Replace(fmt.Sprintf("%v", this.LogDriver), "Driver", "Driver", 1) + `,`, `Networks:` + strings.Replace(fmt.Sprintf("%v", this.Networks), "NetworkAttachmentConfig", "NetworkAttachmentConfig", 1) + `,`, `ForceUpdate:` + fmt.Sprintf("%v", this.ForceUpdate) + `,`, + `ResourceReferences:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.ResourceReferences), "ResourceReference", "ResourceReference", 1), `&`, ``, 1) + `,`, `}`, }, "") return s @@ -2895,6 +3013,17 @@ func (this *TaskSpec_Generic) String() string { }, "") return s } +func (this *ResourceReference) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&ResourceReference{`, + `ResourceID:` + fmt.Sprintf("%v", this.ResourceID) + `,`, + `ResourceType:` + fmt.Sprintf("%v", this.ResourceType) + `,`, + `}`, + }, "") + return s +} func (this *GenericRuntimeSpec) String() string { if this == nil { return "nil" @@ -2953,6 +3082,7 @@ func (this *ContainerSpec) String() string { `StopSignal:` + fmt.Sprintf("%v", this.StopSignal) + `,`, `Configs:` + strings.Replace(fmt.Sprintf("%v", this.Configs), "ConfigReference", "ConfigReference", 1) + `,`, `Privileges:` + strings.Replace(fmt.Sprintf("%v", this.Privileges), "Privileges", "Privileges", 1) + `,`, + `Isolation:` + fmt.Sprintf("%v", this.Isolation) + `,`, `}`, }, "") return s @@ -3934,6 +4064,135 @@ func (m *TaskSpec) Unmarshal(dAtA []byte) error { } m.Runtime = &TaskSpec_Generic{v} iNdEx = postIndex + case 11: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ResourceReferences", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowSpecs + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthSpecs + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.ResourceReferences = append(m.ResourceReferences, ResourceReference{}) + if err := m.ResourceReferences[len(m.ResourceReferences)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipSpecs(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthSpecs + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *ResourceReference) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowSpecs + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: ResourceReference: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: ResourceReference: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ResourceID", 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.ResourceID = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field ResourceType", wireType) + } + m.ResourceType = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowSpecs + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.ResourceType |= (ResourceType(b) & 0x7F) << shift + if b < 0x80 { + break + } + } default: iNdEx = preIndex skippy, err := skipSpecs(dAtA[iNdEx:]) @@ -4899,6 +5158,35 @@ func (m *ContainerSpec) Unmarshal(dAtA []byte) error { return err } iNdEx = postIndex + case 23: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Isolation", 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.Isolation = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipSpecs(dAtA[iNdEx:]) @@ -6210,123 +6498,129 @@ var ( func init() { proto.RegisterFile("specs.proto", fileDescriptorSpecs) } var fileDescriptorSpecs = []byte{ - // 1880 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xcc, 0x57, 0xcf, 0x73, 0x1b, 0x49, - 0x15, 0xb6, 0x6c, 0x59, 0x3f, 0xde, 0xc8, 0x89, 0xdc, 0x24, 0x61, 0xac, 0xb0, 0xb2, 0xa2, 0x0d, - 0xc1, 0xcb, 0x16, 0x72, 0x61, 0xa8, 0x25, 0xbb, 0x61, 0x01, 0xc9, 0x12, 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, 0xa0, 0xf8, 0x5f, 0x72, 0xa4, 0x38, 0xc1, 0xc5, 0x45, - 0xfc, 0x2f, 0x70, 0xe3, 0x02, 0xd5, 0x3d, 0x3d, 0xd2, 0x28, 0x19, 0xc7, 0xa9, 0x22, 0x87, 0xbd, - 0x75, 0xbf, 0xfe, 0xbe, 0xd7, 0xdd, 0xaf, 0xbf, 0xee, 0xf7, 0x1a, 0xac, 0x30, 0xa0, 0x4e, 0xd8, - 0x0a, 0x04, 0x97, 0x1c, 0x21, 0x97, 0x3b, 0xe7, 0x54, 0xb4, 0xc2, 0xaf, 0x89, 0x18, 0x9f, 0x7b, - 0xb2, 0x35, 0xf9, 0x71, 0xcd, 0x92, 0xd3, 0x80, 0x1a, 0x40, 0xed, 0xce, 0x90, 0x0f, 0xb9, 0x6e, - 0x6e, 0xab, 0x96, 0xb1, 0xd6, 0x87, 0x9c, 0x0f, 0x7d, 0xba, 0xad, 0x7b, 0xa7, 0xd1, 0xd9, 0xb6, - 0x1b, 0x09, 0x22, 0x3d, 0xce, 0xcc, 0xf8, 0xc6, 0x9b, 0xe3, 0x84, 0x4d, 0xe3, 0xa1, 0xe6, 0x45, - 0x1e, 0x4a, 0x47, 0xdc, 0xa5, 0xc7, 0x01, 0x75, 0xd0, 0x1e, 0x58, 0x84, 0x31, 0x2e, 0x35, 0x37, - 0xb4, 0x73, 0x8d, 0xdc, 0x96, 0xb5, 0xb3, 0xd9, 0x7a, 0x7b, 0x51, 0xad, 0xf6, 0x1c, 0xd6, 0xc9, - 0xbf, 0xba, 0xdc, 0x5c, 0xc2, 0x69, 0x26, 0xfa, 0x25, 0x54, 0x5c, 0x1a, 0x7a, 0x82, 0xba, 0x03, - 0xc1, 0x7d, 0x6a, 0x2f, 0x37, 0x72, 0x5b, 0xb7, 0x76, 0xbe, 0x97, 0xe5, 0x49, 0x4d, 0x8e, 0xb9, - 0x4f, 0xb1, 0x65, 0x18, 0xaa, 0x83, 0xf6, 0x00, 0xc6, 0x74, 0x7c, 0x4a, 0x45, 0x38, 0xf2, 0x02, - 0x7b, 0x45, 0xd3, 0x7f, 0x70, 0x1d, 0x5d, 0xad, 0xbd, 0x75, 0x38, 0x83, 0xe3, 0x14, 0x15, 0x1d, - 0x42, 0x85, 0x4c, 0x88, 0xe7, 0x93, 0x53, 0xcf, 0xf7, 0xe4, 0xd4, 0xce, 0x6b, 0x57, 0x9f, 0xbc, - 0xd3, 0x55, 0x3b, 0x45, 0xc0, 0x0b, 0xf4, 0xa6, 0x0b, 0x30, 0x9f, 0x08, 0x3d, 0x82, 0x62, 0xbf, - 0x77, 0xd4, 0xdd, 0x3f, 0xda, 0xab, 0x2e, 0xd5, 0x36, 0x5e, 0x5e, 0x34, 0xee, 0x2a, 0x1f, 0x73, - 0x40, 0x9f, 0x32, 0xd7, 0x63, 0x43, 0xb4, 0x05, 0xa5, 0xf6, 0xee, 0x6e, 0xaf, 0x7f, 0xd2, 0xeb, - 0x56, 0x73, 0xb5, 0xda, 0xcb, 0x8b, 0xc6, 0xbd, 0x45, 0x60, 0xdb, 0x71, 0x68, 0x20, 0xa9, 0x5b, - 0xcb, 0x7f, 0xf3, 0x97, 0xfa, 0x52, 0xf3, 0x9b, 0x1c, 0x54, 0xd2, 0x8b, 0x40, 0x8f, 0xa0, 0xd0, - 0xde, 0x3d, 0xd9, 0x7f, 0xde, 0xab, 0x2e, 0xcd, 0xe9, 0x69, 0x44, 0xdb, 0x91, 0xde, 0x84, 0xa2, - 0x87, 0xb0, 0xda, 0x6f, 0x7f, 0x75, 0xdc, 0xab, 0xe6, 0xe6, 0xcb, 0x49, 0xc3, 0xfa, 0x24, 0x0a, - 0x35, 0xaa, 0x8b, 0xdb, 0xfb, 0x47, 0xd5, 0xe5, 0x6c, 0x54, 0x57, 0x10, 0x8f, 0x99, 0xa5, 0xfc, - 0x39, 0x0f, 0xd6, 0x31, 0x15, 0x13, 0xcf, 0xf9, 0xc0, 0x12, 0xf9, 0x0c, 0xf2, 0x92, 0x84, 0xe7, - 0x5a, 0x1a, 0x56, 0xb6, 0x34, 0x4e, 0x48, 0x78, 0xae, 0x26, 0x35, 0x74, 0x8d, 0x57, 0xca, 0x10, - 0x34, 0xf0, 0x3d, 0x87, 0x48, 0xea, 0x6a, 0x65, 0x58, 0x3b, 0xdf, 0xcf, 0x62, 0xe3, 0x19, 0xca, - 0xac, 0xff, 0xe9, 0x12, 0x4e, 0x51, 0xd1, 0x13, 0x28, 0x0c, 0x7d, 0x7e, 0x4a, 0x7c, 0xad, 0x09, - 0x6b, 0xe7, 0x41, 0x96, 0x93, 0x3d, 0x8d, 0x98, 0x3b, 0x30, 0x14, 0xf4, 0x18, 0x0a, 0x51, 0xe0, - 0x12, 0x49, 0xed, 0x82, 0x26, 0x37, 0xb2, 0xc8, 0x5f, 0x69, 0xc4, 0x2e, 0x67, 0x67, 0xde, 0x10, - 0x1b, 0x3c, 0x3a, 0x80, 0x12, 0xa3, 0xf2, 0x6b, 0x2e, 0xce, 0x43, 0xbb, 0xd8, 0x58, 0xd9, 0xb2, - 0x76, 0x3e, 0xcd, 0x14, 0x63, 0x8c, 0x69, 0x4b, 0x49, 0x9c, 0xd1, 0x98, 0x32, 0x19, 0xbb, 0xe9, - 0x2c, 0xdb, 0x39, 0x3c, 0x73, 0x80, 0x7e, 0x0e, 0x25, 0xca, 0xdc, 0x80, 0x7b, 0x4c, 0xda, 0xa5, - 0xeb, 0x17, 0xd2, 0x33, 0x18, 0x15, 0x4c, 0x3c, 0x63, 0x28, 0xb6, 0xe0, 0xbe, 0x7f, 0x4a, 0x9c, - 0x73, 0xbb, 0xfc, 0x9e, 0xdb, 0x98, 0x31, 0x3a, 0x05, 0xc8, 0x8f, 0xb9, 0x4b, 0x9b, 0xdb, 0xb0, - 0xfe, 0x56, 0xa8, 0x51, 0x0d, 0x4a, 0x26, 0xd4, 0xb1, 0x46, 0xf2, 0x78, 0xd6, 0x6f, 0xde, 0x86, - 0xb5, 0x85, 0xb0, 0x36, 0xff, 0x9e, 0x87, 0x52, 0x72, 0xd6, 0xa8, 0x0d, 0x65, 0x87, 0x33, 0x49, - 0x3c, 0x46, 0x85, 0x91, 0x57, 0xe6, 0xc9, 0xec, 0x26, 0x20, 0xc5, 0x7a, 0xba, 0x84, 0xe7, 0x2c, - 0xf4, 0x6b, 0x28, 0x0b, 0x1a, 0xf2, 0x48, 0x38, 0x34, 0x34, 0xfa, 0xda, 0xca, 0x56, 0x48, 0x0c, - 0xc2, 0xf4, 0x0f, 0x91, 0x27, 0xa8, 0x8a, 0x72, 0x88, 0xe7, 0x54, 0xf4, 0x04, 0x8a, 0x82, 0x86, - 0x92, 0x08, 0xf9, 0x2e, 0x89, 0xe0, 0x18, 0xd2, 0xe7, 0xbe, 0xe7, 0x4c, 0x71, 0xc2, 0x40, 0x4f, - 0xa0, 0x1c, 0xf8, 0xc4, 0xd1, 0x5e, 0xed, 0x55, 0x4d, 0xff, 0x28, 0x8b, 0xde, 0x4f, 0x40, 0x78, - 0x8e, 0x47, 0x9f, 0x03, 0xf8, 0x7c, 0x38, 0x70, 0x85, 0x37, 0xa1, 0xc2, 0x48, 0xac, 0x96, 0xc5, - 0xee, 0x6a, 0x04, 0x2e, 0xfb, 0x7c, 0x18, 0x37, 0xd1, 0xde, 0xff, 0xa5, 0xaf, 0x94, 0xb6, 0x0e, - 0x00, 0xc8, 0x6c, 0xd4, 0xa8, 0xeb, 0x93, 0xf7, 0x72, 0x65, 0x4e, 0x24, 0x45, 0x47, 0x0f, 0xa0, - 0x72, 0xc6, 0x85, 0x43, 0x07, 0xe6, 0xd6, 0x94, 0xb5, 0x26, 0x2c, 0x6d, 0x8b, 0xf5, 0x85, 0x3a, - 0x50, 0x1c, 0x52, 0x46, 0x85, 0xe7, 0xd8, 0xa0, 0x27, 0x7b, 0x94, 0x79, 0x21, 0x63, 0x08, 0x8e, - 0x98, 0xf4, 0xc6, 0xd4, 0xcc, 0x94, 0x10, 0x3b, 0x65, 0x28, 0x8a, 0x78, 0xa4, 0xf9, 0x7b, 0x40, - 0x6f, 0x63, 0x11, 0x82, 0xfc, 0xb9, 0xc7, 0x5c, 0x2d, 0xac, 0x32, 0xd6, 0x6d, 0xd4, 0x82, 0x62, - 0x40, 0xa6, 0x3e, 0x27, 0xae, 0x11, 0xcb, 0x9d, 0x56, 0x9c, 0x2f, 0x5b, 0x49, 0xbe, 0x6c, 0xb5, - 0xd9, 0x14, 0x27, 0xa0, 0xe6, 0x01, 0xdc, 0xcd, 0xdc, 0x32, 0xda, 0x81, 0xca, 0x4c, 0x84, 0x03, - 0xcf, 0x4c, 0xd2, 0xb9, 0x7d, 0x75, 0xb9, 0x69, 0xcd, 0xd4, 0xba, 0xdf, 0xc5, 0xd6, 0x0c, 0xb4, - 0xef, 0x36, 0xff, 0x54, 0x86, 0xb5, 0x05, 0x29, 0xa3, 0x3b, 0xb0, 0xea, 0x8d, 0xc9, 0x90, 0x9a, - 0x35, 0xc6, 0x1d, 0xd4, 0x83, 0x82, 0x4f, 0x4e, 0xa9, 0xaf, 0x04, 0xad, 0x0e, 0xf5, 0x47, 0x37, - 0xde, 0x89, 0xd6, 0x6f, 0x35, 0xbe, 0xc7, 0xa4, 0x98, 0x62, 0x43, 0x46, 0x36, 0x14, 0x1d, 0x3e, - 0x1e, 0x13, 0xa6, 0x9e, 0xce, 0x95, 0xad, 0x32, 0x4e, 0xba, 0x2a, 0x32, 0x44, 0x0c, 0x43, 0x3b, - 0xaf, 0xcd, 0xba, 0x8d, 0xaa, 0xb0, 0x42, 0xd9, 0xc4, 0x5e, 0xd5, 0x26, 0xd5, 0x54, 0x16, 0xd7, - 0x8b, 0x15, 0x59, 0xc6, 0xaa, 0xa9, 0x78, 0x51, 0x48, 0x85, 0x5d, 0x8c, 0x23, 0xaa, 0xda, 0xe8, - 0x67, 0x50, 0x18, 0xf3, 0x88, 0xc9, 0xd0, 0x2e, 0xe9, 0xc5, 0x6e, 0x64, 0x2d, 0xf6, 0x50, 0x21, - 0xcc, 0xd3, 0x6e, 0xe0, 0xa8, 0x07, 0xeb, 0xa1, 0xe4, 0xc1, 0x60, 0x28, 0x88, 0x43, 0x07, 0x01, - 0x15, 0x1e, 0x77, 0xcd, 0xd3, 0xb4, 0xf1, 0xd6, 0xa1, 0x74, 0x4d, 0x91, 0x83, 0x6f, 0x2b, 0xce, - 0x9e, 0xa2, 0xf4, 0x35, 0x03, 0xf5, 0xa1, 0x12, 0x44, 0xbe, 0x3f, 0xe0, 0x41, 0x9c, 0xa5, 0x62, - 0x3d, 0xbd, 0x47, 0xc8, 0xfa, 0x91, 0xef, 0x3f, 0x8b, 0x49, 0xd8, 0x0a, 0xe6, 0x1d, 0x74, 0x0f, - 0x0a, 0x43, 0xc1, 0xa3, 0x20, 0xb4, 0x2d, 0x1d, 0x0c, 0xd3, 0x43, 0x5f, 0x42, 0x31, 0xa4, 0x8e, - 0xa0, 0x32, 0xb4, 0x2b, 0x7a, 0xab, 0x1f, 0x67, 0x4d, 0x72, 0xac, 0x21, 0x98, 0x9e, 0x51, 0x41, - 0x99, 0x43, 0x71, 0xc2, 0x41, 0x1b, 0xb0, 0x22, 0xe5, 0xd4, 0x5e, 0x6b, 0xe4, 0xb6, 0x4a, 0x9d, - 0xe2, 0xd5, 0xe5, 0xe6, 0xca, 0xc9, 0xc9, 0x0b, 0xac, 0x6c, 0xea, 0x05, 0x1d, 0xf1, 0x50, 0x32, - 0x32, 0xa6, 0xf6, 0x2d, 0x1d, 0xdb, 0x59, 0x1f, 0xbd, 0x00, 0x70, 0x59, 0x38, 0x70, 0xf4, 0x95, - 0xb5, 0x6f, 0xeb, 0xdd, 0x7d, 0x7a, 0xf3, 0xee, 0xba, 0x47, 0xc7, 0x26, 0x8b, 0xac, 0x5d, 0x5d, - 0x6e, 0x96, 0x67, 0x5d, 0x5c, 0x76, 0x59, 0x18, 0x37, 0x51, 0x07, 0xac, 0x11, 0x25, 0xbe, 0x1c, - 0x39, 0x23, 0xea, 0x9c, 0xdb, 0xd5, 0xeb, 0xd3, 0xc2, 0x53, 0x0d, 0x33, 0x1e, 0xd2, 0x24, 0xa5, - 0x60, 0xb5, 0xd4, 0xd0, 0x5e, 0xd7, 0xb1, 0x8a, 0x3b, 0xe8, 0x23, 0x00, 0x1e, 0x50, 0x36, 0x08, - 0xa5, 0xeb, 0x31, 0x1b, 0xa9, 0x2d, 0xe3, 0xb2, 0xb2, 0x1c, 0x2b, 0x03, 0xba, 0xaf, 0x1e, 0x6d, - 0xe2, 0x0e, 0x38, 0xf3, 0xa7, 0xf6, 0x77, 0xf4, 0x68, 0x49, 0x19, 0x9e, 0x31, 0x7f, 0x8a, 0x36, - 0xc1, 0xd2, 0xba, 0x08, 0xbd, 0x21, 0x23, 0xbe, 0x7d, 0x47, 0xc7, 0x03, 0x94, 0xe9, 0x58, 0x5b, - 0xd4, 0x39, 0xc4, 0xd1, 0x08, 0xed, 0xbb, 0xd7, 0x9f, 0x83, 0x59, 0xec, 0xfc, 0x1c, 0x0c, 0x07, - 0xfd, 0x02, 0x20, 0x10, 0xde, 0xc4, 0xf3, 0xe9, 0x90, 0x86, 0xf6, 0x3d, 0xbd, 0xe9, 0x7a, 0xe6, - 0x6b, 0x3d, 0x43, 0xe1, 0x14, 0xa3, 0xf6, 0x39, 0x58, 0xa9, 0xdb, 0xa6, 0x6e, 0xc9, 0x39, 0x9d, - 0x9a, 0x0b, 0xac, 0x9a, 0x2a, 0x24, 0x13, 0xe2, 0x47, 0x71, 0x25, 0x5c, 0xc6, 0x71, 0xe7, 0x8b, - 0xe5, 0xc7, 0xb9, 0xda, 0x0e, 0x58, 0x29, 0xd5, 0xa1, 0x8f, 0x61, 0x4d, 0xd0, 0xa1, 0x17, 0x4a, - 0x31, 0x1d, 0x90, 0x48, 0x8e, 0xec, 0x5f, 0x69, 0x42, 0x25, 0x31, 0xb6, 0x23, 0x39, 0xaa, 0x0d, - 0x60, 0x7e, 0x78, 0xa8, 0x01, 0x96, 0x12, 0x45, 0x48, 0xc5, 0x84, 0x0a, 0x95, 0x6d, 0x55, 0xcc, - 0xd3, 0x26, 0x25, 0xde, 0x90, 0x12, 0xe1, 0x8c, 0xf4, 0xdb, 0x51, 0xc6, 0xa6, 0xa7, 0x1e, 0x83, - 0xe4, 0x86, 0x98, 0xc7, 0xc0, 0x74, 0x9b, 0xff, 0xce, 0x41, 0x25, 0x5d, 0x34, 0xa0, 0xdd, 0x38, - 0xd9, 0xeb, 0x2d, 0xdd, 0xda, 0xd9, 0xbe, 0xa9, 0xc8, 0xd0, 0xa9, 0xd5, 0x8f, 0x94, 0xb3, 0x43, - 0x55, 0xdf, 0x6b, 0x32, 0xfa, 0x29, 0xac, 0x06, 0x5c, 0xc8, 0xe4, 0x09, 0xcb, 0x0e, 0x30, 0x17, - 0x49, 0x2a, 0x8a, 0xc1, 0xcd, 0x11, 0xdc, 0x5a, 0xf4, 0x86, 0x1e, 0xc2, 0xca, 0xf3, 0xfd, 0x7e, - 0x75, 0xa9, 0x76, 0xff, 0xe5, 0x45, 0xe3, 0xbb, 0x8b, 0x83, 0xcf, 0x3d, 0x21, 0x23, 0xe2, 0xef, - 0xf7, 0xd1, 0x0f, 0x61, 0xb5, 0x7b, 0x74, 0x8c, 0x71, 0x35, 0x57, 0xdb, 0x7c, 0x79, 0xd1, 0xb8, - 0xbf, 0x88, 0x53, 0x43, 0x3c, 0x62, 0x2e, 0xe6, 0xa7, 0xb3, 0x5a, 0xf7, 0x3f, 0xcb, 0x60, 0x99, - 0x97, 0xfd, 0x43, 0x7f, 0x87, 0xd6, 0xe2, 0x54, 0x9e, 0x5c, 0xd9, 0xe5, 0x1b, 0x33, 0x7a, 0x25, - 0x26, 0x98, 0x33, 0x7e, 0x00, 0x15, 0x2f, 0x98, 0x7c, 0x36, 0xa0, 0x8c, 0x9c, 0xfa, 0xa6, 0xec, - 0x2d, 0x61, 0x4b, 0xd9, 0x7a, 0xb1, 0x49, 0xbd, 0x17, 0x1e, 0x93, 0x54, 0x30, 0x53, 0xd0, 0x96, - 0xf0, 0xac, 0x8f, 0xbe, 0x84, 0xbc, 0x17, 0x90, 0xb1, 0x29, 0x43, 0x32, 0x77, 0xb0, 0xdf, 0x6f, - 0x1f, 0x1a, 0x0d, 0x76, 0x4a, 0x57, 0x97, 0x9b, 0x79, 0x65, 0xc0, 0x9a, 0x86, 0xea, 0x49, 0x25, - 0xa0, 0x66, 0xd2, 0x6f, 0x7f, 0x09, 0xa7, 0x2c, 0x4a, 0x47, 0x1e, 0x1b, 0x0a, 0x1a, 0x86, 0x3a, - 0x0b, 0x94, 0x70, 0xd2, 0x45, 0x35, 0x28, 0x9a, 0x7a, 0x42, 0x17, 0x10, 0x65, 0x95, 0xab, 0x8d, - 0xa1, 0xb3, 0x06, 0x56, 0x1c, 0x8d, 0xc1, 0x99, 0xe0, 0xe3, 0xe6, 0x7f, 0xf3, 0x60, 0xed, 0xfa, - 0x51, 0x28, 0x4d, 0x1a, 0xfc, 0x60, 0xc1, 0x7f, 0x01, 0xeb, 0x44, 0x7f, 0xaf, 0x08, 0x53, 0x39, - 0x45, 0x97, 0x69, 0xe6, 0x00, 0x1e, 0x66, 0xba, 0x9b, 0x81, 0xe3, 0x92, 0xae, 0x53, 0x50, 0x3e, - 0xed, 0x1c, 0xae, 0x92, 0x37, 0x46, 0xd0, 0x31, 0xac, 0x71, 0xe1, 0x8c, 0x68, 0x28, 0xe3, 0x4c, - 0x64, 0xbe, 0x23, 0x99, 0x1f, 0xd5, 0x67, 0x69, 0xa0, 0x79, 0x86, 0xe3, 0xd5, 0x2e, 0xfa, 0x40, - 0x8f, 0x21, 0x2f, 0xc8, 0x59, 0x52, 0x72, 0x66, 0x5e, 0x12, 0x4c, 0xce, 0xe4, 0x82, 0x0b, 0xcd, - 0x40, 0xbf, 0x01, 0x70, 0xbd, 0x30, 0x20, 0xd2, 0x19, 0x51, 0x61, 0x0e, 0x3b, 0x73, 0x8b, 0xdd, - 0x19, 0x6a, 0xc1, 0x4b, 0x8a, 0x8d, 0x0e, 0xa0, 0xec, 0x90, 0x44, 0xae, 0x85, 0xeb, 0xff, 0x68, - 0xbb, 0x6d, 0xe3, 0xa2, 0xaa, 0x5c, 0x5c, 0x5d, 0x6e, 0x96, 0x12, 0x0b, 0x2e, 0x39, 0xc4, 0xc8, - 0xf7, 0x00, 0xd6, 0xd4, 0xdf, 0x6d, 0xe0, 0xd2, 0x33, 0x12, 0xf9, 0x32, 0x96, 0xc9, 0x35, 0x69, - 0x45, 0x7d, 0x04, 0xba, 0x06, 0x67, 0xd6, 0x55, 0x91, 0x29, 0x1b, 0xfa, 0x1d, 0xac, 0x53, 0xe6, - 0x88, 0xa9, 0x16, 0x6b, 0xb2, 0xc2, 0xd2, 0xf5, 0x9b, 0xed, 0xcd, 0xc0, 0x0b, 0x9b, 0xad, 0xd2, - 0x37, 0xec, 0xcd, 0x7f, 0xe6, 0x00, 0xe2, 0x4c, 0xfd, 0x61, 0x05, 0x88, 0x20, 0xef, 0x12, 0x49, - 0xb4, 0xe6, 0x2a, 0x58, 0xb7, 0xd1, 0x17, 0x00, 0x92, 0x8e, 0x03, 0x9f, 0x48, 0x8f, 0x0d, 0x8d, - 0x6c, 0xde, 0xf5, 0x1c, 0xa4, 0xd0, 0x68, 0x07, 0x0a, 0xe6, 0x63, 0x90, 0xbf, 0x91, 0x67, 0x90, - 0xcd, 0xbf, 0xe6, 0x00, 0xe2, 0x6d, 0x7e, 0xab, 0xf7, 0xd6, 0xb1, 0x5f, 0xbd, 0xae, 0x2f, 0xfd, - 0xe3, 0x75, 0x7d, 0xe9, 0x8f, 0x57, 0xf5, 0xdc, 0xab, 0xab, 0x7a, 0xee, 0x6f, 0x57, 0xf5, 0xdc, - 0xbf, 0xae, 0xea, 0xb9, 0xd3, 0x82, 0xae, 0xfb, 0x7e, 0xf2, 0xbf, 0x00, 0x00, 0x00, 0xff, 0xff, - 0xc1, 0xd8, 0x19, 0x9e, 0x30, 0x13, 0x00, 0x00, + // 1970 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xcc, 0x57, 0x41, 0x6f, 0xdb, 0xc8, + 0x15, 0xb6, 0x6c, 0x59, 0x12, 0x1f, 0xe5, 0x44, 0x99, 0x4d, 0xb2, 0x8c, 0xb2, 0x2b, 0x29, 0xda, + 0x6c, 0xea, 0xed, 0xa2, 0x32, 0xea, 0x16, 0xdb, 0xec, 0xa6, 0xdb, 0x56, 0xb2, 0x54, 0xc7, 0x4d, + 0xe3, 0x08, 0x63, 0x6f, 0xda, 0x00, 0x05, 0x84, 0x31, 0x39, 0x96, 0x08, 0x53, 0x1c, 0x76, 0x38, + 0xd4, 0x42, 0xb7, 0x1e, 0x17, 0xe9, 0x6f, 0x08, 0x7a, 0x28, 0x7a, 0x6f, 0xff, 0x45, 0x8e, 0x3d, + 0xb6, 0x17, 0xa3, 0xab, 0xbf, 0xd0, 0x5b, 0x2f, 0x2d, 0x66, 0x38, 0xa4, 0xa8, 0x84, 0x8e, 0x03, + 0x34, 0x87, 0xbd, 0xcd, 0x3c, 0x7e, 0xdf, 0xe3, 0xcc, 0x9b, 0xef, 0xcd, 0x7b, 0x03, 0x66, 0x18, + 0x50, 0x3b, 0xec, 0x04, 0x9c, 0x09, 0x86, 0x90, 0xc3, 0xec, 0x33, 0xca, 0x3b, 0xe1, 0xd7, 0x84, + 0x4f, 0xcf, 0x5c, 0xd1, 0x99, 0xfd, 0xb0, 0x6e, 0x8a, 0x79, 0x40, 0x35, 0xa0, 0x7e, 0x7d, 0xcc, + 0xc6, 0x4c, 0x0d, 0x77, 0xe4, 0x48, 0x5b, 0x1b, 0x63, 0xc6, 0xc6, 0x1e, 0xdd, 0x51, 0xb3, 0x93, + 0xe8, 0x74, 0xc7, 0x89, 0x38, 0x11, 0x2e, 0xf3, 0xf5, 0xf7, 0x5b, 0xaf, 0x7e, 0x27, 0xfe, 0x3c, + 0xfe, 0xd4, 0x7e, 0x51, 0x84, 0xca, 0x21, 0x73, 0xe8, 0x51, 0x40, 0x6d, 0xb4, 0x0f, 0x26, 0xf1, + 0x7d, 0x26, 0x14, 0x37, 0xb4, 0x0a, 0xad, 0xc2, 0xb6, 0xb9, 0xdb, 0xec, 0xbc, 0xbe, 0xa8, 0x4e, + 0x77, 0x09, 0xeb, 0x15, 0x5f, 0x9e, 0x37, 0xd7, 0x70, 0x96, 0x89, 0x7e, 0x0e, 0x55, 0x87, 0x86, + 0x2e, 0xa7, 0xce, 0x88, 0x33, 0x8f, 0x5a, 0xeb, 0xad, 0xc2, 0xf6, 0x95, 0xdd, 0x0f, 0xf2, 0x3c, + 0xc9, 0x9f, 0x63, 0xe6, 0x51, 0x6c, 0x6a, 0x86, 0x9c, 0xa0, 0x7d, 0x80, 0x29, 0x9d, 0x9e, 0x50, + 0x1e, 0x4e, 0xdc, 0xc0, 0xda, 0x50, 0xf4, 0xef, 0x5d, 0x44, 0x97, 0x6b, 0xef, 0x3c, 0x4e, 0xe1, + 0x38, 0x43, 0x45, 0x8f, 0xa1, 0x4a, 0x66, 0xc4, 0xf5, 0xc8, 0x89, 0xeb, 0xb9, 0x62, 0x6e, 0x15, + 0x95, 0xab, 0x4f, 0xde, 0xe8, 0xaa, 0x9b, 0x21, 0xe0, 0x15, 0x7a, 0xdb, 0x01, 0x58, 0xfe, 0x08, + 0xdd, 0x83, 0xf2, 0x70, 0x70, 0xd8, 0x3f, 0x38, 0xdc, 0xaf, 0xad, 0xd5, 0x6f, 0x3d, 0x7f, 0xd1, + 0xba, 0x21, 0x7d, 0x2c, 0x01, 0x43, 0xea, 0x3b, 0xae, 0x3f, 0x46, 0xdb, 0x50, 0xe9, 0xee, 0xed, + 0x0d, 0x86, 0xc7, 0x83, 0x7e, 0xad, 0x50, 0xaf, 0x3f, 0x7f, 0xd1, 0xba, 0xb9, 0x0a, 0xec, 0xda, + 0x36, 0x0d, 0x04, 0x75, 0xea, 0xc5, 0x6f, 0xfe, 0xdc, 0x58, 0x6b, 0x7f, 0x53, 0x80, 0x6a, 0x76, + 0x11, 0xe8, 0x1e, 0x94, 0xba, 0x7b, 0xc7, 0x07, 0x4f, 0x07, 0xb5, 0xb5, 0x25, 0x3d, 0x8b, 0xe8, + 0xda, 0xc2, 0x9d, 0x51, 0x74, 0x17, 0x36, 0x87, 0xdd, 0xaf, 0x8e, 0x06, 0xb5, 0xc2, 0x72, 0x39, + 0x59, 0xd8, 0x90, 0x44, 0xa1, 0x42, 0xf5, 0x71, 0xf7, 0xe0, 0xb0, 0xb6, 0x9e, 0x8f, 0xea, 0x73, + 0xe2, 0xfa, 0x7a, 0x29, 0x7f, 0x2a, 0x82, 0x79, 0x44, 0xf9, 0xcc, 0xb5, 0xdf, 0xb1, 0x44, 0x3e, + 0x83, 0xa2, 0x20, 0xe1, 0x99, 0x92, 0x86, 0x99, 0x2f, 0x8d, 0x63, 0x12, 0x9e, 0xc9, 0x9f, 0x6a, + 0xba, 0xc2, 0x4b, 0x65, 0x70, 0x1a, 0x78, 0xae, 0x4d, 0x04, 0x75, 0x94, 0x32, 0xcc, 0xdd, 0x8f, + 0xf3, 0xd8, 0x38, 0x45, 0xe9, 0xf5, 0x3f, 0x5c, 0xc3, 0x19, 0x2a, 0x7a, 0x00, 0xa5, 0xb1, 0xc7, + 0x4e, 0x88, 0xa7, 0x34, 0x61, 0xee, 0xde, 0xc9, 0x73, 0xb2, 0xaf, 0x10, 0x4b, 0x07, 0x9a, 0x82, + 0xee, 0x43, 0x29, 0x0a, 0x1c, 0x22, 0xa8, 0x55, 0x52, 0xe4, 0x56, 0x1e, 0xf9, 0x2b, 0x85, 0xd8, + 0x63, 0xfe, 0xa9, 0x3b, 0xc6, 0x1a, 0x8f, 0x1e, 0x41, 0xc5, 0xa7, 0xe2, 0x6b, 0xc6, 0xcf, 0x42, + 0xab, 0xdc, 0xda, 0xd8, 0x36, 0x77, 0x3f, 0xcd, 0x15, 0x63, 0x8c, 0xe9, 0x0a, 0x41, 0xec, 0xc9, + 0x94, 0xfa, 0x22, 0x76, 0xd3, 0x5b, 0xb7, 0x0a, 0x38, 0x75, 0x80, 0x7e, 0x0a, 0x15, 0xea, 0x3b, + 0x01, 0x73, 0x7d, 0x61, 0x55, 0x2e, 0x5e, 0xc8, 0x40, 0x63, 0x64, 0x30, 0x71, 0xca, 0x90, 0x6c, + 0xce, 0x3c, 0xef, 0x84, 0xd8, 0x67, 0x96, 0xf1, 0x96, 0xdb, 0x48, 0x19, 0xbd, 0x12, 0x14, 0xa7, + 0xcc, 0xa1, 0xed, 0x1d, 0xb8, 0xf6, 0x5a, 0xa8, 0x51, 0x1d, 0x2a, 0x3a, 0xd4, 0xb1, 0x46, 0x8a, + 0x38, 0x9d, 0xb7, 0xaf, 0xc2, 0xd6, 0x4a, 0x58, 0xdb, 0x7f, 0xdd, 0x84, 0x4a, 0x72, 0xd6, 0xa8, + 0x0b, 0x86, 0xcd, 0x7c, 0x41, 0x5c, 0x9f, 0x72, 0x2d, 0xaf, 0xdc, 0x93, 0xd9, 0x4b, 0x40, 0x92, + 0xf5, 0x70, 0x0d, 0x2f, 0x59, 0xe8, 0x97, 0x60, 0x70, 0x1a, 0xb2, 0x88, 0xdb, 0x34, 0xd4, 0xfa, + 0xda, 0xce, 0x57, 0x48, 0x0c, 0xc2, 0xf4, 0xf7, 0x91, 0xcb, 0xa9, 0x8c, 0x72, 0x88, 0x97, 0x54, + 0xf4, 0x00, 0xca, 0x9c, 0x86, 0x82, 0x70, 0xf1, 0x26, 0x89, 0xe0, 0x18, 0x32, 0x64, 0x9e, 0x6b, + 0xcf, 0x71, 0xc2, 0x40, 0x0f, 0xc0, 0x08, 0x3c, 0x62, 0x2b, 0xaf, 0xd6, 0xa6, 0xa2, 0x7f, 0x98, + 0x47, 0x1f, 0x26, 0x20, 0xbc, 0xc4, 0xa3, 0xcf, 0x01, 0x3c, 0x36, 0x1e, 0x39, 0xdc, 0x9d, 0x51, + 0xae, 0x25, 0x56, 0xcf, 0x63, 0xf7, 0x15, 0x02, 0x1b, 0x1e, 0x1b, 0xc7, 0x43, 0xb4, 0xff, 0x7f, + 0xe9, 0x2b, 0xa3, 0xad, 0x47, 0x00, 0x24, 0xfd, 0xaa, 0xd5, 0xf5, 0xc9, 0x5b, 0xb9, 0xd2, 0x27, + 0x92, 0xa1, 0xa3, 0x3b, 0x50, 0x3d, 0x65, 0xdc, 0xa6, 0x23, 0x9d, 0x35, 0x86, 0xd2, 0x84, 0xa9, + 0x6c, 0xb1, 0xbe, 0x50, 0x0f, 0xca, 0x63, 0xea, 0x53, 0xee, 0xda, 0x16, 0xa8, 0x9f, 0xdd, 0xcb, + 0x4d, 0xc8, 0x18, 0x82, 0x23, 0x5f, 0xb8, 0x53, 0xaa, 0xff, 0x94, 0x10, 0xd1, 0xef, 0xe0, 0xbd, + 0xe4, 0xf8, 0x46, 0x9c, 0x9e, 0x52, 0x4e, 0x7d, 0xa9, 0x01, 0x53, 0xc5, 0xe1, 0xe3, 0x37, 0x6b, + 0x40, 0xa3, 0xf5, 0x65, 0x83, 0xf8, 0xab, 0x1f, 0xc2, 0x9e, 0x01, 0x65, 0x1e, 0xff, 0xb7, 0xfd, + 0xc7, 0x82, 0x54, 0xfd, 0x2b, 0x08, 0xb4, 0x03, 0x66, 0xfa, 0x7b, 0xd7, 0x51, 0xea, 0x35, 0x7a, + 0x57, 0x16, 0xe7, 0x4d, 0x48, 0xb0, 0x07, 0x7d, 0x79, 0x07, 0xe9, 0xb1, 0x83, 0x06, 0xb0, 0x95, + 0x12, 0x64, 0x99, 0xd7, 0x85, 0xb2, 0xf5, 0xa6, 0x95, 0x1e, 0xcf, 0x03, 0x8a, 0xab, 0x3c, 0x33, + 0x6b, 0xff, 0x16, 0xd0, 0xeb, 0x71, 0x41, 0x08, 0x8a, 0x67, 0xae, 0xaf, 0x97, 0x81, 0xd5, 0x18, + 0x75, 0xa0, 0x1c, 0x90, 0xb9, 0xc7, 0x88, 0xa3, 0x13, 0xe3, 0x7a, 0x27, 0xee, 0x0d, 0x3a, 0x49, + 0x6f, 0xd0, 0xe9, 0xfa, 0x73, 0x9c, 0x80, 0xda, 0x8f, 0xe0, 0x46, 0xee, 0xf1, 0xa2, 0x5d, 0xa8, + 0xa6, 0x09, 0xb7, 0xdc, 0xeb, 0xd5, 0xc5, 0x79, 0xd3, 0x4c, 0x33, 0xf3, 0xa0, 0x8f, 0xcd, 0x14, + 0x74, 0xe0, 0xb4, 0xff, 0x66, 0xc0, 0xd6, 0x4a, 0xda, 0xa2, 0xeb, 0xb0, 0xe9, 0x4e, 0xc9, 0x98, + 0xea, 0x35, 0xc6, 0x13, 0x34, 0x80, 0x92, 0x47, 0x4e, 0xa8, 0x27, 0x93, 0x57, 0x1e, 0xdc, 0x0f, + 0x2e, 0xcd, 0xff, 0xce, 0xaf, 0x15, 0x7e, 0xe0, 0x0b, 0x3e, 0xc7, 0x9a, 0x8c, 0x2c, 0x28, 0xdb, + 0x6c, 0x3a, 0x25, 0xbe, 0x2c, 0x13, 0x1b, 0xdb, 0x06, 0x4e, 0xa6, 0x32, 0x32, 0x84, 0x8f, 0x43, + 0xab, 0xa8, 0xcc, 0x6a, 0x8c, 0x6a, 0xb0, 0x41, 0xfd, 0x99, 0xb5, 0xa9, 0x4c, 0x72, 0x28, 0x2d, + 0x8e, 0x1b, 0x67, 0x9f, 0x81, 0xe5, 0x50, 0xf2, 0xa2, 0x90, 0x72, 0xab, 0x1c, 0x47, 0x54, 0x8e, + 0xd1, 0x4f, 0xa0, 0x34, 0x65, 0x91, 0x2f, 0x42, 0xab, 0xa2, 0x16, 0x7b, 0x2b, 0x6f, 0xb1, 0x8f, + 0x25, 0x42, 0x2b, 0x4b, 0xc3, 0xd1, 0x00, 0xae, 0x85, 0x82, 0x05, 0xa3, 0x31, 0x27, 0x36, 0x1d, + 0x05, 0x94, 0xbb, 0xcc, 0xd1, 0xd7, 0xf0, 0xad, 0xd7, 0x0e, 0xa5, 0xaf, 0x1b, 0x3a, 0x7c, 0x55, + 0x72, 0xf6, 0x25, 0x65, 0xa8, 0x18, 0x68, 0x08, 0xd5, 0x20, 0xf2, 0xbc, 0x11, 0x0b, 0xe2, 0x8a, + 0x1c, 0xe7, 0xce, 0x5b, 0x84, 0x6c, 0x18, 0x79, 0xde, 0x93, 0x98, 0x84, 0xcd, 0x60, 0x39, 0x41, + 0x37, 0xa1, 0x34, 0xe6, 0x2c, 0x0a, 0xe2, 0xbc, 0x31, 0xb0, 0x9e, 0xa1, 0x2f, 0xa1, 0x1c, 0x52, + 0x9b, 0x53, 0x11, 0x5a, 0x55, 0xb5, 0xd5, 0x8f, 0xf2, 0x7e, 0x72, 0xa4, 0x20, 0x69, 0x4e, 0xe0, + 0x84, 0x83, 0x6e, 0xc1, 0x86, 0x10, 0x73, 0x6b, 0xab, 0x55, 0xd8, 0xae, 0xf4, 0xca, 0x8b, 0xf3, + 0xe6, 0xc6, 0xf1, 0xf1, 0x33, 0x2c, 0x6d, 0xb2, 0x5a, 0x4c, 0x58, 0x28, 0x7c, 0x32, 0xa5, 0xd6, + 0x15, 0x15, 0xdb, 0x74, 0x8e, 0x9e, 0x01, 0x38, 0x7e, 0x38, 0xb2, 0xd5, 0xf5, 0x64, 0x5d, 0x55, + 0xbb, 0xfb, 0xf4, 0xf2, 0xdd, 0xf5, 0x0f, 0x8f, 0x74, 0xc5, 0xdc, 0x5a, 0x9c, 0x37, 0x8d, 0x74, + 0x8a, 0x0d, 0xc7, 0x0f, 0xe3, 0x21, 0xea, 0x81, 0x39, 0xa1, 0xc4, 0x13, 0x13, 0x7b, 0x42, 0xed, + 0x33, 0xab, 0x76, 0x71, 0x09, 0x7c, 0xa8, 0x60, 0xda, 0x43, 0x96, 0x24, 0x15, 0x2c, 0x97, 0x1a, + 0x5a, 0xd7, 0x54, 0xac, 0xe2, 0x09, 0xfa, 0x10, 0x80, 0x05, 0xd4, 0x1f, 0x85, 0xc2, 0x71, 0x7d, + 0x0b, 0xc9, 0x2d, 0x63, 0x43, 0x5a, 0x8e, 0xa4, 0x01, 0xdd, 0x96, 0x05, 0x8a, 0x38, 0x23, 0xe6, + 0x7b, 0x73, 0xeb, 0x3d, 0xf5, 0xb5, 0x22, 0x0d, 0x4f, 0x7c, 0x6f, 0x8e, 0x9a, 0x60, 0x2a, 0x5d, + 0x84, 0xee, 0xd8, 0x27, 0x9e, 0x75, 0x5d, 0xc5, 0x03, 0xa4, 0xe9, 0x48, 0x59, 0xe4, 0x39, 0xc4, + 0xd1, 0x08, 0xad, 0x1b, 0x17, 0x9f, 0x83, 0x5e, 0xec, 0xf2, 0x1c, 0x34, 0x07, 0xfd, 0x0c, 0x20, + 0xe0, 0xee, 0xcc, 0xf5, 0xe8, 0x98, 0x86, 0xd6, 0x4d, 0xb5, 0xe9, 0x46, 0x6e, 0x65, 0x4a, 0x51, + 0x38, 0xc3, 0x40, 0x1f, 0x80, 0xe1, 0x86, 0xcc, 0x53, 0x72, 0xb4, 0xde, 0x57, 0xab, 0x5b, 0x1a, + 0xea, 0x9f, 0x83, 0x99, 0xc9, 0x45, 0x99, 0x43, 0x67, 0x74, 0xae, 0xd3, 0x5b, 0x0e, 0x65, 0xc0, + 0x66, 0xc4, 0x8b, 0xe2, 0xab, 0xce, 0xc0, 0xf1, 0xe4, 0x8b, 0xf5, 0xfb, 0x85, 0xfa, 0x2e, 0x98, + 0x19, 0x4d, 0xa2, 0x8f, 0xe4, 0xdd, 0x38, 0x76, 0x43, 0xc1, 0xe7, 0x23, 0x12, 0x89, 0x89, 0xf5, + 0x0b, 0x45, 0xa8, 0x26, 0xc6, 0x6e, 0x24, 0x26, 0xf5, 0x11, 0x2c, 0x8f, 0x16, 0xb5, 0xc0, 0x94, + 0x92, 0x09, 0x29, 0x9f, 0x51, 0x2e, 0xfb, 0x0e, 0x79, 0x22, 0x59, 0x93, 0x94, 0x76, 0x48, 0x09, + 0xb7, 0x27, 0xea, 0x66, 0x31, 0xb0, 0x9e, 0xc9, 0xab, 0x22, 0xc9, 0x1f, 0x7d, 0x55, 0xe8, 0x69, + 0xfb, 0xdf, 0x05, 0xa8, 0x66, 0xdb, 0x27, 0xb4, 0x17, 0xb7, 0x3d, 0x6a, 0x4b, 0x57, 0x76, 0x77, + 0x2e, 0x6b, 0xb7, 0xd4, 0xb5, 0xed, 0x45, 0xd2, 0xd9, 0x63, 0xf9, 0xd2, 0x51, 0x64, 0xf4, 0x63, + 0xd8, 0x0c, 0x18, 0x17, 0xc9, 0x05, 0x97, 0x1f, 0x7e, 0xc6, 0x93, 0xa2, 0x1c, 0x83, 0xdb, 0x13, + 0xb8, 0xb2, 0xea, 0x0d, 0xdd, 0x85, 0x8d, 0xa7, 0x07, 0xc3, 0xda, 0x5a, 0xfd, 0xf6, 0xf3, 0x17, + 0xad, 0xf7, 0x57, 0x3f, 0x3e, 0x75, 0xb9, 0x88, 0x88, 0x77, 0x30, 0x44, 0xdf, 0x87, 0xcd, 0xfe, + 0xe1, 0x11, 0xc6, 0xb5, 0x42, 0xbd, 0xf9, 0xfc, 0x45, 0xeb, 0xf6, 0x2a, 0x4e, 0x7e, 0x62, 0x91, + 0xef, 0x60, 0x76, 0x92, 0x76, 0xfd, 0xff, 0x59, 0x07, 0x53, 0xdf, 0xfb, 0xef, 0xfa, 0x61, 0xb8, + 0x15, 0x37, 0x35, 0x49, 0x42, 0xaf, 0x5f, 0xda, 0xdb, 0x54, 0x63, 0x82, 0x3e, 0xe3, 0x3b, 0x50, + 0x75, 0x83, 0xd9, 0x67, 0x23, 0xea, 0x93, 0x13, 0x4f, 0x3f, 0x00, 0x2a, 0xd8, 0x94, 0xb6, 0x41, + 0x6c, 0x92, 0xb7, 0x89, 0xeb, 0x0b, 0xca, 0x7d, 0xdd, 0xda, 0x57, 0x70, 0x3a, 0x47, 0x5f, 0x42, + 0xd1, 0x0d, 0xc8, 0x54, 0x37, 0x64, 0xb9, 0x3b, 0x38, 0x18, 0x76, 0x1f, 0x6b, 0x0d, 0xf6, 0x2a, + 0x8b, 0xf3, 0x66, 0x51, 0x1a, 0xb0, 0xa2, 0xa1, 0x46, 0xd2, 0x13, 0xc9, 0x3f, 0xa9, 0xca, 0x50, + 0xc1, 0x19, 0x8b, 0xd4, 0x91, 0xeb, 0x8f, 0x39, 0x0d, 0x43, 0x55, 0x23, 0x2a, 0x38, 0x99, 0xa2, + 0x3a, 0x94, 0x75, 0x67, 0xa5, 0x5a, 0x29, 0x43, 0x76, 0x2d, 0xda, 0xd0, 0xdb, 0x02, 0x33, 0x8e, + 0xc6, 0xe8, 0x94, 0xb3, 0x69, 0xfb, 0xbf, 0x45, 0x30, 0xf7, 0xbc, 0x28, 0x14, 0xba, 0x48, 0xbe, + 0xb3, 0xe0, 0x3f, 0x83, 0x6b, 0x44, 0x3d, 0x34, 0x89, 0x2f, 0x2b, 0x8e, 0x6a, 0x58, 0xf5, 0x01, + 0xdc, 0xcd, 0x75, 0x97, 0x82, 0xe3, 0xe6, 0xb6, 0x57, 0x92, 0x3e, 0xad, 0x02, 0xae, 0x91, 0x57, + 0xbe, 0xa0, 0x23, 0xd8, 0x62, 0xdc, 0x9e, 0xd0, 0x50, 0xc4, 0x75, 0x4a, 0x3f, 0xcc, 0x72, 0x9f, + 0xec, 0x4f, 0xb2, 0x40, 0x7d, 0x49, 0xc7, 0xab, 0x5d, 0xf5, 0x81, 0xee, 0x43, 0x91, 0x93, 0xd3, + 0xa4, 0xf9, 0xce, 0x4d, 0x12, 0x4c, 0x4e, 0xc5, 0x8a, 0x0b, 0xc5, 0x40, 0xbf, 0x02, 0x70, 0xdc, + 0x30, 0x20, 0xc2, 0x9e, 0x50, 0xae, 0x0f, 0x3b, 0x77, 0x8b, 0xfd, 0x14, 0xb5, 0xe2, 0x25, 0xc3, + 0x46, 0x8f, 0xc0, 0xb0, 0x49, 0x22, 0xd7, 0xd2, 0xc5, 0xaf, 0xd5, 0xbd, 0xae, 0x76, 0x51, 0x93, + 0x2e, 0x16, 0xe7, 0xcd, 0x4a, 0x62, 0xc1, 0x15, 0x9b, 0x68, 0xf9, 0x3e, 0x82, 0x2d, 0xf9, 0x8a, + 0x1d, 0x39, 0xf4, 0x94, 0x44, 0x9e, 0x88, 0x65, 0x72, 0x41, 0xd1, 0x91, 0x4f, 0xa2, 0xbe, 0xc6, + 0xe9, 0x75, 0x55, 0x45, 0xc6, 0x86, 0x7e, 0x03, 0xd7, 0xa8, 0x6f, 0xf3, 0xb9, 0x12, 0x6b, 0xb2, + 0xc2, 0xca, 0xc5, 0x9b, 0x1d, 0xa4, 0xe0, 0x95, 0xcd, 0xd6, 0xe8, 0x2b, 0xf6, 0xf6, 0x3f, 0x0b, + 0x00, 0x71, 0x1d, 0x7f, 0xb7, 0x02, 0x44, 0x50, 0x74, 0x88, 0x20, 0x4a, 0x73, 0x55, 0xac, 0xc6, + 0xe8, 0x0b, 0x00, 0x41, 0xa7, 0x81, 0x2c, 0x1f, 0xfe, 0x58, 0xcb, 0xe6, 0x4d, 0xd7, 0x41, 0x06, + 0x8d, 0x76, 0xa1, 0xa4, 0x9f, 0x48, 0xc5, 0x4b, 0x79, 0x1a, 0xd9, 0xfe, 0x4b, 0x01, 0x20, 0xde, + 0xe6, 0x77, 0x7a, 0x6f, 0x3d, 0xeb, 0xe5, 0xb7, 0x8d, 0xb5, 0x7f, 0x7c, 0xdb, 0x58, 0xfb, 0xc3, + 0xa2, 0x51, 0x78, 0xb9, 0x68, 0x14, 0xfe, 0xbe, 0x68, 0x14, 0xfe, 0xb5, 0x68, 0x14, 0x4e, 0x4a, + 0xaa, 0x2b, 0xfc, 0xd1, 0xff, 0x02, 0x00, 0x00, 0xff, 0xff, 0xc8, 0xe7, 0x4a, 0x7d, 0x3a, 0x14, + 0x00, 0x00, } diff --git a/vendor/github.com/docker/swarmkit/api/specs.proto b/vendor/github.com/docker/swarmkit/api/specs.proto index c14ebeb6d3d8..ddc140558bf3 100644 --- a/vendor/github.com/docker/swarmkit/api/specs.proto +++ b/vendor/github.com/docker/swarmkit/api/specs.proto @@ -128,6 +128,21 @@ message TaskSpec { // using the same reconciliation-based mechanism that performs rolling // updates. uint64 force_update = 9; + + // ResourceReferences provides a generic way to specify resources that + // are used by this task, and should be sent down to agents along with + // the task. Inside the runtime field there may be more specific + // information about how to use the resource, but ResourceReferences + // establishes the relationship at the store level, and instructs the + // dispatcher to send the related objects. + // + // ResourceReferences is a list of ResourceReferences used by the task. + repeated ResourceReference resource_references = 11 [(gogoproto.nullable) = false]; +} + +message ResourceReference { + string resource_id = 1; + ResourceType resource_type = 2; } message GenericRuntimeSpec { @@ -278,6 +293,11 @@ message ContainerSpec { // task will exit and a new task will be rescheduled elsewhere. A container // is considered unhealthy after `Retries` number of consecutive failures. HealthConfig healthcheck = 16; + + // Isolation defines the isolation level for engines supporting multiple isolation modes + // ie: docker on windows server supports "process" or "hyperv" + // on engines that does not support it, value should be either "" or "default" + string isolation = 23; } // EndpointSpec defines the properties that can be configured to diff --git a/vendor/github.com/docker/swarmkit/api/types.pb.go b/vendor/github.com/docker/swarmkit/api/types.pb.go index d41e761304f6..8ffc000e17c3 100644 --- a/vendor/github.com/docker/swarmkit/api/types.pb.go +++ b/vendor/github.com/docker/swarmkit/api/types.pb.go @@ -80,6 +80,7 @@ ReplicatedService GlobalService TaskSpec + ResourceReference GenericRuntimeSpec NetworkAttachmentSpec ContainerSpec @@ -251,6 +252,30 @@ var _ = time.Kitchen // proto package needs to be updated. const _ = proto.GoGoProtoPackageIsVersion2 // please upgrade the proto package +type ResourceType int32 + +const ( + ResourceType_TASK ResourceType = 0 + ResourceType_SECRET ResourceType = 1 + ResourceType_CONFIG ResourceType = 2 +) + +var ResourceType_name = map[int32]string{ + 0: "TASK", + 1: "SECRET", + 2: "CONFIG", +} +var ResourceType_value = map[string]int32{ + "TASK": 0, + "SECRET": 1, + "CONFIG": 2, +} + +func (x ResourceType) String() string { + return proto.EnumName(ResourceType_name, int32(x)) +} +func (ResourceType) EnumDescriptor() ([]byte, []int) { return fileDescriptorTypes, []int{0} } + // TaskState enumerates the states that a task progresses through within an // agent. States are designed to be monotonically increasing, such that if two // states are seen by a task, the greater of the new represents the true state. @@ -306,7 +331,7 @@ var TaskState_value = map[string]int32{ func (x TaskState) String() string { return proto.EnumName(TaskState_name, int32(x)) } -func (TaskState) EnumDescriptor() ([]byte, []int) { return fileDescriptorTypes, []int{0} } +func (TaskState) EnumDescriptor() ([]byte, []int) { return fileDescriptorTypes, []int{1} } type NodeRole int32 @@ -327,7 +352,7 @@ var NodeRole_value = map[string]int32{ func (x NodeRole) String() string { return proto.EnumName(NodeRole_name, int32(x)) } -func (NodeRole) EnumDescriptor() ([]byte, []int) { return fileDescriptorTypes, []int{1} } +func (NodeRole) EnumDescriptor() ([]byte, []int) { return fileDescriptorTypes, []int{2} } type RaftMemberStatus_Reachability int32 @@ -1267,6 +1292,13 @@ type TaskStatus struct { // HostPorts provides a list of ports allocated at the host // level. PortStatus *PortStatus `protobuf:"bytes,6,opt,name=port_status,json=portStatus" json:"port_status,omitempty"` + // AppliedBy gives the node ID of the manager that applied this task + // status update to the Task object. + AppliedBy string `protobuf:"bytes,7,opt,name=applied_by,json=appliedBy,proto3" json:"applied_by,omitempty"` + // AppliedAt gives a timestamp of when this status update was applied to + // the Task object. + // Note: can't use stdtime because this field is nullable. + AppliedAt *google_protobuf.Timestamp `protobuf:"bytes,8,opt,name=applied_at,json=appliedAt" json:"applied_at,omitempty"` } func (m *TaskStatus) Reset() { *m = TaskStatus{} } @@ -2311,6 +2343,7 @@ func init() { proto.RegisterType((*Privileges)(nil), "docker.swarmkit.v1.Privileges") proto.RegisterType((*Privileges_CredentialSpec)(nil), "docker.swarmkit.v1.Privileges.CredentialSpec") proto.RegisterType((*Privileges_SELinuxContext)(nil), "docker.swarmkit.v1.Privileges.SELinuxContext") + proto.RegisterEnum("docker.swarmkit.v1.ResourceType", ResourceType_name, ResourceType_value) proto.RegisterEnum("docker.swarmkit.v1.TaskState", TaskState_name, TaskState_value) proto.RegisterEnum("docker.swarmkit.v1.NodeRole", NodeRole_name, NodeRole_value) proto.RegisterEnum("docker.swarmkit.v1.RaftMemberStatus_Reachability", RaftMemberStatus_Reachability_name, RaftMemberStatus_Reachability_value) @@ -2867,6 +2900,10 @@ func (m *TaskStatus) CopyFrom(src interface{}) { m.PortStatus = &PortStatus{} github_com_docker_swarmkit_api_deepcopy.Copy(m.PortStatus, o.PortStatus) } + if o.AppliedAt != nil { + m.AppliedAt = &google_protobuf.Timestamp{} + github_com_docker_swarmkit_api_deepcopy.Copy(m.AppliedAt, o.AppliedAt) + } if o.RuntimeStatus != nil { switch o.RuntimeStatus.(type) { case *TaskStatus_Container: @@ -4730,6 +4767,22 @@ func (m *TaskStatus) MarshalTo(dAtA []byte) (int, error) { } i += n22 } + if len(m.AppliedBy) > 0 { + dAtA[i] = 0x3a + i++ + i = encodeVarintTypes(dAtA, i, uint64(len(m.AppliedBy))) + i += copy(dAtA[i:], m.AppliedBy) + } + if m.AppliedAt != nil { + dAtA[i] = 0x42 + i++ + i = encodeVarintTypes(dAtA, i, uint64(m.AppliedAt.Size())) + n23, err := m.AppliedAt.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n23 + } return i, nil } @@ -4739,11 +4792,11 @@ func (m *TaskStatus_Container) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x2a i++ i = encodeVarintTypes(dAtA, i, uint64(m.Container.Size())) - n23, err := m.Container.MarshalTo(dAtA[i:]) + n24, err := m.Container.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n23 + i += n24 } return i, nil } @@ -4980,11 +5033,11 @@ func (m *IPAMOptions) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0xa i++ i = encodeVarintTypes(dAtA, i, uint64(m.Driver.Size())) - n24, err := m.Driver.MarshalTo(dAtA[i:]) + n25, err := m.Driver.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n24 + i += n25 } if len(m.Configs) > 0 { for _, msg := range m.Configs { @@ -5050,11 +5103,11 @@ func (m *WeightedPeer) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0xa i++ i = encodeVarintTypes(dAtA, i, uint64(m.Peer.Size())) - n25, err := m.Peer.MarshalTo(dAtA[i:]) + n26, err := m.Peer.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n25 + i += n26 } if m.Weight != 0 { dAtA[i] = 0x10 @@ -5157,11 +5210,11 @@ func (m *AcceptancePolicy_RoleAdmissionPolicy) MarshalTo(dAtA []byte) (int, erro dAtA[i] = 0x1a i++ i = encodeVarintTypes(dAtA, i, uint64(m.Secret.Size())) - n26, err := m.Secret.MarshalTo(dAtA[i:]) + n27, err := m.Secret.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n26 + i += n27 } return i, nil } @@ -5267,11 +5320,11 @@ func (m *CAConfig) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0xa i++ i = encodeVarintTypes(dAtA, i, uint64(m.NodeCertExpiry.Size())) - n27, err := m.NodeCertExpiry.MarshalTo(dAtA[i:]) + n28, err := m.NodeCertExpiry.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n27 + i += n28 } if len(m.ExternalCAs) > 0 { for _, msg := range m.ExternalCAs { @@ -5347,11 +5400,11 @@ func (m *TaskDefaults) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0xa i++ i = encodeVarintTypes(dAtA, i, uint64(m.LogDriver.Size())) - n28, err := m.LogDriver.MarshalTo(dAtA[i:]) + n29, err := m.LogDriver.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n28 + i += n29 } return i, nil } @@ -5375,11 +5428,11 @@ func (m *DispatcherConfig) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0xa i++ i = encodeVarintTypes(dAtA, i, uint64(m.HeartbeatPeriod.Size())) - n29, err := m.HeartbeatPeriod.MarshalTo(dAtA[i:]) + n30, err := m.HeartbeatPeriod.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n29 + i += n30 } return i, nil } @@ -5495,11 +5548,11 @@ func (m *PlacementPreference) MarshalTo(dAtA []byte) (int, error) { var l int _ = l if m.Preference != nil { - nn30, err := m.Preference.MarshalTo(dAtA[i:]) + nn31, err := m.Preference.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += nn30 + i += nn31 } return i, nil } @@ -5510,11 +5563,11 @@ func (m *PlacementPreference_Spread) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0xa i++ i = encodeVarintTypes(dAtA, i, uint64(m.Spread.Size())) - n31, err := m.Spread.MarshalTo(dAtA[i:]) + n32, err := m.Spread.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n31 + i += n32 } return i, nil } @@ -5641,20 +5694,20 @@ func (m *RootCA) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x22 i++ i = encodeVarintTypes(dAtA, i, uint64(m.JoinTokens.Size())) - n32, err := m.JoinTokens.MarshalTo(dAtA[i:]) + n33, err := m.JoinTokens.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n32 + i += n33 if m.RootRotation != nil { dAtA[i] = 0x2a i++ i = encodeVarintTypes(dAtA, i, uint64(m.RootRotation.Size())) - n33, err := m.RootRotation.MarshalTo(dAtA[i:]) + n34, err := m.RootRotation.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n33 + i += n34 } if m.LastForcedRotation != 0 { dAtA[i] = 0x30 @@ -5693,11 +5746,11 @@ func (m *Certificate) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x1a i++ i = encodeVarintTypes(dAtA, i, uint64(m.Status.Size())) - n34, err := m.Status.MarshalTo(dAtA[i:]) + n35, err := m.Status.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n34 + i += n35 if len(m.Certificate) > 0 { dAtA[i] = 0x22 i++ @@ -5866,11 +5919,11 @@ func (m *SecretReference) MarshalTo(dAtA []byte) (int, error) { i += copy(dAtA[i:], m.SecretName) } if m.Target != nil { - nn35, err := m.Target.MarshalTo(dAtA[i:]) + nn36, err := m.Target.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += nn35 + i += nn36 } return i, nil } @@ -5881,11 +5934,11 @@ func (m *SecretReference_File) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x1a i++ i = encodeVarintTypes(dAtA, i, uint64(m.File.Size())) - n36, err := m.File.MarshalTo(dAtA[i:]) + n37, err := m.File.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n36 + i += n37 } return i, nil } @@ -5917,11 +5970,11 @@ func (m *ConfigReference) MarshalTo(dAtA []byte) (int, error) { i += copy(dAtA[i:], m.ConfigName) } if m.Target != nil { - nn37, err := m.Target.MarshalTo(dAtA[i:]) + nn38, err := m.Target.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += nn37 + i += nn38 } return i, nil } @@ -5932,11 +5985,11 @@ func (m *ConfigReference_File) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x1a i++ i = encodeVarintTypes(dAtA, i, uint64(m.File.Size())) - n38, err := m.File.MarshalTo(dAtA[i:]) + n39, err := m.File.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n38 + i += n39 } return i, nil } @@ -5959,11 +6012,11 @@ func (m *BlacklistedCertificate) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0xa i++ i = encodeVarintTypes(dAtA, i, uint64(m.Expiry.Size())) - n39, err := m.Expiry.MarshalTo(dAtA[i:]) + n40, err := m.Expiry.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n39 + i += n40 } return i, nil } @@ -6002,21 +6055,21 @@ func (m *HealthConfig) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x12 i++ i = encodeVarintTypes(dAtA, i, uint64(m.Interval.Size())) - n40, err := m.Interval.MarshalTo(dAtA[i:]) + n41, err := m.Interval.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n40 + i += n41 } if m.Timeout != nil { dAtA[i] = 0x1a i++ i = encodeVarintTypes(dAtA, i, uint64(m.Timeout.Size())) - n41, err := m.Timeout.MarshalTo(dAtA[i:]) + n42, err := m.Timeout.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n41 + i += n42 } if m.Retries != 0 { dAtA[i] = 0x20 @@ -6027,11 +6080,11 @@ func (m *HealthConfig) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x2a i++ i = encodeVarintTypes(dAtA, i, uint64(m.StartPeriod.Size())) - n42, err := m.StartPeriod.MarshalTo(dAtA[i:]) + n43, err := m.StartPeriod.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n42 + i += n43 } return i, nil } @@ -6126,21 +6179,21 @@ func (m *Privileges) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0xa i++ i = encodeVarintTypes(dAtA, i, uint64(m.CredentialSpec.Size())) - n43, err := m.CredentialSpec.MarshalTo(dAtA[i:]) + n44, err := m.CredentialSpec.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n43 + i += n44 } if m.SELinuxContext != nil { dAtA[i] = 0x12 i++ i = encodeVarintTypes(dAtA, i, uint64(m.SELinuxContext.Size())) - n44, err := m.SELinuxContext.MarshalTo(dAtA[i:]) + n45, err := m.SELinuxContext.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n44 + i += n45 } return i, nil } @@ -6161,11 +6214,11 @@ func (m *Privileges_CredentialSpec) MarshalTo(dAtA []byte) (int, error) { var l int _ = l if m.Source != nil { - nn45, err := m.Source.MarshalTo(dAtA[i:]) + nn46, err := m.Source.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += nn45 + i += nn46 } return i, nil } @@ -6730,6 +6783,14 @@ func (m *TaskStatus) Size() (n int) { l = m.PortStatus.Size() n += 1 + l + sovTypes(uint64(l)) } + l = len(m.AppliedBy) + if l > 0 { + n += 1 + l + sovTypes(uint64(l)) + } + if m.AppliedAt != nil { + l = m.AppliedAt.Size() + n += 1 + l + sovTypes(uint64(l)) + } return n } @@ -7780,6 +7841,8 @@ func (this *TaskStatus) String() string { `Err:` + fmt.Sprintf("%v", this.Err) + `,`, `RuntimeStatus:` + fmt.Sprintf("%v", this.RuntimeStatus) + `,`, `PortStatus:` + strings.Replace(fmt.Sprintf("%v", this.PortStatus), "PortStatus", "PortStatus", 1) + `,`, + `AppliedBy:` + fmt.Sprintf("%v", this.AppliedBy) + `,`, + `AppliedAt:` + strings.Replace(fmt.Sprintf("%v", this.AppliedAt), "Timestamp", "google_protobuf.Timestamp", 1) + `,`, `}`, }, "") return s @@ -11924,6 +11987,68 @@ func (m *TaskStatus) Unmarshal(dAtA []byte) error { return err } iNdEx = postIndex + case 7: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field AppliedBy", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + 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 ErrInvalidLengthTypes + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.AppliedBy = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 8: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field AppliedAt", 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 + } + if m.AppliedAt == nil { + m.AppliedAt = &google_protobuf.Timestamp{} + } + if err := m.AppliedAt.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipTypes(dAtA[iNdEx:]) @@ -17061,307 +17186,311 @@ var ( func init() { proto.RegisterFile("types.proto", fileDescriptorTypes) } var fileDescriptorTypes = []byte{ - // 4822 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xac, 0x7a, 0x4d, 0x6c, 0x24, 0x49, - 0x56, 0xbf, 0xeb, 0xd3, 0x55, 0xaf, 0xca, 0x76, 0x3a, 0xda, 0xdb, 0xe3, 0xae, 0xed, 0xb1, 0x6b, - 0x72, 0xa6, 0x77, 0x66, 0x67, 0xe7, 0x5f, 0xd3, 0x1f, 0xbb, 0xab, 0x9e, 0x99, 0xff, 0x7c, 0xd4, - 0x97, 0xdb, 0xb5, 0x6d, 0x57, 0x95, 0xa2, 0xca, 0xdd, 0x3b, 0x48, 0x90, 0x4a, 0x67, 0x86, 0xcb, - 0x39, 0xce, 0xca, 0x28, 0x32, 0xb3, 0xec, 0x2e, 0x16, 0x44, 0x8b, 0x03, 0x20, 0x9f, 0xe0, 0xb6, - 0x12, 0x32, 0x17, 0x38, 0x21, 0x24, 0x0e, 0x20, 0x21, 0xb8, 0x30, 0x48, 0x1c, 0xe6, 0xc6, 0x02, - 0x12, 0x5a, 0x81, 0x64, 0x18, 0x1f, 0xb8, 0x21, 0xb8, 0xac, 0xb8, 0x80, 0x84, 0xe2, 0x23, 0xb3, - 0xb2, 0xaa, 0xd3, 0x76, 0x0f, 0xb3, 0x17, 0x3b, 0xe3, 0xbd, 0xdf, 0x7b, 0xf1, 0xe2, 0x45, 0xc4, - 0x8b, 0xf7, 0x22, 0x0a, 0x0a, 0xfe, 0x64, 0x44, 0xbc, 0xca, 0xc8, 0xa5, 0x3e, 0x45, 0xc8, 0xa4, - 0xc6, 0x11, 0x71, 0x2b, 0xde, 0x89, 0xee, 0x0e, 0x8f, 0x2c, 0xbf, 0x72, 0x7c, 0xaf, 0xb4, 0x39, - 0xa0, 0x74, 0x60, 0x93, 0x77, 0x39, 0x62, 0x7f, 0x7c, 0xf0, 0xae, 0x6f, 0x0d, 0x89, 0xe7, 0xeb, - 0xc3, 0x91, 0x10, 0x2a, 0x6d, 0xcc, 0x03, 0xcc, 0xb1, 0xab, 0xfb, 0x16, 0x75, 0x24, 0x7f, 0x6d, - 0x40, 0x07, 0x94, 0x7f, 0xbe, 0xcb, 0xbe, 0x04, 0x55, 0xdd, 0x84, 0xc5, 0x27, 0xc4, 0xf5, 0x2c, - 0xea, 0xa0, 0x35, 0xc8, 0x58, 0x8e, 0x49, 0x9e, 0xad, 0x27, 0xca, 0x89, 0xb7, 0xd2, 0x58, 0x34, - 0xd4, 0xbb, 0x00, 0x2d, 0xf6, 0xd1, 0x74, 0x7c, 0x77, 0x82, 0x14, 0x48, 0x1d, 0x91, 0x09, 0x47, - 0xe4, 0x31, 0xfb, 0x64, 0x94, 0x63, 0xdd, 0x5e, 0x4f, 0x0a, 0xca, 0xb1, 0x6e, 0xab, 0x5f, 0x26, - 0xa0, 0x50, 0x75, 0x1c, 0xea, 0xf3, 0xde, 0x3d, 0x84, 0x20, 0xed, 0xe8, 0x43, 0x22, 0x85, 0xf8, - 0x37, 0xaa, 0x43, 0xd6, 0xd6, 0xf7, 0x89, 0xed, 0xad, 0x27, 0xcb, 0xa9, 0xb7, 0x0a, 0xf7, 0xbf, - 0x53, 0x79, 0x71, 0xc8, 0x95, 0x88, 0x92, 0xca, 0x0e, 0x47, 0x73, 0x23, 0xb0, 0x14, 0x45, 0x1f, - 0xc1, 0xa2, 0xe5, 0x98, 0x96, 0x41, 0xbc, 0xf5, 0x34, 0xd7, 0xb2, 0x11, 0xa7, 0x65, 0x6a, 0x7d, - 0x2d, 0xfd, 0xc5, 0xf9, 0xe6, 0x02, 0x0e, 0x84, 0x4a, 0xef, 0x41, 0x21, 0xa2, 0x36, 0x66, 0x6c, - 0x6b, 0x90, 0x39, 0xd6, 0xed, 0x31, 0x91, 0xa3, 0x13, 0x8d, 0xf7, 0x93, 0x0f, 0x13, 0xea, 0x27, - 0xb0, 0xd6, 0xd6, 0x87, 0xc4, 0x7c, 0x44, 0x1c, 0xe2, 0x5a, 0x06, 0x26, 0x1e, 0x1d, 0xbb, 0x06, - 0x61, 0x63, 0x3d, 0xb2, 0x1c, 0x33, 0x18, 0x2b, 0xfb, 0x8e, 0xd7, 0xa2, 0xd6, 0xe1, 0x95, 0x86, - 0xe5, 0x19, 0x2e, 0xf1, 0xc9, 0x57, 0x56, 0x92, 0x0a, 0x94, 0x9c, 0x27, 0x60, 0x65, 0x5e, 0xfa, - 0x17, 0xe0, 0x06, 0x73, 0xb1, 0xa9, 0xb9, 0x92, 0xa2, 0x79, 0x23, 0x62, 0x70, 0x65, 0x85, 0xfb, - 0x6f, 0xc5, 0x79, 0x28, 0x6e, 0x24, 0xdb, 0x0b, 0x78, 0x95, 0xab, 0x09, 0x08, 0xbd, 0x11, 0x31, - 0x90, 0x01, 0x37, 0x4d, 0x69, 0xf4, 0x9c, 0xfa, 0x24, 0x57, 0x1f, 0x3b, 0x8d, 0x97, 0x0c, 0x73, - 0x7b, 0x01, 0xaf, 0x05, 0xca, 0xa2, 0x9d, 0xd4, 0x00, 0x72, 0x81, 0x6e, 0xf5, 0xc7, 0x09, 0xc8, - 0x07, 0x4c, 0x0f, 0x7d, 0x1b, 0xf2, 0x8e, 0xee, 0x50, 0xcd, 0x18, 0x8d, 0x3d, 0x3e, 0xa0, 0x54, - 0xad, 0x78, 0x71, 0xbe, 0x99, 0x6b, 0xeb, 0x0e, 0xad, 0x77, 0xf7, 0x3c, 0x9c, 0x63, 0xec, 0xfa, - 0x68, 0xec, 0xa1, 0xd7, 0xa0, 0x38, 0x24, 0x43, 0xea, 0x4e, 0xb4, 0xfd, 0x89, 0x4f, 0x3c, 0xe9, - 0xb6, 0x82, 0xa0, 0xd5, 0x18, 0x09, 0x7d, 0x08, 0x8b, 0x03, 0x61, 0xd2, 0x7a, 0x8a, 0x2f, 0x9f, - 0xd7, 0xe3, 0xac, 0x9f, 0xb3, 0x1a, 0x07, 0x32, 0xea, 0xef, 0x24, 0x60, 0x2d, 0xa4, 0x92, 0x5f, - 0x1e, 0x5b, 0x2e, 0x19, 0x12, 0xc7, 0xf7, 0xd0, 0xf7, 0x20, 0x6b, 0x5b, 0x43, 0xcb, 0xf7, 0xa4, - 0xcf, 0x5f, 0x8d, 0x53, 0x1b, 0x0e, 0x0a, 0x4b, 0x30, 0xaa, 0x42, 0xd1, 0x25, 0x1e, 0x71, 0x8f, - 0xc5, 0x8a, 0x97, 0x1e, 0xbd, 0x46, 0x78, 0x46, 0x44, 0xdd, 0x82, 0x5c, 0xd7, 0xd6, 0xfd, 0x03, - 0xea, 0x0e, 0x91, 0x0a, 0x45, 0xdd, 0x35, 0x0e, 0x2d, 0x9f, 0x18, 0xfe, 0xd8, 0x0d, 0x76, 0xdf, - 0x0c, 0x0d, 0xdd, 0x84, 0x24, 0x15, 0x1d, 0xe5, 0x6b, 0xd9, 0x8b, 0xf3, 0xcd, 0x64, 0xa7, 0x87, - 0x93, 0xd4, 0x53, 0x3f, 0x80, 0xd5, 0xae, 0x3d, 0x1e, 0x58, 0x4e, 0x83, 0x78, 0x86, 0x6b, 0x8d, - 0x98, 0x76, 0xb6, 0x2a, 0x59, 0x8c, 0x0a, 0x56, 0x25, 0xfb, 0x0e, 0xb7, 0x76, 0x72, 0xba, 0xb5, - 0xd5, 0xdf, 0x4a, 0xc2, 0x6a, 0xd3, 0x19, 0x58, 0x0e, 0x89, 0x4a, 0xdf, 0x81, 0x65, 0xc2, 0x89, - 0xda, 0xb1, 0x08, 0x37, 0x52, 0xcf, 0x92, 0xa0, 0x06, 0x31, 0xa8, 0x35, 0x17, 0x17, 0xee, 0xc5, - 0x0d, 0xff, 0x05, 0xed, 0xb1, 0xd1, 0xa1, 0x09, 0x8b, 0x23, 0x3e, 0x08, 0x4f, 0x4e, 0xef, 0x9d, - 0x38, 0x5d, 0x2f, 0x8c, 0x33, 0x08, 0x12, 0x52, 0xf6, 0xeb, 0x04, 0x89, 0x3f, 0x4e, 0xc2, 0x4a, - 0x9b, 0x9a, 0x33, 0x7e, 0x28, 0x41, 0xee, 0x90, 0x7a, 0x7e, 0x24, 0x20, 0x86, 0x6d, 0xf4, 0x10, - 0x72, 0x23, 0x39, 0x7d, 0x72, 0xf6, 0x6f, 0xc7, 0x9b, 0x2c, 0x30, 0x38, 0x44, 0xa3, 0x0f, 0x20, - 0x1f, 0x6c, 0x19, 0x36, 0xda, 0x97, 0x58, 0x38, 0x53, 0x3c, 0xfa, 0x10, 0xb2, 0x62, 0x12, 0xd6, - 0xd3, 0x5c, 0xf2, 0xce, 0x4b, 0xf9, 0x1c, 0x4b, 0x21, 0xf4, 0x08, 0x72, 0xbe, 0xed, 0x69, 0x96, - 0x73, 0x40, 0xd7, 0x33, 0x5c, 0xc1, 0x66, 0x6c, 0x90, 0xa1, 0x26, 0xe9, 0xef, 0xf4, 0x5a, 0xce, - 0x01, 0xad, 0x15, 0x2e, 0xce, 0x37, 0x17, 0x65, 0x03, 0x2f, 0xfa, 0xb6, 0xc7, 0x3e, 0xd4, 0xdf, - 0x4d, 0x40, 0x21, 0x82, 0x42, 0xaf, 0x02, 0xf8, 0xee, 0xd8, 0xf3, 0x35, 0x97, 0x52, 0x9f, 0x3b, - 0xab, 0x88, 0xf3, 0x9c, 0x82, 0x29, 0xf5, 0x51, 0x05, 0x6e, 0x18, 0xc4, 0xf5, 0x35, 0xcb, 0xf3, - 0xc6, 0xc4, 0xd5, 0xbc, 0xf1, 0xfe, 0x67, 0xc4, 0xf0, 0xb9, 0xe3, 0x8a, 0x78, 0x95, 0xb1, 0x5a, - 0x9c, 0xd3, 0x13, 0x0c, 0xf4, 0x00, 0x6e, 0x46, 0xf1, 0xa3, 0xf1, 0xbe, 0x6d, 0x19, 0x1a, 0x9b, - 0xcc, 0x14, 0x17, 0xb9, 0x31, 0x15, 0xe9, 0x72, 0xde, 0x63, 0x32, 0x51, 0x7f, 0x9a, 0x00, 0x05, - 0xeb, 0x07, 0xfe, 0x2e, 0x19, 0xee, 0x13, 0xb7, 0xe7, 0xeb, 0xfe, 0xd8, 0x43, 0x37, 0x21, 0x6b, - 0x13, 0xdd, 0x24, 0x2e, 0x37, 0x2a, 0x87, 0x65, 0x0b, 0xed, 0xb1, 0x1d, 0xac, 0x1b, 0x87, 0xfa, - 0xbe, 0x65, 0x5b, 0xfe, 0x84, 0x9b, 0xb2, 0x1c, 0xbf, 0x84, 0xe7, 0x75, 0x56, 0x70, 0x44, 0x10, - 0xcf, 0xa8, 0x41, 0xeb, 0xb0, 0x38, 0x24, 0x9e, 0xa7, 0x0f, 0x08, 0xb7, 0x34, 0x8f, 0x83, 0xa6, - 0xfa, 0x01, 0x14, 0xa3, 0x72, 0xa8, 0x00, 0x8b, 0x7b, 0xed, 0xc7, 0xed, 0xce, 0xd3, 0xb6, 0xb2, - 0x80, 0x56, 0xa0, 0xb0, 0xd7, 0xc6, 0xcd, 0x6a, 0x7d, 0xbb, 0x5a, 0xdb, 0x69, 0x2a, 0x09, 0xb4, - 0x04, 0xf9, 0x69, 0x33, 0xa9, 0xfe, 0x69, 0x02, 0x80, 0xb9, 0x5b, 0x0e, 0xea, 0x7d, 0xc8, 0x78, - 0xbe, 0xee, 0x8b, 0x55, 0xb9, 0x7c, 0xff, 0x8d, 0xcb, 0xe6, 0x50, 0xda, 0xcb, 0xfe, 0x11, 0x2c, - 0x44, 0xa2, 0x16, 0x26, 0x67, 0x2c, 0x64, 0x01, 0x42, 0x37, 0x4d, 0x57, 0x1a, 0xce, 0xbf, 0xd5, - 0x0f, 0x20, 0xc3, 0xa5, 0x67, 0xcd, 0xcd, 0x41, 0xba, 0xc1, 0xbe, 0x12, 0x28, 0x0f, 0x19, 0xdc, - 0xac, 0x36, 0x3e, 0x55, 0x92, 0x48, 0x81, 0x62, 0xa3, 0xd5, 0xab, 0x77, 0xda, 0xed, 0x66, 0xbd, - 0xdf, 0x6c, 0x28, 0x29, 0xf5, 0x0e, 0x64, 0x5a, 0x43, 0xa6, 0xf9, 0x36, 0x5b, 0xf2, 0x07, 0xc4, - 0x25, 0x8e, 0x11, 0xec, 0xa4, 0x29, 0x41, 0xfd, 0x49, 0x1e, 0x32, 0xbb, 0x74, 0xec, 0xf8, 0xe8, - 0x7e, 0x24, 0x6c, 0x2d, 0xc7, 0x67, 0x08, 0x1c, 0x58, 0xe9, 0x4f, 0x46, 0x44, 0x86, 0xb5, 0x9b, - 0x90, 0x15, 0x9b, 0x43, 0x0e, 0x47, 0xb6, 0x18, 0xdd, 0xd7, 0xdd, 0x01, 0xf1, 0xe5, 0x78, 0x64, - 0x0b, 0xbd, 0xc5, 0x4e, 0x2c, 0xdd, 0xa4, 0x8e, 0x3d, 0xe1, 0x7b, 0x28, 0x27, 0x8e, 0x25, 0x4c, - 0x74, 0xb3, 0xe3, 0xd8, 0x13, 0x1c, 0x72, 0xd1, 0x36, 0x14, 0xf7, 0x2d, 0xc7, 0xd4, 0xe8, 0x48, - 0x04, 0xf9, 0xcc, 0xe5, 0x3b, 0x4e, 0x58, 0x55, 0xb3, 0x1c, 0xb3, 0x23, 0xc0, 0xb8, 0xb0, 0x3f, - 0x6d, 0xa0, 0x36, 0x2c, 0x1f, 0x53, 0x7b, 0x3c, 0x24, 0xa1, 0xae, 0x2c, 0xd7, 0xf5, 0xe6, 0xe5, - 0xba, 0x9e, 0x70, 0x7c, 0xa0, 0x6d, 0xe9, 0x38, 0xda, 0x44, 0x8f, 0x61, 0xc9, 0x1f, 0x8e, 0x0e, - 0xbc, 0x50, 0xdd, 0x22, 0x57, 0xf7, 0xad, 0x2b, 0x1c, 0xc6, 0xe0, 0x81, 0xb6, 0xa2, 0x1f, 0x69, - 0x95, 0x7e, 0x23, 0x05, 0x85, 0x88, 0xe5, 0xa8, 0x07, 0x85, 0x91, 0x4b, 0x47, 0xfa, 0x80, 0x1f, - 0x54, 0x72, 0x2e, 0xee, 0xbd, 0xd4, 0xa8, 0x2b, 0xdd, 0xa9, 0x20, 0x8e, 0x6a, 0x51, 0xcf, 0x92, - 0x50, 0x88, 0x30, 0xd1, 0xdb, 0x90, 0xc3, 0x5d, 0xdc, 0x7a, 0x52, 0xed, 0x37, 0x95, 0x85, 0xd2, - 0xed, 0xd3, 0xb3, 0xf2, 0x3a, 0xd7, 0x16, 0x55, 0xd0, 0x75, 0xad, 0x63, 0xb6, 0xf4, 0xde, 0x82, - 0xc5, 0x00, 0x9a, 0x28, 0x7d, 0xf3, 0xf4, 0xac, 0xfc, 0xca, 0x3c, 0x34, 0x82, 0xc4, 0xbd, 0xed, - 0x2a, 0x6e, 0x36, 0x94, 0x64, 0x3c, 0x12, 0xf7, 0x0e, 0x75, 0x97, 0x98, 0xe8, 0x5b, 0x90, 0x95, - 0xc0, 0x54, 0xa9, 0x74, 0x7a, 0x56, 0xbe, 0x39, 0x0f, 0x9c, 0xe2, 0x70, 0x6f, 0xa7, 0xfa, 0xa4, - 0xa9, 0xa4, 0xe3, 0x71, 0xb8, 0x67, 0xeb, 0xc7, 0x04, 0xbd, 0x01, 0x19, 0x01, 0xcb, 0x94, 0x6e, - 0x9d, 0x9e, 0x95, 0xbf, 0xf1, 0x82, 0x3a, 0x86, 0x2a, 0xad, 0xff, 0xf6, 0x1f, 0x6c, 0x2c, 0xfc, - 0xe5, 0x1f, 0x6e, 0x28, 0xf3, 0xec, 0xd2, 0x7f, 0x27, 0x60, 0x69, 0x66, 0xca, 0x91, 0x0a, 0x59, - 0x87, 0x1a, 0x74, 0x24, 0xce, 0xaf, 0x5c, 0x0d, 0x2e, 0xce, 0x37, 0xb3, 0x6d, 0x5a, 0xa7, 0xa3, - 0x09, 0x96, 0x1c, 0xf4, 0x78, 0xee, 0x04, 0x7e, 0xf0, 0x92, 0xeb, 0x29, 0xf6, 0x0c, 0xfe, 0x18, - 0x96, 0x4c, 0xd7, 0x3a, 0x26, 0xae, 0x66, 0x50, 0xe7, 0xc0, 0x1a, 0xc8, 0xb3, 0xa9, 0x14, 0x9b, - 0x26, 0x72, 0x20, 0x2e, 0x0a, 0x81, 0x3a, 0xc7, 0x7f, 0x8d, 0xd3, 0xb7, 0xf4, 0x04, 0x8a, 0xd1, - 0x15, 0xca, 0x8e, 0x13, 0xcf, 0xfa, 0x15, 0x22, 0xf3, 0x41, 0x9e, 0x3d, 0xe2, 0x3c, 0xa3, 0x88, - 0x6c, 0xf0, 0x4d, 0x48, 0x0f, 0xa9, 0x29, 0xf4, 0x2c, 0xd5, 0x6e, 0xb0, 0x24, 0xe0, 0x9f, 0xce, - 0x37, 0x0b, 0xd4, 0xab, 0x6c, 0x59, 0x36, 0xd9, 0xa5, 0x26, 0xc1, 0x1c, 0xa0, 0x1e, 0x43, 0x9a, - 0x85, 0x0a, 0xf4, 0x4d, 0x48, 0xd7, 0x5a, 0xed, 0x86, 0xb2, 0x50, 0x5a, 0x3d, 0x3d, 0x2b, 0x2f, - 0x71, 0x97, 0x30, 0x06, 0x5b, 0xbb, 0x68, 0x13, 0xb2, 0x4f, 0x3a, 0x3b, 0x7b, 0xbb, 0x6c, 0x79, - 0xdd, 0x38, 0x3d, 0x2b, 0xaf, 0x84, 0x6c, 0xe1, 0x34, 0xf4, 0x2a, 0x64, 0xfa, 0xbb, 0xdd, 0xad, - 0x9e, 0x92, 0x2c, 0xa1, 0xd3, 0xb3, 0xf2, 0x72, 0xc8, 0xe7, 0x36, 0x97, 0x56, 0xe5, 0xac, 0xe6, - 0x43, 0xba, 0xfa, 0xb3, 0x24, 0x2c, 0x61, 0x56, 0xf1, 0xb9, 0x7e, 0x97, 0xda, 0x96, 0x31, 0x41, - 0x5d, 0xc8, 0x1b, 0xd4, 0x31, 0xad, 0xc8, 0x9e, 0xba, 0x7f, 0xc9, 0xa9, 0x3f, 0x95, 0x0a, 0x5a, - 0xf5, 0x40, 0x12, 0x4f, 0x95, 0xa0, 0x77, 0x21, 0x63, 0x12, 0x5b, 0x9f, 0xc8, 0xf4, 0xe3, 0x56, - 0x45, 0xd4, 0x94, 0x95, 0xa0, 0xa6, 0xac, 0x34, 0x64, 0x4d, 0x89, 0x05, 0x8e, 0xa7, 0xd9, 0xfa, - 0x33, 0x4d, 0xf7, 0x7d, 0x32, 0x1c, 0xf9, 0x22, 0xf7, 0x48, 0xe3, 0xc2, 0x50, 0x7f, 0x56, 0x95, - 0x24, 0x74, 0x0f, 0xb2, 0x27, 0x96, 0x63, 0xd2, 0x13, 0x99, 0x5e, 0x5c, 0xa1, 0x54, 0x02, 0xd5, - 0x53, 0x76, 0xea, 0xce, 0x99, 0xc9, 0xfc, 0xdd, 0xee, 0xb4, 0x9b, 0x81, 0xbf, 0x25, 0xbf, 0xe3, - 0xb4, 0xa9, 0xc3, 0xf6, 0x0a, 0x74, 0xda, 0xda, 0x56, 0xb5, 0xb5, 0xb3, 0x87, 0x99, 0xcf, 0xd7, - 0x4e, 0xcf, 0xca, 0x4a, 0x08, 0xd9, 0xd2, 0x2d, 0x9b, 0xe5, 0xbb, 0xb7, 0x20, 0x55, 0x6d, 0x7f, - 0xaa, 0x24, 0x4b, 0xca, 0xe9, 0x59, 0xb9, 0x18, 0xb2, 0xab, 0xce, 0x64, 0xba, 0x8d, 0xe6, 0xfb, - 0x55, 0xff, 0x36, 0x05, 0xc5, 0xbd, 0x91, 0xa9, 0xfb, 0x44, 0xac, 0x49, 0x54, 0x86, 0xc2, 0x48, - 0x77, 0x75, 0xdb, 0x26, 0xb6, 0xe5, 0x0d, 0x65, 0xb5, 0x1c, 0x25, 0xa1, 0xf7, 0x5e, 0xd6, 0x8d, - 0xb5, 0x1c, 0x5b, 0x67, 0x3f, 0xfe, 0x97, 0xcd, 0x44, 0xe0, 0xd0, 0x3d, 0x58, 0x3e, 0x10, 0xd6, - 0x6a, 0xba, 0xc1, 0x27, 0x36, 0xc5, 0x27, 0xb6, 0x12, 0x37, 0xb1, 0x51, 0xb3, 0x2a, 0x72, 0x90, - 0x55, 0x2e, 0x85, 0x97, 0x0e, 0xa2, 0x4d, 0xf4, 0x00, 0x16, 0x87, 0xd4, 0xb1, 0x7c, 0xea, 0x5e, - 0x3f, 0x0b, 0x01, 0x12, 0xbd, 0x0d, 0xab, 0x6c, 0x72, 0x03, 0x7b, 0x38, 0x9b, 0x9f, 0x58, 0x49, - 0xbc, 0x32, 0xd4, 0x9f, 0xc9, 0x0e, 0x31, 0x23, 0xa3, 0x1a, 0x64, 0xa8, 0xcb, 0x52, 0xa2, 0x2c, - 0x37, 0xf7, 0x9d, 0x6b, 0xcd, 0x15, 0x8d, 0x0e, 0x93, 0xc1, 0x42, 0x54, 0xfd, 0x3e, 0x2c, 0xcd, - 0x0c, 0x82, 0x65, 0x02, 0xdd, 0xea, 0x5e, 0xaf, 0xa9, 0x2c, 0xa0, 0x22, 0xe4, 0xea, 0x9d, 0x76, - 0xbf, 0xd5, 0xde, 0x63, 0xa9, 0x4c, 0x11, 0x72, 0xb8, 0xb3, 0xb3, 0x53, 0xab, 0xd6, 0x1f, 0x2b, - 0x49, 0xb5, 0x02, 0x85, 0x88, 0x36, 0xb4, 0x0c, 0xd0, 0xeb, 0x77, 0xba, 0xda, 0x56, 0x0b, 0xf7, - 0xfa, 0x22, 0x11, 0xea, 0xf5, 0xab, 0xb8, 0x2f, 0x09, 0x09, 0xf5, 0x3f, 0x92, 0xc1, 0x8c, 0xca, - 0xdc, 0xa7, 0x36, 0x9b, 0xfb, 0x5c, 0x61, 0xbc, 0xcc, 0x7e, 0xa6, 0x8d, 0x30, 0x07, 0x7a, 0x0f, - 0x80, 0x2f, 0x1c, 0x62, 0x6a, 0xba, 0x2f, 0x27, 0xbe, 0xf4, 0x82, 0x93, 0xfb, 0xc1, 0xa5, 0x0d, - 0xce, 0x4b, 0x74, 0xd5, 0x47, 0x1f, 0x42, 0xd1, 0xa0, 0xc3, 0x91, 0x4d, 0xa4, 0x70, 0xea, 0x5a, - 0xe1, 0x42, 0x88, 0xaf, 0xfa, 0xd1, 0xec, 0x2b, 0x3d, 0x9b, 0x1f, 0xfe, 0x66, 0x22, 0xf0, 0x4c, - 0x4c, 0xc2, 0x55, 0x84, 0xdc, 0x5e, 0xb7, 0x51, 0xed, 0xb7, 0xda, 0x8f, 0x94, 0x04, 0x02, 0xc8, - 0x72, 0x57, 0x37, 0x94, 0x24, 0x4b, 0x14, 0xeb, 0x9d, 0xdd, 0xee, 0x4e, 0x93, 0xa7, 0x5c, 0x68, - 0x0d, 0x94, 0xc0, 0xd9, 0x1a, 0x77, 0x64, 0xb3, 0xa1, 0xa4, 0xd1, 0x0d, 0x58, 0x09, 0xa9, 0x52, - 0x32, 0x83, 0x6e, 0x02, 0x0a, 0x89, 0x53, 0x15, 0x59, 0xf5, 0xd7, 0x60, 0xa5, 0x4e, 0x1d, 0x5f, - 0xb7, 0x9c, 0x30, 0x89, 0xbe, 0xcf, 0x06, 0x2d, 0x49, 0x9a, 0x25, 0x2f, 0x3b, 0x6a, 0x2b, 0x17, - 0xe7, 0x9b, 0x85, 0x10, 0xda, 0x6a, 0xb0, 0x91, 0x06, 0x0d, 0x93, 0xed, 0xdf, 0x91, 0x65, 0x72, - 0xe7, 0x66, 0x6a, 0x8b, 0x17, 0xe7, 0x9b, 0xa9, 0x6e, 0xab, 0x81, 0x19, 0x0d, 0x7d, 0x13, 0xf2, - 0xe4, 0x99, 0xe5, 0x6b, 0x06, 0x8b, 0xe1, 0xcc, 0x81, 0x19, 0x9c, 0x63, 0x84, 0x3a, 0x0b, 0xd9, - 0x35, 0x80, 0x2e, 0x75, 0x7d, 0xd9, 0xf3, 0x77, 0x21, 0x33, 0xa2, 0x2e, 0x2f, 0xcf, 0x2f, 0xbd, - 0x34, 0x62, 0x70, 0xb1, 0x50, 0xb1, 0x00, 0xab, 0x7f, 0x95, 0x04, 0xe8, 0xeb, 0xde, 0x91, 0x54, - 0xf2, 0x10, 0xf2, 0xe1, 0x05, 0x9c, 0xac, 0xf3, 0xaf, 0x9c, 0xed, 0x10, 0x8c, 0x1e, 0x04, 0x8b, - 0x4d, 0x94, 0x07, 0xb1, 0x75, 0x5a, 0xd0, 0x51, 0x5c, 0x86, 0x3d, 0x5b, 0x03, 0xb0, 0x23, 0x91, - 0xb8, 0xae, 0x9c, 0x79, 0xf6, 0x89, 0xea, 0xfc, 0x58, 0x10, 0x4e, 0x93, 0x09, 0x66, 0xec, 0xcd, - 0xc6, 0xdc, 0x8c, 0x6c, 0x2f, 0xe0, 0xa9, 0x1c, 0xfa, 0x18, 0x0a, 0x6c, 0xdc, 0x9a, 0xc7, 0x79, - 0x32, 0xb7, 0xbc, 0xd4, 0x55, 0x42, 0x03, 0x86, 0x51, 0xf8, 0x5d, 0x53, 0x60, 0xd9, 0x1d, 0x3b, - 0x6c, 0xd8, 0x52, 0x87, 0xfa, 0x27, 0x49, 0x78, 0xa5, 0x4d, 0xfc, 0x13, 0xea, 0x1e, 0x55, 0x7d, - 0x5f, 0x37, 0x0e, 0x87, 0xc4, 0x91, 0x4e, 0x8e, 0x64, 0xd6, 0x89, 0x99, 0xcc, 0x7a, 0x1d, 0x16, - 0x75, 0xdb, 0xd2, 0x3d, 0x22, 0xd2, 0x91, 0x3c, 0x0e, 0x9a, 0x2c, 0xff, 0x67, 0xd5, 0x04, 0xf1, - 0x3c, 0x22, 0x0a, 0xfc, 0x3c, 0x9e, 0x12, 0xd0, 0x8f, 0xe0, 0xa6, 0x4c, 0x3c, 0xf4, 0xb0, 0x2b, - 0x96, 0xd9, 0x06, 0x37, 0x85, 0xcd, 0xd8, 0xf2, 0x26, 0xde, 0x38, 0x99, 0x99, 0x4c, 0xc9, 0x9d, - 0x91, 0x2f, 0xf3, 0x9c, 0x35, 0x33, 0x86, 0x55, 0x7a, 0x04, 0xb7, 0x2e, 0x15, 0xf9, 0x4a, 0x17, - 0x08, 0xff, 0x90, 0x04, 0x68, 0x75, 0xab, 0xbb, 0xd2, 0x49, 0x0d, 0xc8, 0x1e, 0xe8, 0x43, 0xcb, - 0x9e, 0x5c, 0x15, 0xa7, 0xa6, 0xf8, 0x4a, 0x55, 0xb8, 0x63, 0x8b, 0xcb, 0x60, 0x29, 0xcb, 0x8b, - 0x9b, 0xf1, 0xbe, 0x43, 0xfc, 0xb0, 0xb8, 0xe1, 0x2d, 0x66, 0x86, 0xab, 0x3b, 0xe1, 0x02, 0x13, - 0x0d, 0x36, 0x01, 0x03, 0xdd, 0x27, 0x27, 0xfa, 0x24, 0x08, 0x2e, 0xb2, 0x89, 0xb6, 0xf9, 0x35, - 0x1d, 0x71, 0x8f, 0x89, 0xb9, 0x9e, 0xe1, 0x4e, 0xbd, 0xce, 0x1e, 0x2c, 0xe1, 0xc2, 0x77, 0xa1, - 0x74, 0xe9, 0x03, 0x9e, 0xd8, 0x4c, 0x59, 0x5f, 0xc9, 0x47, 0x77, 0x61, 0x69, 0x66, 0x9c, 0x2f, - 0x54, 0x95, 0xad, 0xee, 0x93, 0xef, 0x2a, 0x69, 0xf9, 0xf5, 0x7d, 0x25, 0xab, 0xfe, 0x51, 0x4a, - 0x84, 0x03, 0xe9, 0xd5, 0xf8, 0xeb, 0xe9, 0x1c, 0xdf, 0xc4, 0x06, 0xb5, 0xe5, 0x36, 0x7d, 0xf3, - 0xea, 0x28, 0xc1, 0xaa, 0x14, 0x0e, 0xc7, 0xa1, 0x20, 0xda, 0x84, 0x82, 0x58, 0xc5, 0x1a, 0xdb, - 0x16, 0xdc, 0xad, 0x4b, 0x18, 0x04, 0x89, 0x49, 0xa2, 0x3b, 0xb0, 0xcc, 0x6f, 0x21, 0xbc, 0x43, - 0x62, 0x0a, 0x4c, 0x9a, 0x63, 0x96, 0x42, 0x2a, 0x87, 0xed, 0x42, 0x51, 0x12, 0x34, 0x9e, 0xa1, - 0x66, 0xb8, 0x41, 0x6f, 0x5f, 0x67, 0x90, 0x10, 0xe1, 0x89, 0x6b, 0x61, 0x34, 0x6d, 0xa8, 0x0d, - 0xc8, 0x05, 0xc6, 0xa2, 0x75, 0x48, 0xf5, 0xeb, 0x5d, 0x65, 0xa1, 0xb4, 0x72, 0x7a, 0x56, 0x2e, - 0x04, 0xe4, 0x7e, 0xbd, 0xcb, 0x38, 0x7b, 0x8d, 0xae, 0x92, 0x98, 0xe5, 0xec, 0x35, 0xba, 0xa5, - 0x34, 0xcb, 0x94, 0xd4, 0x03, 0x28, 0x44, 0x7a, 0x40, 0xaf, 0xc3, 0x62, 0xab, 0xfd, 0x08, 0x37, - 0x7b, 0x3d, 0x65, 0xa1, 0x74, 0xf3, 0xf4, 0xac, 0x8c, 0x22, 0xdc, 0x96, 0x33, 0x60, 0xf3, 0x83, - 0x5e, 0x85, 0xf4, 0x76, 0x87, 0x9d, 0xc0, 0x22, 0x25, 0x8e, 0x20, 0xb6, 0xa9, 0xe7, 0x97, 0x6e, - 0xc8, 0x14, 0x2c, 0xaa, 0x58, 0xfd, 0xbd, 0x04, 0x64, 0xc5, 0x66, 0x8a, 0x9d, 0xa8, 0x2a, 0x2c, - 0x06, 0xf5, 0xaa, 0x28, 0x57, 0xde, 0xbc, 0xbc, 0xb4, 0xa8, 0xc8, 0x4a, 0x40, 0x2c, 0xbf, 0x40, - 0xae, 0xf4, 0x3e, 0x14, 0xa3, 0x8c, 0xaf, 0xb4, 0xf8, 0x7e, 0x04, 0x05, 0xb6, 0xbe, 0x83, 0x12, - 0xe3, 0x3e, 0x64, 0x45, 0x40, 0x08, 0x4f, 0x84, 0xcb, 0xeb, 0x1c, 0x89, 0x44, 0x0f, 0x61, 0x51, - 0xd4, 0x46, 0xc1, 0x35, 0xe5, 0xc6, 0xd5, 0xbb, 0x08, 0x07, 0x70, 0xf5, 0x63, 0x48, 0x77, 0x09, - 0x71, 0x99, 0xef, 0x1d, 0x6a, 0x92, 0xe9, 0x21, 0x2a, 0xcb, 0x3a, 0x93, 0xb4, 0x1a, 0xac, 0xac, - 0x33, 0x49, 0xcb, 0x0c, 0x2f, 0x62, 0x92, 0x91, 0x8b, 0x98, 0x3e, 0x14, 0x9f, 0x12, 0x6b, 0x70, - 0xe8, 0x13, 0x93, 0x2b, 0x7a, 0x07, 0xd2, 0x23, 0x12, 0x1a, 0xbf, 0x1e, 0xbb, 0xc0, 0x08, 0x71, - 0x31, 0x47, 0xb1, 0x38, 0x72, 0xc2, 0xa5, 0xe5, 0xdd, 0xba, 0x6c, 0xa9, 0x7f, 0x9f, 0x84, 0xe5, - 0x96, 0xe7, 0x8d, 0x75, 0xc7, 0x08, 0xf2, 0xab, 0x8f, 0x66, 0xf3, 0xab, 0xd8, 0x47, 0x88, 0x59, - 0x91, 0xd9, 0xfb, 0x25, 0x79, 0xc6, 0x25, 0xc3, 0x33, 0x4e, 0xfd, 0xf7, 0x44, 0x70, 0x89, 0x74, - 0x27, 0xb2, 0xdd, 0x4b, 0xeb, 0xa7, 0x67, 0xe5, 0xb5, 0xa8, 0x26, 0xb2, 0xe7, 0x1c, 0x39, 0xf4, - 0xc4, 0x41, 0xaf, 0x41, 0x06, 0x37, 0xdb, 0xcd, 0xa7, 0x4a, 0x42, 0x2c, 0xcf, 0x19, 0x10, 0x26, - 0x0e, 0x39, 0x61, 0x9a, 0xba, 0xcd, 0x76, 0x83, 0xe5, 0x43, 0xc9, 0x18, 0x4d, 0x5d, 0xe2, 0x98, - 0x96, 0x33, 0x40, 0xaf, 0x43, 0xb6, 0xd5, 0xeb, 0xed, 0xf1, 0x32, 0xff, 0x95, 0xd3, 0xb3, 0xf2, - 0x8d, 0x19, 0x14, 0xbf, 0x40, 0x34, 0x19, 0x88, 0x15, 0x23, 0x2c, 0x53, 0x8a, 0x01, 0xb1, 0x2c, - 0x57, 0x80, 0x70, 0xa7, 0x5f, 0xed, 0xb3, 0x0a, 0xff, 0x45, 0x10, 0xa6, 0xec, 0xaf, 0xdc, 0x6e, - 0xff, 0x9c, 0x04, 0xa5, 0x6a, 0x18, 0x64, 0xe4, 0x33, 0xbe, 0xac, 0xff, 0xfa, 0x90, 0x1b, 0xb1, - 0x2f, 0x8b, 0x04, 0xb9, 0xcc, 0xc3, 0xd8, 0x67, 0xb4, 0x39, 0xb9, 0x0a, 0xa6, 0x36, 0xa9, 0x9a, - 0x43, 0xcb, 0xf3, 0x2c, 0xea, 0x08, 0x1a, 0x0e, 0x35, 0x95, 0xfe, 0x33, 0x01, 0x37, 0x62, 0x10, - 0xe8, 0x2e, 0xa4, 0x5d, 0x6a, 0x07, 0x73, 0x78, 0xfb, 0xb2, 0xfb, 0x41, 0x26, 0x8a, 0x39, 0x12, - 0x6d, 0x00, 0xe8, 0x63, 0x9f, 0xea, 0xbc, 0x7f, 0x3e, 0x7b, 0x39, 0x1c, 0xa1, 0xa0, 0xa7, 0x90, - 0xf5, 0x88, 0xe1, 0x92, 0x20, 0xe3, 0xfd, 0xf8, 0xff, 0x6a, 0x7d, 0xa5, 0xc7, 0xd5, 0x60, 0xa9, - 0xae, 0x54, 0x81, 0xac, 0xa0, 0xb0, 0x65, 0x6f, 0xea, 0xbe, 0x2e, 0x6f, 0x8f, 0xf9, 0x37, 0x5b, - 0x4d, 0xba, 0x3d, 0x08, 0x56, 0x93, 0x6e, 0x0f, 0xd4, 0xbf, 0x49, 0x02, 0x34, 0x9f, 0xf9, 0xc4, - 0x75, 0x74, 0xbb, 0x5e, 0x45, 0xcd, 0x48, 0xf4, 0x17, 0xa3, 0xfd, 0x76, 0xec, 0x95, 0x78, 0x28, - 0x51, 0xa9, 0x57, 0x63, 0xe2, 0xff, 0x2d, 0x48, 0x8d, 0x5d, 0xf9, 0x32, 0x2a, 0xb2, 0xd5, 0x3d, - 0xbc, 0x83, 0x19, 0x0d, 0x35, 0xa7, 0x61, 0x2b, 0x75, 0xf9, 0xfb, 0x67, 0xa4, 0x83, 0xd8, 0xd0, - 0xc5, 0x76, 0xbe, 0xa1, 0x6b, 0x06, 0x91, 0x27, 0x47, 0x51, 0xec, 0xfc, 0x7a, 0xb5, 0x4e, 0x5c, - 0x1f, 0x67, 0x0d, 0x9d, 0xfd, 0xff, 0x5a, 0xf1, 0xed, 0x1d, 0x80, 0xe9, 0xd0, 0xd0, 0x06, 0x64, - 0xea, 0x5b, 0xbd, 0xde, 0x8e, 0xb2, 0x20, 0x02, 0xf8, 0x94, 0xc5, 0xc9, 0xea, 0x5f, 0x24, 0x21, - 0x57, 0xaf, 0xca, 0x63, 0xb5, 0x0e, 0x0a, 0x8f, 0x4a, 0xfc, 0xce, 0x9d, 0x3c, 0x1b, 0x59, 0xee, - 0x44, 0x06, 0x96, 0x2b, 0x4a, 0xcf, 0x65, 0x26, 0xc2, 0xac, 0x6e, 0x72, 0x01, 0x84, 0xa1, 0x48, - 0xa4, 0x13, 0x34, 0x43, 0x0f, 0x62, 0xfc, 0xc6, 0xd5, 0xce, 0x12, 0x45, 0xc4, 0xb4, 0xed, 0xe1, - 0x42, 0xa0, 0xa4, 0xae, 0x7b, 0xe8, 0x3d, 0x58, 0xf1, 0xac, 0x81, 0x63, 0x39, 0x03, 0x2d, 0x70, - 0x1e, 0x7f, 0x00, 0xa8, 0xad, 0x5e, 0x9c, 0x6f, 0x2e, 0xf5, 0x04, 0x4b, 0xfa, 0x70, 0x49, 0x22, - 0xeb, 0xdc, 0x95, 0xe8, 0xfb, 0xb0, 0x1c, 0x11, 0x65, 0x5e, 0x14, 0x6e, 0x57, 0x2e, 0xce, 0x37, - 0x8b, 0xa1, 0xe4, 0x63, 0x32, 0xc1, 0xc5, 0x50, 0xf0, 0x31, 0xe1, 0xb7, 0x24, 0x07, 0xd4, 0x35, - 0x88, 0xe6, 0xf2, 0x3d, 0xcd, 0x4f, 0xf0, 0x34, 0x2e, 0x70, 0x9a, 0xd8, 0xe6, 0xea, 0x13, 0xb8, - 0xd1, 0x71, 0x8d, 0x43, 0xe2, 0xf9, 0xc2, 0x15, 0xd2, 0x8b, 0x1f, 0xc3, 0x6d, 0x5f, 0xf7, 0x8e, - 0xb4, 0x43, 0xcb, 0xf3, 0xa9, 0x3b, 0xd1, 0x5c, 0xe2, 0x13, 0x87, 0xf1, 0x35, 0xfe, 0x6a, 0x28, - 0xaf, 0xb1, 0x6e, 0x31, 0xcc, 0xb6, 0x80, 0xe0, 0x00, 0xb1, 0xc3, 0x00, 0x6a, 0x0b, 0x8a, 0xac, - 0x98, 0x68, 0x90, 0x03, 0x7d, 0x6c, 0xfb, 0x6c, 0xf4, 0x60, 0xd3, 0x81, 0xf6, 0xd2, 0xc7, 0x54, - 0xde, 0xa6, 0x03, 0xf1, 0xa9, 0xfe, 0x10, 0x94, 0x86, 0xe5, 0x8d, 0x74, 0xdf, 0x38, 0x0c, 0xee, - 0xe7, 0x50, 0x03, 0x94, 0x43, 0xa2, 0xbb, 0xfe, 0x3e, 0xd1, 0x7d, 0x6d, 0x44, 0x5c, 0x8b, 0x9a, - 0xd7, 0xcf, 0xf2, 0x4a, 0x28, 0xd2, 0xe5, 0x12, 0xea, 0x7f, 0x25, 0x00, 0xb0, 0x7e, 0x10, 0x64, - 0x64, 0xdf, 0x81, 0x55, 0xcf, 0xd1, 0x47, 0xde, 0x21, 0xf5, 0x35, 0xcb, 0xf1, 0x89, 0x7b, 0xac, - 0xdb, 0xf2, 0x9a, 0x45, 0x09, 0x18, 0x2d, 0x49, 0x47, 0xef, 0x00, 0x3a, 0x22, 0x64, 0xa4, 0x51, - 0xdb, 0xd4, 0x02, 0xa6, 0x78, 0xd3, 0x4c, 0x63, 0x85, 0x71, 0x3a, 0xb6, 0xd9, 0x0b, 0xe8, 0xa8, - 0x06, 0x1b, 0x6c, 0xf8, 0xc4, 0xf1, 0x5d, 0x8b, 0x78, 0xda, 0x01, 0x75, 0x35, 0xcf, 0xa6, 0x27, - 0xda, 0x01, 0xb5, 0x6d, 0x7a, 0x42, 0xdc, 0xe0, 0x06, 0xab, 0x64, 0xd3, 0x41, 0x53, 0x80, 0xb6, - 0xa8, 0xdb, 0xb3, 0xe9, 0xc9, 0x56, 0x80, 0x60, 0x69, 0xdb, 0x74, 0xcc, 0xbe, 0x65, 0x1c, 0x05, - 0x69, 0x5b, 0x48, 0xed, 0x5b, 0xc6, 0x11, 0x7a, 0x1d, 0x96, 0x88, 0x4d, 0xf8, 0x45, 0x86, 0x40, - 0x65, 0x38, 0xaa, 0x18, 0x10, 0x19, 0x48, 0xfd, 0x04, 0x94, 0xa6, 0x63, 0xb8, 0x93, 0x51, 0x64, - 0xce, 0xdf, 0x01, 0xc4, 0x82, 0xa4, 0x66, 0x53, 0xe3, 0x48, 0x1b, 0xea, 0x8e, 0x3e, 0x60, 0x76, - 0x89, 0xa7, 0x26, 0x85, 0x71, 0x76, 0xa8, 0x71, 0xb4, 0x2b, 0xe9, 0xea, 0x7b, 0x00, 0xbd, 0x91, - 0x4b, 0x74, 0xb3, 0xc3, 0xb2, 0x09, 0xe6, 0x3a, 0xde, 0xd2, 0x4c, 0xf9, 0x54, 0x47, 0x5d, 0xb9, - 0xd5, 0x15, 0xc1, 0x68, 0x84, 0x74, 0xf5, 0x17, 0xe1, 0x46, 0xd7, 0xd6, 0x0d, 0xfe, 0x6c, 0xdd, - 0x0d, 0xdf, 0x4e, 0xd0, 0x43, 0xc8, 0x0a, 0xa8, 0x9c, 0xc9, 0xd8, 0xed, 0x36, 0xed, 0x73, 0x7b, - 0x01, 0x4b, 0x7c, 0xad, 0x08, 0x30, 0xd5, 0xa3, 0xfe, 0x59, 0x02, 0xf2, 0xa1, 0x7e, 0x54, 0x06, - 0x56, 0xca, 0xb3, 0xe5, 0x6d, 0x39, 0xb2, 0xf6, 0xce, 0xe3, 0x28, 0x09, 0xb5, 0xa0, 0x30, 0x0a, - 0xa5, 0xaf, 0xcc, 0xe7, 0x62, 0xac, 0xc6, 0x51, 0x59, 0xf4, 0x3e, 0xe4, 0x83, 0xb7, 0xd1, 0x20, - 0xc2, 0x5e, 0xfd, 0x94, 0x3a, 0x85, 0xab, 0x1f, 0x01, 0xfc, 0x80, 0x5a, 0x4e, 0x9f, 0x1e, 0x11, - 0x87, 0xbf, 0xf5, 0xb1, 0x9a, 0x90, 0x04, 0x5e, 0x94, 0x2d, 0x5e, 0x90, 0x8b, 0x29, 0x08, 0x9f, - 0xbc, 0x44, 0x53, 0xfd, 0xeb, 0x24, 0x64, 0x31, 0xa5, 0x7e, 0xbd, 0x8a, 0xca, 0x90, 0x95, 0x71, - 0x82, 0x9f, 0x3f, 0xb5, 0xfc, 0xc5, 0xf9, 0x66, 0x46, 0x04, 0x88, 0x8c, 0xc1, 0x23, 0x43, 0x24, - 0x82, 0x27, 0x2f, 0x8b, 0xe0, 0xe8, 0x2e, 0x14, 0x25, 0x48, 0x3b, 0xd4, 0xbd, 0x43, 0x51, 0xa0, - 0xd5, 0x96, 0x2f, 0xce, 0x37, 0x41, 0x20, 0xb7, 0x75, 0xef, 0x10, 0x83, 0x40, 0xb3, 0x6f, 0xd4, - 0x84, 0xc2, 0x67, 0xd4, 0x72, 0x34, 0x9f, 0x0f, 0x42, 0x5e, 0xf9, 0xc5, 0xce, 0xe3, 0x74, 0xa8, - 0xf2, 0xe1, 0x1b, 0x3e, 0x9b, 0x0e, 0xbe, 0x09, 0x4b, 0x2e, 0xa5, 0xbe, 0x08, 0x5b, 0x16, 0x75, - 0xe4, 0x6d, 0x42, 0x39, 0xf6, 0x92, 0x99, 0x52, 0x1f, 0x4b, 0x1c, 0x2e, 0xba, 0x91, 0x16, 0xba, - 0x0b, 0x6b, 0xb6, 0xee, 0xf9, 0x1a, 0x8f, 0x77, 0xe6, 0x54, 0x5b, 0x96, 0x6f, 0x35, 0xc4, 0x78, - 0x5b, 0x9c, 0x15, 0x48, 0xa8, 0xff, 0x98, 0x80, 0x02, 0x1b, 0x8c, 0x75, 0x60, 0x19, 0x2c, 0xc9, - 0xfb, 0xea, 0xb9, 0xc7, 0x2d, 0x48, 0x19, 0x9e, 0x2b, 0x9d, 0xca, 0x0f, 0xdf, 0x7a, 0x0f, 0x63, - 0x46, 0x43, 0x9f, 0x40, 0x56, 0xde, 0x6a, 0x88, 0xb4, 0x43, 0xbd, 0x3e, 0x1d, 0x95, 0xbe, 0x91, - 0x72, 0x7c, 0x2d, 0x4f, 0xad, 0x13, 0x87, 0x00, 0x8e, 0x92, 0xd0, 0x4d, 0x48, 0x1a, 0xc2, 0x5d, - 0xf2, 0x97, 0x15, 0xf5, 0x36, 0x4e, 0x1a, 0x8e, 0xfa, 0x77, 0x09, 0x58, 0x9a, 0x6e, 0x78, 0xb6, - 0x02, 0x6e, 0x43, 0xde, 0x1b, 0xef, 0x7b, 0x13, 0xcf, 0x27, 0xc3, 0xe0, 0x1d, 0x33, 0x24, 0xa0, - 0x16, 0xe4, 0x75, 0x7b, 0x40, 0x5d, 0xcb, 0x3f, 0x1c, 0xca, 0x4a, 0x34, 0x3e, 0x55, 0x88, 0xea, - 0xac, 0x54, 0x03, 0x11, 0x3c, 0x95, 0x0e, 0xce, 0x7d, 0xf1, 0xd8, 0xcd, 0xcf, 0xfd, 0xd7, 0xa0, - 0x68, 0xeb, 0x43, 0x7e, 0xcd, 0xe3, 0x5b, 0x43, 0x31, 0x8e, 0x34, 0x2e, 0x48, 0x5a, 0xdf, 0x1a, - 0x12, 0x55, 0x85, 0x7c, 0xa8, 0x0c, 0xad, 0x40, 0xa1, 0xda, 0xec, 0x69, 0xf7, 0xee, 0x3f, 0xd4, - 0x1e, 0xd5, 0x77, 0x95, 0x05, 0x99, 0x9b, 0xfe, 0x79, 0x02, 0x96, 0x64, 0x38, 0x92, 0xf9, 0xfe, - 0xeb, 0xb0, 0xe8, 0xea, 0x07, 0x7e, 0x50, 0x91, 0xa4, 0xc5, 0xaa, 0x66, 0x11, 0x9e, 0x55, 0x24, - 0x8c, 0x15, 0x5f, 0x91, 0x44, 0x5e, 0xd6, 0x53, 0x57, 0xbe, 0xac, 0xa7, 0x7f, 0x2e, 0x2f, 0xeb, - 0xea, 0xaf, 0x03, 0x6c, 0x59, 0x36, 0xe9, 0x8b, 0xbb, 0xa6, 0xb8, 0xfa, 0x92, 0xe5, 0x70, 0xf2, - 0xc6, 0x31, 0xc8, 0xe1, 0x5a, 0x0d, 0xcc, 0x68, 0x8c, 0x35, 0xb0, 0x4c, 0xb9, 0x19, 0x39, 0xeb, - 0x11, 0x63, 0x0d, 0x2c, 0x33, 0x7c, 0x4b, 0x4a, 0x5f, 0xf7, 0x96, 0x74, 0x96, 0x80, 0x15, 0x99, - 0xbb, 0x86, 0xe1, 0xf7, 0xdb, 0x90, 0x17, 0x69, 0xec, 0xb4, 0xa0, 0xe3, 0xaf, 0xc9, 0x02, 0xd7, - 0x6a, 0xe0, 0x9c, 0x60, 0xb7, 0x4c, 0xb4, 0x09, 0x05, 0x09, 0x8d, 0xfc, 0x0a, 0x07, 0x04, 0xa9, - 0xcd, 0xcc, 0xff, 0x2e, 0xa4, 0x0f, 0x2c, 0x9b, 0xc8, 0x85, 0x1e, 0x1b, 0x00, 0xa6, 0x0e, 0xd8, - 0x5e, 0xc0, 0x1c, 0x5d, 0xcb, 0x05, 0x97, 0x71, 0xdc, 0x3e, 0x59, 0x76, 0x46, 0xed, 0x13, 0x15, - 0xe8, 0x9c, 0x7d, 0x02, 0xc7, 0xec, 0x13, 0x6c, 0x61, 0x9f, 0x84, 0x46, 0xed, 0x13, 0xa4, 0x9f, - 0x8b, 0x7d, 0x3b, 0x70, 0xb3, 0x66, 0xeb, 0xc6, 0x91, 0x6d, 0x79, 0x3e, 0x31, 0xa3, 0x11, 0xe3, - 0x3e, 0x64, 0x67, 0x92, 0xce, 0xab, 0x2e, 0x67, 0x25, 0x52, 0xfd, 0xb7, 0x04, 0x14, 0xb7, 0x89, - 0x6e, 0xfb, 0x87, 0xd3, 0xab, 0x21, 0x9f, 0x78, 0xbe, 0x3c, 0xac, 0xf8, 0x37, 0xfa, 0x1e, 0xe4, - 0xc2, 0x9c, 0xe4, 0xda, 0x57, 0xb2, 0x10, 0x8a, 0x1e, 0xc0, 0x22, 0xdb, 0x63, 0x74, 0x1c, 0x14, - 0x3b, 0x57, 0x3d, 0xc0, 0x48, 0x24, 0x3b, 0x64, 0x5c, 0xc2, 0x93, 0x10, 0xbe, 0x94, 0x32, 0x38, - 0x68, 0xa2, 0xff, 0x0f, 0x45, 0xfe, 0x7e, 0x10, 0xe4, 0x5c, 0x99, 0xeb, 0x74, 0x16, 0xc4, 0x13, - 0xa0, 0xc8, 0xb7, 0xfe, 0x27, 0x01, 0x6b, 0xbb, 0xfa, 0x64, 0x9f, 0xc8, 0xb0, 0x41, 0x4c, 0x4c, - 0x0c, 0xea, 0x9a, 0xa8, 0x1b, 0x0d, 0x37, 0x57, 0xbc, 0x28, 0xc6, 0x09, 0xc7, 0x47, 0x9d, 0xa0, - 0x00, 0x4b, 0x46, 0x0a, 0xb0, 0x35, 0xc8, 0x38, 0xd4, 0x31, 0x88, 0x8c, 0x45, 0xa2, 0xa1, 0x5a, - 0xd1, 0x50, 0x53, 0x0a, 0x1f, 0xfb, 0xf8, 0x53, 0x5d, 0x9b, 0xfa, 0x61, 0x6f, 0xe8, 0x13, 0x28, - 0xf5, 0x9a, 0x75, 0xdc, 0xec, 0xd7, 0x3a, 0x3f, 0xd4, 0x7a, 0xd5, 0x9d, 0x5e, 0xf5, 0xfe, 0x5d, - 0xad, 0xdb, 0xd9, 0xf9, 0xf4, 0xde, 0x83, 0xbb, 0xdf, 0x53, 0x12, 0xa5, 0xf2, 0xe9, 0x59, 0xf9, - 0x76, 0xbb, 0x5a, 0xdf, 0x11, 0x3b, 0x66, 0x9f, 0x3e, 0xeb, 0xe9, 0xb6, 0xa7, 0xdf, 0xbf, 0xdb, - 0xa5, 0xf6, 0x84, 0x61, 0xd8, 0xb2, 0x2e, 0x46, 0xcf, 0xab, 0xe8, 0x31, 0x9c, 0xb8, 0xf4, 0x18, - 0x9e, 0x9e, 0xe6, 0xc9, 0x4b, 0x4e, 0xf3, 0x2d, 0x58, 0x33, 0x5c, 0xea, 0x79, 0x1a, 0xcb, 0xfe, - 0x89, 0x39, 0x57, 0x5f, 0x7c, 0xe3, 0xe2, 0x7c, 0x73, 0xb5, 0xce, 0xf8, 0x3d, 0xce, 0x96, 0xea, - 0x57, 0x8d, 0x08, 0x89, 0xf7, 0xa4, 0xfe, 0x7e, 0x8a, 0x25, 0x52, 0xd6, 0xb1, 0x65, 0x93, 0x01, - 0xf1, 0xd0, 0x13, 0x58, 0x31, 0x5c, 0x62, 0xb2, 0xb4, 0x5e, 0xb7, 0xa3, 0xbf, 0xe6, 0xfc, 0x7f, - 0xb1, 0x39, 0x4d, 0x28, 0x58, 0xa9, 0x87, 0x52, 0xbd, 0x11, 0x31, 0xf0, 0xb2, 0x31, 0xd3, 0x46, - 0x9f, 0xc1, 0x8a, 0x47, 0x6c, 0xcb, 0x19, 0x3f, 0xd3, 0x0c, 0xea, 0xf8, 0xe4, 0x59, 0xf0, 0x6e, - 0x75, 0x9d, 0xde, 0x5e, 0x73, 0x87, 0x49, 0xd5, 0x85, 0x50, 0x0d, 0x5d, 0x9c, 0x6f, 0x2e, 0xcf, - 0xd2, 0xf0, 0xb2, 0xd4, 0x2c, 0xdb, 0xa5, 0x36, 0x2c, 0xcf, 0x5a, 0x83, 0xd6, 0xe4, 0xde, 0xe7, - 0x21, 0x24, 0xd8, 0xdb, 0xe8, 0x36, 0xe4, 0x5c, 0x32, 0xb0, 0x3c, 0xdf, 0x15, 0x6e, 0x66, 0x9c, - 0x90, 0xc2, 0x76, 0xbe, 0xf8, 0x29, 0x4e, 0xe9, 0x57, 0x61, 0xae, 0x47, 0xb6, 0x59, 0x4c, 0xcb, - 0xd3, 0xf7, 0xa5, 0xca, 0x1c, 0x0e, 0x9a, 0x6c, 0x0d, 0x8e, 0xbd, 0x30, 0x51, 0xe3, 0xdf, 0x8c, - 0xc6, 0x33, 0x0a, 0xf9, 0xc3, 0x24, 0x9e, 0x33, 0x04, 0xbf, 0x70, 0x4c, 0x47, 0x7e, 0xe1, 0xb8, - 0x06, 0x19, 0x9b, 0x1c, 0x13, 0x5b, 0x9c, 0xe5, 0x58, 0x34, 0xde, 0xfe, 0x59, 0x0a, 0xf2, 0xe1, - 0x1b, 0x0d, 0x3b, 0x09, 0xda, 0xcd, 0xa7, 0xc1, 0x5a, 0x0d, 0xe9, 0x6d, 0x72, 0x82, 0x5e, 0x9b, - 0xde, 0x29, 0x7d, 0x22, 0x1e, 0xa5, 0x43, 0x76, 0x70, 0x9f, 0xf4, 0x06, 0xe4, 0xaa, 0xbd, 0x5e, - 0xeb, 0x51, 0xbb, 0xd9, 0x50, 0x3e, 0x4f, 0x94, 0xbe, 0x71, 0x7a, 0x56, 0x5e, 0x0d, 0x41, 0x55, - 0x4f, 0x2c, 0x25, 0x8e, 0xaa, 0xd7, 0x9b, 0xdd, 0x7e, 0xb3, 0xa1, 0x3c, 0x4f, 0xce, 0xa3, 0xf8, - 0x1d, 0x09, 0xff, 0x69, 0x49, 0xbe, 0x8b, 0x9b, 0xdd, 0x2a, 0x66, 0x1d, 0x7e, 0x9e, 0x14, 0x57, - 0x5d, 0xd3, 0x1e, 0x5d, 0x32, 0xd2, 0x5d, 0xd6, 0xe7, 0x46, 0xf0, 0x13, 0xab, 0xe7, 0x29, 0xf1, - 0xf3, 0x83, 0xe9, 0x83, 0x13, 0xd1, 0xcd, 0x09, 0xeb, 0x8d, 0xbf, 0xf4, 0x71, 0x35, 0xa9, 0xb9, - 0xde, 0x7a, 0x2c, 0x92, 0x30, 0x2d, 0x2a, 0x2c, 0xe2, 0xbd, 0x76, 0x9b, 0x81, 0x9e, 0xa7, 0xe7, - 0x46, 0x87, 0xc7, 0x0e, 0xab, 0x7f, 0xd1, 0x1d, 0xc8, 0x05, 0x0f, 0x81, 0xca, 0xe7, 0xe9, 0x39, - 0x83, 0xea, 0xc1, 0x2b, 0x26, 0xef, 0x70, 0x7b, 0xaf, 0xcf, 0x7f, 0x01, 0xf6, 0x3c, 0x33, 0xdf, - 0xe1, 0xe1, 0xd8, 0x37, 0xe9, 0x89, 0xc3, 0x76, 0xa0, 0xbc, 0x55, 0xfb, 0x3c, 0x23, 0xae, 0x20, - 0x42, 0x8c, 0xbc, 0x52, 0x7b, 0x03, 0x72, 0xb8, 0xf9, 0x03, 0xf1, 0x63, 0xb1, 0xe7, 0xd9, 0x39, - 0x3d, 0x98, 0x7c, 0x46, 0x0c, 0xd9, 0x5b, 0x07, 0x77, 0xb7, 0xab, 0xdc, 0xe5, 0xf3, 0xa8, 0x8e, - 0x3b, 0x3a, 0xd4, 0x1d, 0x62, 0x4e, 0x7f, 0x83, 0x11, 0xb2, 0xde, 0xfe, 0x25, 0xc8, 0x05, 0x79, - 0x26, 0xda, 0x80, 0xec, 0xd3, 0x0e, 0x7e, 0xdc, 0xc4, 0xca, 0x82, 0xf0, 0x61, 0xc0, 0x79, 0x2a, - 0x2a, 0x84, 0x32, 0x2c, 0xee, 0x56, 0xdb, 0xd5, 0x47, 0x4d, 0x1c, 0x5c, 0x78, 0x07, 0x00, 0x99, - 0x2c, 0x95, 0x14, 0xd9, 0x41, 0xa8, 0xb3, 0xb6, 0xfe, 0xc5, 0x97, 0x1b, 0x0b, 0x3f, 0xfd, 0x72, - 0x63, 0xe1, 0xf9, 0xc5, 0x46, 0xe2, 0x8b, 0x8b, 0x8d, 0xc4, 0x4f, 0x2e, 0x36, 0x12, 0xff, 0x7a, - 0xb1, 0x91, 0xd8, 0xcf, 0xf2, 0x90, 0xfe, 0xe0, 0x7f, 0x03, 0x00, 0x00, 0xff, 0xff, 0x48, 0x1c, - 0x30, 0x25, 0x28, 0x30, 0x00, 0x00, + // 4887 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xac, 0x7a, 0x4d, 0x6c, 0x24, 0xd7, + 0x56, 0xbf, 0xfb, 0xd3, 0xdd, 0xa7, 0xdb, 0x76, 0xf9, 0x8e, 0x33, 0xf1, 0x74, 0x26, 0xb6, 0x53, + 0xc9, 0xbc, 0x24, 0xf3, 0xf2, 0xef, 0xcc, 0x47, 0x12, 0x4d, 0x92, 0x7f, 0x3e, 0xfa, 0xcb, 0xe3, + 0x7e, 0x63, 0x77, 0xb7, 0x6e, 0xb7, 0x67, 0x5e, 0x90, 0xa0, 0x54, 0xae, 0xba, 0x6e, 0x57, 0x5c, + 0x5d, 0xb7, 0xa9, 0xaa, 0xb6, 0xa7, 0x79, 0x20, 0x46, 0x2c, 0x00, 0x79, 0x05, 0xbb, 0x87, 0x90, + 0xd9, 0xc0, 0x0a, 0x21, 0xb1, 0x00, 0x09, 0xc1, 0x2a, 0x48, 0x2c, 0xb2, 0xe3, 0x01, 0x12, 0x7a, + 0x02, 0xc9, 0x10, 0x2f, 0xd8, 0x21, 0xd8, 0x3c, 0xb1, 0x01, 0x09, 0xdd, 0x8f, 0xaa, 0xae, 0xee, + 0x29, 0xdb, 0x13, 0xf2, 0x36, 0x76, 0xdd, 0x73, 0x7e, 0xe7, 0xdc, 0x73, 0xcf, 0xbd, 0xf7, 0xdc, + 0x73, 0xee, 0x6d, 0x28, 0xf8, 0xe3, 0x21, 0xf1, 0xca, 0x43, 0x97, 0xfa, 0x14, 0x21, 0x93, 0x1a, + 0x87, 0xc4, 0x2d, 0x7b, 0xc7, 0xba, 0x3b, 0x38, 0xb4, 0xfc, 0xf2, 0xd1, 0xdd, 0xd2, 0x7a, 0x9f, + 0xd2, 0xbe, 0x4d, 0xde, 0xe5, 0x88, 0xbd, 0xd1, 0xfe, 0xbb, 0xbe, 0x35, 0x20, 0x9e, 0xaf, 0x0f, + 0x86, 0x42, 0xa8, 0xb4, 0x36, 0x0b, 0x30, 0x47, 0xae, 0xee, 0x5b, 0xd4, 0x91, 0xfc, 0x95, 0x3e, + 0xed, 0x53, 0xfe, 0xf9, 0x2e, 0xfb, 0x12, 0x54, 0x75, 0x1d, 0xe6, 0x1f, 0x13, 0xd7, 0xb3, 0xa8, + 0x83, 0x56, 0x20, 0x63, 0x39, 0x26, 0x79, 0xba, 0x9a, 0xd8, 0x48, 0xbc, 0x95, 0xc6, 0xa2, 0xa1, + 0xde, 0x01, 0x68, 0xb2, 0x8f, 0x86, 0xe3, 0xbb, 0x63, 0xa4, 0x40, 0xea, 0x90, 0x8c, 0x39, 0x22, + 0x8f, 0xd9, 0x27, 0xa3, 0x1c, 0xe9, 0xf6, 0x6a, 0x52, 0x50, 0x8e, 0x74, 0x5b, 0xfd, 0x26, 0x01, + 0x85, 0x8a, 0xe3, 0x50, 0x9f, 0xf7, 0xee, 0x21, 0x04, 0x69, 0x47, 0x1f, 0x10, 0x29, 0xc4, 0xbf, + 0x51, 0x0d, 0xb2, 0xb6, 0xbe, 0x47, 0x6c, 0x6f, 0x35, 0xb9, 0x91, 0x7a, 0xab, 0x70, 0xef, 0xfb, + 0xe5, 0xe7, 0x87, 0x5c, 0x8e, 0x28, 0x29, 0x6f, 0x73, 0x34, 0x37, 0x02, 0x4b, 0x51, 0xf4, 0x29, + 0xcc, 0x5b, 0x8e, 0x69, 0x19, 0xc4, 0x5b, 0x4d, 0x73, 0x2d, 0x6b, 0x71, 0x5a, 0x26, 0xd6, 0x57, + 0xd3, 0x5f, 0x9f, 0xad, 0xcf, 0xe1, 0x40, 0xa8, 0xf4, 0x21, 0x14, 0x22, 0x6a, 0x63, 0xc6, 0xb6, + 0x02, 0x99, 0x23, 0xdd, 0x1e, 0x11, 0x39, 0x3a, 0xd1, 0xf8, 0x28, 0xf9, 0x20, 0xa1, 0x7e, 0x0e, + 0x2b, 0x2d, 0x7d, 0x40, 0xcc, 0x87, 0xc4, 0x21, 0xae, 0x65, 0x60, 0xe2, 0xd1, 0x91, 0x6b, 0x10, + 0x36, 0xd6, 0x43, 0xcb, 0x31, 0x83, 0xb1, 0xb2, 0xef, 0x78, 0x2d, 0x6a, 0x0d, 0x5e, 0xae, 0x5b, + 0x9e, 0xe1, 0x12, 0x9f, 0x7c, 0x6b, 0x25, 0xa9, 0x40, 0xc9, 0x59, 0x02, 0x96, 0x66, 0xa5, 0x7f, + 0x01, 0xae, 0x31, 0x17, 0x9b, 0x9a, 0x2b, 0x29, 0x9a, 0x37, 0x24, 0x06, 0x57, 0x56, 0xb8, 0xf7, + 0x56, 0x9c, 0x87, 0xe2, 0x46, 0xb2, 0x35, 0x87, 0x97, 0xb9, 0x9a, 0x80, 0xd0, 0x1d, 0x12, 0x03, + 0x19, 0x70, 0xdd, 0x94, 0x46, 0xcf, 0xa8, 0x4f, 0x72, 0xf5, 0xb1, 0xd3, 0x78, 0xc1, 0x30, 0xb7, + 0xe6, 0xf0, 0x4a, 0xa0, 0x2c, 0xda, 0x49, 0x15, 0x20, 0x17, 0xe8, 0x56, 0x7f, 0x9c, 0x80, 0x7c, + 0xc0, 0xf4, 0xd0, 0xdb, 0x90, 0x77, 0x74, 0x87, 0x6a, 0xc6, 0x70, 0xe4, 0xf1, 0x01, 0xa5, 0xaa, + 0xc5, 0xf3, 0xb3, 0xf5, 0x5c, 0x4b, 0x77, 0x68, 0xad, 0xb3, 0xeb, 0xe1, 0x1c, 0x63, 0xd7, 0x86, + 0x23, 0x0f, 0xbd, 0x06, 0xc5, 0x01, 0x19, 0x50, 0x77, 0xac, 0xed, 0x8d, 0x7d, 0xe2, 0x49, 0xb7, + 0x15, 0x04, 0xad, 0xca, 0x48, 0xe8, 0x13, 0x98, 0xef, 0x0b, 0x93, 0x56, 0x53, 0x7c, 0xf9, 0xbc, + 0x1e, 0x67, 0xfd, 0x8c, 0xd5, 0x38, 0x90, 0x51, 0x7f, 0x27, 0x01, 0x2b, 0x21, 0x95, 0xfc, 0xf2, + 0xc8, 0x72, 0xc9, 0x80, 0x38, 0xbe, 0x87, 0xde, 0x87, 0xac, 0x6d, 0x0d, 0x2c, 0xdf, 0x93, 0x3e, + 0x7f, 0x35, 0x4e, 0x6d, 0x38, 0x28, 0x2c, 0xc1, 0xa8, 0x02, 0x45, 0x97, 0x78, 0xc4, 0x3d, 0x12, + 0x2b, 0x5e, 0x7a, 0xf4, 0x0a, 0xe1, 0x29, 0x11, 0x75, 0x13, 0x72, 0x1d, 0x5b, 0xf7, 0xf7, 0xa9, + 0x3b, 0x40, 0x2a, 0x14, 0x75, 0xd7, 0x38, 0xb0, 0x7c, 0x62, 0xf8, 0x23, 0x37, 0xd8, 0x7d, 0x53, + 0x34, 0x74, 0x1d, 0x92, 0x54, 0x74, 0x94, 0xaf, 0x66, 0xcf, 0xcf, 0xd6, 0x93, 0xed, 0x2e, 0x4e, + 0x52, 0x4f, 0xfd, 0x18, 0x96, 0x3b, 0xf6, 0xa8, 0x6f, 0x39, 0x75, 0xe2, 0x19, 0xae, 0x35, 0x64, + 0xda, 0xd9, 0xaa, 0x64, 0x31, 0x2a, 0x58, 0x95, 0xec, 0x3b, 0xdc, 0xda, 0xc9, 0xc9, 0xd6, 0x56, + 0x7f, 0x2b, 0x09, 0xcb, 0x0d, 0xa7, 0x6f, 0x39, 0x24, 0x2a, 0x7d, 0x0b, 0x16, 0x09, 0x27, 0x6a, + 0x47, 0x22, 0xdc, 0x48, 0x3d, 0x0b, 0x82, 0x1a, 0xc4, 0xa0, 0xe6, 0x4c, 0x5c, 0xb8, 0x1b, 0x37, + 0xfc, 0xe7, 0xb4, 0xc7, 0x46, 0x87, 0x06, 0xcc, 0x0f, 0xf9, 0x20, 0x3c, 0x39, 0xbd, 0xb7, 0xe2, + 0x74, 0x3d, 0x37, 0xce, 0x20, 0x48, 0x48, 0xd9, 0xef, 0x12, 0x24, 0xfe, 0x24, 0x09, 0x4b, 0x2d, + 0x6a, 0x4e, 0xf9, 0xa1, 0x04, 0xb9, 0x03, 0xea, 0xf9, 0x91, 0x80, 0x18, 0xb6, 0xd1, 0x03, 0xc8, + 0x0d, 0xe5, 0xf4, 0xc9, 0xd9, 0xbf, 0x19, 0x6f, 0xb2, 0xc0, 0xe0, 0x10, 0x8d, 0x3e, 0x86, 0x7c, + 0xb0, 0x65, 0xd8, 0x68, 0x5f, 0x60, 0xe1, 0x4c, 0xf0, 0xe8, 0x13, 0xc8, 0x8a, 0x49, 0x58, 0x4d, + 0x73, 0xc9, 0x5b, 0x2f, 0xe4, 0x73, 0x2c, 0x85, 0xd0, 0x43, 0xc8, 0xf9, 0xb6, 0xa7, 0x59, 0xce, + 0x3e, 0x5d, 0xcd, 0x70, 0x05, 0xeb, 0xb1, 0x41, 0x86, 0x9a, 0xa4, 0xb7, 0xdd, 0x6d, 0x3a, 0xfb, + 0xb4, 0x5a, 0x38, 0x3f, 0x5b, 0x9f, 0x97, 0x0d, 0x3c, 0xef, 0xdb, 0x1e, 0xfb, 0x50, 0x7f, 0x37, + 0x01, 0x85, 0x08, 0x0a, 0xbd, 0x0a, 0xe0, 0xbb, 0x23, 0xcf, 0xd7, 0x5c, 0x4a, 0x7d, 0xee, 0xac, + 0x22, 0xce, 0x73, 0x0a, 0xa6, 0xd4, 0x47, 0x65, 0xb8, 0x66, 0x10, 0xd7, 0xd7, 0x2c, 0xcf, 0x1b, + 0x11, 0x57, 0xf3, 0x46, 0x7b, 0x5f, 0x12, 0xc3, 0xe7, 0x8e, 0x2b, 0xe2, 0x65, 0xc6, 0x6a, 0x72, + 0x4e, 0x57, 0x30, 0xd0, 0x7d, 0xb8, 0x1e, 0xc5, 0x0f, 0x47, 0x7b, 0xb6, 0x65, 0x68, 0x6c, 0x32, + 0x53, 0x5c, 0xe4, 0xda, 0x44, 0xa4, 0xc3, 0x79, 0x8f, 0xc8, 0x58, 0xfd, 0x69, 0x02, 0x14, 0xac, + 0xef, 0xfb, 0x3b, 0x64, 0xb0, 0x47, 0xdc, 0xae, 0xaf, 0xfb, 0x23, 0x0f, 0x5d, 0x87, 0xac, 0x4d, + 0x74, 0x93, 0xb8, 0xdc, 0xa8, 0x1c, 0x96, 0x2d, 0xb4, 0xcb, 0x76, 0xb0, 0x6e, 0x1c, 0xe8, 0x7b, + 0x96, 0x6d, 0xf9, 0x63, 0x6e, 0xca, 0x62, 0xfc, 0x12, 0x9e, 0xd5, 0x59, 0xc6, 0x11, 0x41, 0x3c, + 0xa5, 0x06, 0xad, 0xc2, 0xfc, 0x80, 0x78, 0x9e, 0xde, 0x27, 0xdc, 0xd2, 0x3c, 0x0e, 0x9a, 0xea, + 0xc7, 0x50, 0x8c, 0xca, 0xa1, 0x02, 0xcc, 0xef, 0xb6, 0x1e, 0xb5, 0xda, 0x4f, 0x5a, 0xca, 0x1c, + 0x5a, 0x82, 0xc2, 0x6e, 0x0b, 0x37, 0x2a, 0xb5, 0xad, 0x4a, 0x75, 0xbb, 0xa1, 0x24, 0xd0, 0x02, + 0xe4, 0x27, 0xcd, 0xa4, 0xfa, 0x67, 0x09, 0x00, 0xe6, 0x6e, 0x39, 0xa8, 0x8f, 0x20, 0xe3, 0xf9, + 0xba, 0x2f, 0x56, 0xe5, 0xe2, 0xbd, 0x37, 0x2e, 0x9a, 0x43, 0x69, 0x2f, 0xfb, 0x47, 0xb0, 0x10, + 0x89, 0x5a, 0x98, 0x9c, 0xb2, 0x90, 0x05, 0x08, 0xdd, 0x34, 0x5d, 0x69, 0x38, 0xff, 0x56, 0x3f, + 0x86, 0x0c, 0x97, 0x9e, 0x36, 0x37, 0x07, 0xe9, 0x3a, 0xfb, 0x4a, 0xa0, 0x3c, 0x64, 0x70, 0xa3, + 0x52, 0xff, 0x42, 0x49, 0x22, 0x05, 0x8a, 0xf5, 0x66, 0xb7, 0xd6, 0x6e, 0xb5, 0x1a, 0xb5, 0x5e, + 0xa3, 0xae, 0xa4, 0xd4, 0x5b, 0x90, 0x69, 0x0e, 0x98, 0xe6, 0x9b, 0x6c, 0xc9, 0xef, 0x13, 0x97, + 0x38, 0x46, 0xb0, 0x93, 0x26, 0x04, 0xf5, 0x27, 0x79, 0xc8, 0xec, 0xd0, 0x91, 0xe3, 0xa3, 0x7b, + 0x91, 0xb0, 0xb5, 0x18, 0x9f, 0x21, 0x70, 0x60, 0xb9, 0x37, 0x1e, 0x12, 0x19, 0xd6, 0xae, 0x43, + 0x56, 0x6c, 0x0e, 0x39, 0x1c, 0xd9, 0x62, 0x74, 0x5f, 0x77, 0xfb, 0xc4, 0x97, 0xe3, 0x91, 0x2d, + 0xf4, 0x16, 0x3b, 0xb1, 0x74, 0x93, 0x3a, 0xf6, 0x98, 0xef, 0xa1, 0x9c, 0x38, 0x96, 0x30, 0xd1, + 0xcd, 0xb6, 0x63, 0x8f, 0x71, 0xc8, 0x45, 0x5b, 0x50, 0xdc, 0xb3, 0x1c, 0x53, 0xa3, 0x43, 0x11, + 0xe4, 0x33, 0x17, 0xef, 0x38, 0x61, 0x55, 0xd5, 0x72, 0xcc, 0xb6, 0x00, 0xe3, 0xc2, 0xde, 0xa4, + 0x81, 0x5a, 0xb0, 0x78, 0x44, 0xed, 0xd1, 0x80, 0x84, 0xba, 0xb2, 0x5c, 0xd7, 0x9b, 0x17, 0xeb, + 0x7a, 0xcc, 0xf1, 0x81, 0xb6, 0x85, 0xa3, 0x68, 0x13, 0x3d, 0x82, 0x05, 0x7f, 0x30, 0xdc, 0xf7, + 0x42, 0x75, 0xf3, 0x5c, 0xdd, 0xf7, 0x2e, 0x71, 0x18, 0x83, 0x07, 0xda, 0x8a, 0x7e, 0xa4, 0x55, + 0xfa, 0x8d, 0x14, 0x14, 0x22, 0x96, 0xa3, 0x2e, 0x14, 0x86, 0x2e, 0x1d, 0xea, 0x7d, 0x7e, 0x50, + 0xc9, 0xb9, 0xb8, 0xfb, 0x42, 0xa3, 0x2e, 0x77, 0x26, 0x82, 0x38, 0xaa, 0x45, 0x3d, 0x4d, 0x42, + 0x21, 0xc2, 0x44, 0xb7, 0x21, 0x87, 0x3b, 0xb8, 0xf9, 0xb8, 0xd2, 0x6b, 0x28, 0x73, 0xa5, 0x9b, + 0x27, 0xa7, 0x1b, 0xab, 0x5c, 0x5b, 0x54, 0x41, 0xc7, 0xb5, 0x8e, 0xd8, 0xd2, 0x7b, 0x0b, 0xe6, + 0x03, 0x68, 0xa2, 0xf4, 0xca, 0xc9, 0xe9, 0xc6, 0xcb, 0xb3, 0xd0, 0x08, 0x12, 0x77, 0xb7, 0x2a, + 0xb8, 0x51, 0x57, 0x92, 0xf1, 0x48, 0xdc, 0x3d, 0xd0, 0x5d, 0x62, 0xa2, 0xef, 0x41, 0x56, 0x02, + 0x53, 0xa5, 0xd2, 0xc9, 0xe9, 0xc6, 0xf5, 0x59, 0xe0, 0x04, 0x87, 0xbb, 0xdb, 0x95, 0xc7, 0x0d, + 0x25, 0x1d, 0x8f, 0xc3, 0x5d, 0x5b, 0x3f, 0x22, 0xe8, 0x0d, 0xc8, 0x08, 0x58, 0xa6, 0x74, 0xe3, + 0xe4, 0x74, 0xe3, 0xa5, 0xe7, 0xd4, 0x31, 0x54, 0x69, 0xf5, 0xb7, 0xff, 0x70, 0x6d, 0xee, 0xaf, + 0xfe, 0x68, 0x4d, 0x99, 0x65, 0x97, 0xfe, 0x3b, 0x01, 0x0b, 0x53, 0x53, 0x8e, 0x54, 0xc8, 0x3a, + 0xd4, 0xa0, 0x43, 0x71, 0x7e, 0xe5, 0xaa, 0x70, 0x7e, 0xb6, 0x9e, 0x6d, 0xd1, 0x1a, 0x1d, 0x8e, + 0xb1, 0xe4, 0xa0, 0x47, 0x33, 0x27, 0xf0, 0xfd, 0x17, 0x5c, 0x4f, 0xb1, 0x67, 0xf0, 0x67, 0xb0, + 0x60, 0xba, 0xd6, 0x11, 0x71, 0x35, 0x83, 0x3a, 0xfb, 0x56, 0x5f, 0x9e, 0x4d, 0xa5, 0xd8, 0x34, + 0x91, 0x03, 0x71, 0x51, 0x08, 0xd4, 0x38, 0xfe, 0x3b, 0x9c, 0xbe, 0xa5, 0xc7, 0x50, 0x8c, 0xae, + 0x50, 0x76, 0x9c, 0x78, 0xd6, 0xaf, 0x10, 0x99, 0x0f, 0xf2, 0xec, 0x11, 0xe7, 0x19, 0x45, 0x64, + 0x83, 0x6f, 0x42, 0x7a, 0x40, 0x4d, 0xa1, 0x67, 0xa1, 0x7a, 0x8d, 0x25, 0x01, 0xff, 0x74, 0xb6, + 0x5e, 0xa0, 0x5e, 0x79, 0xd3, 0xb2, 0xc9, 0x0e, 0x35, 0x09, 0xe6, 0x00, 0xf5, 0x08, 0xd2, 0x2c, + 0x54, 0xa0, 0x57, 0x20, 0x5d, 0x6d, 0xb6, 0xea, 0xca, 0x5c, 0x69, 0xf9, 0xe4, 0x74, 0x63, 0x81, + 0xbb, 0x84, 0x31, 0xd8, 0xda, 0x45, 0xeb, 0x90, 0x7d, 0xdc, 0xde, 0xde, 0xdd, 0x61, 0xcb, 0xeb, + 0xda, 0xc9, 0xe9, 0xc6, 0x52, 0xc8, 0x16, 0x4e, 0x43, 0xaf, 0x42, 0xa6, 0xb7, 0xd3, 0xd9, 0xec, + 0x2a, 0xc9, 0x12, 0x3a, 0x39, 0xdd, 0x58, 0x0c, 0xf9, 0xdc, 0xe6, 0xd2, 0xb2, 0x9c, 0xd5, 0x7c, + 0x48, 0x57, 0x7f, 0x96, 0x84, 0x05, 0xcc, 0x2a, 0x3e, 0xd7, 0xef, 0x50, 0xdb, 0x32, 0xc6, 0xa8, + 0x03, 0x79, 0x83, 0x3a, 0xa6, 0x15, 0xd9, 0x53, 0xf7, 0x2e, 0x38, 0xf5, 0x27, 0x52, 0x41, 0xab, + 0x16, 0x48, 0xe2, 0x89, 0x12, 0xf4, 0x2e, 0x64, 0x4c, 0x62, 0xeb, 0x63, 0x99, 0x7e, 0xdc, 0x28, + 0x8b, 0x9a, 0xb2, 0x1c, 0xd4, 0x94, 0xe5, 0xba, 0xac, 0x29, 0xb1, 0xc0, 0xf1, 0x34, 0x5b, 0x7f, + 0xaa, 0xe9, 0xbe, 0x4f, 0x06, 0x43, 0x5f, 0xe4, 0x1e, 0x69, 0x5c, 0x18, 0xe8, 0x4f, 0x2b, 0x92, + 0x84, 0xee, 0x42, 0xf6, 0xd8, 0x72, 0x4c, 0x7a, 0x2c, 0xd3, 0x8b, 0x4b, 0x94, 0x4a, 0xa0, 0x7a, + 0xc2, 0x4e, 0xdd, 0x19, 0x33, 0x99, 0xbf, 0x5b, 0xed, 0x56, 0x23, 0xf0, 0xb7, 0xe4, 0xb7, 0x9d, + 0x16, 0x75, 0xd8, 0x5e, 0x81, 0x76, 0x4b, 0xdb, 0xac, 0x34, 0xb7, 0x77, 0x31, 0xf3, 0xf9, 0xca, + 0xc9, 0xe9, 0x86, 0x12, 0x42, 0x36, 0x75, 0xcb, 0x66, 0xf9, 0xee, 0x0d, 0x48, 0x55, 0x5a, 0x5f, + 0x28, 0xc9, 0x92, 0x72, 0x72, 0xba, 0x51, 0x0c, 0xd9, 0x15, 0x67, 0x3c, 0xd9, 0x46, 0xb3, 0xfd, + 0xaa, 0x7f, 0x9b, 0x82, 0xe2, 0xee, 0xd0, 0xd4, 0x7d, 0x22, 0xd6, 0x24, 0xda, 0x80, 0xc2, 0x50, + 0x77, 0x75, 0xdb, 0x26, 0xb6, 0xe5, 0x0d, 0x64, 0xb5, 0x1c, 0x25, 0xa1, 0x0f, 0x5f, 0xd4, 0x8d, + 0xd5, 0x1c, 0x5b, 0x67, 0x3f, 0xfe, 0x97, 0xf5, 0x44, 0xe0, 0xd0, 0x5d, 0x58, 0xdc, 0x17, 0xd6, + 0x6a, 0xba, 0xc1, 0x27, 0x36, 0xc5, 0x27, 0xb6, 0x1c, 0x37, 0xb1, 0x51, 0xb3, 0xca, 0x72, 0x90, + 0x15, 0x2e, 0x85, 0x17, 0xf6, 0xa3, 0x4d, 0x74, 0x1f, 0xe6, 0x07, 0xd4, 0xb1, 0x7c, 0xea, 0x5e, + 0x3d, 0x0b, 0x01, 0x12, 0xdd, 0x86, 0x65, 0x36, 0xb9, 0x81, 0x3d, 0x9c, 0xcd, 0x4f, 0xac, 0x24, + 0x5e, 0x1a, 0xe8, 0x4f, 0x65, 0x87, 0x98, 0x91, 0x51, 0x15, 0x32, 0xd4, 0x65, 0x29, 0x51, 0x96, + 0x9b, 0xfb, 0xce, 0x95, 0xe6, 0x8a, 0x46, 0x9b, 0xc9, 0x60, 0x21, 0xaa, 0x7e, 0x00, 0x0b, 0x53, + 0x83, 0x60, 0x99, 0x40, 0xa7, 0xb2, 0xdb, 0x6d, 0x28, 0x73, 0xa8, 0x08, 0xb9, 0x5a, 0xbb, 0xd5, + 0x6b, 0xb6, 0x76, 0x59, 0x2a, 0x53, 0x84, 0x1c, 0x6e, 0x6f, 0x6f, 0x57, 0x2b, 0xb5, 0x47, 0x4a, + 0x52, 0x2d, 0x43, 0x21, 0xa2, 0x0d, 0x2d, 0x02, 0x74, 0x7b, 0xed, 0x8e, 0xb6, 0xd9, 0xc4, 0xdd, + 0x9e, 0x48, 0x84, 0xba, 0xbd, 0x0a, 0xee, 0x49, 0x42, 0x42, 0xfd, 0x8f, 0x64, 0x30, 0xa3, 0x32, + 0xf7, 0xa9, 0x4e, 0xe7, 0x3e, 0x97, 0x18, 0x2f, 0xb3, 0x9f, 0x49, 0x23, 0xcc, 0x81, 0x3e, 0x04, + 0xe0, 0x0b, 0x87, 0x98, 0x9a, 0xee, 0xcb, 0x89, 0x2f, 0x3d, 0xe7, 0xe4, 0x5e, 0x70, 0x69, 0x83, + 0xf3, 0x12, 0x5d, 0xf1, 0xd1, 0x27, 0x50, 0x34, 0xe8, 0x60, 0x68, 0x13, 0x29, 0x9c, 0xba, 0x52, + 0xb8, 0x10, 0xe2, 0x2b, 0x7e, 0x34, 0xfb, 0x4a, 0x4f, 0xe7, 0x87, 0xbf, 0x99, 0x08, 0x3c, 0x13, + 0x93, 0x70, 0x15, 0x21, 0xb7, 0xdb, 0xa9, 0x57, 0x7a, 0xcd, 0xd6, 0x43, 0x25, 0x81, 0x00, 0xb2, + 0xdc, 0xd5, 0x75, 0x25, 0xc9, 0x12, 0xc5, 0x5a, 0x7b, 0xa7, 0xb3, 0xdd, 0xe0, 0x29, 0x17, 0x5a, + 0x01, 0x25, 0x70, 0xb6, 0xc6, 0x1d, 0xd9, 0xa8, 0x2b, 0x69, 0x74, 0x0d, 0x96, 0x42, 0xaa, 0x94, + 0xcc, 0xa0, 0xeb, 0x80, 0x42, 0xe2, 0x44, 0x45, 0x56, 0xfd, 0x35, 0x58, 0xaa, 0x51, 0xc7, 0xd7, + 0x2d, 0x27, 0x4c, 0xa2, 0xef, 0xb1, 0x41, 0x4b, 0x92, 0x66, 0xc9, 0xcb, 0x8e, 0xea, 0xd2, 0xf9, + 0xd9, 0x7a, 0x21, 0x84, 0x36, 0xeb, 0x6c, 0xa4, 0x41, 0xc3, 0x64, 0xfb, 0x77, 0x68, 0x99, 0xdc, + 0xb9, 0x99, 0xea, 0xfc, 0xf9, 0xd9, 0x7a, 0xaa, 0xd3, 0xac, 0x63, 0x46, 0x43, 0xaf, 0x40, 0x9e, + 0x3c, 0xb5, 0x7c, 0xcd, 0x60, 0x31, 0x9c, 0x39, 0x30, 0x83, 0x73, 0x8c, 0x50, 0x63, 0x21, 0xbb, + 0x0a, 0xd0, 0xa1, 0xae, 0x2f, 0x7b, 0x7e, 0x0f, 0x32, 0x43, 0xea, 0xf2, 0xf2, 0xfc, 0xc2, 0x4b, + 0x23, 0x06, 0x17, 0x0b, 0x15, 0x0b, 0xb0, 0xfa, 0x7b, 0x29, 0x80, 0x9e, 0xee, 0x1d, 0x4a, 0x25, + 0x0f, 0x20, 0x1f, 0x5e, 0xc0, 0xc9, 0x3a, 0xff, 0xd2, 0xd9, 0x0e, 0xc1, 0xe8, 0x7e, 0xb0, 0xd8, + 0x44, 0x79, 0x10, 0x5b, 0xa7, 0x05, 0x1d, 0xc5, 0x65, 0xd8, 0xd3, 0x35, 0x00, 0x3b, 0x12, 0x89, + 0xeb, 0xca, 0x99, 0x67, 0x9f, 0xa8, 0xc6, 0x8f, 0x05, 0xe1, 0x34, 0x99, 0x60, 0xc6, 0xde, 0x6c, + 0xcc, 0xcc, 0xc8, 0xd6, 0x1c, 0x9e, 0xc8, 0xa1, 0xcf, 0xa0, 0xc0, 0xc6, 0xad, 0x79, 0x9c, 0x27, + 0x73, 0xcb, 0x0b, 0x5d, 0x25, 0x34, 0x60, 0x18, 0x4e, 0xbc, 0xfc, 0x2a, 0x80, 0x3e, 0x1c, 0xda, + 0x16, 0x31, 0xb5, 0xbd, 0x31, 0x4f, 0x26, 0xf3, 0x38, 0x2f, 0x29, 0xd5, 0x31, 0xdb, 0x2e, 0x01, + 0x5b, 0xf7, 0x57, 0x73, 0x57, 0x3b, 0x50, 0xa2, 0x2b, 0x7e, 0x55, 0x81, 0x45, 0x77, 0xe4, 0x30, + 0x87, 0x4a, 0xeb, 0xd4, 0x3f, 0x4d, 0xc2, 0xcb, 0x2d, 0xe2, 0x1f, 0x53, 0xf7, 0xb0, 0xe2, 0xfb, + 0xba, 0x71, 0x30, 0x20, 0x8e, 0x9c, 0xbe, 0x48, 0xce, 0x9e, 0x98, 0xca, 0xd9, 0x57, 0x61, 0x5e, + 0xb7, 0x2d, 0xdd, 0x23, 0x22, 0xd1, 0xc9, 0xe3, 0xa0, 0xc9, 0x2a, 0x0b, 0x56, 0xa7, 0x10, 0xcf, + 0x23, 0xe2, 0xea, 0x80, 0x19, 0x1e, 0x10, 0xd0, 0x8f, 0xe0, 0xba, 0x4c, 0x69, 0xf4, 0xb0, 0x2b, + 0x96, 0x33, 0x07, 0x77, 0x90, 0x8d, 0xd8, 0xc2, 0x29, 0xde, 0x38, 0x99, 0xf3, 0x4c, 0xc8, 0xed, + 0xa1, 0x2f, 0x33, 0xa8, 0x15, 0x33, 0x86, 0x55, 0x7a, 0x08, 0x37, 0x2e, 0x14, 0xf9, 0x56, 0x57, + 0x13, 0xff, 0x90, 0x04, 0x68, 0x76, 0x2a, 0x3b, 0xd2, 0x49, 0x75, 0xc8, 0xee, 0xeb, 0x03, 0xcb, + 0x1e, 0x5f, 0x16, 0x01, 0x27, 0xf8, 0x72, 0x45, 0xb8, 0x63, 0x93, 0xcb, 0x60, 0x29, 0xcb, 0xcb, + 0xa6, 0xd1, 0x9e, 0x43, 0xfc, 0xb0, 0x6c, 0xe2, 0x2d, 0x66, 0x86, 0xab, 0x3b, 0xe1, 0xd2, 0x15, + 0x0d, 0x36, 0x01, 0x7d, 0xdd, 0x27, 0xc7, 0xfa, 0x38, 0x08, 0x5b, 0xb2, 0x89, 0xb6, 0xf8, 0x05, + 0x20, 0x71, 0x8f, 0x88, 0xb9, 0x9a, 0xe1, 0x4e, 0xbd, 0xca, 0x1e, 0x2c, 0xe1, 0xc2, 0x77, 0xa1, + 0x74, 0xe9, 0x63, 0x9e, 0x32, 0x4d, 0x58, 0xdf, 0xca, 0x47, 0x77, 0x60, 0x61, 0x6a, 0x9c, 0xcf, + 0xd5, 0xab, 0xcd, 0xce, 0xe3, 0xf7, 0x94, 0xb4, 0xfc, 0xfa, 0x40, 0xc9, 0xaa, 0x7f, 0x9c, 0x12, + 0x81, 0x46, 0x7a, 0x35, 0xfe, 0xe2, 0x3b, 0xc7, 0x57, 0xb7, 0x41, 0x6d, 0x19, 0x00, 0xde, 0xbc, + 0x3c, 0xfe, 0xb0, 0xfa, 0x87, 0xc3, 0x71, 0x28, 0x88, 0xd6, 0xa1, 0x20, 0x56, 0xb1, 0xc6, 0x36, + 0x1c, 0x77, 0xeb, 0x02, 0x06, 0x41, 0x62, 0x92, 0xe8, 0x16, 0x2c, 0xf2, 0xfb, 0x0d, 0xef, 0x80, + 0x98, 0x02, 0x93, 0xe6, 0x98, 0x85, 0x90, 0xca, 0x61, 0x3b, 0x50, 0x94, 0x04, 0x8d, 0xe7, 0xbe, + 0x19, 0x6e, 0xd0, 0xed, 0xab, 0x0c, 0x12, 0x22, 0x3c, 0x25, 0x2e, 0x0c, 0x27, 0x0d, 0xb5, 0x0e, + 0xb9, 0xc0, 0x58, 0xb4, 0x0a, 0xa9, 0x5e, 0xad, 0xa3, 0xcc, 0x95, 0x96, 0x4e, 0x4e, 0x37, 0x0a, + 0x01, 0xb9, 0x57, 0xeb, 0x30, 0xce, 0x6e, 0xbd, 0xa3, 0x24, 0xa6, 0x39, 0xbb, 0xf5, 0x4e, 0x29, + 0xcd, 0x72, 0x30, 0x75, 0x1f, 0x0a, 0x91, 0x1e, 0xd0, 0xeb, 0x30, 0xdf, 0x6c, 0x3d, 0xc4, 0x8d, + 0x6e, 0x57, 0x99, 0x2b, 0x5d, 0x3f, 0x39, 0xdd, 0x40, 0x11, 0x6e, 0xd3, 0xe9, 0xb3, 0xf9, 0x41, + 0xaf, 0x42, 0x7a, 0xab, 0xcd, 0xce, 0x76, 0x91, 0x6c, 0x47, 0x10, 0x5b, 0xd4, 0xf3, 0x4b, 0xd7, + 0x64, 0x72, 0x17, 0x55, 0xac, 0xfe, 0x7e, 0x02, 0xb2, 0x62, 0x33, 0xc5, 0x4e, 0x54, 0x05, 0xe6, + 0x83, 0x4a, 0x58, 0x14, 0x42, 0x6f, 0x5e, 0x5c, 0xb4, 0x94, 0x65, 0x8d, 0x21, 0x96, 0x5f, 0x20, + 0x57, 0xfa, 0x08, 0x8a, 0x51, 0xc6, 0xb7, 0x5a, 0x7c, 0x3f, 0x82, 0x02, 0x5b, 0xdf, 0x41, 0xf1, + 0x72, 0x0f, 0xb2, 0x22, 0x20, 0x84, 0x67, 0xcd, 0xc5, 0x15, 0x94, 0x44, 0xa2, 0x07, 0x30, 0x2f, + 0xaa, 0xae, 0xe0, 0x02, 0x74, 0xed, 0xf2, 0x5d, 0x84, 0x03, 0xb8, 0xfa, 0x19, 0xa4, 0x3b, 0x84, + 0xb8, 0xcc, 0xf7, 0x0e, 0x35, 0xc9, 0xe4, 0x78, 0x96, 0x05, 0xa3, 0x49, 0x9a, 0x75, 0x56, 0x30, + 0x9a, 0xa4, 0x69, 0x86, 0x57, 0x3c, 0xc9, 0xc8, 0x15, 0x4f, 0x0f, 0x8a, 0x4f, 0x88, 0xd5, 0x3f, + 0xf0, 0x89, 0xc9, 0x15, 0xbd, 0x03, 0xe9, 0x21, 0x09, 0x8d, 0x5f, 0x8d, 0x5d, 0x60, 0x84, 0xb8, + 0x98, 0xa3, 0x58, 0x1c, 0x39, 0xe6, 0xd2, 0xf2, 0xd6, 0x5e, 0xb6, 0xd4, 0xbf, 0x4f, 0xc2, 0x62, + 0xd3, 0xf3, 0x46, 0xba, 0x63, 0x04, 0x99, 0xdb, 0xa7, 0xd3, 0x99, 0x5b, 0xec, 0xf3, 0xc6, 0xb4, + 0xc8, 0xf4, 0xcd, 0x95, 0x3c, 0x3d, 0x93, 0xe1, 0xe9, 0xa9, 0xfe, 0x7b, 0x22, 0xb8, 0x9e, 0xba, + 0x15, 0xd9, 0xee, 0xa5, 0xd5, 0x93, 0xd3, 0x8d, 0x95, 0xa8, 0x26, 0xb2, 0xeb, 0x1c, 0x3a, 0xf4, + 0xd8, 0x41, 0xaf, 0x41, 0x06, 0x37, 0x5a, 0x8d, 0x27, 0x4a, 0x42, 0x2c, 0xcf, 0x29, 0x10, 0x26, + 0x0e, 0x39, 0x66, 0x9a, 0x3a, 0x8d, 0x56, 0x9d, 0x65, 0x5a, 0xc9, 0x18, 0x4d, 0x1d, 0xe2, 0x98, + 0x96, 0xd3, 0x47, 0xaf, 0x43, 0xb6, 0xd9, 0xed, 0xee, 0xf2, 0x0b, 0x84, 0x97, 0x4f, 0x4e, 0x37, + 0xae, 0x4d, 0xa1, 0xf8, 0xd5, 0xa4, 0xc9, 0x40, 0xac, 0xcc, 0x61, 0x39, 0x58, 0x0c, 0x88, 0xe5, + 0xcf, 0x02, 0x84, 0xdb, 0xbd, 0x4a, 0xaf, 0xa1, 0x64, 0x62, 0x40, 0x98, 0xb2, 0xbf, 0x72, 0xbb, + 0xfd, 0x73, 0x12, 0x94, 0x8a, 0x61, 0x90, 0xa1, 0xcf, 0xf8, 0xb2, 0xb2, 0xec, 0x41, 0x6e, 0xc8, + 0xbe, 0x2c, 0x12, 0x64, 0x49, 0x0f, 0x62, 0x1f, 0xe8, 0x66, 0xe4, 0xca, 0x98, 0xda, 0xa4, 0x62, + 0x0e, 0x2c, 0xcf, 0xb3, 0xa8, 0x23, 0x68, 0x38, 0xd4, 0x54, 0xfa, 0xcf, 0x04, 0x5c, 0x8b, 0x41, + 0xa0, 0x3b, 0x90, 0x76, 0xa9, 0x1d, 0xcc, 0xe1, 0xcd, 0x8b, 0x6e, 0x1e, 0x99, 0x28, 0xe6, 0x48, + 0xb4, 0x06, 0xa0, 0x8f, 0x7c, 0xaa, 0xf3, 0xfe, 0xf9, 0xec, 0xe5, 0x70, 0x84, 0x82, 0x9e, 0x40, + 0xd6, 0x23, 0x86, 0x4b, 0x82, 0x5c, 0xfa, 0xb3, 0xff, 0xab, 0xf5, 0xe5, 0x2e, 0x57, 0x83, 0xa5, + 0xba, 0x52, 0x19, 0xb2, 0x82, 0xc2, 0x96, 0xbd, 0xa9, 0xfb, 0xba, 0xbc, 0x97, 0xe6, 0xdf, 0x6c, + 0x35, 0xe9, 0x76, 0x3f, 0x58, 0x4d, 0xba, 0xdd, 0x57, 0xff, 0x26, 0x09, 0xd0, 0x78, 0xea, 0x13, + 0xd7, 0xd1, 0xed, 0x5a, 0x05, 0x35, 0x22, 0xd1, 0x5f, 0x8c, 0xf6, 0xed, 0xd8, 0xcb, 0xf6, 0x50, + 0xa2, 0x5c, 0xab, 0xc4, 0xc4, 0xff, 0x1b, 0x90, 0x1a, 0xb9, 0xf2, 0xcd, 0x55, 0xe4, 0xc1, 0xbb, + 0x78, 0x1b, 0x33, 0x1a, 0x6a, 0x4c, 0xc2, 0x56, 0xea, 0xe2, 0x97, 0xd5, 0x48, 0x07, 0xb1, 0xa1, + 0x8b, 0xed, 0x7c, 0x43, 0xd7, 0x0c, 0x22, 0x4f, 0x8e, 0xa2, 0xd8, 0xf9, 0xb5, 0x4a, 0x8d, 0xb8, + 0x3e, 0xce, 0x1a, 0x3a, 0xfb, 0xff, 0x9d, 0xe2, 0xdb, 0x3b, 0x00, 0x93, 0xa1, 0xa1, 0x35, 0xc8, + 0xd4, 0x36, 0xbb, 0xdd, 0x6d, 0x65, 0x4e, 0x04, 0xf0, 0x09, 0x8b, 0x93, 0xd5, 0xbf, 0x4c, 0x42, + 0xae, 0x56, 0x91, 0xc7, 0x6a, 0x0d, 0x14, 0x1e, 0x95, 0xf8, 0x6d, 0x3e, 0x79, 0x3a, 0xb4, 0xdc, + 0xb1, 0x0c, 0x2c, 0x97, 0x14, 0xb5, 0x8b, 0x4c, 0x84, 0x59, 0xdd, 0xe0, 0x02, 0x08, 0x43, 0x91, + 0x48, 0x27, 0x68, 0x86, 0x1e, 0xc4, 0xf8, 0xb5, 0xcb, 0x9d, 0x25, 0xca, 0x93, 0x49, 0xdb, 0xc3, + 0x85, 0x40, 0x49, 0x4d, 0xf7, 0xd0, 0x87, 0xb0, 0xe4, 0x59, 0x7d, 0xc7, 0x72, 0xfa, 0x5a, 0xe0, + 0x3c, 0xfe, 0xb4, 0x50, 0x5d, 0x3e, 0x3f, 0x5b, 0x5f, 0xe8, 0x0a, 0x96, 0xf4, 0xe1, 0x82, 0x44, + 0xd6, 0xb8, 0x2b, 0xd1, 0x07, 0xb0, 0x18, 0x11, 0x65, 0x5e, 0x14, 0x6e, 0x57, 0xce, 0xcf, 0xd6, + 0x8b, 0xa1, 0xe4, 0x23, 0x32, 0xc6, 0xc5, 0x50, 0xf0, 0x11, 0xe1, 0xf7, 0x2f, 0xfb, 0xd4, 0x35, + 0x88, 0xe6, 0xf2, 0x3d, 0xcd, 0x4f, 0xf0, 0x34, 0x2e, 0x70, 0x9a, 0xd8, 0xe6, 0xea, 0x63, 0xb8, + 0xd6, 0x76, 0x8d, 0x03, 0xe2, 0xf9, 0xc2, 0x15, 0xd2, 0x8b, 0x9f, 0xc1, 0x4d, 0x5f, 0xf7, 0x0e, + 0xb5, 0x03, 0xcb, 0xf3, 0xa9, 0x3b, 0xd6, 0x5c, 0xe2, 0x13, 0x87, 0xf1, 0x35, 0xfe, 0x1e, 0x29, + 0x2f, 0xc8, 0x6e, 0x30, 0xcc, 0x96, 0x80, 0xe0, 0x00, 0xb1, 0xcd, 0x00, 0x6a, 0x13, 0x8a, 0xac, + 0x4c, 0xa9, 0x93, 0x7d, 0x7d, 0x64, 0xfb, 0x6c, 0xf4, 0x60, 0xd3, 0xbe, 0xf6, 0xc2, 0xc7, 0x54, + 0xde, 0xa6, 0x7d, 0xf1, 0xa9, 0xfe, 0x10, 0x94, 0xba, 0xe5, 0x0d, 0x75, 0xdf, 0x38, 0x08, 0x6e, + 0xfe, 0x50, 0x1d, 0x94, 0x03, 0xa2, 0xbb, 0xfe, 0x1e, 0xd1, 0x7d, 0x6d, 0x48, 0x5c, 0x8b, 0x9a, + 0x57, 0xcf, 0xf2, 0x52, 0x28, 0xd2, 0xe1, 0x12, 0xea, 0x7f, 0x25, 0x00, 0xb0, 0xbe, 0x1f, 0x64, + 0x64, 0xdf, 0x87, 0x65, 0xcf, 0xd1, 0x87, 0xde, 0x01, 0xf5, 0x35, 0xcb, 0xf1, 0x89, 0x7b, 0xa4, + 0xdb, 0xf2, 0x02, 0x47, 0x09, 0x18, 0x4d, 0x49, 0x47, 0xef, 0x00, 0x3a, 0x24, 0x64, 0xa8, 0x51, + 0xdb, 0xd4, 0x02, 0xa6, 0x78, 0x2d, 0x4d, 0x63, 0x85, 0x71, 0xda, 0xb6, 0xd9, 0x0d, 0xe8, 0xa8, + 0x0a, 0x6b, 0x6c, 0xf8, 0xc4, 0xf1, 0x5d, 0x8b, 0x78, 0xda, 0x3e, 0x75, 0x35, 0xcf, 0xa6, 0xc7, + 0xda, 0x3e, 0xb5, 0x6d, 0x7a, 0x4c, 0xdc, 0xe0, 0x6e, 0xac, 0x64, 0xd3, 0x7e, 0x43, 0x80, 0x36, + 0xa9, 0xdb, 0xb5, 0xe9, 0xf1, 0x66, 0x80, 0x60, 0x69, 0xdb, 0x64, 0xcc, 0xbe, 0x65, 0x1c, 0x06, + 0x69, 0x5b, 0x48, 0xed, 0x59, 0xc6, 0x21, 0x7a, 0x1d, 0x16, 0x88, 0x4d, 0xf8, 0x15, 0x89, 0x40, + 0x65, 0x38, 0xaa, 0x18, 0x10, 0x19, 0x48, 0xfd, 0x1c, 0x94, 0x86, 0x63, 0xb8, 0xe3, 0x61, 0x64, + 0xce, 0xdf, 0x01, 0xc4, 0x82, 0xa4, 0x66, 0x53, 0xe3, 0x50, 0x1b, 0xe8, 0x8e, 0xde, 0x67, 0x76, + 0x89, 0x47, 0x2c, 0x85, 0x71, 0xb6, 0xa9, 0x71, 0xb8, 0x23, 0xe9, 0xea, 0x87, 0x00, 0xdd, 0xa1, + 0x4b, 0x74, 0xb3, 0xcd, 0xb2, 0x09, 0xe6, 0x3a, 0xde, 0xd2, 0x4c, 0xf9, 0x08, 0x48, 0x5d, 0xb9, + 0xd5, 0x15, 0xc1, 0xa8, 0x87, 0x74, 0xf5, 0x17, 0xe1, 0x5a, 0xc7, 0xd6, 0x0d, 0xfe, 0x20, 0xde, + 0x09, 0x5f, 0x65, 0xd0, 0x03, 0xc8, 0x0a, 0xa8, 0x9c, 0xc9, 0xd8, 0xed, 0x36, 0xe9, 0x73, 0x6b, + 0x0e, 0x4b, 0x7c, 0xb5, 0x08, 0x30, 0xd1, 0xa3, 0xfe, 0x79, 0x02, 0xf2, 0xa1, 0x7e, 0xb4, 0x01, + 0x05, 0x83, 0x3a, 0x6c, 0x79, 0x5b, 0x8e, 0xac, 0xea, 0xf3, 0x38, 0x4a, 0x42, 0x4d, 0x28, 0x0c, + 0x43, 0xe9, 0x4b, 0xf3, 0xb9, 0x18, 0xab, 0x71, 0x54, 0x16, 0x7d, 0x04, 0xf9, 0xe0, 0xd5, 0x35, + 0x88, 0xb0, 0x97, 0x3f, 0xd2, 0x4e, 0xe0, 0xea, 0xa7, 0x00, 0x3f, 0xa0, 0x96, 0xd3, 0xa3, 0x87, + 0xc4, 0xe1, 0xaf, 0x88, 0xac, 0x26, 0x24, 0x81, 0x17, 0x65, 0x8b, 0x97, 0xfa, 0x62, 0x0a, 0xc2, + 0xc7, 0x34, 0xd1, 0x54, 0xff, 0x3a, 0x09, 0x59, 0x4c, 0xa9, 0x5f, 0xab, 0xa0, 0x0d, 0xc8, 0xca, + 0x38, 0xc1, 0xcf, 0x9f, 0x6a, 0xfe, 0xfc, 0x6c, 0x3d, 0x23, 0x02, 0x44, 0xc6, 0xe0, 0x91, 0x21, + 0x12, 0xc1, 0x93, 0x17, 0x45, 0x70, 0x74, 0x07, 0x8a, 0x12, 0xa4, 0x1d, 0xe8, 0xde, 0x81, 0x28, + 0xd0, 0xaa, 0x8b, 0xe7, 0x67, 0xeb, 0x20, 0x90, 0x5b, 0xba, 0x77, 0x80, 0x41, 0xa0, 0xd9, 0x37, + 0x6a, 0x40, 0xe1, 0x4b, 0x6a, 0x39, 0x9a, 0xcf, 0x07, 0x21, 0x2f, 0x13, 0x63, 0xe7, 0x71, 0x32, + 0x54, 0xf9, 0xa4, 0x0e, 0x5f, 0x4e, 0x06, 0xdf, 0x80, 0x05, 0x97, 0x52, 0x5f, 0x84, 0x2d, 0x8b, + 0x3a, 0xf2, 0x9e, 0x62, 0x23, 0xf6, 0xfa, 0x9a, 0x52, 0x1f, 0x4b, 0x1c, 0x2e, 0xba, 0x91, 0x16, + 0xba, 0x03, 0x2b, 0xb6, 0xee, 0xf9, 0x1a, 0x8f, 0x77, 0xe6, 0x44, 0x5b, 0x96, 0x6f, 0x35, 0xc4, + 0x78, 0x9b, 0x9c, 0x15, 0x48, 0xa8, 0xff, 0x98, 0x80, 0x02, 0x1b, 0x8c, 0xb5, 0x6f, 0x19, 0x2c, + 0xc9, 0xfb, 0xf6, 0xb9, 0xc7, 0x0d, 0x48, 0x19, 0x9e, 0x2b, 0x9d, 0xca, 0x0f, 0xdf, 0x5a, 0x17, + 0x63, 0x46, 0x43, 0x9f, 0x43, 0x56, 0xde, 0x97, 0x88, 0xb4, 0x43, 0xbd, 0x3a, 0x1d, 0x95, 0xbe, + 0x91, 0x72, 0x7c, 0x2d, 0x4f, 0xac, 0x13, 0x87, 0x00, 0x8e, 0x92, 0xd0, 0x75, 0x48, 0x1a, 0xc2, + 0x5d, 0xf2, 0x37, 0x1b, 0xb5, 0x16, 0x4e, 0x1a, 0x8e, 0xfa, 0x77, 0x09, 0x58, 0x98, 0x6c, 0x78, + 0xb6, 0x02, 0x6e, 0x42, 0xde, 0x1b, 0xed, 0x79, 0x63, 0xcf, 0x27, 0x83, 0xe0, 0x85, 0x34, 0x24, + 0xa0, 0x26, 0xe4, 0x75, 0xbb, 0x4f, 0x5d, 0xcb, 0x3f, 0x18, 0xc8, 0x4a, 0x34, 0x3e, 0x55, 0x88, + 0xea, 0x2c, 0x57, 0x02, 0x11, 0x3c, 0x91, 0x0e, 0xce, 0x7d, 0xf1, 0x8c, 0xce, 0xcf, 0xfd, 0xd7, + 0xa0, 0x68, 0xeb, 0x03, 0x7e, 0x81, 0xe4, 0x5b, 0x03, 0x31, 0x8e, 0x34, 0x2e, 0x48, 0x5a, 0xcf, + 0x1a, 0x10, 0x55, 0x85, 0x7c, 0xa8, 0x0c, 0x2d, 0x41, 0xa1, 0xd2, 0xe8, 0x6a, 0x77, 0xef, 0x3d, + 0xd0, 0x1e, 0xd6, 0x76, 0x94, 0x39, 0x99, 0x9b, 0xfe, 0x45, 0x02, 0x16, 0x64, 0x38, 0x92, 0xf9, + 0xfe, 0xeb, 0x30, 0xef, 0xea, 0xfb, 0x7e, 0x50, 0x91, 0xa4, 0xc5, 0xaa, 0x66, 0x11, 0x9e, 0x55, + 0x24, 0x8c, 0x15, 0x5f, 0x91, 0x44, 0xde, 0xec, 0x53, 0x97, 0xbe, 0xd9, 0xa7, 0x7f, 0x2e, 0x6f, + 0xf6, 0xea, 0xaf, 0x03, 0x6c, 0x5a, 0x36, 0xe9, 0x89, 0xbb, 0xa6, 0xb8, 0xfa, 0x92, 0xe5, 0x70, + 0xf2, 0x2e, 0x33, 0xc8, 0xe1, 0x9a, 0x75, 0xcc, 0x68, 0x8c, 0xd5, 0xb7, 0x4c, 0xb9, 0x19, 0x39, + 0xeb, 0x21, 0x63, 0xf5, 0x2d, 0x33, 0x7c, 0xa5, 0x4a, 0x5f, 0xf5, 0x4a, 0x75, 0x9a, 0x80, 0x25, + 0x99, 0xbb, 0x86, 0xe1, 0xf7, 0x6d, 0xc8, 0x8b, 0x34, 0x76, 0x52, 0xd0, 0xf1, 0x77, 0x6a, 0x81, + 0x6b, 0xd6, 0x71, 0x4e, 0xb0, 0x9b, 0x26, 0x5a, 0x87, 0x82, 0x84, 0x46, 0x7e, 0xdf, 0x03, 0x82, + 0xd4, 0x62, 0xe6, 0xbf, 0x07, 0xe9, 0x7d, 0xcb, 0x26, 0x72, 0xa1, 0xc7, 0x06, 0x80, 0x89, 0x03, + 0xb6, 0xe6, 0x30, 0x47, 0x57, 0x73, 0xc1, 0x65, 0x1c, 0xb7, 0x4f, 0x96, 0x9d, 0x51, 0xfb, 0x44, + 0x05, 0x3a, 0x63, 0x9f, 0xc0, 0x31, 0xfb, 0x04, 0x5b, 0xd8, 0x27, 0xa1, 0x51, 0xfb, 0x04, 0xe9, + 0xe7, 0x62, 0xdf, 0x36, 0x5c, 0xaf, 0xda, 0xba, 0x71, 0x68, 0x5b, 0x9e, 0x4f, 0xcc, 0x68, 0xc4, + 0xb8, 0x07, 0xd9, 0xa9, 0xa4, 0xf3, 0xb2, 0x5b, 0x4b, 0x89, 0x54, 0xff, 0x2d, 0x01, 0xc5, 0x2d, + 0xa2, 0xdb, 0xfe, 0xc1, 0xe4, 0x6a, 0xc8, 0x27, 0x9e, 0x2f, 0x0f, 0x2b, 0xfe, 0x8d, 0xde, 0x87, + 0x5c, 0x98, 0x93, 0x5c, 0xf9, 0xfe, 0x16, 0x42, 0xd1, 0x7d, 0x98, 0x67, 0x7b, 0x8c, 0x8e, 0x82, + 0x62, 0xe7, 0xb2, 0xa7, 0x1d, 0x89, 0x64, 0x87, 0x8c, 0x4b, 0x78, 0x12, 0xc2, 0x97, 0x52, 0x06, + 0x07, 0x4d, 0xf4, 0xff, 0xa1, 0xc8, 0x5f, 0x26, 0x82, 0x9c, 0x2b, 0x73, 0x95, 0xce, 0x82, 0x78, + 0x5c, 0x14, 0xf9, 0xd6, 0xff, 0x24, 0x60, 0x65, 0x47, 0x1f, 0xef, 0x11, 0x19, 0x36, 0x88, 0x89, + 0x89, 0x41, 0x5d, 0x13, 0x75, 0xa2, 0xe1, 0xe6, 0x92, 0xb7, 0xca, 0x38, 0xe1, 0xf8, 0xa8, 0x13, + 0x14, 0x60, 0xc9, 0x48, 0x01, 0xb6, 0x02, 0x19, 0x87, 0x3a, 0x06, 0x91, 0xb1, 0x48, 0x34, 0x54, + 0x2b, 0x1a, 0x6a, 0x4a, 0xe1, 0x33, 0x22, 0x7f, 0x04, 0x6c, 0x51, 0x3f, 0xec, 0x0d, 0x7d, 0x0e, + 0xa5, 0x6e, 0xa3, 0x86, 0x1b, 0xbd, 0x6a, 0xfb, 0x87, 0x5a, 0xb7, 0xb2, 0xdd, 0xad, 0xdc, 0xbb, + 0xa3, 0x75, 0xda, 0xdb, 0x5f, 0xdc, 0xbd, 0x7f, 0xe7, 0x7d, 0x25, 0x51, 0xda, 0x38, 0x39, 0xdd, + 0xb8, 0xd9, 0xaa, 0xd4, 0xb6, 0xc5, 0x8e, 0xd9, 0xa3, 0x4f, 0xbb, 0xba, 0xed, 0xe9, 0xf7, 0xee, + 0x74, 0xa8, 0x3d, 0x66, 0x18, 0xb6, 0xac, 0x8b, 0xd1, 0xf3, 0x2a, 0x7a, 0x0c, 0x27, 0x2e, 0x3c, + 0x86, 0x27, 0xa7, 0x79, 0xf2, 0x82, 0xd3, 0x7c, 0x13, 0x56, 0x0c, 0x97, 0x7a, 0x9e, 0xc6, 0xb2, + 0x7f, 0x62, 0xce, 0xd4, 0x17, 0x2f, 0x9d, 0x9f, 0xad, 0x2f, 0xd7, 0x18, 0xbf, 0xcb, 0xd9, 0x52, + 0xfd, 0xb2, 0x11, 0x21, 0xf1, 0x9e, 0xd4, 0x3f, 0x48, 0xb1, 0x44, 0xca, 0x3a, 0xb2, 0x6c, 0xd2, + 0x27, 0x1e, 0x7a, 0x0c, 0x4b, 0x86, 0x4b, 0x4c, 0x96, 0xd6, 0xeb, 0x76, 0xf4, 0x77, 0xa2, 0xff, + 0x2f, 0x36, 0xa7, 0x09, 0x05, 0xcb, 0xb5, 0x50, 0xaa, 0x3b, 0x24, 0x06, 0x5e, 0x34, 0xa6, 0xda, + 0xe8, 0x4b, 0x58, 0xf2, 0x88, 0x6d, 0x39, 0xa3, 0xa7, 0x9a, 0x41, 0x1d, 0x9f, 0x3c, 0x0d, 0x5e, + 0xc4, 0xae, 0xd2, 0xdb, 0x6d, 0x6c, 0x33, 0xa9, 0x9a, 0x10, 0xaa, 0xa2, 0xf3, 0xb3, 0xf5, 0xc5, + 0x69, 0x1a, 0x5e, 0x94, 0x9a, 0x65, 0xbb, 0xd4, 0x82, 0xc5, 0x69, 0x6b, 0xd0, 0x8a, 0xdc, 0xfb, + 0x3c, 0x84, 0x04, 0x7b, 0x1b, 0xdd, 0x84, 0x9c, 0x4b, 0xfa, 0x96, 0xe7, 0xbb, 0xc2, 0xcd, 0x8c, + 0x13, 0x52, 0xd8, 0xce, 0x17, 0x3f, 0xf2, 0x29, 0xfd, 0x2a, 0xcc, 0xf4, 0xc8, 0x36, 0x8b, 0x69, + 0x79, 0xfa, 0x9e, 0x54, 0x99, 0xc3, 0x41, 0x93, 0xad, 0xc1, 0x91, 0x17, 0x26, 0x6a, 0xfc, 0x9b, + 0xd1, 0x78, 0x46, 0x21, 0x7f, 0xf2, 0xc4, 0x73, 0x86, 0xe0, 0xb7, 0x93, 0xe9, 0xc8, 0x6f, 0x27, + 0x57, 0x20, 0x63, 0x93, 0x23, 0x62, 0x8b, 0xb3, 0x1c, 0x8b, 0xc6, 0xed, 0x3b, 0x50, 0x0c, 0x7e, + 0xa4, 0xc7, 0x7f, 0x65, 0x90, 0x83, 0x74, 0xaf, 0xd2, 0x7d, 0xa4, 0xcc, 0x21, 0x80, 0xac, 0x58, + 0x9c, 0xe2, 0xb5, 0xae, 0xd6, 0x6e, 0x6d, 0x36, 0x1f, 0x2a, 0xc9, 0xdb, 0x3f, 0x4b, 0x41, 0x3e, + 0x7c, 0x2f, 0x62, 0x67, 0x47, 0xab, 0xf1, 0x24, 0x58, 0xdd, 0x21, 0xbd, 0x45, 0x8e, 0xd1, 0x6b, + 0x93, 0x5b, 0xa8, 0xcf, 0xc5, 0x03, 0x79, 0xc8, 0x0e, 0x6e, 0xa0, 0xde, 0x80, 0x5c, 0xa5, 0xdb, + 0x6d, 0x3e, 0x6c, 0x35, 0xea, 0xca, 0x57, 0x89, 0xd2, 0x4b, 0x27, 0xa7, 0x1b, 0xcb, 0x21, 0xa8, + 0xe2, 0x89, 0xc5, 0xc7, 0x51, 0xb5, 0x5a, 0xa3, 0xd3, 0x6b, 0xd4, 0x95, 0x67, 0xc9, 0x59, 0x14, + 0xbf, 0x55, 0xe1, 0x3f, 0x73, 0xc9, 0x77, 0x70, 0xa3, 0x53, 0xc1, 0xac, 0xc3, 0xaf, 0x92, 0xe2, + 0x72, 0x6c, 0xd2, 0xa3, 0x4b, 0x86, 0xba, 0xcb, 0xfa, 0x5c, 0x0b, 0x7e, 0xee, 0xf5, 0x2c, 0x25, + 0x7e, 0x0a, 0x31, 0x79, 0xfc, 0x22, 0xba, 0x39, 0x66, 0xbd, 0xf1, 0x57, 0x47, 0xae, 0x26, 0x35, + 0xd3, 0x5b, 0x97, 0xc5, 0x1e, 0xa6, 0x45, 0x85, 0x79, 0xbc, 0xdb, 0x6a, 0x31, 0xd0, 0xb3, 0xf4, + 0xcc, 0xe8, 0xf0, 0xc8, 0x61, 0x15, 0x33, 0xba, 0x05, 0xb9, 0xe0, 0x51, 0x52, 0xf9, 0x2a, 0x3d, + 0x63, 0x50, 0x2d, 0x78, 0x51, 0xe5, 0x1d, 0x6e, 0xed, 0xf6, 0xf8, 0xaf, 0xd1, 0x9e, 0x65, 0x66, + 0x3b, 0x3c, 0x18, 0xf9, 0x26, 0x3d, 0x76, 0xd8, 0x9e, 0x95, 0xf7, 0x70, 0x5f, 0x65, 0xc4, 0xa5, + 0x45, 0x88, 0x91, 0x97, 0x70, 0x6f, 0x40, 0x0e, 0x37, 0x7e, 0x20, 0x7e, 0xb8, 0xf6, 0x2c, 0x3b, + 0xa3, 0x07, 0x93, 0x2f, 0x89, 0x21, 0x7b, 0x6b, 0xe3, 0xce, 0x56, 0x85, 0xbb, 0x7c, 0x16, 0xd5, + 0x76, 0x87, 0x07, 0xba, 0x43, 0xcc, 0xc9, 0xef, 0x41, 0x42, 0xd6, 0xed, 0x5f, 0x82, 0x5c, 0x90, + 0x99, 0xa2, 0x35, 0xc8, 0x3e, 0x69, 0xe3, 0x47, 0x0d, 0xac, 0xcc, 0x09, 0x1f, 0x06, 0x9c, 0x27, + 0xa2, 0xa6, 0xd8, 0x80, 0xf9, 0x9d, 0x4a, 0xab, 0xf2, 0xb0, 0x81, 0x83, 0x2b, 0xf2, 0x00, 0x20, + 0xd3, 0xab, 0x92, 0x22, 0x3b, 0x08, 0x75, 0x56, 0x57, 0xbf, 0xfe, 0x66, 0x6d, 0xee, 0xa7, 0xdf, + 0xac, 0xcd, 0x3d, 0x3b, 0x5f, 0x4b, 0x7c, 0x7d, 0xbe, 0x96, 0xf8, 0xc9, 0xf9, 0x5a, 0xe2, 0x5f, + 0xcf, 0xd7, 0x12, 0x7b, 0x59, 0x7e, 0x08, 0xdc, 0xff, 0xdf, 0x00, 0x00, 0x00, 0xff, 0xff, 0xd0, + 0xd1, 0x79, 0x14, 0xb4, 0x30, 0x00, 0x00, } diff --git a/vendor/github.com/docker/swarmkit/api/types.proto b/vendor/github.com/docker/swarmkit/api/types.proto index a9fb07a57b42..eaf037e77d32 100644 --- a/vendor/github.com/docker/swarmkit/api/types.proto +++ b/vendor/github.com/docker/swarmkit/api/types.proto @@ -57,6 +57,12 @@ message GenericResource { } } +enum ResourceType { + TASK = 0; + SECRET = 1; + CONFIG = 2; +} + message Resources { // Amount of CPUs (e.g. 2000000000 = 2 CPU cores) int64 nano_cpus = 1 [(gogoproto.customname) = "NanoCPUs"]; @@ -508,6 +514,15 @@ message TaskStatus { // HostPorts provides a list of ports allocated at the host // level. PortStatus port_status = 6; + + // AppliedBy gives the node ID of the manager that applied this task + // status update to the Task object. + string applied_by = 7; + + // AppliedAt gives a timestamp of when this status update was applied to + // the Task object. + // Note: can't use stdtime because this field is nullable. + google.protobuf.Timestamp applied_at = 8; } // NetworkAttachmentConfig specifies how a service should be attached to a particular network. diff --git a/vendor/github.com/docker/swarmkit/ca/config.go b/vendor/github.com/docker/swarmkit/ca/config.go index 3731df1c4930..0fd4ebe0f0a6 100644 --- a/vendor/github.com/docker/swarmkit/ca/config.go +++ b/vendor/github.com/docker/swarmkit/ca/config.go @@ -68,14 +68,11 @@ type SecurityConfig struct { renewalMu sync.Mutex rootCA *RootCA - externalCA *ExternalCA keyReadWriter *KeyReadWriter certificate *tls.Certificate issuerInfo *IssuerInfo - externalCAClientRootPool *x509.CertPool - ServerTLSCreds *MutableTLSCreds ClientTLSCreds *MutableTLSCreds @@ -90,7 +87,7 @@ type CertificateUpdate struct { Err error } -func validateRootCAAndTLSCert(rootCA *RootCA, externalCARootPool *x509.CertPool, tlsKeyPair *tls.Certificate) error { +func validateRootCAAndTLSCert(rootCA *RootCA, tlsKeyPair *tls.Certificate) error { var ( leafCert *x509.Certificate intermediatePool *x509.CertPool @@ -116,10 +113,6 @@ func validateRootCAAndTLSCert(rootCA *RootCA, externalCARootPool *x509.CertPool, if _, err := leafCert.Verify(opts); err != nil { return errors.Wrap(err, "new root CA does not match existing TLS credentials") } - opts.Roots = externalCARootPool - if _, err := leafCert.Verify(opts); err != nil { - return errors.Wrap(err, "new external root pool does not match existing TLS credentials") - } return nil } @@ -139,16 +132,7 @@ func NewSecurityConfig(rootCA *RootCA, krw *KeyReadWriter, tlsKeyPair *tls.Certi return nil, nil, err } - // Make a new TLS config for the external CA client without a - // ServerName value set. - externalCATLSConfig := &tls.Config{ - Certificates: []tls.Certificate{*tlsKeyPair}, - RootCAs: rootCA.Pool, - MinVersion: tls.VersionTLS12, - } - q := watch.NewQueue() - return &SecurityConfig{ rootCA: rootCA, keyReadWriter: krw, @@ -157,10 +141,8 @@ func NewSecurityConfig(rootCA *RootCA, krw *KeyReadWriter, tlsKeyPair *tls.Certi issuerInfo: issuerInfo, queue: q, - externalCA: NewExternalCA(rootCA, externalCATLSConfig), - ClientTLSCreds: clientTLSCreds, - ServerTLSCreds: serverTLSCreds, - externalCAClientRootPool: rootCA.Pool, + ClientTLSCreds: clientTLSCreds, + ServerTLSCreds: serverTLSCreds, }, q.Close, nil } @@ -172,11 +154,6 @@ func (s *SecurityConfig) RootCA() *RootCA { return s.rootCA } -// ExternalCA returns the external CA. -func (s *SecurityConfig) ExternalCA() *ExternalCA { - return s.externalCA -} - // KeyWriter returns the object that can write keys to disk func (s *SecurityConfig) KeyWriter() KeyWriter { return s.keyReadWriter @@ -188,19 +165,16 @@ func (s *SecurityConfig) KeyReader() KeyReader { } // UpdateRootCA replaces the root CA with a new root CA -func (s *SecurityConfig) UpdateRootCA(rootCA *RootCA, externalCARootPool *x509.CertPool) error { +func (s *SecurityConfig) UpdateRootCA(rootCA *RootCA) error { s.mu.Lock() defer s.mu.Unlock() // refuse to update the root CA if the current TLS credentials do not validate against it - if err := validateRootCAAndTLSCert(rootCA, externalCARootPool, s.certificate); err != nil { + if err := validateRootCAAndTLSCert(rootCA, s.certificate); err != nil { return err } s.rootCA = rootCA - s.externalCAClientRootPool = externalCARootPool - s.externalCA.UpdateRootCA(rootCA) - return s.updateTLSCredentials(s.certificate, s.issuerInfo) } @@ -233,14 +207,6 @@ func (s *SecurityConfig) updateTLSCredentials(certificate *tls.Certificate, issu return errors.Wrap(err, "failed to update the client credentials") } - // Update the external CA to use the new client TLS - // config using a copy without a serverName specified. - s.externalCA.UpdateTLSConfig(&tls.Config{ - Certificates: certs, - RootCAs: s.externalCAClientRootPool, - MinVersion: tls.VersionTLS12, - }) - if err := s.ServerTLSCreds.loadNewTLSConfig(serverConfig); err != nil { return errors.Wrap(err, "failed to update the server TLS credentials") } @@ -507,7 +473,7 @@ func updateRootThenUpdateCert(ctx context.Context, s *SecurityConfig, connBroker return nil, nil, err } // validate against the existing security config creds - if err := s.UpdateRootCA(&rootCA, rootCA.Pool); err != nil { + if err := s.UpdateRootCA(&rootCA); err != nil { return nil, nil, err } if err := SaveRootCA(rootCA, rootPaths); err != nil { diff --git a/vendor/github.com/docker/swarmkit/ca/external.go b/vendor/github.com/docker/swarmkit/ca/external.go index 47c8dd8f8007..789361eb61d9 100644 --- a/vendor/github.com/docker/swarmkit/ca/external.go +++ b/vendor/github.com/docker/swarmkit/ca/external.go @@ -47,18 +47,28 @@ var ErrNoExternalCAURLs = errors.New("no external CA URLs") type ExternalCA struct { ExternalRequestTimeout time.Duration - mu sync.Mutex - rootCA *RootCA - urls []string - client *http.Client + mu sync.Mutex + intermediates []byte + urls []string + client *http.Client +} + +// NewExternalCATLSConfig takes a TLS certificate and root pool and returns a TLS config that can be updated +// without killing existing connections +func NewExternalCATLSConfig(certs []tls.Certificate, rootPool *x509.CertPool) *tls.Config { + return &tls.Config{ + Certificates: certs, + RootCAs: rootPool, + MinVersion: tls.VersionTLS12, + } } // NewExternalCA creates a new ExternalCA which uses the given tlsConfig to // authenticate to any of the given URLS of CFSSL API endpoints. -func NewExternalCA(rootCA *RootCA, tlsConfig *tls.Config, urls ...string) *ExternalCA { +func NewExternalCA(intermediates []byte, tlsConfig *tls.Config, urls ...string) *ExternalCA { return &ExternalCA{ ExternalRequestTimeout: 5 * time.Second, - rootCA: rootCA, + intermediates: intermediates, urls: urls, client: &http.Client{ Transport: &http.Transport{ @@ -68,19 +78,6 @@ func NewExternalCA(rootCA *RootCA, tlsConfig *tls.Config, urls ...string) *Exter } } -// Copy returns a copy of the external CA that can be updated independently -func (eca *ExternalCA) Copy() *ExternalCA { - eca.mu.Lock() - defer eca.mu.Unlock() - - return &ExternalCA{ - ExternalRequestTimeout: eca.ExternalRequestTimeout, - rootCA: eca.rootCA, - urls: eca.urls, - client: eca.client, - } -} - // UpdateTLSConfig updates the HTTP Client for this ExternalCA by creating // a new client which uses the given tlsConfig. func (eca *ExternalCA) UpdateTLSConfig(tlsConfig *tls.Config) { @@ -102,13 +99,6 @@ func (eca *ExternalCA) UpdateURLs(urls ...string) { eca.urls = urls } -// UpdateRootCA changes the root CA used to append intermediates -func (eca *ExternalCA) UpdateRootCA(rca *RootCA) { - eca.mu.Lock() - eca.rootCA = rca - eca.mu.Unlock() -} - // Sign signs a new certificate by proxying the given certificate signing // request to an external CFSSL API server. func (eca *ExternalCA) Sign(ctx context.Context, req signer.SignRequest) (cert []byte, err error) { @@ -117,7 +107,7 @@ func (eca *ExternalCA) Sign(ctx context.Context, req signer.SignRequest) (cert [ eca.mu.Lock() urls := eca.urls client := eca.client - intermediates := eca.rootCA.Intermediates + intermediates := eca.intermediates eca.mu.Unlock() if len(urls) == 0 { diff --git a/vendor/github.com/docker/swarmkit/ca/server.go b/vendor/github.com/docker/swarmkit/ca/server.go index 33a6367695cf..16dbedc8da88 100644 --- a/vendor/github.com/docker/swarmkit/ca/server.go +++ b/vendor/github.com/docker/swarmkit/ca/server.go @@ -25,13 +25,6 @@ const ( defaultRootReconciliationInterval = 3 * time.Second ) -// APISecurityConfigUpdater knows how to update a SecurityConfig from an api.Cluster object -type APISecurityConfigUpdater interface { - UpdateRootCA(ctx context.Context, cluster *api.Cluster) error -} - -var _ APISecurityConfigUpdater = &Server{} - // Server is the CA and NodeCA API gRPC server. // TODO(aaronl): At some point we may want to have separate implementations of // CA, NodeCA, and other hypothetical future CA services. At the moment, @@ -43,6 +36,10 @@ type Server struct { cancel func() store *store.MemoryStore securityConfig *SecurityConfig + clusterID string + localRootCA *RootCA + externalCA *ExternalCA + externalCAPool *x509.CertPool joinTokens *api.JoinTokens reconciliationRetryInterval time.Duration @@ -60,10 +57,12 @@ type Server struct { // the security config as a result lastSeenClusterRootCA *api.RootCA lastSeenExternalCAs []*api.ExternalCA - secConfigMu sync.Mutex - // before we update the security config with the new root CA, we need to be able to save the root certs - rootPaths CertPaths + // This mutex protects the components of the CA server used to issue new certificates + // (and any attributes used to update those components): `lastSeenClusterRootCA` and + // `lastSeenExternalCA`, which are used to update `externalCA` and the `rootCA` object + // of the SecurityConfig + signingMu sync.Mutex // lets us monitor and finish root rotations rootReconciler *rootRotationReconciler @@ -78,18 +77,36 @@ func DefaultCAConfig() api.CAConfig { } // NewServer creates a CA API server. -func NewServer(store *store.MemoryStore, securityConfig *SecurityConfig, rootCAPaths CertPaths) *Server { +func NewServer(store *store.MemoryStore, securityConfig *SecurityConfig) *Server { return &Server{ store: store, securityConfig: securityConfig, + localRootCA: securityConfig.RootCA(), + externalCA: NewExternalCA(nil, nil), pending: make(map[string]*api.Node), started: make(chan struct{}), reconciliationRetryInterval: defaultReconciliationRetryInterval, rootReconciliationRetryInterval: defaultRootReconciliationInterval, - rootPaths: rootCAPaths, + clusterID: securityConfig.ClientTLSCreds.Organization(), } } +// ExternalCA returns the current external CA - this is exposed to support unit testing only, and the external CA +// should really be a private field +func (s *Server) ExternalCA() *ExternalCA { + s.signingMu.Lock() + defer s.signingMu.Unlock() + return s.externalCA +} + +// RootCA returns the current local root CA - this is exposed to support unit testing only, and the root CA +// should really be a private field +func (s *Server) RootCA() *RootCA { + s.signingMu.Lock() + defer s.signingMu.Unlock() + return s.localRootCA +} + // SetReconciliationRetryInterval changes the time interval between // reconciliation attempts. This function must be called before Run. func (s *Server) SetReconciliationRetryInterval(reconciliationRetryInterval time.Duration) { @@ -114,7 +131,7 @@ func (s *Server) GetUnlockKey(ctx context.Context, request *api.GetUnlockKeyRequ // a cached value. resp := api.GetUnlockKeyResponse{} s.store.View(func(tx store.ReadTx) { - cluster := store.GetCluster(tx, s.securityConfig.ClientTLSCreds.Organization()) + cluster := store.GetCluster(tx, s.clusterID) resp.Version = cluster.Meta.Version if cluster.Spec.EncryptionConfig.AutoLockManagers { for _, encryptionKey := range cluster.UnlockKeys { @@ -222,7 +239,7 @@ func (s *Server) IssueNodeCertificate(ctx context.Context, request *api.IssueNod return nil, grpc.Errorf(codes.InvalidArgument, codes.InvalidArgument.String()) } - if _, err := s.isRunningLocked(); err != nil { + if err := s.isReadyLocked(); err != nil { return nil, err } @@ -233,8 +250,7 @@ func (s *Server) IssueNodeCertificate(ctx context.Context, request *api.IssueNod ) s.store.View(func(readTx store.ReadTx) { - clusters, err = store.FindClusters(readTx, store.ByName("default")) - + clusters, err = store.FindClusters(readTx, store.ByName(store.DefaultClusterName)) }) // Not having a cluster object yet means we can't check @@ -254,14 +270,14 @@ func (s *Server) IssueNodeCertificate(ctx context.Context, request *api.IssueNod // If the remote node is a worker (either forwarded by a manager, or calling directly), // issue a renew worker certificate entry with the correct ID - nodeID, err := AuthorizeForwardedRoleAndOrg(ctx, []string{WorkerRole}, []string{ManagerRole}, s.securityConfig.ClientTLSCreds.Organization(), blacklistedCerts) + nodeID, err := AuthorizeForwardedRoleAndOrg(ctx, []string{WorkerRole}, []string{ManagerRole}, s.clusterID, blacklistedCerts) if err == nil { return s.issueRenewCertificate(ctx, nodeID, request.CSR) } // If the remote node is a manager (either forwarded by another manager, or calling directly), // issue a renew certificate entry with the correct ID - nodeID, err = AuthorizeForwardedRoleAndOrg(ctx, []string{ManagerRole}, []string{ManagerRole}, s.securityConfig.ClientTLSCreds.Organization(), blacklistedCerts) + nodeID, err = AuthorizeForwardedRoleAndOrg(ctx, []string{ManagerRole}, []string{ManagerRole}, s.clusterID, blacklistedCerts) if err == nil { return s.issueRenewCertificate(ctx, nodeID, request.CSR) } @@ -393,8 +409,11 @@ func (s *Server) GetRootCACertificate(ctx context.Context, request *api.GetRootC "method": "GetRootCACertificate", }) + s.signingMu.Lock() + defer s.signingMu.Unlock() + return &api.GetRootCACertificateResponse{ - Certificate: s.securityConfig.RootCA().Certs, + Certificate: s.localRootCA.Certs, }, nil } @@ -409,47 +428,51 @@ func (s *Server) Run(ctx context.Context) error { s.wg.Add(1) s.ctx, s.cancel = context.WithCancel(log.WithModule(ctx, "ca")) ctx = s.ctx - // we need to set it on the server, because `Server.UpdateRootCA` can be called from outside the Run function - s.rootReconciler = &rootRotationReconciler{ - ctx: log.WithField(ctx, "method", "(*Server).rootRotationReconciler"), - clusterID: s.securityConfig.ClientTLSCreds.Organization(), - store: s.store, - batchUpdateInterval: s.rootReconciliationRetryInterval, - } - rootReconciler := s.rootReconciler s.mu.Unlock() defer s.wg.Done() defer func() { s.mu.Lock() - s.rootReconciler = nil s.mu.Unlock() }() // Retrieve the channels to keep track of changes in the cluster // Retrieve all the currently registered nodes - var nodes []*api.Node - + var ( + nodes []*api.Node + cluster *api.Cluster + err error + ) updates, cancel, err := store.ViewAndWatch( s.store, func(readTx store.ReadTx) error { - clusters, err := store.FindClusters(readTx, store.ByName(store.DefaultClusterName)) - if err != nil { - return err - } - if len(clusters) != 1 { + cluster = store.GetCluster(readTx, s.clusterID) + if cluster == nil { return errors.New("could not find cluster object") } - s.UpdateRootCA(ctx, clusters[0]) // call once to ensure that the join tokens are always set nodes, err = store.FindNodes(readTx, store.All) return err }, api.EventCreateNode{}, api.EventUpdateNode{}, api.EventDeleteNode{}, + api.EventUpdateCluster{ + Cluster: &api.Cluster{ID: s.clusterID}, + Checks: []api.ClusterCheckFunc{api.ClusterCheckID}, + }, ) - // Do this after updateCluster has been called, so isRunning never - // returns true without joinTokens being set correctly. + // call once to ensure that the join tokens and local/external CA signer are always set + rootReconciler := &rootRotationReconciler{ + ctx: log.WithField(ctx, "method", "(*Server).rootRotationReconciler"), + clusterID: s.clusterID, + store: s.store, + batchUpdateInterval: s.rootReconciliationRetryInterval, + } + + s.UpdateRootCA(ctx, cluster, rootReconciler) + + // Do this after updateCluster has been called, so Ready() and isRunning never returns true without + // the join tokens and external CA/security config's root CA being set correctly s.mu.Lock() close(s.started) s.mu.Unlock() @@ -475,6 +498,9 @@ func (s *Server) Run(ctx context.Context) error { ticker := time.NewTicker(s.reconciliationRetryInterval) defer ticker.Stop() + externalTLSCredsChange, externalTLSWatchCancel := s.securityConfig.Watch() + defer externalTLSWatchCancel() + // Watch for new nodes being created, new nodes being updated, and changes // to the cluster for { @@ -499,8 +525,29 @@ func (s *Server) Run(ctx context.Context) error { rootReconciler.UpdateNode(v.Node) case api.EventDeleteNode: rootReconciler.DeleteNode(v.Node) + case api.EventUpdateCluster: + if v.Cluster.ID == s.clusterID { + s.UpdateRootCA(ctx, v.Cluster, rootReconciler) + } } - + case <-externalTLSCredsChange: + // The TLS certificates can rotate independently of the root CA (and hence which roots the + // external CA trusts) and external CA URLs. It's possible that the root CA update is received + // before the external TLS cred change notification. During that period, it is possible that + // the TLS creds will expire or otherwise fail to authorize against external CAs. However, in + // that case signing will just fail with a recoverable connectivity error - the state of the + // certificate issuance is left as pending, and on the next tick, the server will try to sign + // all nodes with pending certs again (by which time the TLS cred change will have been + // received). + + // Note that if the external CA changes, the new external CA *MUST* trust the current server's + // certificate issuer, and this server's certificates should not be extremely close to expiry, + // otherwise this server would not be able to get new TLS certificates and will no longer be + // able to function. + s.signingMu.Lock() + s.externalCA.UpdateTLSConfig(NewExternalCATLSConfig( + s.securityConfig.ClientTLSCreds.Config().Certificates, s.externalCAPool)) + s.signingMu.Unlock() case <-ticker.C: for _, node := range s.pending { if err := s.evaluateAndSignNodeCert(ctx, node); err != nil { @@ -527,6 +574,7 @@ func (s *Server) Stop() error { } s.cancel() s.started = make(chan struct{}) + s.joinTokens = nil s.mu.Unlock() // Wait for Run to complete @@ -553,6 +601,18 @@ func (s *Server) isRunningLocked() (context.Context, error) { return ctx, nil } +func (s *Server) isReadyLocked() error { + s.mu.Lock() + defer s.mu.Unlock() + if !s.isRunning() { + return grpc.Errorf(codes.Aborted, "CA signer is stopped") + } + if s.joinTokens == nil { + return grpc.Errorf(codes.Aborted, "CA signer is still starting") + } + return nil +} + func (s *Server) isRunning() bool { if s.ctx == nil { return false @@ -565,33 +625,59 @@ func (s *Server) isRunning() bool { return true } +// filterExternalCAURLS returns a list of external CA urls filtered by the desired cert. +func filterExternalCAURLS(ctx context.Context, desiredCert, defaultCert []byte, apiExternalCAs []*api.ExternalCA) (urls []string) { + desiredCert = NormalizePEMs(desiredCert) + + // TODO(aaronl): In the future, this will be abstracted with an ExternalCA interface that has different + // implementations for different CA types. At the moment, only CFSSL is supported. + for i, extCA := range apiExternalCAs { + // We want to support old external CA specifications which did not have a CA cert. If there is no cert specified, + // we assume it's the old cert + certForExtCA := extCA.CACert + if len(certForExtCA) == 0 { + certForExtCA = defaultCert + } + certForExtCA = NormalizePEMs(certForExtCA) + if extCA.Protocol != api.ExternalCA_CAProtocolCFSSL { + log.G(ctx).Debugf("skipping external CA %d (url: %s) due to unknown protocol type", i, extCA.URL) + continue + } + if !bytes.Equal(certForExtCA, desiredCert) { + log.G(ctx).Debugf("skipping external CA %d (url: %s) because it has the wrong CA cert", i, extCA.URL) + continue + } + urls = append(urls, extCA.URL) + } + return +} + // UpdateRootCA is called when there are cluster changes, and it ensures that the local RootCA is // always aware of changes in clusterExpiry and the Root CA key material - this can be called by // anything to update the root CA material -func (s *Server) UpdateRootCA(ctx context.Context, cluster *api.Cluster) error { +func (s *Server) UpdateRootCA(ctx context.Context, cluster *api.Cluster, reconciler *rootRotationReconciler) error { s.mu.Lock() s.joinTokens = cluster.RootCA.JoinTokens.Copy() - reconciler := s.rootReconciler s.mu.Unlock() rCA := cluster.RootCA.Copy() if reconciler != nil { reconciler.UpdateRootCA(rCA) } - s.secConfigMu.Lock() - defer s.secConfigMu.Unlock() + s.signingMu.Lock() + defer s.signingMu.Unlock() firstSeenCluster := s.lastSeenClusterRootCA == nil && s.lastSeenExternalCAs == nil rootCAChanged := len(rCA.CACert) != 0 && !equality.RootCAEqualStable(s.lastSeenClusterRootCA, rCA) externalCAChanged := !equality.ExternalCAsEqualStable(s.lastSeenExternalCAs, cluster.Spec.CAConfig.ExternalCAs) - logger := log.G(ctx).WithFields(logrus.Fields{ + ctx = log.WithLogger(ctx, log.G(ctx).WithFields(logrus.Fields{ "cluster.id": cluster.ID, "method": "(*Server).UpdateRootCA", - }) + })) if rootCAChanged { setOrUpdate := "set" if !firstSeenCluster { - logger.Debug("Updating security config due to change in cluster Root CA") + log.G(ctx).Debug("Updating signing root CA and external CA due to change in cluster Root CA") setOrUpdate = "updated" } expiry := DefaultNodeCertExpiration @@ -599,91 +685,55 @@ func (s *Server) UpdateRootCA(ctx context.Context, cluster *api.Cluster) error { // NodeCertExpiry exists, let's try to parse the duration out of it clusterExpiry, err := gogotypes.DurationFromProto(cluster.Spec.CAConfig.NodeCertExpiry) if err != nil { - logger.WithError(err).Warn("failed to parse certificate expiration, using default") + log.G(ctx).WithError(err).Warn("failed to parse certificate expiration, using default") } else { // We were able to successfully parse the expiration out of the cluster. expiry = clusterExpiry } } else { // NodeCertExpiry seems to be nil - logger.Warn("no certificate expiration specified, using default") + log.G(ctx).Warn("no certificate expiration specified, using default") } // Attempt to update our local RootCA with the new parameters - var intermediates []byte - signingCert := rCA.CACert - signingKey := rCA.CAKey - if rCA.RootRotation != nil { - signingCert = rCA.RootRotation.CrossSignedCACert - signingKey = rCA.RootRotation.CAKey - intermediates = rCA.RootRotation.CrossSignedCACert - } - if signingKey == nil { - signingCert = nil - } - updatedRootCA, err := NewRootCA(rCA.CACert, signingCert, signingKey, expiry, intermediates) + updatedRootCA, err := RootCAFromAPI(ctx, rCA, expiry) if err != nil { return errors.Wrap(err, "invalid Root CA object in cluster") } - externalCARootPool := updatedRootCA.Pool + + s.localRootCA = &updatedRootCA + s.externalCAPool = updatedRootCA.Pool + externalCACert := rCA.CACert if rCA.RootRotation != nil { + externalCACert = rCA.RootRotation.CACert // the external CA has to trust the new CA cert - externalCARootPool = x509.NewCertPool() - externalCARootPool.AppendCertsFromPEM(rCA.CACert) - externalCARootPool.AppendCertsFromPEM(rCA.RootRotation.CACert) + s.externalCAPool = x509.NewCertPool() + s.externalCAPool.AppendCertsFromPEM(rCA.CACert) + s.externalCAPool.AppendCertsFromPEM(rCA.RootRotation.CACert) } + s.lastSeenExternalCAs = cluster.Spec.CAConfig.Copy().ExternalCAs + urls := filterExternalCAURLS(ctx, externalCACert, rCA.CACert, s.lastSeenExternalCAs) + // Replace the external CA with the relevant intermediates, URLS, and TLS config + s.externalCA = NewExternalCA(updatedRootCA.Intermediates, + NewExternalCATLSConfig(s.securityConfig.ClientTLSCreds.Config().Certificates, s.externalCAPool), urls...) - // Attempt to update our local RootCA with the new parameters - if err := s.securityConfig.UpdateRootCA(&updatedRootCA, externalCARootPool); err != nil { - return errors.Wrap(err, "updating Root CA failed") - } - if err := SaveRootCA(updatedRootCA, s.rootPaths); err != nil { - return errors.Wrap(err, "unable to save new root CA certificates") - } // only update the server cache if we've successfully updated the root CA - logger.Debugf("Root CA %s successfully", setOrUpdate) + log.G(ctx).Debugf("Root CA %s successfully", setOrUpdate) s.lastSeenClusterRootCA = rCA - } - - // we want to update if the external CA changed, or if the root CA changed because the root CA could affect what - // certificate for external CAs we want to filter by - if rootCAChanged || externalCAChanged { + } else if externalCAChanged { + // we want to update only if the external CA URLS have changed, since if the root CA has changed we already + // run similar logic if !firstSeenCluster { - logger.Debug("Updating security config external CA URLs due to change in cluster Root CA or cluster spec") + log.G(ctx).Debug("Updating security config external CA URLs due to change in cluster spec's list of external CAs") } wantedExternalCACert := rCA.CACert // we want to only add external CA URLs that use this cert if rCA.RootRotation != nil { // we're rotating to a new root, so we only want external CAs with the new root cert wantedExternalCACert = rCA.RootRotation.CACert } - wantedExternalCACert = NormalizePEMs(wantedExternalCACert) - // Update our security config with the list of External CA URLs - // from the new cluster state. - - // TODO(aaronl): In the future, this will be abstracted with an - // ExternalCA interface that has different implementations for - // different CA types. At the moment, only CFSSL is supported. - var cfsslURLs []string - for i, extCA := range cluster.Spec.CAConfig.ExternalCAs { - // We want to support old external CA specifications which did not have a CA cert. If there is no cert specified, - // we assume it's the old cert - certForExtCA := extCA.CACert - if len(certForExtCA) == 0 { - certForExtCA = rCA.CACert - } - certForExtCA = NormalizePEMs(certForExtCA) - if extCA.Protocol != api.ExternalCA_CAProtocolCFSSL { - logger.Debugf("skipping external CA %d (url: %s) due to unknown protocol type", i, extCA.URL) - continue - } - if !bytes.Equal(certForExtCA, wantedExternalCACert) { - logger.Debugf("skipping external CA %d (url: %s) because it has the wrong CA cert", i, extCA.URL) - continue - } - cfsslURLs = append(cfsslURLs, extCA.URL) - } - - s.securityConfig.externalCA.UpdateURLs(cfsslURLs...) + // Update our external CA with the list of External CA URLs from the new cluster state s.lastSeenExternalCAs = cluster.Spec.CAConfig.Copy().ExternalCAs + urls := filterExternalCAURLS(ctx, wantedExternalCACert, rCA.CACert, s.lastSeenExternalCAs) + s.externalCA.UpdateURLs(urls...) } return nil } @@ -714,8 +764,10 @@ func (s *Server) evaluateAndSignNodeCert(ctx context.Context, node *api.Node) er // signNodeCert does the bulk of the work for signing a certificate func (s *Server) signNodeCert(ctx context.Context, node *api.Node) error { - rootCA := s.securityConfig.RootCA() - externalCA := s.securityConfig.externalCA + s.signingMu.Lock() + rootCA := s.localRootCA + externalCA := s.externalCA + s.signingMu.Unlock() node = node.Copy() nodeID := node.ID @@ -736,7 +788,7 @@ func (s *Server) signNodeCert(ctx context.Context, node *api.Node) error { rawCSR = node.Certificate.CSR cn = node.Certificate.CN ou = role - org = s.securityConfig.ClientTLSCreds.Organization() + org = s.clusterID ) // Try using the external CA first. @@ -847,3 +899,19 @@ func isFinalState(status api.IssuanceStatus) bool { return false } + +// RootCAFromAPI creates a RootCA object from an api.RootCA object +func RootCAFromAPI(ctx context.Context, apiRootCA *api.RootCA, expiry time.Duration) (RootCA, error) { + var intermediates []byte + signingCert := apiRootCA.CACert + signingKey := apiRootCA.CAKey + if apiRootCA.RootRotation != nil { + signingCert = apiRootCA.RootRotation.CrossSignedCACert + signingKey = apiRootCA.RootRotation.CAKey + intermediates = apiRootCA.RootRotation.CrossSignedCACert + } + if signingKey == nil { + signingCert = nil + } + return NewRootCA(apiRootCA.CACert, signingCert, signingKey, expiry, intermediates) +} diff --git a/vendor/github.com/docker/swarmkit/vendor.conf b/vendor/github.com/docker/swarmkit/vendor.conf index 73692eeee315..9fa3e2c19f3c 100644 --- a/vendor/github.com/docker/swarmkit/vendor.conf +++ b/vendor/github.com/docker/swarmkit/vendor.conf @@ -19,26 +19,26 @@ github.com/prometheus/common ebdfc6da46522d58825777cf1f90490a5b1ef1d8 github.com/prometheus/procfs abf152e5f3e97f2fafac028d2cc06c1feb87ffa5 github.com/docker/distribution b38e5838b7b2f2ad48e06ec4b500011976080621 -github.com/docker/docker 77c9728847358a3ed3581d828fb0753017e1afd3 -github.com/docker/go-connections 34b5052da6b11e27f5f2e357b38b571ddddd3928 -github.com/docker/go-events 37d35add5005832485c0225ec870121b78fcff1c +github.com/docker/docker 8af4db6f002ac907b6ef8610b237879dfcaa5b7a +github.com/docker/go-connections 3ede32e2033de7505e6500d6c868c2b9ed9f169d +github.com/docker/go-events 9461782956ad83b30282bf90e31fa6a70c255ba9 github.com/docker/go-units 954fed01cc617c55d838fa2230073f2cb17386c8 github.com/docker/libkv 9fd56606e928ff1f309808f5d5a0b7a2ef73f9a8 -github.com/docker/libnetwork 37e20af882e13dd01ade3658b7aabdae3412118b +github.com/docker/libnetwork 20c14f8676a63bb384650d6baaacbc2796fde138 https://github.com/dmcgowan/libnetwork.git github.com/docker/libtrust 9cbd2a1374f46905c68a4eb3694a130610adc62a -github.com/opencontainers/runc b6b70e53451794e8333e9b602cc096b47a20bd0f +github.com/opencontainers/runc e9325d442f5979c4f79bfa9e09bdf7abb74ba03b https://github.com/dmcgowan/runc.git github.com/opencontainers/go-digest a6d0ee40d4207ea02364bd3b9e8e77b9159ba1eb github.com/opencontainers/image-spec 372ad780f63454fbbbbcc7cf80e5b90245c13e13 # containerd executor -github.com/containerd/containerd 76697ac8cbf357a19beb58e4805a81fe48cf7974 +github.com/containerd/containerd 70d8429b4096a8cd7843014e795207cdbc73d249 https://github.com/dmcgowan/containerd.git github.com/containerd/fifo 69b99525e472735860a5269b75af1970142b3062 github.com/opencontainers/runtime-spec v1.0.0-rc5 golang.org/x/sync 450f422ab23cf9881c94e2db30cac0eb1b7cf80c github.com/davecgh/go-spew 5215b55f46b2b919f50a1df0eaa5886afe4e3b3d github.com/Microsoft/go-winio v0.4.2 -github.com/Sirupsen/logrus v0.11.0 +github.com/sirupsen/logrus v1.0.1 github.com/beorn7/perks 4c0e84591b9aa9e6dcfdf3e020114cd81f89d5f9 github.com/boltdb/bolt e72f08ddb5a52992c0a44c7dda9316c7333938b2 github.com/cloudflare/cfssl 7fb22c8cba7ecaf98e4082d22d65800cf45e042a @@ -58,6 +58,6 @@ github.com/spf13/pflag 7f60f83a2c81bc3c3c0d5297f61ddfa68da9d3b7 github.com/stretchr/testify v1.1.4 golang.org/x/crypto 3fbbcd23f1cb824e69491a5930cfeff09b12f4d2 golang.org/x/net 7dcfb8076726a3fdd9353b6b8a1f1b6be6811bd6 -golang.org/x/sys 5eaf0df67e70d6997a9fe0ed24383fa1b01638d3 +golang.org/x/sys 739734461d1c916b6c72a63d7efda2b27edb369f golang.org/x/text f72d8390a633d5dfb0cc84043294db9f6c935756 golang.org/x/time a4bde12657593d5e90d0533a3e4fd95e635124cb