Forráskód Böngészése

Merge pull request #38831 from thaJeztah/bump_swarmkit

bump swarmkit to 415dc72789e2b733ea884f09188c286ca187d8ec
Brian Goff 6 éve
szülő
commit
258edd715d

+ 1 - 1
vendor.conf

@@ -128,7 +128,7 @@ github.com/containerd/ttrpc 2a805f71863501300ae1976d29f0454ae003e85a
 github.com/gogo/googleapis 08a7655d27152912db7aaf4f983275eaf8d128ef
 github.com/gogo/googleapis 08a7655d27152912db7aaf4f983275eaf8d128ef
 
 
 # cluster
 # cluster
-github.com/docker/swarmkit ebfb0aa1118ebfd35a224d72a5d337ce0addd907
+github.com/docker/swarmkit 415dc72789e2b733ea884f09188c286ca187d8ec
 github.com/gogo/protobuf v1.0.0
 github.com/gogo/protobuf v1.0.0
 github.com/cloudflare/cfssl 1.3.2
 github.com/cloudflare/cfssl 1.3.2
 github.com/fernet/fernet-go 1b2437bc582b3cfbb341ee5a29f8ef5b42912ff2
 github.com/fernet/fernet-go 1b2437bc582b3cfbb341ee5a29f8ef5b42912ff2

+ 16 - 0
vendor/github.com/docker/swarmkit/api/ca.pb.go

@@ -86,6 +86,22 @@
 		CreateConfigResponse
 		CreateConfigResponse
 		RemoveConfigRequest
 		RemoveConfigRequest
 		RemoveConfigResponse
 		RemoveConfigResponse
+		CreateExtensionRequest
+		CreateExtensionResponse
+		RemoveExtensionRequest
+		RemoveExtensionResponse
+		GetExtensionRequest
+		GetExtensionResponse
+		CreateResourceRequest
+		CreateResourceResponse
+		RemoveResourceRequest
+		RemoveResourceResponse
+		UpdateResourceRequest
+		UpdateResourceResponse
+		GetResourceRequest
+		GetResourceResponse
+		ListResourcesRequest
+		ListResourcesResponse
 		SessionRequest
 		SessionRequest
 		SessionMessage
 		SessionMessage
 		HeartbeatRequest
 		HeartbeatRequest

A különbségek nem kerülnek megjelenítésre, a fájl túl nagy
+ 1582 - 1355
vendor/github.com/docker/swarmkit/api/control.pb.go


+ 183 - 0
vendor/github.com/docker/swarmkit/api/control.proto

@@ -6,6 +6,7 @@ import "github.com/docker/swarmkit/api/specs.proto";
 import "github.com/docker/swarmkit/api/objects.proto";
 import "github.com/docker/swarmkit/api/objects.proto";
 import "github.com/docker/swarmkit/api/types.proto";
 import "github.com/docker/swarmkit/api/types.proto";
 import "gogoproto/gogo.proto";
 import "gogoproto/gogo.proto";
+import "google/protobuf/any.proto";
 import "github.com/docker/swarmkit/protobuf/plugin/plugin.proto";
 import "github.com/docker/swarmkit/protobuf/plugin/plugin.proto";
 
 
 // Control defines the RPC methods for controlling a cluster.
 // Control defines the RPC methods for controlling a cluster.
@@ -161,6 +162,80 @@ service Control {
 	rpc RemoveConfig(RemoveConfigRequest) returns (RemoveConfigResponse) {
 	rpc RemoveConfig(RemoveConfigRequest) returns (RemoveConfigResponse) {
 		option (docker.protobuf.plugin.tls_authorization) = { roles: "swarm-manager" };
 		option (docker.protobuf.plugin.tls_authorization) = { roles: "swarm-manager" };
 	}
 	}
+
+	// --- extension APIs ---
+
+	// GetExtension returns a `GetExtensionResponse` with a `Extension` with the same
+	// id as `GetExtensionRequest.ExtensionId`
+	// - Returns `NotFound` if the Extension with the given id is not found.
+	// - Returns `InvalidArgument` if the `GetExtensionRequest.ExtensionId` is empty.
+	// - Returns an error if the get fails.
+	rpc GetExtension(GetExtensionRequest) returns (GetExtensionResponse) {
+		option (docker.protobuf.plugin.tls_authorization) = { roles: "swarm-manager" };
+	}
+
+	// CreateExtension creates an `Extension` based on the provided `CreateExtensionRequest.Extension`
+	// and returns a `CreateExtensionResponse`.
+	// - Returns `InvalidArgument` if the `CreateExtensionRequest.Extension` is malformed,
+	//   or fails validation.
+	// - Returns an error if the creation fails.
+	rpc CreateExtension(CreateExtensionRequest) returns (CreateExtensionResponse) {
+		option (docker.protobuf.plugin.tls_authorization) = { roles: "swarm-manager" };
+	}
+
+	// RemoveExtension removes the extension referenced by `RemoveExtensionRequest.ID`.
+	// - Returns `InvalidArgument` if `RemoveExtensionRequest.ExtensionId` is empty.
+	// - Returns `NotFound` if the an extension named `RemoveExtensionRequest.ExtensionId` is not found.
+	// - Returns an error if the deletion fails.
+	rpc RemoveExtension(RemoveExtensionRequest) returns (RemoveExtensionResponse) {
+		option (docker.protobuf.plugin.tls_authorization) = { roles: "swarm-manager" };
+	}
+
+	// --- resource APIs ---
+
+	// GetResource returns a `GetResourceResponse` with a `Resource` with the same
+	// id as `GetResourceRequest.Resource`
+	// - Returns `NotFound` if the Resource with the given id is not found.
+	// - Returns `InvalidArgument` if the `GetResourceRequest.Resource` is empty.
+	// - Returns an error if getting fails.
+	rpc GetResource(GetResourceRequest) returns (GetResourceResponse) {
+		option (docker.protobuf.plugin.tls_authorization) = { roles: "swarm-manager" };
+	}
+
+	// UpdateResource updates the resource with the given `UpdateResourceRequest.Resource.Id` using the given `UpdateResourceRequest.Resource` and returns a `UpdateResourceResponse`.
+	// - Returns `NotFound` if the Resource with the given `UpdateResourceRequest.Resource.Id` is not found.
+	// - Returns `InvalidArgument` if the UpdateResourceRequest.Resource.Id` is empty.
+	// - Returns an error if updating fails.
+	rpc UpdateResource(UpdateResourceRequest) returns (UpdateResourceResponse) {
+		option (docker.protobuf.plugin.tls_authorization) = { roles: "swarm-manager" };
+	}
+
+	// ListResources returns a `ListResourcesResponse` with a list of `Resource`s stored in the raft store,
+	// or all resources matching any name in `ListConfigsRequest.Names`, any
+	// name prefix in `ListResourcesRequest.NamePrefixes`, any id in
+	// `ListResourcesRequest.ResourceIDs`, or any id prefix in `ListResourcesRequest.IDPrefixes`,
+	// extension name equal to `ListResourcesRequest.Extension`.
+	// - Returns an error if listing fails.
+	rpc ListResources(ListResourcesRequest) returns (ListResourcesResponse) {
+		option (docker.protobuf.plugin.tls_authorization) = { roles: "swarm-manager" };
+	}
+
+	// CreateResource returns a `CreateResourceResponse` after creating a `Resource` based
+	// on the provided `CreateResourceRequest.Resource`.
+	// - Returns `InvalidArgument` if the `CreateResourceRequest.Resource` is malformed,
+	//   or if the config data is too long or contains invalid characters.
+	// - Returns an error if the creation fails.
+	rpc CreateResource(CreateResourceRequest) returns (CreateResourceResponse) {
+		option (docker.protobuf.plugin.tls_authorization) = { roles: "swarm-manager" };
+	}
+
+	// RemoveResource removes the `Resource` referenced by `RemoveResourceRequest.ResourceID`.
+	// - Returns `InvalidArgument` if `RemoveResourceRequest.ResourceID` is empty.
+	// - Returns `NotFound` if the a resource named `RemoveResourceRequest.ResourceID` is not found.
+	// - Returns an error if the deletion fails.
+	rpc RemoveResource(RemoveResourceRequest) returns (RemoveResourceResponse) {
+		option (docker.protobuf.plugin.tls_authorization) = { roles: "swarm-manager" };
+	}
 }
 }
 
 
 message GetNodeRequest {
 message GetNodeRequest {
@@ -556,3 +631,111 @@ message RemoveConfigRequest {
 // RemoveConfigResponse is an empty object indicating the successful removal of
 // RemoveConfigResponse is an empty object indicating the successful removal of
 // a config.
 // a config.
 message RemoveConfigResponse {}
 message RemoveConfigResponse {}
+
+// CreateExtensionRequest creates a new extension as specified by the provided
+// parameters
+message CreateExtensionRequest {
+	Annotations annotations = 1;
+	string description = 2;
+}
+
+// CreateExtensionResponse contains the newly created `Extension` corresponding
+// to the parameters in the CreateExtensionRequest.
+message CreateExtensionResponse {
+	Extension extension = 1;
+}
+
+// RemoveExtensionRequest contains the ID of the extension that should be removed. This
+// removes all versions of the extension.
+message RemoveExtensionRequest {
+	string extension_id = 1;
+}
+
+// RemoveExtensionResponse is an empty object indicating the successful removal
+// of an extension.
+message RemoveExtensionResponse {
+}
+
+// GetResourceRequest is the request to get a Extension object given a extension id.
+message GetExtensionRequest {
+	string extension_id = 1;
+}
+
+// GetExtensionResponse contains the Extension corresponding to the id in
+// `GetExtensionRequest`.
+message GetExtensionResponse {
+	Extension extension = 1;
+}
+
+// CreateResourceRequest creates a new resource specified by the included
+// resource object. An existing resource will not be updated.
+message CreateResourceRequest {
+	Annotations annotations = 1;
+	string kind = 2;
+	google.protobuf.Any payload = 3;
+}
+
+// CreateResourceResponse contains the newly created `Resource` corresponding
+// to the resource in the CreateResourceRequest.
+message CreateResourceResponse {
+	Resource resource = 1;
+}
+
+// RemoveResourceRequest contains the ID of the resource that should be removed. This
+// removes all versions of the resource.
+message RemoveResourceRequest {
+	string resource_id = 1;
+}
+
+// RemoveResourceResponse is an empty object indicating the successful removal
+// of a resource.
+message RemoveResourceResponse {
+}
+
+// UpdateResourceRequest updates the resource specified by the given resource object.
+message UpdateResourceRequest {
+	string resource_id = 1;
+	Version resource_version = 2;
+	// Annotations describes the annotations to update. If the Annotations should
+	// be unchanged, then this field should be left empty. Note that the name of
+	// a Resource cannot be changed, only its labels.
+	Annotations annotations = 3;
+	// Payload describes the new payload of the resource. If the Payload should
+	// be unchanged, then this field should be left empty.
+	google.protobuf.Any payload = 4;
+}
+
+message UpdateResourceResponse {
+	Resource resource = 1;
+}
+
+// GetResourceRequest is the request to get a Resource object given a resource id.
+message GetResourceRequest {
+	string resource_id = 1;
+}
+
+// GetResourceResponse contains the Resource corresponding to the id in
+// `GetResourceRequest`.
+message GetResourceResponse {
+	Resource resource = 1;
+}
+
+// ListResourcesRequest is the request to list all resources in the raft store,
+// or all resources filtered by (name or name prefix or id prefix), labels and extension.
+message ListResourcesRequest {
+	message Filters {
+		repeated string names = 1;
+		repeated string id_prefixes = 2;
+		map<string, string> labels = 3;
+		repeated string name_prefixes = 4;
+		string kind = 5;
+	}
+
+	Filters filters = 1;
+}
+
+// ListResourcesResponse contains a list of all the resources that match the name or
+// name prefix filters provided in `ListResourcesRequest`.
+message ListResourcesResponse {
+	repeated Resource resources = 1;
+}

+ 5 - 5
vendor/github.com/docker/swarmkit/api/objects.pb.go

@@ -8,7 +8,7 @@ import fmt "fmt"
 import math "math"
 import math "math"
 import google_protobuf "github.com/gogo/protobuf/types"
 import google_protobuf "github.com/gogo/protobuf/types"
 import _ "github.com/gogo/protobuf/gogoproto"
 import _ "github.com/gogo/protobuf/gogoproto"
-import google_protobuf3 "github.com/gogo/protobuf/types"
+import google_protobuf4 "github.com/gogo/protobuf/types"
 import _ "github.com/docker/swarmkit/protobuf/plugin"
 import _ "github.com/docker/swarmkit/protobuf/plugin"
 
 
 import deepcopy "github.com/docker/swarmkit/api/deepcopy"
 import deepcopy "github.com/docker/swarmkit/api/deepcopy"
@@ -357,7 +357,7 @@ type Resource struct {
 	Kind string `protobuf:"bytes,4,opt,name=kind,proto3" json:"kind,omitempty"`
 	Kind string `protobuf:"bytes,4,opt,name=kind,proto3" json:"kind,omitempty"`
 	// Payload bytes. This data is not interpreted in any way by SwarmKit.
 	// Payload bytes. This data is not interpreted in any way by SwarmKit.
 	// By convention, it should be a marshalled protocol buffers message.
 	// By convention, it should be a marshalled protocol buffers message.
-	Payload *google_protobuf3.Any `protobuf:"bytes,5,opt,name=payload" json:"payload,omitempty"`
+	Payload *google_protobuf4.Any `protobuf:"bytes,5,opt,name=payload" json:"payload,omitempty"`
 }
 }
 
 
 func (m *Resource) Reset()                    { *m = Resource{} }
 func (m *Resource) Reset()                    { *m = Resource{} }
@@ -749,7 +749,7 @@ func (m *Resource) CopyFrom(src interface{}) {
 	deepcopy.Copy(&m.Meta, &o.Meta)
 	deepcopy.Copy(&m.Meta, &o.Meta)
 	deepcopy.Copy(&m.Annotations, &o.Annotations)
 	deepcopy.Copy(&m.Annotations, &o.Annotations)
 	if o.Payload != nil {
 	if o.Payload != nil {
-		m.Payload = &google_protobuf3.Any{}
+		m.Payload = &google_protobuf4.Any{}
 		deepcopy.Copy(m.Payload, o.Payload)
 		deepcopy.Copy(m.Payload, o.Payload)
 	}
 	}
 }
 }
@@ -4958,7 +4958,7 @@ func (this *Resource) String() string {
 		`Meta:` + strings.Replace(strings.Replace(this.Meta.String(), "Meta", "Meta", 1), `&`, ``, 1) + `,`,
 		`Meta:` + strings.Replace(strings.Replace(this.Meta.String(), "Meta", "Meta", 1), `&`, ``, 1) + `,`,
 		`Annotations:` + strings.Replace(strings.Replace(this.Annotations.String(), "Annotations", "Annotations", 1), `&`, ``, 1) + `,`,
 		`Annotations:` + strings.Replace(strings.Replace(this.Annotations.String(), "Annotations", "Annotations", 1), `&`, ``, 1) + `,`,
 		`Kind:` + fmt.Sprintf("%v", this.Kind) + `,`,
 		`Kind:` + fmt.Sprintf("%v", this.Kind) + `,`,
-		`Payload:` + strings.Replace(fmt.Sprintf("%v", this.Payload), "Any", "google_protobuf3.Any", 1) + `,`,
+		`Payload:` + strings.Replace(fmt.Sprintf("%v", this.Payload), "Any", "google_protobuf4.Any", 1) + `,`,
 		`}`,
 		`}`,
 	}, "")
 	}, "")
 	return s
 	return s
@@ -7976,7 +7976,7 @@ func (m *Resource) Unmarshal(dAtA []byte) error {
 				return io.ErrUnexpectedEOF
 				return io.ErrUnexpectedEOF
 			}
 			}
 			if m.Payload == nil {
 			if m.Payload == nil {
-				m.Payload = &google_protobuf3.Any{}
+				m.Payload = &google_protobuf4.Any{}
 			}
 			}
 			if err := m.Payload.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
 			if err := m.Payload.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
 				return err
 				return err

+ 177 - 270
vendor/github.com/docker/swarmkit/api/specs.pb.go

@@ -8,8 +8,8 @@ import fmt "fmt"
 import math "math"
 import math "math"
 import _ "github.com/gogo/protobuf/gogoproto"
 import _ "github.com/gogo/protobuf/gogoproto"
 import google_protobuf1 "github.com/gogo/protobuf/types"
 import google_protobuf1 "github.com/gogo/protobuf/types"
-import google_protobuf3 "github.com/gogo/protobuf/types"
 import google_protobuf4 "github.com/gogo/protobuf/types"
 import google_protobuf4 "github.com/gogo/protobuf/types"
+import google_protobuf2 "github.com/gogo/protobuf/types"
 
 
 import deepcopy "github.com/docker/swarmkit/api/deepcopy"
 import deepcopy "github.com/docker/swarmkit/api/deepcopy"
 
 
@@ -506,7 +506,7 @@ func (*ResourceReference) Descriptor() ([]byte, []int) { return fileDescriptorSp
 
 
 type GenericRuntimeSpec struct {
 type GenericRuntimeSpec struct {
 	Kind    string                `protobuf:"bytes,1,opt,name=kind,proto3" json:"kind,omitempty"`
 	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"`
+	Payload *google_protobuf4.Any `protobuf:"bytes,2,opt,name=payload" json:"payload,omitempty"`
 }
 }
 
 
 func (m *GenericRuntimeSpec) Reset()                    { *m = GenericRuntimeSpec{} }
 func (m *GenericRuntimeSpec) Reset()                    { *m = GenericRuntimeSpec{} }
@@ -572,7 +572,7 @@ type ContainerSpec struct {
 	// Privileges specifies security configuration/permissions.
 	// Privileges specifies security configuration/permissions.
 	Privileges *Privileges `protobuf:"bytes,22,opt,name=privileges" json:"privileges,omitempty"`
 	Privileges *Privileges `protobuf:"bytes,22,opt,name=privileges" json:"privileges,omitempty"`
 	// Init declares that a custom init will be running inside the container, if null, use the daemon's configured settings
 	// Init declares that a custom init will be running inside the container, if null, use the daemon's configured settings
-	Init *google_protobuf4.BoolValue `protobuf:"bytes,23,opt,name=init" json:"init,omitempty"`
+	Init *google_protobuf2.BoolValue `protobuf:"bytes,23,opt,name=init" json:"init,omitempty"`
 	// TTY declares that a TTY should be attached to the standard streams,
 	// TTY declares that a TTY should be attached to the standard streams,
 	// including stdin if it is still open.
 	// including stdin if it is still open.
 	TTY bool `protobuf:"varint,13,opt,name=tty,proto3" json:"tty,omitempty"`
 	TTY bool `protobuf:"varint,13,opt,name=tty,proto3" json:"tty,omitempty"`
@@ -636,12 +636,6 @@ type ContainerSpec struct {
 	//
 	//
 	// https://docs.docker.com/engine/reference/commandline/run/#configure-namespaced-kernel-parameters-sysctls-at-runtime
 	// https://docs.docker.com/engine/reference/commandline/run/#configure-namespaced-kernel-parameters-sysctls-at-runtime
 	Sysctls map[string]string `protobuf:"bytes,26,rep,name=sysctls" json:"sysctls,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"`
 	Sysctls map[string]string `protobuf:"bytes,26,rep,name=sysctls" json:"sysctls,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"`
-	// Swap limit equal to memory plus swap: '-1' to enable unlimited swap
-	MemorySwap int64 `protobuf:"varint,27,opt,name=memory_swap,json=memorySwap,proto3" json:"memory_swap,omitempty"`
-	// Tune container memory swappiness (0 to 100) - if not specified, defaults
-	// to the container OS's default - generally 60, or the value predefined in
-	// the image; set to -1 to unset a previously set value
-	MemorySwappiness *google_protobuf4.Int64Value `protobuf:"bytes,28,opt,name=memory_swappiness,json=memorySwappiness" json:"memory_swappiness,omitempty"`
 }
 }
 
 
 func (m *ContainerSpec) Reset()                    { *m = ContainerSpec{} }
 func (m *ContainerSpec) Reset()                    { *m = ContainerSpec{} }
@@ -1084,7 +1078,7 @@ func (m *GenericRuntimeSpec) CopyFrom(src interface{}) {
 	o := src.(*GenericRuntimeSpec)
 	o := src.(*GenericRuntimeSpec)
 	*m = *o
 	*m = *o
 	if o.Payload != nil {
 	if o.Payload != nil {
-		m.Payload = &google_protobuf3.Any{}
+		m.Payload = &google_protobuf4.Any{}
 		deepcopy.Copy(m.Payload, o.Payload)
 		deepcopy.Copy(m.Payload, o.Payload)
 	}
 	}
 }
 }
@@ -1149,7 +1143,7 @@ func (m *ContainerSpec) CopyFrom(src interface{}) {
 		deepcopy.Copy(m.Privileges, o.Privileges)
 		deepcopy.Copy(m.Privileges, o.Privileges)
 	}
 	}
 	if o.Init != nil {
 	if o.Init != nil {
-		m.Init = &google_protobuf4.BoolValue{}
+		m.Init = &google_protobuf2.BoolValue{}
 		deepcopy.Copy(m.Init, o.Init)
 		deepcopy.Copy(m.Init, o.Init)
 	}
 	}
 	if o.Mounts != nil {
 	if o.Mounts != nil {
@@ -1203,10 +1197,6 @@ func (m *ContainerSpec) CopyFrom(src interface{}) {
 		}
 		}
 	}
 	}
 
 
-	if o.MemorySwappiness != nil {
-		m.MemorySwappiness = &google_protobuf4.Int64Value{}
-		deepcopy.Copy(m.MemorySwappiness, o.MemorySwappiness)
-	}
 }
 }
 
 
 func (m *ContainerSpec_PullOptions) Copy() *ContainerSpec_PullOptions {
 func (m *ContainerSpec_PullOptions) Copy() *ContainerSpec_PullOptions {
@@ -2114,25 +2104,6 @@ func (m *ContainerSpec) MarshalTo(dAtA []byte) (int, error) {
 			i += copy(dAtA[i:], v)
 			i += copy(dAtA[i:], v)
 		}
 		}
 	}
 	}
-	if m.MemorySwap != 0 {
-		dAtA[i] = 0xd8
-		i++
-		dAtA[i] = 0x1
-		i++
-		i = encodeVarintSpecs(dAtA, i, uint64(m.MemorySwap))
-	}
-	if m.MemorySwappiness != nil {
-		dAtA[i] = 0xe2
-		i++
-		dAtA[i] = 0x1
-		i++
-		i = encodeVarintSpecs(dAtA, i, uint64(m.MemorySwappiness.Size()))
-		n25, err := m.MemorySwappiness.MarshalTo(dAtA[i:])
-		if err != nil {
-			return 0, err
-		}
-		i += n25
-	}
 	return i, nil
 	return i, nil
 }
 }
 
 
@@ -2278,20 +2249,20 @@ func (m *NetworkSpec) MarshalTo(dAtA []byte) (int, error) {
 	dAtA[i] = 0xa
 	dAtA[i] = 0xa
 	i++
 	i++
 	i = encodeVarintSpecs(dAtA, i, uint64(m.Annotations.Size()))
 	i = encodeVarintSpecs(dAtA, i, uint64(m.Annotations.Size()))
-	n26, err := m.Annotations.MarshalTo(dAtA[i:])
+	n25, err := m.Annotations.MarshalTo(dAtA[i:])
 	if err != nil {
 	if err != nil {
 		return 0, err
 		return 0, err
 	}
 	}
-	i += n26
+	i += n25
 	if m.DriverConfig != nil {
 	if m.DriverConfig != nil {
 		dAtA[i] = 0x12
 		dAtA[i] = 0x12
 		i++
 		i++
 		i = encodeVarintSpecs(dAtA, i, uint64(m.DriverConfig.Size()))
 		i = encodeVarintSpecs(dAtA, i, uint64(m.DriverConfig.Size()))
-		n27, err := m.DriverConfig.MarshalTo(dAtA[i:])
+		n26, err := m.DriverConfig.MarshalTo(dAtA[i:])
 		if err != nil {
 		if err != nil {
 			return 0, err
 			return 0, err
 		}
 		}
-		i += n27
+		i += n26
 	}
 	}
 	if m.Ipv6Enabled {
 	if m.Ipv6Enabled {
 		dAtA[i] = 0x18
 		dAtA[i] = 0x18
@@ -2317,11 +2288,11 @@ func (m *NetworkSpec) MarshalTo(dAtA []byte) (int, error) {
 		dAtA[i] = 0x2a
 		dAtA[i] = 0x2a
 		i++
 		i++
 		i = encodeVarintSpecs(dAtA, i, uint64(m.IPAM.Size()))
 		i = encodeVarintSpecs(dAtA, i, uint64(m.IPAM.Size()))
-		n28, err := m.IPAM.MarshalTo(dAtA[i:])
+		n27, err := m.IPAM.MarshalTo(dAtA[i:])
 		if err != nil {
 		if err != nil {
 			return 0, err
 			return 0, err
 		}
 		}
-		i += n28
+		i += n27
 	}
 	}
 	if m.Attachable {
 	if m.Attachable {
 		dAtA[i] = 0x30
 		dAtA[i] = 0x30
@@ -2344,11 +2315,11 @@ func (m *NetworkSpec) MarshalTo(dAtA []byte) (int, error) {
 		i++
 		i++
 	}
 	}
 	if m.ConfigFrom != nil {
 	if m.ConfigFrom != nil {
-		nn29, err := m.ConfigFrom.MarshalTo(dAtA[i:])
+		nn28, err := m.ConfigFrom.MarshalTo(dAtA[i:])
 		if err != nil {
 		if err != nil {
 			return 0, err
 			return 0, err
 		}
 		}
-		i += nn29
+		i += nn28
 	}
 	}
 	return i, nil
 	return i, nil
 }
 }
@@ -2379,67 +2350,67 @@ func (m *ClusterSpec) MarshalTo(dAtA []byte) (int, error) {
 	dAtA[i] = 0xa
 	dAtA[i] = 0xa
 	i++
 	i++
 	i = encodeVarintSpecs(dAtA, i, uint64(m.Annotations.Size()))
 	i = encodeVarintSpecs(dAtA, i, uint64(m.Annotations.Size()))
-	n30, err := m.Annotations.MarshalTo(dAtA[i:])
+	n29, err := m.Annotations.MarshalTo(dAtA[i:])
 	if err != nil {
 	if err != nil {
 		return 0, err
 		return 0, err
 	}
 	}
-	i += n30
+	i += n29
 	dAtA[i] = 0x12
 	dAtA[i] = 0x12
 	i++
 	i++
 	i = encodeVarintSpecs(dAtA, i, uint64(m.AcceptancePolicy.Size()))
 	i = encodeVarintSpecs(dAtA, i, uint64(m.AcceptancePolicy.Size()))
-	n31, err := m.AcceptancePolicy.MarshalTo(dAtA[i:])
+	n30, err := m.AcceptancePolicy.MarshalTo(dAtA[i:])
 	if err != nil {
 	if err != nil {
 		return 0, err
 		return 0, err
 	}
 	}
-	i += n31
+	i += n30
 	dAtA[i] = 0x1a
 	dAtA[i] = 0x1a
 	i++
 	i++
 	i = encodeVarintSpecs(dAtA, i, uint64(m.Orchestration.Size()))
 	i = encodeVarintSpecs(dAtA, i, uint64(m.Orchestration.Size()))
-	n32, err := m.Orchestration.MarshalTo(dAtA[i:])
+	n31, err := m.Orchestration.MarshalTo(dAtA[i:])
 	if err != nil {
 	if err != nil {
 		return 0, err
 		return 0, err
 	}
 	}
-	i += n32
+	i += n31
 	dAtA[i] = 0x22
 	dAtA[i] = 0x22
 	i++
 	i++
 	i = encodeVarintSpecs(dAtA, i, uint64(m.Raft.Size()))
 	i = encodeVarintSpecs(dAtA, i, uint64(m.Raft.Size()))
-	n33, err := m.Raft.MarshalTo(dAtA[i:])
+	n32, err := m.Raft.MarshalTo(dAtA[i:])
 	if err != nil {
 	if err != nil {
 		return 0, err
 		return 0, err
 	}
 	}
-	i += n33
+	i += n32
 	dAtA[i] = 0x2a
 	dAtA[i] = 0x2a
 	i++
 	i++
 	i = encodeVarintSpecs(dAtA, i, uint64(m.Dispatcher.Size()))
 	i = encodeVarintSpecs(dAtA, i, uint64(m.Dispatcher.Size()))
-	n34, err := m.Dispatcher.MarshalTo(dAtA[i:])
+	n33, err := m.Dispatcher.MarshalTo(dAtA[i:])
 	if err != nil {
 	if err != nil {
 		return 0, err
 		return 0, err
 	}
 	}
-	i += n34
+	i += n33
 	dAtA[i] = 0x32
 	dAtA[i] = 0x32
 	i++
 	i++
 	i = encodeVarintSpecs(dAtA, i, uint64(m.CAConfig.Size()))
 	i = encodeVarintSpecs(dAtA, i, uint64(m.CAConfig.Size()))
-	n35, err := m.CAConfig.MarshalTo(dAtA[i:])
+	n34, err := m.CAConfig.MarshalTo(dAtA[i:])
 	if err != nil {
 	if err != nil {
 		return 0, err
 		return 0, err
 	}
 	}
-	i += n35
+	i += n34
 	dAtA[i] = 0x3a
 	dAtA[i] = 0x3a
 	i++
 	i++
 	i = encodeVarintSpecs(dAtA, i, uint64(m.TaskDefaults.Size()))
 	i = encodeVarintSpecs(dAtA, i, uint64(m.TaskDefaults.Size()))
-	n36, err := m.TaskDefaults.MarshalTo(dAtA[i:])
+	n35, err := m.TaskDefaults.MarshalTo(dAtA[i:])
 	if err != nil {
 	if err != nil {
 		return 0, err
 		return 0, err
 	}
 	}
-	i += n36
+	i += n35
 	dAtA[i] = 0x42
 	dAtA[i] = 0x42
 	i++
 	i++
 	i = encodeVarintSpecs(dAtA, i, uint64(m.EncryptionConfig.Size()))
 	i = encodeVarintSpecs(dAtA, i, uint64(m.EncryptionConfig.Size()))
-	n37, err := m.EncryptionConfig.MarshalTo(dAtA[i:])
+	n36, err := m.EncryptionConfig.MarshalTo(dAtA[i:])
 	if err != nil {
 	if err != nil {
 		return 0, err
 		return 0, err
 	}
 	}
-	i += n37
+	i += n36
 	return i, nil
 	return i, nil
 }
 }
 
 
@@ -2461,11 +2432,11 @@ func (m *SecretSpec) MarshalTo(dAtA []byte) (int, error) {
 	dAtA[i] = 0xa
 	dAtA[i] = 0xa
 	i++
 	i++
 	i = encodeVarintSpecs(dAtA, i, uint64(m.Annotations.Size()))
 	i = encodeVarintSpecs(dAtA, i, uint64(m.Annotations.Size()))
-	n38, err := m.Annotations.MarshalTo(dAtA[i:])
+	n37, err := m.Annotations.MarshalTo(dAtA[i:])
 	if err != nil {
 	if err != nil {
 		return 0, err
 		return 0, err
 	}
 	}
-	i += n38
+	i += n37
 	if len(m.Data) > 0 {
 	if len(m.Data) > 0 {
 		dAtA[i] = 0x12
 		dAtA[i] = 0x12
 		i++
 		i++
@@ -2476,21 +2447,21 @@ func (m *SecretSpec) MarshalTo(dAtA []byte) (int, error) {
 		dAtA[i] = 0x1a
 		dAtA[i] = 0x1a
 		i++
 		i++
 		i = encodeVarintSpecs(dAtA, i, uint64(m.Templating.Size()))
 		i = encodeVarintSpecs(dAtA, i, uint64(m.Templating.Size()))
-		n39, err := m.Templating.MarshalTo(dAtA[i:])
+		n38, err := m.Templating.MarshalTo(dAtA[i:])
 		if err != nil {
 		if err != nil {
 			return 0, err
 			return 0, err
 		}
 		}
-		i += n39
+		i += n38
 	}
 	}
 	if m.Driver != nil {
 	if m.Driver != nil {
 		dAtA[i] = 0x22
 		dAtA[i] = 0x22
 		i++
 		i++
 		i = encodeVarintSpecs(dAtA, i, uint64(m.Driver.Size()))
 		i = encodeVarintSpecs(dAtA, i, uint64(m.Driver.Size()))
-		n40, err := m.Driver.MarshalTo(dAtA[i:])
+		n39, err := m.Driver.MarshalTo(dAtA[i:])
 		if err != nil {
 		if err != nil {
 			return 0, err
 			return 0, err
 		}
 		}
-		i += n40
+		i += n39
 	}
 	}
 	return i, nil
 	return i, nil
 }
 }
@@ -2513,11 +2484,11 @@ func (m *ConfigSpec) MarshalTo(dAtA []byte) (int, error) {
 	dAtA[i] = 0xa
 	dAtA[i] = 0xa
 	i++
 	i++
 	i = encodeVarintSpecs(dAtA, i, uint64(m.Annotations.Size()))
 	i = encodeVarintSpecs(dAtA, i, uint64(m.Annotations.Size()))
-	n41, err := m.Annotations.MarshalTo(dAtA[i:])
+	n40, err := m.Annotations.MarshalTo(dAtA[i:])
 	if err != nil {
 	if err != nil {
 		return 0, err
 		return 0, err
 	}
 	}
-	i += n41
+	i += n40
 	if len(m.Data) > 0 {
 	if len(m.Data) > 0 {
 		dAtA[i] = 0x12
 		dAtA[i] = 0x12
 		i++
 		i++
@@ -2528,11 +2499,11 @@ func (m *ConfigSpec) MarshalTo(dAtA []byte) (int, error) {
 		dAtA[i] = 0x1a
 		dAtA[i] = 0x1a
 		i++
 		i++
 		i = encodeVarintSpecs(dAtA, i, uint64(m.Templating.Size()))
 		i = encodeVarintSpecs(dAtA, i, uint64(m.Templating.Size()))
-		n42, err := m.Templating.MarshalTo(dAtA[i:])
+		n41, err := m.Templating.MarshalTo(dAtA[i:])
 		if err != nil {
 		if err != nil {
 			return 0, err
 			return 0, err
 		}
 		}
-		i += n42
+		i += n41
 	}
 	}
 	return i, nil
 	return i, nil
 }
 }
@@ -2858,13 +2829,6 @@ func (m *ContainerSpec) Size() (n int) {
 			n += mapEntrySize + 2 + sovSpecs(uint64(mapEntrySize))
 			n += mapEntrySize + 2 + sovSpecs(uint64(mapEntrySize))
 		}
 		}
 	}
 	}
-	if m.MemorySwap != 0 {
-		n += 2 + sovSpecs(uint64(m.MemorySwap))
-	}
-	if m.MemorySwappiness != nil {
-		l = m.MemorySwappiness.Size()
-		n += 2 + l + sovSpecs(uint64(l))
-	}
 	return n
 	return n
 }
 }
 
 
@@ -3158,7 +3122,7 @@ func (this *GenericRuntimeSpec) String() string {
 	}
 	}
 	s := strings.Join([]string{`&GenericRuntimeSpec{`,
 	s := strings.Join([]string{`&GenericRuntimeSpec{`,
 		`Kind:` + fmt.Sprintf("%v", this.Kind) + `,`,
 		`Kind:` + fmt.Sprintf("%v", this.Kind) + `,`,
-		`Payload:` + strings.Replace(fmt.Sprintf("%v", this.Payload), "Any", "google_protobuf3.Any", 1) + `,`,
+		`Payload:` + strings.Replace(fmt.Sprintf("%v", this.Payload), "Any", "google_protobuf4.Any", 1) + `,`,
 		`}`,
 		`}`,
 	}, "")
 	}, "")
 	return s
 	return s
@@ -3220,12 +3184,10 @@ func (this *ContainerSpec) String() string {
 		`StopSignal:` + fmt.Sprintf("%v", this.StopSignal) + `,`,
 		`StopSignal:` + fmt.Sprintf("%v", this.StopSignal) + `,`,
 		`Configs:` + strings.Replace(fmt.Sprintf("%v", this.Configs), "ConfigReference", "ConfigReference", 1) + `,`,
 		`Configs:` + strings.Replace(fmt.Sprintf("%v", this.Configs), "ConfigReference", "ConfigReference", 1) + `,`,
 		`Privileges:` + strings.Replace(fmt.Sprintf("%v", this.Privileges), "Privileges", "Privileges", 1) + `,`,
 		`Privileges:` + strings.Replace(fmt.Sprintf("%v", this.Privileges), "Privileges", "Privileges", 1) + `,`,
-		`Init:` + strings.Replace(fmt.Sprintf("%v", this.Init), "BoolValue", "google_protobuf4.BoolValue", 1) + `,`,
+		`Init:` + strings.Replace(fmt.Sprintf("%v", this.Init), "BoolValue", "google_protobuf2.BoolValue", 1) + `,`,
 		`Isolation:` + fmt.Sprintf("%v", this.Isolation) + `,`,
 		`Isolation:` + fmt.Sprintf("%v", this.Isolation) + `,`,
 		`PidsLimit:` + fmt.Sprintf("%v", this.PidsLimit) + `,`,
 		`PidsLimit:` + fmt.Sprintf("%v", this.PidsLimit) + `,`,
 		`Sysctls:` + mapStringForSysctls + `,`,
 		`Sysctls:` + mapStringForSysctls + `,`,
-		`MemorySwap:` + fmt.Sprintf("%v", this.MemorySwap) + `,`,
-		`MemorySwappiness:` + strings.Replace(fmt.Sprintf("%v", this.MemorySwappiness), "Int64Value", "google_protobuf4.Int64Value", 1) + `,`,
 		`}`,
 		`}`,
 	}, "")
 	}, "")
 	return s
 	return s
@@ -4442,7 +4404,7 @@ func (m *GenericRuntimeSpec) Unmarshal(dAtA []byte) error {
 				return io.ErrUnexpectedEOF
 				return io.ErrUnexpectedEOF
 			}
 			}
 			if m.Payload == nil {
 			if m.Payload == nil {
-				m.Payload = &google_protobuf3.Any{}
+				m.Payload = &google_protobuf4.Any{}
 			}
 			}
 			if err := m.Payload.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
 			if err := m.Payload.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
 				return err
 				return err
@@ -5330,7 +5292,7 @@ func (m *ContainerSpec) Unmarshal(dAtA []byte) error {
 				return io.ErrUnexpectedEOF
 				return io.ErrUnexpectedEOF
 			}
 			}
 			if m.Init == nil {
 			if m.Init == nil {
-				m.Init = &google_protobuf4.BoolValue{}
+				m.Init = &google_protobuf2.BoolValue{}
 			}
 			}
 			if err := m.Init.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
 			if err := m.Init.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
 				return err
 				return err
@@ -5492,58 +5454,6 @@ func (m *ContainerSpec) Unmarshal(dAtA []byte) error {
 			}
 			}
 			m.Sysctls[mapkey] = mapvalue
 			m.Sysctls[mapkey] = mapvalue
 			iNdEx = postIndex
 			iNdEx = postIndex
-		case 27:
-			if wireType != 0 {
-				return fmt.Errorf("proto: wrong wireType = %d for field MemorySwap", wireType)
-			}
-			m.MemorySwap = 0
-			for shift := uint(0); ; shift += 7 {
-				if shift >= 64 {
-					return ErrIntOverflowSpecs
-				}
-				if iNdEx >= l {
-					return io.ErrUnexpectedEOF
-				}
-				b := dAtA[iNdEx]
-				iNdEx++
-				m.MemorySwap |= (int64(b) & 0x7F) << shift
-				if b < 0x80 {
-					break
-				}
-			}
-		case 28:
-			if wireType != 2 {
-				return fmt.Errorf("proto: wrong wireType = %d for field MemorySwappiness", 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
-			}
-			if m.MemorySwappiness == nil {
-				m.MemorySwappiness = &google_protobuf4.Int64Value{}
-			}
-			if err := m.MemorySwappiness.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
-				return err
-			}
-			iNdEx = postIndex
 		default:
 		default:
 			iNdEx = preIndex
 			iNdEx = preIndex
 			skippy, err := skipSpecs(dAtA[iNdEx:])
 			skippy, err := skipSpecs(dAtA[iNdEx:])
@@ -6855,144 +6765,141 @@ var (
 func init() { proto.RegisterFile("github.com/docker/swarmkit/api/specs.proto", fileDescriptorSpecs) }
 func init() { proto.RegisterFile("github.com/docker/swarmkit/api/specs.proto", fileDescriptorSpecs) }
 
 
 var fileDescriptorSpecs = []byte{
 var fileDescriptorSpecs = []byte{
-	// 2213 bytes of a gzipped FileDescriptorProto
-	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xcc, 0x58, 0xcf, 0x6f, 0x1b, 0xb9,
-	0xf5, 0xb7, 0x6c, 0x59, 0x3f, 0xde, 0xc8, 0x89, 0xcc, 0xcd, 0xee, 0x8e, 0x95, 0xac, 0xad, 0xd5,
-	0x66, 0xf3, 0xf5, 0xee, 0xe2, 0x2b, 0xa3, 0x6e, 0x90, 0x66, 0x93, 0x6e, 0x5b, 0xc9, 0xd2, 0xda,
-	0x6a, 0x12, 0x5b, 0xa0, 0x1c, 0xb7, 0x01, 0x0a, 0x08, 0xf4, 0x0c, 0x2d, 0x0d, 0x3c, 0x1a, 0x4e,
-	0x49, 0xca, 0x81, 0x6e, 0x3d, 0x2e, 0xdc, 0xbf, 0xc1, 0xe8, 0xa1, 0xe8, 0xbd, 0xfd, 0x2f, 0x72,
-	0x6c, 0x6f, 0xed, 0xc5, 0xe8, 0xfa, 0x5f, 0xe8, 0xad, 0x97, 0x16, 0xe4, 0x70, 0xa4, 0x91, 0x2d,
-	0xc7, 0x29, 0x9a, 0x43, 0x6f, 0xe4, 0x9b, 0xcf, 0xe7, 0x91, 0x7c, 0xfc, 0xf0, 0xf1, 0x71, 0xe0,
-	0xcb, 0x9e, 0x27, 0xfb, 0xc3, 0xc3, 0xaa, 0xc3, 0x06, 0x1b, 0x2e, 0x73, 0x8e, 0x29, 0xdf, 0x10,
-	0xaf, 0x09, 0x1f, 0x1c, 0x7b, 0x72, 0x83, 0x84, 0xde, 0x86, 0x08, 0xa9, 0x23, 0xaa, 0x21, 0x67,
-	0x92, 0x21, 0x14, 0x01, 0xaa, 0x31, 0xa0, 0x7a, 0xf2, 0x83, 0xd2, 0x4d, 0x7c, 0x39, 0x0a, 0xa9,
-	0xe1, 0x97, 0xee, 0xf4, 0x58, 0x8f, 0xe9, 0xe6, 0x86, 0x6a, 0x19, 0xeb, 0x6a, 0x8f, 0xb1, 0x9e,
-	0x4f, 0x37, 0x74, 0xef, 0x70, 0x78, 0xb4, 0xe1, 0x0e, 0x39, 0x91, 0x1e, 0x0b, 0xcc, 0xf7, 0x95,
-	0xcb, 0xdf, 0x49, 0x30, 0xba, 0x8e, 0xfa, 0x9a, 0x93, 0x30, 0xa4, 0xdc, 0x0c, 0x58, 0x39, 0x4b,
-	0x43, 0x6e, 0x97, 0xb9, 0xb4, 0x13, 0x52, 0x07, 0x6d, 0x83, 0x45, 0x82, 0x80, 0x49, 0xed, 0x5b,
-	0xd8, 0xa9, 0x72, 0x6a, 0xdd, 0xda, 0x5c, 0xab, 0x5e, 0x5d, 0x53, 0xb5, 0x36, 0x81, 0xd5, 0xd3,
-	0x6f, 0xce, 0xd7, 0xe6, 0x70, 0x92, 0x89, 0x7e, 0x0a, 0x05, 0x97, 0x0a, 0x8f, 0x53, 0xb7, 0xcb,
-	0x99, 0x4f, 0xed, 0xf9, 0x72, 0x6a, 0xfd, 0xd6, 0xe6, 0xbd, 0x59, 0x9e, 0xd4, 0xe0, 0x98, 0xf9,
-	0x14, 0x5b, 0x86, 0xa1, 0x3a, 0x68, 0x1b, 0x60, 0x40, 0x07, 0x87, 0x94, 0x8b, 0xbe, 0x17, 0xda,
-	0x0b, 0x9a, 0xfe, 0x7f, 0xd7, 0xd1, 0xd5, 0xdc, 0xab, 0x2f, 0xc6, 0x70, 0x9c, 0xa0, 0xa2, 0x17,
-	0x50, 0x20, 0x27, 0xc4, 0xf3, 0xc9, 0xa1, 0xe7, 0x7b, 0x72, 0x64, 0xa7, 0xb5, 0xab, 0x2f, 0xde,
-	0xea, 0xaa, 0x96, 0x20, 0xe0, 0x29, 0x7a, 0xc5, 0x05, 0x98, 0x0c, 0x84, 0x1e, 0x40, 0xb6, 0xdd,
-	0xdc, 0x6d, 0xb4, 0x76, 0xb7, 0x8b, 0x73, 0xa5, 0x95, 0xd3, 0xb3, 0xf2, 0x87, 0xca, 0xc7, 0x04,
-	0xd0, 0xa6, 0x81, 0xeb, 0x05, 0x3d, 0xb4, 0x0e, 0xb9, 0xda, 0xd6, 0x56, 0xb3, 0xbd, 0xdf, 0x6c,
-	0x14, 0x53, 0xa5, 0xd2, 0xe9, 0x59, 0xf9, 0xa3, 0x69, 0x60, 0xcd, 0x71, 0x68, 0x28, 0xa9, 0x5b,
-	0x4a, 0x7f, 0xf7, 0xfb, 0xd5, 0xb9, 0xca, 0x77, 0x29, 0x28, 0x24, 0x27, 0x81, 0x1e, 0x40, 0xa6,
-	0xb6, 0xb5, 0xdf, 0x3a, 0x68, 0x16, 0xe7, 0x26, 0xf4, 0x24, 0xa2, 0xe6, 0x48, 0xef, 0x84, 0xa2,
-	0xfb, 0xb0, 0xd8, 0xae, 0xbd, 0xec, 0x34, 0x8b, 0xa9, 0xc9, 0x74, 0x92, 0xb0, 0x36, 0x19, 0x0a,
-	0x8d, 0x6a, 0xe0, 0x5a, 0x6b, 0xb7, 0x38, 0x3f, 0x1b, 0xd5, 0xe0, 0xc4, 0x0b, 0xcc, 0x54, 0x7e,
-	0x97, 0x06, 0xab, 0x43, 0xf9, 0x89, 0xe7, 0xbc, 0x67, 0x89, 0x3c, 0x82, 0xb4, 0x24, 0xe2, 0x58,
-	0x4b, 0xc3, 0x9a, 0x2d, 0x8d, 0x7d, 0x22, 0x8e, 0xd5, 0xa0, 0x86, 0xae, 0xf1, 0x4a, 0x19, 0x9c,
-	0x86, 0xbe, 0xe7, 0x10, 0x49, 0x5d, 0xad, 0x0c, 0x6b, 0xf3, 0xf3, 0x59, 0x6c, 0x3c, 0x46, 0x99,
-	0xf9, 0xef, 0xcc, 0xe1, 0x04, 0x15, 0x3d, 0x85, 0x4c, 0xcf, 0x67, 0x87, 0xc4, 0xd7, 0x9a, 0xb0,
-	0x36, 0x3f, 0x9d, 0xe5, 0x64, 0x5b, 0x23, 0x26, 0x0e, 0x0c, 0x05, 0x3d, 0x86, 0xcc, 0x30, 0x74,
-	0x89, 0xa4, 0x76, 0x46, 0x93, 0xcb, 0xb3, 0xc8, 0x2f, 0x35, 0x62, 0x8b, 0x05, 0x47, 0x5e, 0x0f,
-	0x1b, 0x3c, 0x7a, 0x06, 0xb9, 0x80, 0xca, 0xd7, 0x8c, 0x1f, 0x0b, 0x3b, 0x5b, 0x5e, 0x58, 0xb7,
-	0x36, 0xbf, 0x9a, 0x29, 0xc6, 0x08, 0x53, 0x93, 0x92, 0x38, 0xfd, 0x01, 0x0d, 0x64, 0xe4, 0xa6,
+	// 2166 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xcc, 0x58, 0x4d, 0x6f, 0x1b, 0xc9,
+	0xd1, 0x16, 0x25, 0x8a, 0x1f, 0x35, 0x94, 0x4d, 0xf5, 0xda, 0xde, 0x11, 0x6d, 0x4b, 0x34, 0xd7,
+	0xeb, 0x57, 0xbb, 0x8b, 0x97, 0x42, 0x94, 0xc5, 0xc6, 0x6b, 0x67, 0x93, 0x90, 0x22, 0x57, 0x62,
+	0x6c, 0x4b, 0x44, 0x53, 0x56, 0x62, 0x20, 0x00, 0xd1, 0x9a, 0x69, 0x91, 0x03, 0x0d, 0xa7, 0x27,
+	0xdd, 0x4d, 0x19, 0xbc, 0xe5, 0xb8, 0x50, 0x7e, 0x83, 0x90, 0x43, 0x90, 0x7b, 0xf2, 0x2f, 0x7c,
+	0xcc, 0x31, 0xb9, 0x08, 0x59, 0x1d, 0xf2, 0x07, 0x72, 0xcb, 0x25, 0x41, 0xf7, 0xf4, 0xf0, 0x43,
+	0x1e, 0x59, 0x0e, 0xe2, 0x43, 0x6e, 0xdd, 0x35, 0xcf, 0x53, 0xfd, 0xf5, 0x54, 0x75, 0xf5, 0xc0,
+	0xe7, 0x3d, 0x4f, 0xf6, 0x87, 0x87, 0x55, 0x87, 0x0d, 0x36, 0x5c, 0xe6, 0x1c, 0x53, 0xbe, 0x21,
+	0x5e, 0x13, 0x3e, 0x38, 0xf6, 0xe4, 0x06, 0x09, 0xbd, 0x0d, 0x11, 0x52, 0x47, 0x54, 0x43, 0xce,
+	0x24, 0x43, 0x28, 0x02, 0x54, 0x63, 0x40, 0xf5, 0xe4, 0x07, 0xa5, 0xeb, 0xf8, 0x72, 0x14, 0x52,
+	0xc3, 0x2f, 0xdd, 0xea, 0xb1, 0x1e, 0xd3, 0xcd, 0x0d, 0xd5, 0x32, 0xd6, 0xd5, 0x1e, 0x63, 0x3d,
+	0x9f, 0x6e, 0xe8, 0xde, 0xe1, 0xf0, 0x68, 0xc3, 0x1d, 0x72, 0x22, 0x3d, 0x16, 0x98, 0xef, 0x2b,
+	0x97, 0xbf, 0x93, 0x60, 0x74, 0x15, 0xf5, 0x35, 0x27, 0x61, 0x48, 0xb9, 0x19, 0xb0, 0x72, 0x96,
+	0x86, 0xdc, 0x2e, 0x73, 0x69, 0x27, 0xa4, 0x0e, 0xda, 0x06, 0x8b, 0x04, 0x01, 0x93, 0xda, 0xb7,
+	0xb0, 0x53, 0xe5, 0xd4, 0xba, 0xb5, 0xb9, 0x56, 0x7d, 0x7b, 0x4d, 0xd5, 0xda, 0x04, 0x56, 0x4f,
+	0xbf, 0x39, 0x5f, 0x9b, 0xc3, 0xd3, 0x4c, 0xf4, 0x53, 0x28, 0xb8, 0x54, 0x78, 0x9c, 0xba, 0x5d,
+	0xce, 0x7c, 0x6a, 0xcf, 0x97, 0x53, 0xeb, 0x37, 0x36, 0xef, 0x25, 0x79, 0x52, 0x83, 0x63, 0xe6,
+	0x53, 0x6c, 0x19, 0x86, 0xea, 0xa0, 0x6d, 0x80, 0x01, 0x1d, 0x1c, 0x52, 0x2e, 0xfa, 0x5e, 0x68,
+	0x2f, 0x68, 0xfa, 0xff, 0x5d, 0x45, 0x57, 0x73, 0xaf, 0xbe, 0x18, 0xc3, 0xf1, 0x14, 0x15, 0xbd,
+	0x80, 0x02, 0x39, 0x21, 0x9e, 0x4f, 0x0e, 0x3d, 0xdf, 0x93, 0x23, 0x3b, 0xad, 0x5d, 0x7d, 0xf6,
+	0x4e, 0x57, 0xb5, 0x29, 0x02, 0x9e, 0xa1, 0x57, 0x5c, 0x80, 0xc9, 0x40, 0xe8, 0x11, 0x64, 0xdb,
+	0xcd, 0xdd, 0x46, 0x6b, 0x77, 0xbb, 0x38, 0x57, 0x5a, 0x39, 0x3d, 0x2b, 0xdf, 0x56, 0x3e, 0x26,
+	0x80, 0x36, 0x0d, 0x5c, 0x2f, 0xe8, 0xa1, 0x75, 0xc8, 0xd5, 0xb6, 0xb6, 0x9a, 0xed, 0xfd, 0x66,
+	0xa3, 0x98, 0x2a, 0x95, 0x4e, 0xcf, 0xca, 0x77, 0x66, 0x81, 0x35, 0xc7, 0xa1, 0xa1, 0xa4, 0x6e,
+	0x29, 0xfd, 0xdd, 0xef, 0x57, 0xe7, 0x2a, 0xdf, 0xa5, 0xa0, 0x30, 0x3d, 0x09, 0xf4, 0x08, 0x32,
+	0xb5, 0xad, 0xfd, 0xd6, 0x41, 0xb3, 0x38, 0x37, 0xa1, 0x4f, 0x23, 0x6a, 0x8e, 0xf4, 0x4e, 0x28,
+	0x7a, 0x08, 0x8b, 0xed, 0xda, 0xcb, 0x4e, 0xb3, 0x98, 0x9a, 0x4c, 0x67, 0x1a, 0xd6, 0x26, 0x43,
+	0xa1, 0x51, 0x0d, 0x5c, 0x6b, 0xed, 0x16, 0xe7, 0x93, 0x51, 0x0d, 0x4e, 0xbc, 0xc0, 0x4c, 0xe5,
+	0x77, 0x69, 0xb0, 0x3a, 0x94, 0x9f, 0x78, 0xce, 0x07, 0x96, 0xc8, 0x57, 0x90, 0x96, 0x44, 0x1c,
+	0x6b, 0x69, 0x58, 0xc9, 0xd2, 0xd8, 0x27, 0xe2, 0x58, 0x0d, 0x6a, 0xe8, 0x1a, 0xaf, 0x94, 0xc1,
+	0x69, 0xe8, 0x7b, 0x0e, 0x91, 0xd4, 0xd5, 0xca, 0xb0, 0x36, 0x3f, 0x4d, 0x62, 0xe3, 0x31, 0xca,
+	0xcc, 0x7f, 0x67, 0x0e, 0x4f, 0x51, 0xd1, 0x53, 0xc8, 0xf4, 0x7c, 0x76, 0x48, 0x7c, 0xad, 0x09,
+	0x6b, 0xf3, 0x41, 0x92, 0x93, 0x6d, 0x8d, 0x98, 0x38, 0x30, 0x14, 0xf4, 0x18, 0x32, 0xc3, 0xd0,
+	0x25, 0x92, 0xda, 0x19, 0x4d, 0x2e, 0x27, 0x91, 0x5f, 0x6a, 0xc4, 0x16, 0x0b, 0x8e, 0xbc, 0x1e,
+	0x36, 0x78, 0xf4, 0x0c, 0x72, 0x01, 0x95, 0xaf, 0x19, 0x3f, 0x16, 0x76, 0xb6, 0xbc, 0xb0, 0x6e,
+	0x6d, 0x7e, 0x91, 0x28, 0xc6, 0x08, 0x53, 0x93, 0x92, 0x38, 0xfd, 0x01, 0x0d, 0x64, 0xe4, 0xa6,
 	0x3e, 0x6f, 0xa7, 0xf0, 0xd8, 0x01, 0xfa, 0x31, 0xe4, 0x68, 0xe0, 0x86, 0xcc, 0x0b, 0xa4, 0x9d,
 	0x3e, 0x6f, 0xa7, 0xf0, 0xd8, 0x01, 0xfa, 0x31, 0xe4, 0x68, 0xe0, 0x86, 0xcc, 0x0b, 0xa4, 0x9d,
-	0xbb, 0x7e, 0x22, 0x4d, 0x83, 0x51, 0xc1, 0xc4, 0x63, 0x86, 0x62, 0x73, 0xe6, 0xfb, 0x87, 0xc4,
-	0x39, 0xb6, 0xf3, 0xef, 0xb8, 0x8c, 0x31, 0xa3, 0x9e, 0x81, 0xf4, 0x80, 0xb9, 0xb4, 0xb2, 0x01,
-	0xcb, 0x57, 0x42, 0x8d, 0x4a, 0x90, 0x33, 0xa1, 0x8e, 0x34, 0x92, 0xc6, 0xe3, 0x7e, 0xe5, 0x36,
-	0x2c, 0x4d, 0x85, 0xb5, 0xf2, 0xc7, 0x45, 0xc8, 0xc5, 0x7b, 0x8d, 0x6a, 0x90, 0x77, 0x58, 0x20,
-	0x89, 0x17, 0x50, 0x6e, 0xe4, 0x35, 0x73, 0x67, 0xb6, 0x62, 0x90, 0x62, 0xed, 0xcc, 0xe1, 0x09,
-	0x0b, 0x7d, 0x0b, 0x79, 0x4e, 0x05, 0x1b, 0x72, 0x87, 0x0a, 0xa3, 0xaf, 0xf5, 0xd9, 0x0a, 0x89,
-	0x40, 0x98, 0xfe, 0x7a, 0xe8, 0x71, 0xaa, 0xa2, 0x2c, 0xf0, 0x84, 0x8a, 0x9e, 0x42, 0x96, 0x53,
-	0x21, 0x09, 0x97, 0x6f, 0x93, 0x08, 0x8e, 0x20, 0x6d, 0xe6, 0x7b, 0xce, 0x08, 0xc7, 0x0c, 0xf4,
-	0x14, 0xf2, 0xa1, 0x4f, 0x1c, 0xed, 0xd5, 0x5e, 0xd4, 0xf4, 0x4f, 0x66, 0xd1, 0xdb, 0x31, 0x08,
-	0x4f, 0xf0, 0xe8, 0x6b, 0x00, 0x9f, 0xf5, 0xba, 0x2e, 0xf7, 0x4e, 0x28, 0x37, 0x12, 0x2b, 0xcd,
-	0x62, 0x37, 0x34, 0x02, 0xe7, 0x7d, 0xd6, 0x8b, 0x9a, 0x68, 0xfb, 0xbf, 0xd2, 0x57, 0x42, 0x5b,
-	0xcf, 0x00, 0xc8, 0xf8, 0xab, 0x51, 0xd7, 0x17, 0xef, 0xe4, 0xca, 0xec, 0x48, 0x82, 0x8e, 0x3e,
-	0x85, 0xc2, 0x11, 0xe3, 0x0e, 0xed, 0x9a, 0x53, 0x93, 0xd7, 0x9a, 0xb0, 0xb4, 0x2d, 0xd2, 0x17,
-	0xaa, 0x43, 0xb6, 0x47, 0x03, 0xca, 0x3d, 0xc7, 0x06, 0x3d, 0xd8, 0x83, 0x99, 0x07, 0x32, 0x82,
-	0xe0, 0x61, 0x20, 0xbd, 0x01, 0x35, 0x23, 0xc5, 0x44, 0xf4, 0x2b, 0xf8, 0x20, 0xde, 0xbe, 0x2e,
-	0xa7, 0x47, 0x94, 0xd3, 0x40, 0x69, 0xc0, 0xd2, 0x71, 0xf8, 0xfc, 0xed, 0x1a, 0x30, 0x68, 0x93,
+	0xbb, 0x7a, 0x22, 0x4d, 0x83, 0x51, 0x9b, 0x89, 0xc7, 0x0c, 0xc5, 0xe6, 0xcc, 0xf7, 0x0f, 0x89,
+	0x73, 0x6c, 0xe7, 0xdf, 0x73, 0x19, 0x63, 0x46, 0x3d, 0x03, 0xe9, 0x01, 0x73, 0x69, 0x65, 0x03,
+	0x96, 0xdf, 0xda, 0x6a, 0x54, 0x82, 0x9c, 0xd9, 0xea, 0x48, 0x23, 0x69, 0x3c, 0xee, 0x57, 0x6e,
+	0xc2, 0xd2, 0xcc, 0xb6, 0x56, 0xfe, 0xb8, 0x08, 0xb9, 0xf8, 0xac, 0x51, 0x0d, 0xf2, 0x0e, 0x0b,
+	0x24, 0xf1, 0x02, 0xca, 0x8d, 0xbc, 0x12, 0x4f, 0x66, 0x2b, 0x06, 0x29, 0xd6, 0xce, 0x1c, 0x9e,
+	0xb0, 0xd0, 0xb7, 0x90, 0xe7, 0x54, 0xb0, 0x21, 0x77, 0xa8, 0x30, 0xfa, 0x5a, 0x4f, 0x56, 0x48,
+	0x04, 0xc2, 0xf4, 0xd7, 0x43, 0x8f, 0x53, 0xb5, 0xcb, 0x02, 0x4f, 0xa8, 0xe8, 0x29, 0x64, 0x39,
+	0x15, 0x92, 0x70, 0xf9, 0x2e, 0x89, 0xe0, 0x08, 0xd2, 0x66, 0xbe, 0xe7, 0x8c, 0x70, 0xcc, 0x40,
+	0x4f, 0x21, 0x1f, 0xfa, 0xc4, 0xd1, 0x5e, 0xed, 0x45, 0x4d, 0xbf, 0x9f, 0x44, 0x6f, 0xc7, 0x20,
+	0x3c, 0xc1, 0xa3, 0xaf, 0x01, 0x7c, 0xd6, 0xeb, 0xba, 0xdc, 0x3b, 0xa1, 0xdc, 0x48, 0xac, 0x94,
+	0xc4, 0x6e, 0x68, 0x04, 0xce, 0xfb, 0xac, 0x17, 0x35, 0xd1, 0xf6, 0x7f, 0xa5, 0xaf, 0x29, 0x6d,
+	0x3d, 0x03, 0x20, 0xe3, 0xaf, 0x46, 0x5d, 0x9f, 0xbd, 0x97, 0x2b, 0x73, 0x22, 0x53, 0x74, 0xf4,
+	0x00, 0x0a, 0x47, 0x8c, 0x3b, 0xb4, 0x6b, 0xa2, 0x26, 0xaf, 0x35, 0x61, 0x69, 0x5b, 0xa4, 0x2f,
+	0x54, 0x87, 0x6c, 0x8f, 0x06, 0x94, 0x7b, 0x8e, 0x0d, 0x7a, 0xb0, 0x47, 0x89, 0x01, 0x19, 0x41,
+	0xf0, 0x30, 0x90, 0xde, 0x80, 0x9a, 0x91, 0x62, 0x22, 0xfa, 0x15, 0x7c, 0x14, 0x1f, 0x5f, 0x97,
+	0xd3, 0x23, 0xca, 0x69, 0xa0, 0x34, 0x60, 0xe9, 0x7d, 0xf8, 0xf4, 0xdd, 0x1a, 0x30, 0x68, 0x93,
 	0x6c, 0x10, 0xbf, 0xfc, 0x41, 0xd4, 0xf3, 0x90, 0xe5, 0xd1, 0xb8, 0x95, 0xdf, 0xa6, 0x94, 0xea,
 	0x6c, 0x10, 0xbf, 0xfc, 0x41, 0xd4, 0xf3, 0x90, 0xe5, 0xd1, 0xb8, 0x95, 0xdf, 0xa6, 0x94, 0xea,
-	0x2f, 0x21, 0xd0, 0x06, 0x58, 0xe3, 0xe1, 0x3d, 0x57, 0xab, 0x37, 0x5f, 0xbf, 0x75, 0x71, 0xbe,
+	0x2f, 0x21, 0xd0, 0x06, 0x58, 0xe3, 0xe1, 0x3d, 0x57, 0xab, 0x37, 0x5f, 0xbf, 0x71, 0x71, 0xbe,
 	0x06, 0x31, 0xb6, 0xd5, 0x50, 0x39, 0xc8, 0xb4, 0x5d, 0xd4, 0x84, 0xa5, 0x31, 0x41, 0x95, 0x01,
 	0x06, 0x31, 0xb6, 0xd5, 0x50, 0x39, 0xc8, 0xb4, 0x5d, 0xd4, 0x84, 0xa5, 0x31, 0x41, 0x95, 0x01,
-	0xe6, 0xa2, 0x2c, 0xbf, 0x6d, 0xa6, 0xfb, 0xa3, 0x90, 0xe2, 0x02, 0x4f, 0xf4, 0x2a, 0xbf, 0x04,
-	0x74, 0x35, 0x2e, 0x08, 0x41, 0xfa, 0xd8, 0x0b, 0xcc, 0x34, 0xb0, 0x6e, 0xa3, 0x2a, 0x64, 0x43,
-	0x32, 0xf2, 0x19, 0x71, 0xcd, 0xc1, 0xb8, 0x53, 0x8d, 0x0a, 0x84, 0x6a, 0x5c, 0x20, 0x54, 0x6b,
-	0xc1, 0x08, 0xc7, 0xa0, 0xca, 0x33, 0xf8, 0x70, 0xe6, 0xf6, 0xa2, 0x4d, 0x28, 0x8c, 0x0f, 0xdc,
-	0x64, 0xad, 0xb7, 0x2f, 0xce, 0xd7, 0xac, 0xf1, 0xc9, 0x6c, 0x35, 0xb0, 0x35, 0x06, 0xb5, 0xdc,
-	0xca, 0x5f, 0x96, 0x60, 0x69, 0xea, 0xd8, 0xa2, 0x3b, 0xb0, 0xe8, 0x0d, 0x48, 0x8f, 0x9a, 0x39,
-	0x46, 0x1d, 0xd4, 0x84, 0x8c, 0x4f, 0x0e, 0xa9, 0xaf, 0x0e, 0xaf, 0xda, 0xb8, 0xff, 0xbf, 0xf1,
-	0xfc, 0x57, 0x9f, 0x6b, 0x7c, 0x33, 0x90, 0x7c, 0x84, 0x0d, 0x19, 0xd9, 0x90, 0x75, 0xd8, 0x60,
-	0x40, 0x02, 0x75, 0x4d, 0x2c, 0xac, 0xe7, 0x71, 0xdc, 0x55, 0x91, 0x21, 0xbc, 0x27, 0xec, 0xb4,
-	0x36, 0xeb, 0x36, 0x2a, 0xc2, 0x02, 0x0d, 0x4e, 0xec, 0x45, 0x6d, 0x52, 0x4d, 0x65, 0x71, 0xbd,
-	0xe8, 0xf4, 0xe5, 0xb1, 0x6a, 0x2a, 0xde, 0x50, 0x50, 0x6e, 0x67, 0xa3, 0x88, 0xaa, 0x36, 0xfa,
-	0x11, 0x64, 0x06, 0x6c, 0x18, 0x48, 0x61, 0xe7, 0xf4, 0x64, 0x57, 0x66, 0x4d, 0xf6, 0x85, 0x42,
-	0x18, 0x65, 0x19, 0x38, 0x6a, 0xc2, 0xb2, 0x90, 0x2c, 0xec, 0xf6, 0x38, 0x71, 0x68, 0x37, 0xa4,
-	0xdc, 0x63, 0xae, 0x49, 0xc3, 0x2b, 0x57, 0x36, 0xa5, 0x61, 0x0a, 0x3e, 0x7c, 0x5b, 0x71, 0xb6,
-	0x15, 0xa5, 0xad, 0x19, 0xa8, 0x0d, 0x85, 0x70, 0xe8, 0xfb, 0x5d, 0x16, 0x46, 0x37, 0x72, 0x74,
-	0x76, 0xde, 0x21, 0x64, 0xed, 0xa1, 0xef, 0xef, 0x45, 0x24, 0x6c, 0x85, 0x93, 0x0e, 0xfa, 0x08,
-	0x32, 0x3d, 0xce, 0x86, 0x61, 0x74, 0x6e, 0xf2, 0xd8, 0xf4, 0xd0, 0x37, 0x90, 0x15, 0xd4, 0xe1,
-	0x54, 0x0a, 0xbb, 0xa0, 0x97, 0xfa, 0xd9, 0xac, 0x41, 0x3a, 0x1a, 0x32, 0x3e, 0x13, 0x38, 0xe6,
-	0xa0, 0x15, 0x58, 0x90, 0x72, 0x64, 0x2f, 0x95, 0x53, 0xeb, 0xb9, 0x7a, 0xf6, 0xe2, 0x7c, 0x6d,
-	0x61, 0x7f, 0xff, 0x15, 0x56, 0x36, 0x75, 0x5b, 0xf4, 0x99, 0x90, 0x01, 0x19, 0x50, 0xfb, 0x96,
-	0x8e, 0xed, 0xb8, 0x8f, 0x5e, 0x01, 0xb8, 0x81, 0xe8, 0x3a, 0x3a, 0x3d, 0xd9, 0xb7, 0xf5, 0xea,
-	0xbe, 0xba, 0x79, 0x75, 0x8d, 0xdd, 0x8e, 0xb9, 0x31, 0x97, 0x2e, 0xce, 0xd7, 0xf2, 0xe3, 0x2e,
-	0xce, 0xbb, 0x81, 0x88, 0x9a, 0xa8, 0x0e, 0x56, 0x9f, 0x12, 0x5f, 0xf6, 0x9d, 0x3e, 0x75, 0x8e,
-	0xed, 0xe2, 0xf5, 0x57, 0xe0, 0x8e, 0x86, 0x19, 0x0f, 0x49, 0x92, 0x52, 0xb0, 0x9a, 0xaa, 0xb0,
-	0x97, 0x75, 0xac, 0xa2, 0x0e, 0xfa, 0x04, 0x80, 0x85, 0x34, 0xe8, 0x0a, 0xe9, 0x7a, 0x81, 0x8d,
-	0xd4, 0x92, 0x71, 0x5e, 0x59, 0x3a, 0xca, 0x80, 0xee, 0xaa, 0x0b, 0x8a, 0xb8, 0x5d, 0x16, 0xf8,
-	0x23, 0xfb, 0x03, 0xfd, 0x35, 0xa7, 0x0c, 0x7b, 0x81, 0x3f, 0x42, 0x6b, 0x60, 0x69, 0x5d, 0x08,
-	0xaf, 0x17, 0x10, 0xdf, 0xbe, 0xa3, 0xe3, 0x01, 0xca, 0xd4, 0xd1, 0x16, 0xb5, 0x0f, 0x51, 0x34,
-	0x84, 0xfd, 0xe1, 0xf5, 0xfb, 0x60, 0x26, 0x3b, 0xd9, 0x07, 0xc3, 0x41, 0x3f, 0x01, 0x08, 0xb9,
-	0x77, 0xe2, 0xf9, 0xb4, 0x47, 0x85, 0xfd, 0x91, 0x5e, 0xf4, 0xea, 0xcc, 0x9b, 0x69, 0x8c, 0xc2,
-	0x09, 0x06, 0xaa, 0x42, 0xda, 0x0b, 0x3c, 0x69, 0x7f, 0x6c, 0x6e, 0xa5, 0xcb, 0x52, 0xad, 0x33,
-	0xe6, 0x1f, 0x10, 0x7f, 0x48, 0xb1, 0xc6, 0xa1, 0x16, 0xe4, 0x3d, 0xc1, 0x7c, 0x2d, 0x5f, 0xdb,
-	0xd6, 0xf9, 0xed, 0x1d, 0xf6, 0xaf, 0x15, 0x53, 0xf0, 0x84, 0x8d, 0xee, 0x41, 0x3e, 0xf4, 0x5c,
-	0xf1, 0xdc, 0x1b, 0x78, 0xd2, 0x5e, 0x29, 0xa7, 0xd6, 0x17, 0xf0, 0xc4, 0x80, 0x76, 0x20, 0x2b,
-	0x46, 0xc2, 0x91, 0xbe, 0xb0, 0x4b, 0x3a, 0x2e, 0xd5, 0x9b, 0x87, 0xe9, 0x44, 0x84, 0x28, 0x71,
-	0xc4, 0x74, 0xb5, 0x05, 0x03, 0x3a, 0x60, 0x7c, 0xd4, 0x15, 0xaf, 0x49, 0x68, 0xdf, 0xd5, 0x23,
-	0x41, 0x64, 0xea, 0xbc, 0x26, 0x21, 0xda, 0x81, 0xe5, 0x04, 0x20, 0xf4, 0x02, 0x2a, 0x84, 0x7d,
-	0x4f, 0x07, 0xe4, 0xee, 0x95, 0x80, 0xb4, 0x02, 0xf9, 0xe8, 0x61, 0x14, 0x91, 0xe2, 0xc4, 0x47,
-	0x44, 0x2a, 0x7d, 0x0d, 0x56, 0x22, 0x77, 0xa9, 0x9c, 0x73, 0x4c, 0x47, 0x26, 0x1d, 0xaa, 0xa6,
-	0x12, 0xd8, 0x89, 0xe2, 0xea, 0x7c, 0x9d, 0xc7, 0x51, 0xe7, 0xc9, 0xfc, 0xe3, 0x54, 0x69, 0x13,
-	0xac, 0xc4, 0x19, 0x46, 0x9f, 0xa9, 0xbb, 0xa4, 0xe7, 0x09, 0xc9, 0x47, 0x5d, 0x32, 0x94, 0x7d,
-	0xfb, 0x67, 0x9a, 0x50, 0x88, 0x8d, 0xb5, 0xa1, 0xec, 0x97, 0xba, 0x30, 0x39, 0x0a, 0xa8, 0x0c,
-	0x96, 0x3a, 0x62, 0x82, 0xf2, 0x13, 0xca, 0x55, 0x9d, 0xa6, 0x14, 0x9c, 0x34, 0xa9, 0x54, 0x20,
-	0x28, 0xe1, 0x4e, 0x5f, 0x67, 0xe2, 0x3c, 0x36, 0x3d, 0x95, 0x5a, 0xe3, 0x7c, 0x63, 0x52, 0xab,
-	0xe9, 0x96, 0x9e, 0x40, 0x21, 0x19, 0xd3, 0xff, 0x64, 0x41, 0x95, 0x3f, 0xa5, 0x20, 0x3f, 0xde,
-	0x77, 0xf4, 0x10, 0x96, 0x5b, 0x9d, 0xbd, 0xe7, 0xb5, 0xfd, 0xd6, 0xde, 0x6e, 0xb7, 0xd1, 0xfc,
-	0xb6, 0xf6, 0xf2, 0xf9, 0x7e, 0x71, 0xae, 0xf4, 0xc9, 0xe9, 0x59, 0x79, 0x65, 0x72, 0xc5, 0xc4,
-	0xf0, 0x06, 0x3d, 0x22, 0x43, 0x5f, 0x4e, 0xb3, 0xda, 0x78, 0x6f, 0xab, 0xd9, 0xe9, 0x14, 0x53,
-	0xd7, 0xb1, 0xda, 0x9c, 0x39, 0x54, 0x08, 0xb4, 0x09, 0xc5, 0x09, 0x6b, 0xe7, 0x55, 0xbb, 0x89,
-	0x0f, 0x8a, 0xf3, 0xa5, 0x7b, 0xa7, 0x67, 0x65, 0xfb, 0x2a, 0x69, 0x67, 0x14, 0x52, 0x7e, 0x60,
-	0xde, 0x47, 0xff, 0x48, 0x41, 0x21, 0x59, 0x5e, 0xa3, 0xad, 0xa8, 0x2c, 0xd6, 0x2b, 0xbe, 0xb5,
-	0xb9, 0x71, 0x53, 0x39, 0xae, 0xaf, 0x75, 0x7f, 0xa8, 0xfc, 0xbe, 0x50, 0x2f, 0x61, 0x4d, 0x46,
-	0x0f, 0x61, 0x31, 0x64, 0x5c, 0xc6, 0x17, 0xe0, 0xec, 0xe3, 0xc9, 0x78, 0x5c, 0xb4, 0x45, 0xe0,
-	0x4a, 0x1f, 0x6e, 0x4d, 0x7b, 0x43, 0xf7, 0x61, 0xe1, 0xa0, 0xd5, 0x2e, 0xce, 0x95, 0xee, 0x9e,
-	0x9e, 0x95, 0x3f, 0x9e, 0xfe, 0x78, 0xe0, 0x71, 0x39, 0x24, 0x7e, 0xab, 0x8d, 0xbe, 0x84, 0xc5,
-	0xc6, 0x6e, 0x07, 0xe3, 0x62, 0xaa, 0xb4, 0x76, 0x7a, 0x56, 0xbe, 0x3b, 0x8d, 0x53, 0x9f, 0xd8,
-	0x30, 0x70, 0x31, 0x3b, 0x1c, 0xbf, 0x0a, 0xff, 0x39, 0x0f, 0x96, 0xa9, 0x0b, 0xde, 0xf7, 0x8f,
-	0x83, 0xa5, 0xa8, 0xe8, 0x8d, 0x13, 0xfe, 0xfc, 0x8d, 0xb5, 0x6f, 0x21, 0x22, 0x18, 0x4d, 0x7f,
-	0x0a, 0x05, 0x2f, 0x3c, 0x79, 0xd4, 0xa5, 0x01, 0x39, 0xf4, 0xcd, 0x03, 0x31, 0x87, 0x2d, 0x65,
-	0x6b, 0x46, 0x26, 0x75, 0xdb, 0x78, 0x81, 0xa4, 0x3c, 0x30, 0x4f, 0xbf, 0x1c, 0x1e, 0xf7, 0xd1,
-	0x37, 0x90, 0xf6, 0x42, 0x32, 0x30, 0x05, 0xfb, 0xcc, 0x15, 0xb4, 0xda, 0xb5, 0x17, 0xe6, 0xcc,
-	0xd5, 0x73, 0x17, 0xe7, 0x6b, 0x69, 0x65, 0xc0, 0x9a, 0x86, 0x56, 0xe3, 0x9a, 0x59, 0x8d, 0xa4,
-	0x2b, 0x87, 0x1c, 0x4e, 0x58, 0xd4, 0xb9, 0xf1, 0x82, 0x1e, 0x57, 0xd9, 0x22, 0xab, 0x3f, 0xc6,
-	0x5d, 0x54, 0x82, 0xac, 0xa9, 0xbc, 0x75, 0xa9, 0x9d, 0x57, 0x55, 0xad, 0x31, 0xd4, 0x97, 0xc0,
-	0x8a, 0xa2, 0xd1, 0x3d, 0xe2, 0x6c, 0x50, 0xf9, 0x57, 0x1a, 0xac, 0x2d, 0x7f, 0x28, 0xa4, 0x29,
-	0xa2, 0xde, 0x5b, 0xf0, 0x5f, 0xc1, 0x32, 0xd1, 0x3f, 0x22, 0x48, 0xa0, 0x2a, 0x12, 0xfd, 0xa0,
-	0x31, 0x1b, 0x70, 0x7f, 0xa6, 0xbb, 0x31, 0x38, 0x7a, 0xfc, 0xd4, 0x33, 0xca, 0xa7, 0x9d, 0xc2,
-	0x45, 0x72, 0xe9, 0x0b, 0xea, 0xc0, 0x12, 0xe3, 0x4e, 0x9f, 0x0a, 0x19, 0xd5, 0x31, 0xe6, 0xe1,
-	0x3e, 0xf3, 0x97, 0xce, 0x5e, 0x12, 0x68, 0x2e, 0xf1, 0x68, 0xb6, 0xd3, 0x3e, 0xd0, 0x63, 0x48,
-	0x73, 0x72, 0x14, 0x3f, 0xce, 0x66, 0x1e, 0x12, 0x4c, 0x8e, 0xe4, 0x94, 0x0b, 0xcd, 0x40, 0x3f,
-	0x07, 0x70, 0x3d, 0x11, 0x12, 0xe9, 0xf4, 0x29, 0x37, 0x9b, 0x3d, 0x73, 0x89, 0x8d, 0x31, 0x6a,
-	0xca, 0x4b, 0x82, 0x8d, 0x9e, 0x41, 0xde, 0x21, 0xb1, 0x5c, 0x33, 0xd7, 0xff, 0xcd, 0xd8, 0xaa,
-	0x19, 0x17, 0x45, 0xe5, 0xe2, 0xe2, 0x7c, 0x2d, 0x17, 0x5b, 0x70, 0xce, 0x21, 0x46, 0xbe, 0xcf,
-	0x60, 0x49, 0x12, 0x71, 0xdc, 0x75, 0xa3, 0x74, 0x16, 0xc9, 0xe4, 0x9a, 0xa2, 0x44, 0x3d, 0x99,
-	0x4d, 0xda, 0x8b, 0xb7, 0xb3, 0x20, 0x13, 0x36, 0xf4, 0x0b, 0x58, 0xa6, 0x81, 0xc3, 0x47, 0x5a,
-	0xac, 0xf1, 0x0c, 0x73, 0xd7, 0x2f, 0xb6, 0x39, 0x06, 0x4f, 0x2d, 0xb6, 0x48, 0x2f, 0xd9, 0x2b,
-	0x7f, 0x4b, 0x01, 0x44, 0x75, 0xde, 0xfb, 0x15, 0x20, 0x82, 0xb4, 0x4b, 0x24, 0xd1, 0x9a, 0x2b,
-	0x60, 0xdd, 0x46, 0x4f, 0x00, 0x24, 0x1d, 0x84, 0x2a, 0xf5, 0x06, 0x3d, 0x23, 0x9b, 0xb7, 0xa5,
-	0x83, 0x04, 0x1a, 0x6d, 0x42, 0xc6, 0x3c, 0xa1, 0xd3, 0x37, 0xf2, 0x0c, 0xb2, 0xf2, 0x87, 0x14,
-	0x40, 0xb4, 0xcc, 0xff, 0xe9, 0xb5, 0xd5, 0xed, 0x37, 0xdf, 0xaf, 0xce, 0xfd, 0xf5, 0xfb, 0xd5,
-	0xb9, 0xdf, 0x5c, 0xac, 0xa6, 0xde, 0x5c, 0xac, 0xa6, 0xfe, 0x7c, 0xb1, 0x9a, 0xfa, 0xfb, 0xc5,
-	0x6a, 0xea, 0x30, 0xa3, 0x2b, 0x8f, 0x1f, 0xfe, 0x3b, 0x00, 0x00, 0xff, 0xff, 0x67, 0x32, 0x8c,
-	0x8f, 0xb8, 0x16, 0x00, 0x00,
+	0xe6, 0xa2, 0x2c, 0xbf, 0x6b, 0xa6, 0xfb, 0xa3, 0x90, 0xe2, 0x02, 0x9f, 0xea, 0x55, 0x7e, 0x09,
+	0xe8, 0xed, 0x7d, 0x41, 0x08, 0xd2, 0xc7, 0x5e, 0x60, 0xa6, 0x81, 0x75, 0x1b, 0x55, 0x21, 0x1b,
+	0x92, 0x91, 0xcf, 0x88, 0x6b, 0x02, 0xe3, 0x56, 0x35, 0x2a, 0x10, 0xaa, 0x71, 0x81, 0x50, 0xad,
+	0x05, 0x23, 0x1c, 0x83, 0x2a, 0xcf, 0xe0, 0x76, 0xe2, 0xf1, 0xa2, 0x4d, 0x28, 0x8c, 0x03, 0x6e,
+	0xb2, 0xd6, 0x9b, 0x17, 0xe7, 0x6b, 0xd6, 0x38, 0x32, 0x5b, 0x0d, 0x6c, 0x8d, 0x41, 0x2d, 0xb7,
+	0xf2, 0xf7, 0x02, 0x2c, 0xcd, 0x84, 0x2d, 0xba, 0x05, 0x8b, 0xde, 0x80, 0xf4, 0xa8, 0x99, 0x63,
+	0xd4, 0x41, 0x4d, 0xc8, 0xf8, 0xe4, 0x90, 0xfa, 0x2a, 0x78, 0xd5, 0xc1, 0xfd, 0xff, 0xb5, 0xf1,
+	0x5f, 0x7d, 0xae, 0xf1, 0xcd, 0x40, 0xf2, 0x11, 0x36, 0x64, 0x64, 0x43, 0xd6, 0x61, 0x83, 0x01,
+	0x09, 0xd4, 0x35, 0xb1, 0xb0, 0x9e, 0xc7, 0x71, 0x57, 0xed, 0x0c, 0xe1, 0x3d, 0x61, 0xa7, 0xb5,
+	0x59, 0xb7, 0x51, 0x11, 0x16, 0x68, 0x70, 0x62, 0x2f, 0x6a, 0x93, 0x6a, 0x2a, 0x8b, 0xeb, 0x45,
+	0xd1, 0x97, 0xc7, 0xaa, 0xa9, 0x78, 0x43, 0x41, 0xb9, 0x9d, 0x8d, 0x76, 0x54, 0xb5, 0xd1, 0x8f,
+	0x20, 0x33, 0x60, 0xc3, 0x40, 0x0a, 0x3b, 0xa7, 0x27, 0xbb, 0x92, 0x34, 0xd9, 0x17, 0x0a, 0x61,
+	0x94, 0x65, 0xe0, 0xa8, 0x09, 0xcb, 0x42, 0xb2, 0xb0, 0xdb, 0xe3, 0xc4, 0xa1, 0xdd, 0x90, 0x72,
+	0x8f, 0xb9, 0x26, 0x0d, 0xaf, 0xbc, 0x75, 0x28, 0x0d, 0x53, 0xf0, 0xe1, 0x9b, 0x8a, 0xb3, 0xad,
+	0x28, 0x6d, 0xcd, 0x40, 0x6d, 0x28, 0x84, 0x43, 0xdf, 0xef, 0xb2, 0x30, 0xba, 0x91, 0xa3, 0xd8,
+	0x79, 0x8f, 0x2d, 0x6b, 0x0f, 0x7d, 0x7f, 0x2f, 0x22, 0x61, 0x2b, 0x9c, 0x74, 0xd0, 0x1d, 0xc8,
+	0xf4, 0x38, 0x1b, 0x86, 0x51, 0xdc, 0xe4, 0xb1, 0xe9, 0xa1, 0x6f, 0x20, 0x2b, 0xa8, 0xc3, 0xa9,
+	0x14, 0x76, 0x41, 0x2f, 0xf5, 0x93, 0xa4, 0x41, 0x3a, 0x1a, 0x32, 0x8e, 0x09, 0x1c, 0x73, 0xd0,
+	0x0a, 0x2c, 0x48, 0x39, 0xb2, 0x97, 0xca, 0xa9, 0xf5, 0x5c, 0x3d, 0x7b, 0x71, 0xbe, 0xb6, 0xb0,
+	0xbf, 0xff, 0x0a, 0x2b, 0x9b, 0xba, 0x2d, 0xfa, 0x4c, 0xc8, 0x80, 0x0c, 0xa8, 0x7d, 0x43, 0xef,
+	0xed, 0xb8, 0x8f, 0x5e, 0x01, 0xb8, 0x81, 0xe8, 0x3a, 0x3a, 0x3d, 0xd9, 0x37, 0xf5, 0xea, 0xbe,
+	0xb8, 0x7e, 0x75, 0x8d, 0xdd, 0x8e, 0xb9, 0x31, 0x97, 0x2e, 0xce, 0xd7, 0xf2, 0xe3, 0x2e, 0xce,
+	0xbb, 0x81, 0x88, 0x9a, 0xa8, 0x0e, 0x56, 0x9f, 0x12, 0x5f, 0xf6, 0x9d, 0x3e, 0x75, 0x8e, 0xed,
+	0xe2, 0xd5, 0x57, 0xe0, 0x8e, 0x86, 0x19, 0x0f, 0xd3, 0x24, 0xa5, 0x60, 0x35, 0x55, 0x61, 0x2f,
+	0xeb, 0xbd, 0x8a, 0x3a, 0xe8, 0x3e, 0x00, 0x0b, 0x69, 0xd0, 0x15, 0xd2, 0xf5, 0x02, 0x1b, 0xa9,
+	0x25, 0xe3, 0xbc, 0xb2, 0x74, 0x94, 0x01, 0xdd, 0x55, 0x17, 0x14, 0x71, 0xbb, 0x2c, 0xf0, 0x47,
+	0xf6, 0x47, 0xfa, 0x6b, 0x4e, 0x19, 0xf6, 0x02, 0x7f, 0x84, 0xd6, 0xc0, 0xd2, 0xba, 0x10, 0x5e,
+	0x2f, 0x20, 0xbe, 0x7d, 0x4b, 0xef, 0x07, 0x28, 0x53, 0x47, 0x5b, 0xd4, 0x39, 0x44, 0xbb, 0x21,
+	0xec, 0xdb, 0x57, 0x9f, 0x83, 0x99, 0xec, 0xe4, 0x1c, 0x0c, 0x07, 0xfd, 0x04, 0x20, 0xe4, 0xde,
+	0x89, 0xe7, 0xd3, 0x1e, 0x15, 0xf6, 0x1d, 0xbd, 0xe8, 0xd5, 0xc4, 0x9b, 0x69, 0x8c, 0xc2, 0x53,
+	0x0c, 0x54, 0x85, 0xb4, 0x17, 0x78, 0xd2, 0xfe, 0xd8, 0xdc, 0x4a, 0x97, 0xa5, 0x5a, 0x67, 0xcc,
+	0x3f, 0x20, 0xfe, 0x90, 0x62, 0x8d, 0x43, 0x2d, 0xc8, 0x7b, 0x82, 0xf9, 0x5a, 0xbe, 0xb6, 0xad,
+	0xf3, 0xdb, 0x7b, 0x9c, 0x5f, 0x2b, 0xa6, 0xe0, 0x09, 0x1b, 0xdd, 0x83, 0x7c, 0xe8, 0xb9, 0xe2,
+	0xb9, 0x37, 0xf0, 0xa4, 0xbd, 0x52, 0x4e, 0xad, 0x2f, 0xe0, 0x89, 0x01, 0xed, 0x40, 0x56, 0x8c,
+	0x84, 0x23, 0x7d, 0x61, 0x97, 0xf4, 0xbe, 0x54, 0xaf, 0x1f, 0xa6, 0x13, 0x11, 0xa2, 0xc4, 0x11,
+	0xd3, 0x4b, 0x5f, 0x83, 0x35, 0x95, 0x50, 0x54, 0x22, 0x38, 0xa6, 0x23, 0x93, 0xa3, 0x54, 0x53,
+	0x9d, 0xfa, 0x89, 0x5a, 0xa2, 0x4e, 0xa2, 0x79, 0x1c, 0x75, 0x9e, 0xcc, 0x3f, 0x4e, 0x95, 0x36,
+	0xc1, 0x9a, 0x0a, 0x2c, 0xf4, 0x89, 0x4a, 0xf0, 0x3d, 0x4f, 0x48, 0x3e, 0xea, 0x92, 0xa1, 0xec,
+	0xdb, 0x3f, 0xd3, 0x84, 0x42, 0x6c, 0xac, 0x0d, 0x65, 0xbf, 0xd4, 0x85, 0x89, 0x3e, 0x51, 0x19,
+	0x2c, 0xa5, 0x7b, 0x41, 0xf9, 0x09, 0xe5, 0xaa, 0x78, 0x52, 0xb2, 0x9a, 0x36, 0xa9, 0xf8, 0x14,
+	0x94, 0x70, 0xa7, 0xaf, 0xd3, 0x63, 0x1e, 0x9b, 0x9e, 0xca, 0x77, 0x71, 0x12, 0x30, 0xf9, 0xce,
+	0x74, 0x4b, 0x4f, 0xa0, 0x30, 0xbd, 0xd0, 0xff, 0x64, 0x41, 0x95, 0x3f, 0xa5, 0x20, 0x3f, 0x3e,
+	0x0c, 0xf4, 0x25, 0x2c, 0xb7, 0x3a, 0x7b, 0xcf, 0x6b, 0xfb, 0xad, 0xbd, 0xdd, 0x6e, 0xa3, 0xf9,
+	0x6d, 0xed, 0xe5, 0xf3, 0xfd, 0xe2, 0x5c, 0xe9, 0xfe, 0xe9, 0x59, 0x79, 0x65, 0x92, 0xf7, 0x63,
+	0x78, 0x83, 0x1e, 0x91, 0xa1, 0x2f, 0x67, 0x59, 0x6d, 0xbc, 0xb7, 0xd5, 0xec, 0x74, 0x8a, 0xa9,
+	0xab, 0x58, 0x6d, 0xce, 0x1c, 0x2a, 0x04, 0xda, 0x84, 0xe2, 0x84, 0xb5, 0xf3, 0xaa, 0xdd, 0xc4,
+	0x07, 0xc5, 0xf9, 0xd2, 0xbd, 0xd3, 0xb3, 0xb2, 0xfd, 0x36, 0x69, 0x67, 0x14, 0x52, 0x7e, 0x60,
+	0x1e, 0x2d, 0xff, 0x48, 0x41, 0x61, 0xba, 0xe6, 0x45, 0x5b, 0x51, 0xad, 0xaa, 0x57, 0x7c, 0x63,
+	0x73, 0xe3, 0xba, 0x1a, 0x59, 0xdf, 0xb5, 0xfe, 0x50, 0xf9, 0x7d, 0xa1, 0x9e, 0xa7, 0x9a, 0x8c,
+	0xbe, 0x84, 0xc5, 0x90, 0x71, 0x19, 0xdf, 0x4a, 0xc9, 0x31, 0xc3, 0x78, 0x5c, 0x49, 0x45, 0xe0,
+	0x4a, 0x1f, 0x6e, 0xcc, 0x7a, 0x43, 0x0f, 0x61, 0xe1, 0xa0, 0xd5, 0x2e, 0xce, 0x95, 0xee, 0x9e,
+	0x9e, 0x95, 0x3f, 0x9e, 0xfd, 0x78, 0xe0, 0x71, 0x39, 0x24, 0x7e, 0xab, 0x8d, 0x3e, 0x87, 0xc5,
+	0xc6, 0x6e, 0x07, 0xe3, 0x62, 0xaa, 0xb4, 0x76, 0x7a, 0x56, 0xbe, 0x3b, 0x8b, 0x53, 0x9f, 0xd8,
+	0x30, 0x70, 0x31, 0x3b, 0x1c, 0x3f, 0xd5, 0xfe, 0x39, 0x0f, 0x96, 0xb9, 0xac, 0x3f, 0xf4, 0x6b,
+	0x7e, 0x29, 0xaa, 0x44, 0xe3, 0x2c, 0x3c, 0x7f, 0x6d, 0x41, 0x5a, 0x88, 0x08, 0x46, 0xd3, 0x0f,
+	0xa0, 0xe0, 0x85, 0x27, 0x5f, 0x75, 0x69, 0x40, 0x0e, 0x7d, 0xf3, 0x6a, 0xcb, 0x61, 0x4b, 0xd9,
+	0x9a, 0x91, 0x49, 0x5d, 0x01, 0x5e, 0x20, 0x29, 0x0f, 0xcc, 0x7b, 0x2c, 0x87, 0xc7, 0x7d, 0xf4,
+	0x0d, 0xa4, 0xbd, 0x90, 0x0c, 0x4c, 0x15, 0x9d, 0xb8, 0x82, 0x56, 0xbb, 0xf6, 0xc2, 0xc4, 0x5c,
+	0x3d, 0x77, 0x71, 0xbe, 0x96, 0x56, 0x06, 0xac, 0x69, 0x68, 0x35, 0x2e, 0x64, 0xd5, 0x48, 0xfa,
+	0x3a, 0xcf, 0xe1, 0x29, 0x8b, 0x8a, 0x1b, 0x2f, 0xe8, 0x71, 0x2a, 0x84, 0xbe, 0xd8, 0x73, 0x38,
+	0xee, 0xa2, 0x12, 0x64, 0x4d, 0x39, 0xac, 0xeb, 0xdf, 0xbc, 0x2a, 0x35, 0x8d, 0xa1, 0xbe, 0x04,
+	0x56, 0xb4, 0x1b, 0xdd, 0x23, 0xce, 0x06, 0x95, 0x7f, 0xa5, 0xc1, 0xda, 0xf2, 0x87, 0x42, 0x9a,
+	0xca, 0xe6, 0x83, 0x6d, 0xfe, 0x2b, 0x58, 0x26, 0xfa, 0xef, 0x00, 0x09, 0x54, 0x99, 0xa0, 0x5f,
+	0x19, 0xe6, 0x00, 0x1e, 0x26, 0xba, 0x1b, 0x83, 0xa3, 0x17, 0x49, 0x3d, 0xa3, 0x7c, 0xda, 0x29,
+	0x5c, 0x24, 0x97, 0xbe, 0xa0, 0x0e, 0x2c, 0x31, 0xee, 0xf4, 0xa9, 0x90, 0x51, 0x71, 0x61, 0x5e,
+	0xd3, 0x89, 0xff, 0x59, 0xf6, 0xa6, 0x81, 0xe6, 0x66, 0x8d, 0x66, 0x3b, 0xeb, 0x03, 0x3d, 0x86,
+	0x34, 0x27, 0x47, 0xf1, 0x8b, 0x29, 0x31, 0x48, 0x30, 0x39, 0x92, 0x33, 0x2e, 0x34, 0x03, 0xfd,
+	0x1c, 0xc0, 0xf5, 0x44, 0x48, 0xa4, 0xd3, 0xa7, 0xdc, 0x1c, 0x76, 0xe2, 0x12, 0x1b, 0x63, 0xd4,
+	0x8c, 0x97, 0x29, 0x36, 0x7a, 0x06, 0x79, 0x87, 0xc4, 0x72, 0xcd, 0x5c, 0xfd, 0x8b, 0x61, 0xab,
+	0x66, 0x5c, 0x14, 0x95, 0x8b, 0x8b, 0xf3, 0xb5, 0x5c, 0x6c, 0xc1, 0x39, 0x87, 0x18, 0xf9, 0x3e,
+	0x83, 0x25, 0x49, 0xc4, 0x71, 0xd7, 0x8d, 0xd2, 0x59, 0x24, 0x93, 0x2b, 0x2a, 0x05, 0xf5, 0x8e,
+	0x35, 0x69, 0x2f, 0x3e, 0xce, 0x82, 0x9c, 0xb2, 0xa1, 0x5f, 0xc0, 0x32, 0x0d, 0x1c, 0x3e, 0xd2,
+	0x62, 0x8d, 0x67, 0x98, 0xbb, 0x7a, 0xb1, 0xcd, 0x31, 0x78, 0x66, 0xb1, 0x45, 0x7a, 0xc9, 0x5e,
+	0xf9, 0x6b, 0x0a, 0x20, 0x2a, 0xbe, 0x3e, 0xac, 0x00, 0x11, 0xa4, 0x5d, 0x22, 0x89, 0xd6, 0x5c,
+	0x01, 0xeb, 0x36, 0x7a, 0x02, 0x20, 0xe9, 0x20, 0x54, 0xa9, 0x37, 0xe8, 0x19, 0xd9, 0xbc, 0x2b,
+	0x1d, 0x4c, 0xa1, 0xd1, 0x26, 0x64, 0xcc, 0xbb, 0x36, 0x7d, 0x2d, 0xcf, 0x20, 0x2b, 0x7f, 0x48,
+	0x01, 0x44, 0xcb, 0xfc, 0x9f, 0x5e, 0x5b, 0xdd, 0x7e, 0xf3, 0xfd, 0xea, 0xdc, 0x5f, 0xbe, 0x5f,
+	0x9d, 0xfb, 0xcd, 0xc5, 0x6a, 0xea, 0xcd, 0xc5, 0x6a, 0xea, 0xcf, 0x17, 0xab, 0xa9, 0xbf, 0x5d,
+	0xac, 0xa6, 0x0e, 0x33, 0xba, 0x3e, 0xfa, 0xe1, 0xbf, 0x03, 0x00, 0x00, 0xff, 0xff, 0x32, 0x89,
+	0x54, 0x8a, 0x4d, 0x16, 0x00, 0x00,
 }
 }

+ 0 - 8
vendor/github.com/docker/swarmkit/api/specs.proto

@@ -333,14 +333,6 @@ message ContainerSpec {
 	//
 	//
 	// https://docs.docker.com/engine/reference/commandline/run/#configure-namespaced-kernel-parameters-sysctls-at-runtime
 	// https://docs.docker.com/engine/reference/commandline/run/#configure-namespaced-kernel-parameters-sysctls-at-runtime
 	map<string, string> sysctls = 26;
 	map<string, string> sysctls = 26;
-
-	// Swap limit equal to memory plus swap: '-1' to enable unlimited swap
-	int64 memory_swap = 27;
-
-	// Tune container memory swappiness (0 to 100) - if not specified, defaults
-	// to the container OS's default - generally 60, or the value predefined in
-	// the image; set to -1 to unset a previously set value
-	google.protobuf.Int64Value memory_swappiness = 28;
 }
 }
 
 
 // EndpointSpec defines the properties that can be configured to
 // EndpointSpec defines the properties that can be configured to

+ 528 - 411
vendor/github.com/docker/swarmkit/api/types.pb.go

@@ -8,6 +8,7 @@ import fmt "fmt"
 import math "math"
 import math "math"
 import google_protobuf "github.com/gogo/protobuf/types"
 import google_protobuf "github.com/gogo/protobuf/types"
 import google_protobuf1 "github.com/gogo/protobuf/types"
 import google_protobuf1 "github.com/gogo/protobuf/types"
+import google_protobuf2 "github.com/gogo/protobuf/types"
 import _ "github.com/gogo/protobuf/gogoproto"
 import _ "github.com/gogo/protobuf/gogoproto"
 
 
 import os "os"
 import os "os"
@@ -804,6 +805,15 @@ func (*Resources) Descriptor() ([]byte, []int) { return fileDescriptorTypes, []i
 type ResourceRequirements struct {
 type ResourceRequirements struct {
 	Limits       *Resources `protobuf:"bytes,1,opt,name=limits" json:"limits,omitempty"`
 	Limits       *Resources `protobuf:"bytes,1,opt,name=limits" json:"limits,omitempty"`
 	Reservations *Resources `protobuf:"bytes,2,opt,name=reservations" json:"reservations,omitempty"`
 	Reservations *Resources `protobuf:"bytes,2,opt,name=reservations" json:"reservations,omitempty"`
+	// Amount of swap in bytes - can only be used together with a memory limit
+	// -1 means unlimited
+	// a null pointer indicates that the default behaviour of granting twice
+	// the memory is maintained
+	SwapBytes *google_protobuf2.Int64Value `protobuf:"bytes,3,opt,name=swap_bytes,json=swapBytes" json:"swap_bytes,omitempty"`
+	// Tune container memory swappiness (0 to 100) - if not specified, defaults
+	// to the container OS's default - generally 60, or the value predefined in
+	// the image; set to -1 to unset a previously set value
+	MemorySwappiness *google_protobuf2.Int64Value `protobuf:"bytes,4,opt,name=memory_swappiness,json=memorySwappiness" json:"memory_swappiness,omitempty"`
 }
 }
 
 
 func (m *ResourceRequirements) Reset()                    { *m = ResourceRequirements{} }
 func (m *ResourceRequirements) Reset()                    { *m = ResourceRequirements{} }
@@ -2445,6 +2455,14 @@ func (m *ResourceRequirements) CopyFrom(src interface{}) {
 		m.Reservations = &Resources{}
 		m.Reservations = &Resources{}
 		deepcopy.Copy(m.Reservations, o.Reservations)
 		deepcopy.Copy(m.Reservations, o.Reservations)
 	}
 	}
+	if o.SwapBytes != nil {
+		m.SwapBytes = &google_protobuf2.Int64Value{}
+		deepcopy.Copy(m.SwapBytes, o.SwapBytes)
+	}
+	if o.MemorySwappiness != nil {
+		m.MemorySwappiness = &google_protobuf2.Int64Value{}
+		deepcopy.Copy(m.MemorySwappiness, o.MemorySwappiness)
+	}
 }
 }
 
 
 func (m *Platform) Copy() *Platform {
 func (m *Platform) Copy() *Platform {
@@ -3934,6 +3952,26 @@ func (m *ResourceRequirements) MarshalTo(dAtA []byte) (int, error) {
 		}
 		}
 		i += n5
 		i += n5
 	}
 	}
+	if m.SwapBytes != nil {
+		dAtA[i] = 0x1a
+		i++
+		i = encodeVarintTypes(dAtA, i, uint64(m.SwapBytes.Size()))
+		n6, err := m.SwapBytes.MarshalTo(dAtA[i:])
+		if err != nil {
+			return 0, err
+		}
+		i += n6
+	}
+	if m.MemorySwappiness != nil {
+		dAtA[i] = 0x22
+		i++
+		i = encodeVarintTypes(dAtA, i, uint64(m.MemorySwappiness.Size()))
+		n7, err := m.MemorySwappiness.MarshalTo(dAtA[i:])
+		if err != nil {
+			return 0, err
+		}
+		i += n7
+	}
 	return i, nil
 	return i, nil
 }
 }
 
 
@@ -4075,41 +4113,41 @@ func (m *NodeDescription) MarshalTo(dAtA []byte) (int, error) {
 		dAtA[i] = 0x12
 		dAtA[i] = 0x12
 		i++
 		i++
 		i = encodeVarintTypes(dAtA, i, uint64(m.Platform.Size()))
 		i = encodeVarintTypes(dAtA, i, uint64(m.Platform.Size()))
-		n6, err := m.Platform.MarshalTo(dAtA[i:])
+		n8, err := m.Platform.MarshalTo(dAtA[i:])
 		if err != nil {
 		if err != nil {
 			return 0, err
 			return 0, err
 		}
 		}
-		i += n6
+		i += n8
 	}
 	}
 	if m.Resources != nil {
 	if m.Resources != nil {
 		dAtA[i] = 0x1a
 		dAtA[i] = 0x1a
 		i++
 		i++
 		i = encodeVarintTypes(dAtA, i, uint64(m.Resources.Size()))
 		i = encodeVarintTypes(dAtA, i, uint64(m.Resources.Size()))
-		n7, err := m.Resources.MarshalTo(dAtA[i:])
+		n9, err := m.Resources.MarshalTo(dAtA[i:])
 		if err != nil {
 		if err != nil {
 			return 0, err
 			return 0, err
 		}
 		}
-		i += n7
+		i += n9
 	}
 	}
 	if m.Engine != nil {
 	if m.Engine != nil {
 		dAtA[i] = 0x22
 		dAtA[i] = 0x22
 		i++
 		i++
 		i = encodeVarintTypes(dAtA, i, uint64(m.Engine.Size()))
 		i = encodeVarintTypes(dAtA, i, uint64(m.Engine.Size()))
-		n8, err := m.Engine.MarshalTo(dAtA[i:])
+		n10, err := m.Engine.MarshalTo(dAtA[i:])
 		if err != nil {
 		if err != nil {
 			return 0, err
 			return 0, err
 		}
 		}
-		i += n8
+		i += n10
 	}
 	}
 	if m.TLSInfo != nil {
 	if m.TLSInfo != nil {
 		dAtA[i] = 0x2a
 		dAtA[i] = 0x2a
 		i++
 		i++
 		i = encodeVarintTypes(dAtA, i, uint64(m.TLSInfo.Size()))
 		i = encodeVarintTypes(dAtA, i, uint64(m.TLSInfo.Size()))
-		n9, err := m.TLSInfo.MarshalTo(dAtA[i:])
+		n11, err := m.TLSInfo.MarshalTo(dAtA[i:])
 		if err != nil {
 		if err != nil {
 			return 0, err
 			return 0, err
 		}
 		}
-		i += n9
+		i += n11
 	}
 	}
 	if m.FIPS {
 	if m.FIPS {
 		dAtA[i] = 0x30
 		dAtA[i] = 0x30
@@ -4304,31 +4342,31 @@ func (m *Mount) MarshalTo(dAtA []byte) (int, error) {
 		dAtA[i] = 0x2a
 		dAtA[i] = 0x2a
 		i++
 		i++
 		i = encodeVarintTypes(dAtA, i, uint64(m.BindOptions.Size()))
 		i = encodeVarintTypes(dAtA, i, uint64(m.BindOptions.Size()))
-		n10, err := m.BindOptions.MarshalTo(dAtA[i:])
+		n12, err := m.BindOptions.MarshalTo(dAtA[i:])
 		if err != nil {
 		if err != nil {
 			return 0, err
 			return 0, err
 		}
 		}
-		i += n10
+		i += n12
 	}
 	}
 	if m.VolumeOptions != nil {
 	if m.VolumeOptions != nil {
 		dAtA[i] = 0x32
 		dAtA[i] = 0x32
 		i++
 		i++
 		i = encodeVarintTypes(dAtA, i, uint64(m.VolumeOptions.Size()))
 		i = encodeVarintTypes(dAtA, i, uint64(m.VolumeOptions.Size()))
-		n11, err := m.VolumeOptions.MarshalTo(dAtA[i:])
+		n13, err := m.VolumeOptions.MarshalTo(dAtA[i:])
 		if err != nil {
 		if err != nil {
 			return 0, err
 			return 0, err
 		}
 		}
-		i += n11
+		i += n13
 	}
 	}
 	if m.TmpfsOptions != nil {
 	if m.TmpfsOptions != nil {
 		dAtA[i] = 0x3a
 		dAtA[i] = 0x3a
 		i++
 		i++
 		i = encodeVarintTypes(dAtA, i, uint64(m.TmpfsOptions.Size()))
 		i = encodeVarintTypes(dAtA, i, uint64(m.TmpfsOptions.Size()))
-		n12, err := m.TmpfsOptions.MarshalTo(dAtA[i:])
+		n14, err := m.TmpfsOptions.MarshalTo(dAtA[i:])
 		if err != nil {
 		if err != nil {
 			return 0, err
 			return 0, err
 		}
 		}
-		i += n12
+		i += n14
 	}
 	}
 	if m.Consistency != 0 {
 	if m.Consistency != 0 {
 		dAtA[i] = 0x40
 		dAtA[i] = 0x40
@@ -4417,11 +4455,11 @@ func (m *Mount_VolumeOptions) MarshalTo(dAtA []byte) (int, error) {
 		dAtA[i] = 0x1a
 		dAtA[i] = 0x1a
 		i++
 		i++
 		i = encodeVarintTypes(dAtA, i, uint64(m.DriverConfig.Size()))
 		i = encodeVarintTypes(dAtA, i, uint64(m.DriverConfig.Size()))
-		n13, err := m.DriverConfig.MarshalTo(dAtA[i:])
+		n15, err := m.DriverConfig.MarshalTo(dAtA[i:])
 		if err != nil {
 		if err != nil {
 			return 0, err
 			return 0, err
 		}
 		}
-		i += n13
+		i += n15
 	}
 	}
 	return i, nil
 	return i, nil
 }
 }
@@ -4484,11 +4522,11 @@ func (m *RestartPolicy) MarshalTo(dAtA []byte) (int, error) {
 		dAtA[i] = 0x12
 		dAtA[i] = 0x12
 		i++
 		i++
 		i = encodeVarintTypes(dAtA, i, uint64(m.Delay.Size()))
 		i = encodeVarintTypes(dAtA, i, uint64(m.Delay.Size()))
-		n14, err := m.Delay.MarshalTo(dAtA[i:])
+		n16, err := m.Delay.MarshalTo(dAtA[i:])
 		if err != nil {
 		if err != nil {
 			return 0, err
 			return 0, err
 		}
 		}
-		i += n14
+		i += n16
 	}
 	}
 	if m.MaxAttempts != 0 {
 	if m.MaxAttempts != 0 {
 		dAtA[i] = 0x18
 		dAtA[i] = 0x18
@@ -4499,11 +4537,11 @@ func (m *RestartPolicy) MarshalTo(dAtA []byte) (int, error) {
 		dAtA[i] = 0x22
 		dAtA[i] = 0x22
 		i++
 		i++
 		i = encodeVarintTypes(dAtA, i, uint64(m.Window.Size()))
 		i = encodeVarintTypes(dAtA, i, uint64(m.Window.Size()))
-		n15, err := m.Window.MarshalTo(dAtA[i:])
+		n17, err := m.Window.MarshalTo(dAtA[i:])
 		if err != nil {
 		if err != nil {
 			return 0, err
 			return 0, err
 		}
 		}
-		i += n15
+		i += n17
 	}
 	}
 	return i, nil
 	return i, nil
 }
 }
@@ -4531,11 +4569,11 @@ func (m *UpdateConfig) MarshalTo(dAtA []byte) (int, error) {
 	dAtA[i] = 0x12
 	dAtA[i] = 0x12
 	i++
 	i++
 	i = encodeVarintTypes(dAtA, i, uint64(types.SizeOfStdDuration(m.Delay)))
 	i = encodeVarintTypes(dAtA, i, uint64(types.SizeOfStdDuration(m.Delay)))
-	n16, err := types.StdDurationMarshalTo(m.Delay, dAtA[i:])
+	n18, err := types.StdDurationMarshalTo(m.Delay, dAtA[i:])
 	if err != nil {
 	if err != nil {
 		return 0, err
 		return 0, err
 	}
 	}
-	i += n16
+	i += n18
 	if m.FailureAction != 0 {
 	if m.FailureAction != 0 {
 		dAtA[i] = 0x18
 		dAtA[i] = 0x18
 		i++
 		i++
@@ -4545,11 +4583,11 @@ func (m *UpdateConfig) MarshalTo(dAtA []byte) (int, error) {
 		dAtA[i] = 0x22
 		dAtA[i] = 0x22
 		i++
 		i++
 		i = encodeVarintTypes(dAtA, i, uint64(m.Monitor.Size()))
 		i = encodeVarintTypes(dAtA, i, uint64(m.Monitor.Size()))
-		n17, err := m.Monitor.MarshalTo(dAtA[i:])
+		n19, err := m.Monitor.MarshalTo(dAtA[i:])
 		if err != nil {
 		if err != nil {
 			return 0, err
 			return 0, err
 		}
 		}
-		i += n17
+		i += n19
 	}
 	}
 	if m.MaxFailureRatio != 0 {
 	if m.MaxFailureRatio != 0 {
 		dAtA[i] = 0x2d
 		dAtA[i] = 0x2d
@@ -4589,21 +4627,21 @@ func (m *UpdateStatus) MarshalTo(dAtA []byte) (int, error) {
 		dAtA[i] = 0x12
 		dAtA[i] = 0x12
 		i++
 		i++
 		i = encodeVarintTypes(dAtA, i, uint64(m.StartedAt.Size()))
 		i = encodeVarintTypes(dAtA, i, uint64(m.StartedAt.Size()))
-		n18, err := m.StartedAt.MarshalTo(dAtA[i:])
+		n20, err := m.StartedAt.MarshalTo(dAtA[i:])
 		if err != nil {
 		if err != nil {
 			return 0, err
 			return 0, err
 		}
 		}
-		i += n18
+		i += n20
 	}
 	}
 	if m.CompletedAt != nil {
 	if m.CompletedAt != nil {
 		dAtA[i] = 0x1a
 		dAtA[i] = 0x1a
 		i++
 		i++
 		i = encodeVarintTypes(dAtA, i, uint64(m.CompletedAt.Size()))
 		i = encodeVarintTypes(dAtA, i, uint64(m.CompletedAt.Size()))
-		n19, err := m.CompletedAt.MarshalTo(dAtA[i:])
+		n21, err := m.CompletedAt.MarshalTo(dAtA[i:])
 		if err != nil {
 		if err != nil {
 			return 0, err
 			return 0, err
 		}
 		}
-		i += n19
+		i += n21
 	}
 	}
 	if len(m.Message) > 0 {
 	if len(m.Message) > 0 {
 		dAtA[i] = 0x22
 		dAtA[i] = 0x22
@@ -4697,11 +4735,11 @@ func (m *TaskStatus) MarshalTo(dAtA []byte) (int, error) {
 		dAtA[i] = 0xa
 		dAtA[i] = 0xa
 		i++
 		i++
 		i = encodeVarintTypes(dAtA, i, uint64(m.Timestamp.Size()))
 		i = encodeVarintTypes(dAtA, i, uint64(m.Timestamp.Size()))
-		n20, err := m.Timestamp.MarshalTo(dAtA[i:])
+		n22, err := m.Timestamp.MarshalTo(dAtA[i:])
 		if err != nil {
 		if err != nil {
 			return 0, err
 			return 0, err
 		}
 		}
-		i += n20
+		i += n22
 	}
 	}
 	if m.State != 0 {
 	if m.State != 0 {
 		dAtA[i] = 0x10
 		dAtA[i] = 0x10
@@ -4721,21 +4759,21 @@ func (m *TaskStatus) MarshalTo(dAtA []byte) (int, error) {
 		i += copy(dAtA[i:], m.Err)
 		i += copy(dAtA[i:], m.Err)
 	}
 	}
 	if m.RuntimeStatus != nil {
 	if m.RuntimeStatus != nil {
-		nn21, err := m.RuntimeStatus.MarshalTo(dAtA[i:])
+		nn23, err := m.RuntimeStatus.MarshalTo(dAtA[i:])
 		if err != nil {
 		if err != nil {
 			return 0, err
 			return 0, err
 		}
 		}
-		i += nn21
+		i += nn23
 	}
 	}
 	if m.PortStatus != nil {
 	if m.PortStatus != nil {
 		dAtA[i] = 0x32
 		dAtA[i] = 0x32
 		i++
 		i++
 		i = encodeVarintTypes(dAtA, i, uint64(m.PortStatus.Size()))
 		i = encodeVarintTypes(dAtA, i, uint64(m.PortStatus.Size()))
-		n22, err := m.PortStatus.MarshalTo(dAtA[i:])
+		n24, err := m.PortStatus.MarshalTo(dAtA[i:])
 		if err != nil {
 		if err != nil {
 			return 0, err
 			return 0, err
 		}
 		}
-		i += n22
+		i += n24
 	}
 	}
 	if len(m.AppliedBy) > 0 {
 	if len(m.AppliedBy) > 0 {
 		dAtA[i] = 0x3a
 		dAtA[i] = 0x3a
@@ -4747,11 +4785,11 @@ func (m *TaskStatus) MarshalTo(dAtA []byte) (int, error) {
 		dAtA[i] = 0x42
 		dAtA[i] = 0x42
 		i++
 		i++
 		i = encodeVarintTypes(dAtA, i, uint64(m.AppliedAt.Size()))
 		i = encodeVarintTypes(dAtA, i, uint64(m.AppliedAt.Size()))
-		n23, err := m.AppliedAt.MarshalTo(dAtA[i:])
+		n25, err := m.AppliedAt.MarshalTo(dAtA[i:])
 		if err != nil {
 		if err != nil {
 			return 0, err
 			return 0, err
 		}
 		}
-		i += n23
+		i += n25
 	}
 	}
 	return i, nil
 	return i, nil
 }
 }
@@ -4762,11 +4800,11 @@ func (m *TaskStatus_Container) MarshalTo(dAtA []byte) (int, error) {
 		dAtA[i] = 0x2a
 		dAtA[i] = 0x2a
 		i++
 		i++
 		i = encodeVarintTypes(dAtA, i, uint64(m.Container.Size()))
 		i = encodeVarintTypes(dAtA, i, uint64(m.Container.Size()))
-		n24, err := m.Container.MarshalTo(dAtA[i:])
+		n26, err := m.Container.MarshalTo(dAtA[i:])
 		if err != nil {
 		if err != nil {
 			return 0, err
 			return 0, err
 		}
 		}
-		i += n24
+		i += n26
 	}
 	}
 	return i, nil
 	return i, nil
 }
 }
@@ -5003,11 +5041,11 @@ func (m *IPAMOptions) MarshalTo(dAtA []byte) (int, error) {
 		dAtA[i] = 0xa
 		dAtA[i] = 0xa
 		i++
 		i++
 		i = encodeVarintTypes(dAtA, i, uint64(m.Driver.Size()))
 		i = encodeVarintTypes(dAtA, i, uint64(m.Driver.Size()))
-		n25, err := m.Driver.MarshalTo(dAtA[i:])
+		n27, err := m.Driver.MarshalTo(dAtA[i:])
 		if err != nil {
 		if err != nil {
 			return 0, err
 			return 0, err
 		}
 		}
-		i += n25
+		i += n27
 	}
 	}
 	if len(m.Configs) > 0 {
 	if len(m.Configs) > 0 {
 		for _, msg := range m.Configs {
 		for _, msg := range m.Configs {
@@ -5073,11 +5111,11 @@ func (m *WeightedPeer) MarshalTo(dAtA []byte) (int, error) {
 		dAtA[i] = 0xa
 		dAtA[i] = 0xa
 		i++
 		i++
 		i = encodeVarintTypes(dAtA, i, uint64(m.Peer.Size()))
 		i = encodeVarintTypes(dAtA, i, uint64(m.Peer.Size()))
-		n26, err := m.Peer.MarshalTo(dAtA[i:])
+		n28, err := m.Peer.MarshalTo(dAtA[i:])
 		if err != nil {
 		if err != nil {
 			return 0, err
 			return 0, err
 		}
 		}
-		i += n26
+		i += n28
 	}
 	}
 	if m.Weight != 0 {
 	if m.Weight != 0 {
 		dAtA[i] = 0x10
 		dAtA[i] = 0x10
@@ -5180,11 +5218,11 @@ func (m *AcceptancePolicy_RoleAdmissionPolicy) MarshalTo(dAtA []byte) (int, erro
 		dAtA[i] = 0x1a
 		dAtA[i] = 0x1a
 		i++
 		i++
 		i = encodeVarintTypes(dAtA, i, uint64(m.Secret.Size()))
 		i = encodeVarintTypes(dAtA, i, uint64(m.Secret.Size()))
-		n27, err := m.Secret.MarshalTo(dAtA[i:])
+		n29, err := m.Secret.MarshalTo(dAtA[i:])
 		if err != nil {
 		if err != nil {
 			return 0, err
 			return 0, err
 		}
 		}
-		i += n27
+		i += n29
 	}
 	}
 	return i, nil
 	return i, nil
 }
 }
@@ -5290,11 +5328,11 @@ func (m *CAConfig) MarshalTo(dAtA []byte) (int, error) {
 		dAtA[i] = 0xa
 		dAtA[i] = 0xa
 		i++
 		i++
 		i = encodeVarintTypes(dAtA, i, uint64(m.NodeCertExpiry.Size()))
 		i = encodeVarintTypes(dAtA, i, uint64(m.NodeCertExpiry.Size()))
-		n28, err := m.NodeCertExpiry.MarshalTo(dAtA[i:])
+		n30, err := m.NodeCertExpiry.MarshalTo(dAtA[i:])
 		if err != nil {
 		if err != nil {
 			return 0, err
 			return 0, err
 		}
 		}
-		i += n28
+		i += n30
 	}
 	}
 	if len(m.ExternalCAs) > 0 {
 	if len(m.ExternalCAs) > 0 {
 		for _, msg := range m.ExternalCAs {
 		for _, msg := range m.ExternalCAs {
@@ -5370,11 +5408,11 @@ func (m *TaskDefaults) MarshalTo(dAtA []byte) (int, error) {
 		dAtA[i] = 0xa
 		dAtA[i] = 0xa
 		i++
 		i++
 		i = encodeVarintTypes(dAtA, i, uint64(m.LogDriver.Size()))
 		i = encodeVarintTypes(dAtA, i, uint64(m.LogDriver.Size()))
-		n29, err := m.LogDriver.MarshalTo(dAtA[i:])
+		n31, err := m.LogDriver.MarshalTo(dAtA[i:])
 		if err != nil {
 		if err != nil {
 			return 0, err
 			return 0, err
 		}
 		}
-		i += n29
+		i += n31
 	}
 	}
 	return i, nil
 	return i, nil
 }
 }
@@ -5398,11 +5436,11 @@ func (m *DispatcherConfig) MarshalTo(dAtA []byte) (int, error) {
 		dAtA[i] = 0xa
 		dAtA[i] = 0xa
 		i++
 		i++
 		i = encodeVarintTypes(dAtA, i, uint64(m.HeartbeatPeriod.Size()))
 		i = encodeVarintTypes(dAtA, i, uint64(m.HeartbeatPeriod.Size()))
-		n30, err := m.HeartbeatPeriod.MarshalTo(dAtA[i:])
+		n32, err := m.HeartbeatPeriod.MarshalTo(dAtA[i:])
 		if err != nil {
 		if err != nil {
 			return 0, err
 			return 0, err
 		}
 		}
-		i += n30
+		i += n32
 	}
 	}
 	return i, nil
 	return i, nil
 }
 }
@@ -5518,11 +5556,11 @@ func (m *PlacementPreference) MarshalTo(dAtA []byte) (int, error) {
 	var l int
 	var l int
 	_ = l
 	_ = l
 	if m.Preference != nil {
 	if m.Preference != nil {
-		nn31, err := m.Preference.MarshalTo(dAtA[i:])
+		nn33, err := m.Preference.MarshalTo(dAtA[i:])
 		if err != nil {
 		if err != nil {
 			return 0, err
 			return 0, err
 		}
 		}
-		i += nn31
+		i += nn33
 	}
 	}
 	return i, nil
 	return i, nil
 }
 }
@@ -5533,11 +5571,11 @@ func (m *PlacementPreference_Spread) MarshalTo(dAtA []byte) (int, error) {
 		dAtA[i] = 0xa
 		dAtA[i] = 0xa
 		i++
 		i++
 		i = encodeVarintTypes(dAtA, i, uint64(m.Spread.Size()))
 		i = encodeVarintTypes(dAtA, i, uint64(m.Spread.Size()))
-		n32, err := m.Spread.MarshalTo(dAtA[i:])
+		n34, err := m.Spread.MarshalTo(dAtA[i:])
 		if err != nil {
 		if err != nil {
 			return 0, err
 			return 0, err
 		}
 		}
-		i += n32
+		i += n34
 	}
 	}
 	return i, nil
 	return i, nil
 }
 }
@@ -5669,20 +5707,20 @@ func (m *RootCA) MarshalTo(dAtA []byte) (int, error) {
 	dAtA[i] = 0x22
 	dAtA[i] = 0x22
 	i++
 	i++
 	i = encodeVarintTypes(dAtA, i, uint64(m.JoinTokens.Size()))
 	i = encodeVarintTypes(dAtA, i, uint64(m.JoinTokens.Size()))
-	n33, err := m.JoinTokens.MarshalTo(dAtA[i:])
+	n35, err := m.JoinTokens.MarshalTo(dAtA[i:])
 	if err != nil {
 	if err != nil {
 		return 0, err
 		return 0, err
 	}
 	}
-	i += n33
+	i += n35
 	if m.RootRotation != nil {
 	if m.RootRotation != nil {
 		dAtA[i] = 0x2a
 		dAtA[i] = 0x2a
 		i++
 		i++
 		i = encodeVarintTypes(dAtA, i, uint64(m.RootRotation.Size()))
 		i = encodeVarintTypes(dAtA, i, uint64(m.RootRotation.Size()))
-		n34, err := m.RootRotation.MarshalTo(dAtA[i:])
+		n36, err := m.RootRotation.MarshalTo(dAtA[i:])
 		if err != nil {
 		if err != nil {
 			return 0, err
 			return 0, err
 		}
 		}
-		i += n34
+		i += n36
 	}
 	}
 	if m.LastForcedRotation != 0 {
 	if m.LastForcedRotation != 0 {
 		dAtA[i] = 0x30
 		dAtA[i] = 0x30
@@ -5721,11 +5759,11 @@ func (m *Certificate) MarshalTo(dAtA []byte) (int, error) {
 	dAtA[i] = 0x1a
 	dAtA[i] = 0x1a
 	i++
 	i++
 	i = encodeVarintTypes(dAtA, i, uint64(m.Status.Size()))
 	i = encodeVarintTypes(dAtA, i, uint64(m.Status.Size()))
-	n35, err := m.Status.MarshalTo(dAtA[i:])
+	n37, err := m.Status.MarshalTo(dAtA[i:])
 	if err != nil {
 	if err != nil {
 		return 0, err
 		return 0, err
 	}
 	}
-	i += n35
+	i += n37
 	if len(m.Certificate) > 0 {
 	if len(m.Certificate) > 0 {
 		dAtA[i] = 0x22
 		dAtA[i] = 0x22
 		i++
 		i++
@@ -5912,11 +5950,11 @@ func (m *SecretReference) MarshalTo(dAtA []byte) (int, error) {
 		i += copy(dAtA[i:], m.SecretName)
 		i += copy(dAtA[i:], m.SecretName)
 	}
 	}
 	if m.Target != nil {
 	if m.Target != nil {
-		nn36, err := m.Target.MarshalTo(dAtA[i:])
+		nn38, err := m.Target.MarshalTo(dAtA[i:])
 		if err != nil {
 		if err != nil {
 			return 0, err
 			return 0, err
 		}
 		}
-		i += nn36
+		i += nn38
 	}
 	}
 	return i, nil
 	return i, nil
 }
 }
@@ -5927,11 +5965,11 @@ func (m *SecretReference_File) MarshalTo(dAtA []byte) (int, error) {
 		dAtA[i] = 0x1a
 		dAtA[i] = 0x1a
 		i++
 		i++
 		i = encodeVarintTypes(dAtA, i, uint64(m.File.Size()))
 		i = encodeVarintTypes(dAtA, i, uint64(m.File.Size()))
-		n37, err := m.File.MarshalTo(dAtA[i:])
+		n39, err := m.File.MarshalTo(dAtA[i:])
 		if err != nil {
 		if err != nil {
 			return 0, err
 			return 0, err
 		}
 		}
-		i += n37
+		i += n39
 	}
 	}
 	return i, nil
 	return i, nil
 }
 }
@@ -5963,11 +6001,11 @@ func (m *ConfigReference) MarshalTo(dAtA []byte) (int, error) {
 		i += copy(dAtA[i:], m.ConfigName)
 		i += copy(dAtA[i:], m.ConfigName)
 	}
 	}
 	if m.Target != nil {
 	if m.Target != nil {
-		nn38, err := m.Target.MarshalTo(dAtA[i:])
+		nn40, err := m.Target.MarshalTo(dAtA[i:])
 		if err != nil {
 		if err != nil {
 			return 0, err
 			return 0, err
 		}
 		}
-		i += nn38
+		i += nn40
 	}
 	}
 	return i, nil
 	return i, nil
 }
 }
@@ -5978,11 +6016,11 @@ func (m *ConfigReference_File) MarshalTo(dAtA []byte) (int, error) {
 		dAtA[i] = 0x1a
 		dAtA[i] = 0x1a
 		i++
 		i++
 		i = encodeVarintTypes(dAtA, i, uint64(m.File.Size()))
 		i = encodeVarintTypes(dAtA, i, uint64(m.File.Size()))
-		n39, err := m.File.MarshalTo(dAtA[i:])
+		n41, err := m.File.MarshalTo(dAtA[i:])
 		if err != nil {
 		if err != nil {
 			return 0, err
 			return 0, err
 		}
 		}
-		i += n39
+		i += n41
 	}
 	}
 	return i, nil
 	return i, nil
 }
 }
@@ -5992,11 +6030,11 @@ func (m *ConfigReference_Runtime) MarshalTo(dAtA []byte) (int, error) {
 		dAtA[i] = 0x22
 		dAtA[i] = 0x22
 		i++
 		i++
 		i = encodeVarintTypes(dAtA, i, uint64(m.Runtime.Size()))
 		i = encodeVarintTypes(dAtA, i, uint64(m.Runtime.Size()))
-		n40, err := m.Runtime.MarshalTo(dAtA[i:])
+		n42, err := m.Runtime.MarshalTo(dAtA[i:])
 		if err != nil {
 		if err != nil {
 			return 0, err
 			return 0, err
 		}
 		}
-		i += n40
+		i += n42
 	}
 	}
 	return i, nil
 	return i, nil
 }
 }
@@ -6019,11 +6057,11 @@ func (m *BlacklistedCertificate) MarshalTo(dAtA []byte) (int, error) {
 		dAtA[i] = 0xa
 		dAtA[i] = 0xa
 		i++
 		i++
 		i = encodeVarintTypes(dAtA, i, uint64(m.Expiry.Size()))
 		i = encodeVarintTypes(dAtA, i, uint64(m.Expiry.Size()))
-		n41, err := m.Expiry.MarshalTo(dAtA[i:])
+		n43, err := m.Expiry.MarshalTo(dAtA[i:])
 		if err != nil {
 		if err != nil {
 			return 0, err
 			return 0, err
 		}
 		}
-		i += n41
+		i += n43
 	}
 	}
 	return i, nil
 	return i, nil
 }
 }
@@ -6062,21 +6100,21 @@ func (m *HealthConfig) MarshalTo(dAtA []byte) (int, error) {
 		dAtA[i] = 0x12
 		dAtA[i] = 0x12
 		i++
 		i++
 		i = encodeVarintTypes(dAtA, i, uint64(m.Interval.Size()))
 		i = encodeVarintTypes(dAtA, i, uint64(m.Interval.Size()))
-		n42, err := m.Interval.MarshalTo(dAtA[i:])
+		n44, err := m.Interval.MarshalTo(dAtA[i:])
 		if err != nil {
 		if err != nil {
 			return 0, err
 			return 0, err
 		}
 		}
-		i += n42
+		i += n44
 	}
 	}
 	if m.Timeout != nil {
 	if m.Timeout != nil {
 		dAtA[i] = 0x1a
 		dAtA[i] = 0x1a
 		i++
 		i++
 		i = encodeVarintTypes(dAtA, i, uint64(m.Timeout.Size()))
 		i = encodeVarintTypes(dAtA, i, uint64(m.Timeout.Size()))
-		n43, err := m.Timeout.MarshalTo(dAtA[i:])
+		n45, err := m.Timeout.MarshalTo(dAtA[i:])
 		if err != nil {
 		if err != nil {
 			return 0, err
 			return 0, err
 		}
 		}
-		i += n43
+		i += n45
 	}
 	}
 	if m.Retries != 0 {
 	if m.Retries != 0 {
 		dAtA[i] = 0x20
 		dAtA[i] = 0x20
@@ -6087,11 +6125,11 @@ func (m *HealthConfig) MarshalTo(dAtA []byte) (int, error) {
 		dAtA[i] = 0x2a
 		dAtA[i] = 0x2a
 		i++
 		i++
 		i = encodeVarintTypes(dAtA, i, uint64(m.StartPeriod.Size()))
 		i = encodeVarintTypes(dAtA, i, uint64(m.StartPeriod.Size()))
-		n44, err := m.StartPeriod.MarshalTo(dAtA[i:])
+		n46, err := m.StartPeriod.MarshalTo(dAtA[i:])
 		if err != nil {
 		if err != nil {
 			return 0, err
 			return 0, err
 		}
 		}
-		i += n44
+		i += n46
 	}
 	}
 	return i, nil
 	return i, nil
 }
 }
@@ -6186,21 +6224,21 @@ func (m *Privileges) MarshalTo(dAtA []byte) (int, error) {
 		dAtA[i] = 0xa
 		dAtA[i] = 0xa
 		i++
 		i++
 		i = encodeVarintTypes(dAtA, i, uint64(m.CredentialSpec.Size()))
 		i = encodeVarintTypes(dAtA, i, uint64(m.CredentialSpec.Size()))
-		n45, err := m.CredentialSpec.MarshalTo(dAtA[i:])
+		n47, err := m.CredentialSpec.MarshalTo(dAtA[i:])
 		if err != nil {
 		if err != nil {
 			return 0, err
 			return 0, err
 		}
 		}
-		i += n45
+		i += n47
 	}
 	}
 	if m.SELinuxContext != nil {
 	if m.SELinuxContext != nil {
 		dAtA[i] = 0x12
 		dAtA[i] = 0x12
 		i++
 		i++
 		i = encodeVarintTypes(dAtA, i, uint64(m.SELinuxContext.Size()))
 		i = encodeVarintTypes(dAtA, i, uint64(m.SELinuxContext.Size()))
-		n46, err := m.SELinuxContext.MarshalTo(dAtA[i:])
+		n48, err := m.SELinuxContext.MarshalTo(dAtA[i:])
 		if err != nil {
 		if err != nil {
 			return 0, err
 			return 0, err
 		}
 		}
-		i += n46
+		i += n48
 	}
 	}
 	return i, nil
 	return i, nil
 }
 }
@@ -6221,11 +6259,11 @@ func (m *Privileges_CredentialSpec) MarshalTo(dAtA []byte) (int, error) {
 	var l int
 	var l int
 	_ = l
 	_ = l
 	if m.Source != nil {
 	if m.Source != nil {
-		nn47, err := m.Source.MarshalTo(dAtA[i:])
+		nn49, err := m.Source.MarshalTo(dAtA[i:])
 		if err != nil {
 		if err != nil {
 			return 0, err
 			return 0, err
 		}
 		}
-		i += nn47
+		i += nn49
 	}
 	}
 	return i, nil
 	return i, nil
 }
 }
@@ -6446,6 +6484,14 @@ func (m *ResourceRequirements) Size() (n int) {
 		l = m.Reservations.Size()
 		l = m.Reservations.Size()
 		n += 1 + l + sovTypes(uint64(l))
 		n += 1 + l + sovTypes(uint64(l))
 	}
 	}
+	if m.SwapBytes != nil {
+		l = m.SwapBytes.Size()
+		n += 1 + l + sovTypes(uint64(l))
+	}
+	if m.MemorySwappiness != nil {
+		l = m.MemorySwappiness.Size()
+		n += 1 + l + sovTypes(uint64(l))
+	}
 	return n
 	return n
 }
 }
 
 
@@ -7635,6 +7681,8 @@ func (this *ResourceRequirements) String() string {
 	s := strings.Join([]string{`&ResourceRequirements{`,
 	s := strings.Join([]string{`&ResourceRequirements{`,
 		`Limits:` + strings.Replace(fmt.Sprintf("%v", this.Limits), "Resources", "Resources", 1) + `,`,
 		`Limits:` + strings.Replace(fmt.Sprintf("%v", this.Limits), "Resources", "Resources", 1) + `,`,
 		`Reservations:` + strings.Replace(fmt.Sprintf("%v", this.Reservations), "Resources", "Resources", 1) + `,`,
 		`Reservations:` + strings.Replace(fmt.Sprintf("%v", this.Reservations), "Resources", "Resources", 1) + `,`,
+		`SwapBytes:` + strings.Replace(fmt.Sprintf("%v", this.SwapBytes), "Int64Value", "google_protobuf2.Int64Value", 1) + `,`,
+		`MemorySwappiness:` + strings.Replace(fmt.Sprintf("%v", this.MemorySwappiness), "Int64Value", "google_protobuf2.Int64Value", 1) + `,`,
 		`}`,
 		`}`,
 	}, "")
 	}, "")
 	return s
 	return s
@@ -9391,6 +9439,72 @@ func (m *ResourceRequirements) Unmarshal(dAtA []byte) error {
 				return err
 				return err
 			}
 			}
 			iNdEx = postIndex
 			iNdEx = postIndex
+		case 3:
+			if wireType != 2 {
+				return fmt.Errorf("proto: wrong wireType = %d for field SwapBytes", 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.SwapBytes == nil {
+				m.SwapBytes = &google_protobuf2.Int64Value{}
+			}
+			if err := m.SwapBytes.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
+				return err
+			}
+			iNdEx = postIndex
+		case 4:
+			if wireType != 2 {
+				return fmt.Errorf("proto: wrong wireType = %d for field MemorySwappiness", 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.MemorySwappiness == nil {
+				m.MemorySwappiness = &google_protobuf2.Int64Value{}
+			}
+			if err := m.MemorySwappiness.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
+				return err
+			}
+			iNdEx = postIndex
 		default:
 		default:
 			iNdEx = preIndex
 			iNdEx = preIndex
 			skippy, err := skipTypes(dAtA[iNdEx:])
 			skippy, err := skipTypes(dAtA[iNdEx:])
@@ -17484,332 +17598,335 @@ var (
 func init() { proto.RegisterFile("github.com/docker/swarmkit/api/types.proto", fileDescriptorTypes) }
 func init() { proto.RegisterFile("github.com/docker/swarmkit/api/types.proto", fileDescriptorTypes) }
 
 
 var fileDescriptorTypes = []byte{
 var fileDescriptorTypes = []byte{
-	// 5218 bytes of a gzipped FileDescriptorProto
+	// 5274 bytes of a gzipped FileDescriptorProto
 	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xac, 0x5a, 0x4d, 0x70, 0x23, 0x49,
 	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xac, 0x5a, 0x4d, 0x70, 0x23, 0x49,
-	0x56, 0xb6, 0x64, 0x49, 0x96, 0x9e, 0x64, 0xbb, 0x3a, 0xdb, 0xdb, 0xe3, 0xd6, 0xf6, 0xd8, 0x9a,
-	0x9a, 0xe9, 0x9d, 0xd9, 0xde, 0x41, 0xfd, 0x37, 0xbb, 0xd1, 0x33, 0xc3, 0xec, 0x8c, 0x7e, 0xca,
-	0xb6, 0xb6, 0x6d, 0x49, 0x91, 0x92, 0xbb, 0x77, 0x89, 0x80, 0xa2, 0x5c, 0x95, 0x96, 0x6b, 0x5c,
-	0xaa, 0x14, 0x55, 0x25, 0xbb, 0xc5, 0x42, 0x30, 0x27, 0x20, 0x7c, 0x82, 0x0b, 0xec, 0x06, 0xe1,
-	0x08, 0x22, 0xe0, 0xc6, 0x81, 0x03, 0x07, 0x16, 0x4e, 0x43, 0x04, 0x41, 0x6c, 0x70, 0x81, 0x85,
-	0x08, 0xd8, 0x00, 0xc2, 0x30, 0x3e, 0x70, 0x23, 0xe0, 0x42, 0x70, 0xe1, 0x40, 0xe4, 0x4f, 0x95,
-	0xca, 0xea, 0xb2, 0x3d, 0xb3, 0xcb, 0xc5, 0x56, 0xbe, 0xf7, 0xbd, 0x97, 0x99, 0x2f, 0x33, 0x5f,
-	0xbe, 0xf7, 0xb2, 0xe0, 0xde, 0xc0, 0x0e, 0x0e, 0xc6, 0x7b, 0x55, 0x93, 0x0e, 0xef, 0x5b, 0xd4,
-	0x3c, 0x24, 0xde, 0x7d, 0xff, 0xd8, 0xf0, 0x86, 0x87, 0x76, 0x70, 0xdf, 0x18, 0xd9, 0xf7, 0x83,
-	0xc9, 0x88, 0xf8, 0xd5, 0x91, 0x47, 0x03, 0x8a, 0x90, 0x00, 0x54, 0x43, 0x40, 0xf5, 0xe8, 0x61,
-	0x79, 0x7d, 0x40, 0xe9, 0xc0, 0x21, 0xf7, 0x39, 0x62, 0x6f, 0xbc, 0x7f, 0x3f, 0xb0, 0x87, 0xc4,
-	0x0f, 0x8c, 0xe1, 0x48, 0x08, 0x95, 0xd7, 0x66, 0x01, 0xd6, 0xd8, 0x33, 0x02, 0x9b, 0xba, 0x92,
-	0xbf, 0x32, 0xa0, 0x03, 0xca, 0x7f, 0xde, 0x67, 0xbf, 0x04, 0x55, 0x5d, 0x87, 0x85, 0x67, 0xc4,
-	0xf3, 0x6d, 0xea, 0xa2, 0x15, 0xc8, 0xda, 0xae, 0x45, 0x5e, 0xac, 0xa6, 0x2a, 0xa9, 0xb7, 0x32,
-	0x58, 0x34, 0xd4, 0x07, 0x00, 0x2d, 0xf6, 0x43, 0x73, 0x03, 0x6f, 0x82, 0x14, 0x98, 0x3f, 0x24,
-	0x13, 0x8e, 0x28, 0x60, 0xf6, 0x93, 0x51, 0x8e, 0x0c, 0x67, 0x35, 0x2d, 0x28, 0x47, 0x86, 0xa3,
-	0x7e, 0x96, 0x82, 0x62, 0xcd, 0x75, 0x69, 0xc0, 0x7b, 0xf7, 0x11, 0x82, 0x8c, 0x6b, 0x0c, 0x89,
-	0x14, 0xe2, 0xbf, 0x51, 0x03, 0x72, 0x8e, 0xb1, 0x47, 0x1c, 0x7f, 0x35, 0x5d, 0x99, 0x7f, 0xab,
-	0xf8, 0xe8, 0x6b, 0xd5, 0x97, 0xa7, 0x5c, 0x8d, 0x29, 0xa9, 0x6e, 0x73, 0x34, 0x1f, 0x04, 0x96,
-	0xa2, 0xe8, 0x9b, 0xb0, 0x60, 0xbb, 0x96, 0x6d, 0x12, 0x7f, 0x35, 0xc3, 0xb5, 0xac, 0x25, 0x69,
-	0x99, 0x8e, 0xbe, 0x9e, 0xf9, 0xe1, 0xd9, 0xfa, 0x1c, 0x0e, 0x85, 0xca, 0xef, 0x42, 0x31, 0xa6,
-	0x36, 0x61, 0x6e, 0x2b, 0x90, 0x3d, 0x32, 0x9c, 0x31, 0x91, 0xb3, 0x13, 0x8d, 0xf7, 0xd2, 0x4f,
-	0x52, 0xea, 0x47, 0xb0, 0xd2, 0x36, 0x86, 0xc4, 0xda, 0x24, 0x2e, 0xf1, 0x6c, 0x13, 0x13, 0x9f,
-	0x8e, 0x3d, 0x93, 0xb0, 0xb9, 0x1e, 0xda, 0xae, 0x15, 0xce, 0x95, 0xfd, 0x4e, 0xd6, 0xa2, 0x36,
-	0xe0, 0x95, 0xa6, 0xed, 0x9b, 0x1e, 0x09, 0xc8, 0x17, 0x56, 0x32, 0x1f, 0x2a, 0x39, 0x4b, 0xc1,
-	0xf2, 0xac, 0xf4, 0xcf, 0xc1, 0x4d, 0x66, 0x62, 0x4b, 0xf7, 0x24, 0x45, 0xf7, 0x47, 0xc4, 0xe4,
-	0xca, 0x8a, 0x8f, 0xde, 0x4a, 0xb2, 0x50, 0xd2, 0x4c, 0xb6, 0xe6, 0xf0, 0x0d, 0xae, 0x26, 0x24,
-	0xf4, 0x46, 0xc4, 0x44, 0x26, 0xdc, 0xb2, 0xe4, 0xa0, 0x67, 0xd4, 0xa7, 0xb9, 0xfa, 0xc4, 0x65,
-	0xbc, 0x64, 0x9a, 0x5b, 0x73, 0x78, 0x25, 0x54, 0x16, 0xef, 0xa4, 0x0e, 0x90, 0x0f, 0x75, 0xab,
-	0xdf, 0x4b, 0x41, 0x21, 0x64, 0xfa, 0xe8, 0xab, 0x50, 0x70, 0x0d, 0x97, 0xea, 0xe6, 0x68, 0xec,
-	0xf3, 0x09, 0xcd, 0xd7, 0x4b, 0xe7, 0x67, 0xeb, 0xf9, 0xb6, 0xe1, 0xd2, 0x46, 0x77, 0xd7, 0xc7,
-	0x79, 0xc6, 0x6e, 0x8c, 0xc6, 0x3e, 0x7a, 0x0d, 0x4a, 0x43, 0x32, 0xa4, 0xde, 0x44, 0xdf, 0x9b,
-	0x04, 0xc4, 0x97, 0x66, 0x2b, 0x0a, 0x5a, 0x9d, 0x91, 0xd0, 0x07, 0xb0, 0x30, 0x10, 0x43, 0x5a,
-	0x9d, 0xe7, 0xdb, 0xe7, 0xf5, 0xa4, 0xd1, 0xcf, 0x8c, 0x1a, 0x87, 0x32, 0xea, 0x6f, 0xa5, 0x60,
-	0x25, 0xa2, 0x92, 0x5f, 0x1a, 0xdb, 0x1e, 0x19, 0x12, 0x37, 0xf0, 0xd1, 0xd7, 0x21, 0xe7, 0xd8,
-	0x43, 0x3b, 0xf0, 0xa5, 0xcd, 0x5f, 0x4d, 0x52, 0x1b, 0x4d, 0x0a, 0x4b, 0x30, 0xaa, 0x41, 0xc9,
-	0x23, 0x3e, 0xf1, 0x8e, 0xc4, 0x8e, 0x97, 0x16, 0xbd, 0x46, 0xf8, 0x82, 0x88, 0xba, 0x01, 0xf9,
-	0xae, 0x63, 0x04, 0xfb, 0xd4, 0x1b, 0x22, 0x15, 0x4a, 0x86, 0x67, 0x1e, 0xd8, 0x01, 0x31, 0x83,
-	0xb1, 0x17, 0x9e, 0xbe, 0x0b, 0x34, 0x74, 0x0b, 0xd2, 0x54, 0x74, 0x54, 0xa8, 0xe7, 0xce, 0xcf,
-	0xd6, 0xd3, 0x9d, 0x1e, 0x4e, 0x53, 0x5f, 0x7d, 0x1f, 0x6e, 0x74, 0x9d, 0xf1, 0xc0, 0x76, 0x9b,
-	0xc4, 0x37, 0x3d, 0x7b, 0xc4, 0xb4, 0xb3, 0x5d, 0xc9, 0x7c, 0x54, 0xb8, 0x2b, 0xd9, 0xef, 0xe8,
-	0x68, 0xa7, 0xa7, 0x47, 0x5b, 0xfd, 0x8d, 0x34, 0xdc, 0xd0, 0xdc, 0x81, 0xed, 0x92, 0xb8, 0xf4,
-	0x5d, 0x58, 0x22, 0x9c, 0xa8, 0x1f, 0x09, 0x77, 0x23, 0xf5, 0x2c, 0x0a, 0x6a, 0xe8, 0x83, 0x5a,
-	0x33, 0x7e, 0xe1, 0x61, 0xd2, 0xf4, 0x5f, 0xd2, 0x9e, 0xe8, 0x1d, 0x34, 0x58, 0x18, 0xf1, 0x49,
-	0xf8, 0x72, 0x79, 0xef, 0x26, 0xe9, 0x7a, 0x69, 0x9e, 0xa1, 0x93, 0x90, 0xb2, 0x3f, 0x8d, 0x93,
-	0xf8, 0xeb, 0x34, 0x2c, 0xb7, 0xa9, 0x75, 0xc1, 0x0e, 0x65, 0xc8, 0x1f, 0x50, 0x3f, 0x88, 0x39,
-	0xc4, 0xa8, 0x8d, 0x9e, 0x40, 0x7e, 0x24, 0x97, 0x4f, 0xae, 0xfe, 0x9d, 0xe4, 0x21, 0x0b, 0x0c,
-	0x8e, 0xd0, 0xe8, 0x7d, 0x28, 0x84, 0x47, 0x86, 0xcd, 0xf6, 0x73, 0x6c, 0x9c, 0x29, 0x1e, 0x7d,
-	0x00, 0x39, 0xb1, 0x08, 0xab, 0x19, 0x2e, 0x79, 0xf7, 0x73, 0xd9, 0x1c, 0x4b, 0x21, 0xb4, 0x09,
-	0xf9, 0xc0, 0xf1, 0x75, 0xdb, 0xdd, 0xa7, 0xab, 0x59, 0xae, 0x60, 0x3d, 0xd1, 0xc9, 0x50, 0x8b,
-	0xf4, 0xb7, 0x7b, 0x2d, 0x77, 0x9f, 0xd6, 0x8b, 0xe7, 0x67, 0xeb, 0x0b, 0xb2, 0x81, 0x17, 0x02,
-	0xc7, 0x67, 0x3f, 0xd0, 0x1d, 0xc8, 0xec, 0xdb, 0x23, 0x7f, 0x35, 0x57, 0x49, 0xbd, 0x95, 0xaf,
-	0xe7, 0xcf, 0xcf, 0xd6, 0x33, 0x1b, 0xad, 0x6e, 0x0f, 0x73, 0xaa, 0xfa, 0xdb, 0x29, 0x28, 0xc6,
-	0x74, 0xa0, 0x57, 0x01, 0x02, 0x6f, 0xec, 0x07, 0xba, 0x47, 0x69, 0xc0, 0x4d, 0x59, 0xc2, 0x05,
-	0x4e, 0xc1, 0x94, 0x06, 0xa8, 0x0a, 0x37, 0x4d, 0xe2, 0x05, 0xba, 0xed, 0xfb, 0x63, 0xe2, 0xe9,
-	0xfe, 0x78, 0xef, 0x63, 0x62, 0x06, 0xdc, 0xac, 0x25, 0x7c, 0x83, 0xb1, 0x5a, 0x9c, 0xd3, 0x13,
-	0x0c, 0xf4, 0x18, 0x6e, 0xc5, 0xf1, 0xa3, 0xf1, 0x9e, 0x63, 0x9b, 0x3a, 0x5b, 0xea, 0x79, 0x2e,
-	0x72, 0x73, 0x2a, 0xd2, 0xe5, 0xbc, 0xa7, 0x64, 0xa2, 0xfe, 0x38, 0x05, 0x0a, 0x36, 0xf6, 0x83,
-	0x1d, 0x32, 0xdc, 0x23, 0x5e, 0x2f, 0x30, 0x82, 0xb1, 0x8f, 0x6e, 0x41, 0xce, 0x21, 0x86, 0x45,
-	0x3c, 0x3e, 0xa8, 0x3c, 0x96, 0x2d, 0xb4, 0xcb, 0xce, 0xb7, 0x61, 0x1e, 0x18, 0x7b, 0xb6, 0x63,
-	0x07, 0x13, 0x3e, 0x94, 0xa5, 0xe4, 0x0d, 0x3e, 0xab, 0xb3, 0x8a, 0x63, 0x82, 0xf8, 0x82, 0x1a,
-	0xb4, 0x0a, 0x0b, 0x43, 0xe2, 0xfb, 0xc6, 0x80, 0xf0, 0x91, 0x16, 0x70, 0xd8, 0x54, 0xdf, 0x87,
-	0x52, 0x5c, 0x0e, 0x15, 0x61, 0x61, 0xb7, 0xfd, 0xb4, 0xdd, 0x79, 0xde, 0x56, 0xe6, 0xd0, 0x32,
-	0x14, 0x77, 0xdb, 0x58, 0xab, 0x35, 0xb6, 0x6a, 0xf5, 0x6d, 0x4d, 0x49, 0xa1, 0x45, 0x28, 0x4c,
-	0x9b, 0x69, 0xf5, 0x4f, 0x52, 0x00, 0xcc, 0xdc, 0x72, 0x52, 0xef, 0x41, 0xd6, 0x0f, 0x8c, 0x40,
-	0xec, 0xd9, 0xa5, 0x47, 0x6f, 0x5c, 0xb6, 0xc2, 0x72, 0xbc, 0xec, 0x1f, 0xc1, 0x42, 0x24, 0x3e,
-	0xc2, 0xf4, 0x85, 0x11, 0x32, 0xf7, 0x61, 0x58, 0x96, 0x27, 0x07, 0xce, 0x7f, 0xab, 0xef, 0x43,
-	0x96, 0x4b, 0x5f, 0x1c, 0x6e, 0x1e, 0x32, 0x4d, 0xf6, 0x2b, 0x85, 0x0a, 0x90, 0xc5, 0x5a, 0xad,
-	0xf9, 0x1d, 0x25, 0x8d, 0x14, 0x28, 0x35, 0x5b, 0xbd, 0x46, 0xa7, 0xdd, 0xd6, 0x1a, 0x7d, 0xad,
-	0xa9, 0xcc, 0xab, 0x77, 0x21, 0xdb, 0x1a, 0x32, 0xcd, 0x77, 0xd8, 0x81, 0xd8, 0x27, 0x1e, 0x71,
-	0xcd, 0xf0, 0x9c, 0x4d, 0x09, 0xea, 0x67, 0x25, 0xc8, 0xee, 0xd0, 0xb1, 0x1b, 0xa0, 0x47, 0x31,
-	0xa7, 0xb6, 0x94, 0x1c, 0x3f, 0x70, 0x60, 0xb5, 0x3f, 0x19, 0x11, 0xe9, 0xf4, 0x6e, 0x41, 0x4e,
-	0x1c, 0x1d, 0x39, 0x1d, 0xd9, 0x62, 0xf4, 0xc0, 0xf0, 0x06, 0x24, 0x90, 0xf3, 0x91, 0x2d, 0xf4,
-	0x16, 0xbb, 0xcf, 0x0c, 0x8b, 0xba, 0xce, 0x84, 0x9f, 0xb0, 0xbc, 0xb8, 0xb4, 0x30, 0x31, 0xac,
-	0x8e, 0xeb, 0x4c, 0x70, 0xc4, 0x45, 0x5b, 0x50, 0xda, 0xb3, 0x5d, 0x4b, 0xa7, 0x23, 0x71, 0x05,
-	0x64, 0x2f, 0x3f, 0x8f, 0x62, 0x54, 0x75, 0xdb, 0xb5, 0x3a, 0x02, 0x8c, 0x8b, 0x7b, 0xd3, 0x06,
-	0x6a, 0xc3, 0xd2, 0x11, 0x75, 0xc6, 0x43, 0x12, 0xe9, 0xca, 0x71, 0x5d, 0x6f, 0x5e, 0xae, 0xeb,
-	0x19, 0xc7, 0x87, 0xda, 0x16, 0x8f, 0xe2, 0x4d, 0xf4, 0x14, 0x16, 0x83, 0xe1, 0x68, 0xdf, 0x8f,
-	0xd4, 0x2d, 0x70, 0x75, 0x5f, 0xb9, 0xc2, 0x60, 0x0c, 0x1e, 0x6a, 0x2b, 0x05, 0xb1, 0x16, 0xda,
-	0x84, 0xa2, 0x49, 0x5d, 0xdf, 0xf6, 0x03, 0xe2, 0x9a, 0x93, 0xd5, 0x3c, 0xb7, 0xfd, 0x15, 0xb3,
-	0x6c, 0x4c, 0xc1, 0x38, 0x2e, 0x59, 0xfe, 0xc1, 0x3c, 0x14, 0x63, 0x26, 0x40, 0x3d, 0x28, 0x8e,
-	0x3c, 0x3a, 0x32, 0x06, 0xfc, 0x3e, 0x94, 0x8b, 0xfa, 0xf0, 0x73, 0x99, 0xaf, 0xda, 0x9d, 0x0a,
-	0xe2, 0xb8, 0x16, 0xf4, 0x0e, 0x94, 0x5c, 0xea, 0x7a, 0xc4, 0x1c, 0x7b, 0xbe, 0x7d, 0x24, 0x16,
-	0x3d, 0x5f, 0x57, 0xce, 0xcf, 0xd6, 0x4b, 0x6d, 0xea, 0xe2, 0x90, 0x8e, 0x2f, 0xa0, 0xd4, 0xd3,
-	0x34, 0x14, 0x63, 0x2a, 0xd1, 0x3d, 0xc8, 0xe3, 0x2e, 0x6e, 0x3d, 0xab, 0xf5, 0x35, 0x65, 0xae,
-	0x7c, 0xe7, 0xe4, 0xb4, 0xb2, 0xca, 0xc7, 0x10, 0xef, 0xb6, 0xeb, 0xd9, 0x47, 0x6c, 0xe7, 0xbf,
-	0x05, 0x0b, 0x21, 0x34, 0x55, 0xfe, 0xf2, 0xc9, 0x69, 0xe5, 0x95, 0x59, 0x68, 0x0c, 0x89, 0x7b,
-	0x5b, 0x35, 0xac, 0x35, 0x95, 0x74, 0x32, 0x12, 0xf7, 0x0e, 0x0c, 0x8f, 0x58, 0xe8, 0x2b, 0x90,
-	0x93, 0xc0, 0xf9, 0x72, 0xf9, 0xe4, 0xb4, 0x72, 0x6b, 0x16, 0x38, 0xc5, 0xe1, 0xde, 0x76, 0xed,
-	0x99, 0xa6, 0x64, 0x92, 0x71, 0xb8, 0xe7, 0x18, 0x47, 0x04, 0xbd, 0x01, 0x59, 0x01, 0xcb, 0x96,
-	0x6f, 0x9f, 0x9c, 0x56, 0xbe, 0xf4, 0x92, 0x3a, 0x86, 0x2a, 0xaf, 0xfe, 0xe6, 0x1f, 0xac, 0xcd,
-	0xfd, 0xf9, 0x1f, 0xae, 0x29, 0xb3, 0xec, 0xf2, 0xff, 0xa6, 0x60, 0xf1, 0xc2, 0x8e, 0x43, 0x2a,
-	0xe4, 0x5c, 0x6a, 0xd2, 0x91, 0xb8, 0x5c, 0xf3, 0x75, 0x38, 0x3f, 0x5b, 0xcf, 0xb5, 0x69, 0x83,
-	0x8e, 0x26, 0x58, 0x72, 0xd0, 0xd3, 0x99, 0xf0, 0xe0, 0xf1, 0xe7, 0xdc, 0xce, 0x89, 0x01, 0xc2,
-	0x87, 0xb0, 0x68, 0x79, 0xf6, 0x11, 0xf1, 0x74, 0x93, 0xba, 0xfb, 0xf6, 0x40, 0x5e, 0x9c, 0xe5,
-	0xc4, 0x18, 0x96, 0x03, 0x71, 0x49, 0x08, 0x34, 0x38, 0xfe, 0xa7, 0x08, 0x0d, 0xca, 0x23, 0x28,
-	0xc5, 0x0f, 0x08, 0xbb, 0xcd, 0x7c, 0xfb, 0x97, 0x89, 0x0c, 0x56, 0x79, 0x68, 0x8b, 0x0b, 0x8c,
-	0x22, 0x42, 0xd5, 0x37, 0x21, 0x33, 0xa4, 0x96, 0xd0, 0xb3, 0x58, 0xbf, 0xc9, 0x22, 0x94, 0x7f,
-	0x3a, 0x5b, 0x2f, 0x52, 0xbf, 0xba, 0x61, 0x3b, 0x64, 0x87, 0x5a, 0x04, 0x73, 0x00, 0xf3, 0xb5,
-	0xe1, 0x09, 0x95, 0xb7, 0x81, 0x6c, 0xaa, 0xdf, 0x4f, 0x41, 0x86, 0x39, 0x31, 0xf4, 0x65, 0xc8,
-	0xd4, 0x5b, 0xed, 0xa6, 0x32, 0x57, 0xbe, 0x71, 0x72, 0x5a, 0x59, 0xe4, 0xd6, 0x62, 0x0c, 0x76,
-	0x18, 0xd0, 0x3a, 0xe4, 0x9e, 0x75, 0xb6, 0x77, 0x77, 0xd8, 0xce, 0xbb, 0x79, 0x72, 0x5a, 0x59,
-	0x8e, 0xd8, 0xc2, 0x9e, 0xe8, 0x55, 0xc8, 0xf6, 0x77, 0xba, 0x1b, 0x3d, 0x25, 0x5d, 0x46, 0x27,
-	0xa7, 0x95, 0xa5, 0x88, 0xcf, 0xa7, 0x83, 0x5e, 0x83, 0x6c, 0xbb, 0xdb, 0xea, 0x6a, 0xca, 0x7c,
-	0xf9, 0xd6, 0xc9, 0x69, 0x05, 0x45, 0x6c, 0x9e, 0x63, 0x74, 0xed, 0x11, 0x29, 0xdf, 0x90, 0x7b,
-	0xa2, 0x10, 0xf1, 0xd4, 0x1f, 0xa5, 0xa0, 0x18, 0x3b, 0xe4, 0x6c, 0x5b, 0x37, 0xb5, 0x8d, 0xda,
-	0xee, 0x76, 0x5f, 0x99, 0x8b, 0x6d, 0xeb, 0x18, 0xa4, 0x49, 0xf6, 0x8d, 0xb1, 0xc3, 0x7c, 0x2b,
-	0x34, 0x3a, 0xed, 0x5e, 0xab, 0xd7, 0xd7, 0xda, 0x7d, 0x25, 0x55, 0x5e, 0x3d, 0x39, 0xad, 0xac,
-	0xcc, 0x82, 0x37, 0xc6, 0x8e, 0xc3, 0x36, 0x76, 0xa3, 0xd6, 0xd8, 0xe2, 0x27, 0x65, 0xba, 0xb1,
-	0x63, 0xa8, 0x86, 0x61, 0x1e, 0x10, 0x0b, 0xbd, 0x0d, 0x85, 0xa6, 0xb6, 0xad, 0x6d, 0xd6, 0xf8,
-	0x8d, 0x52, 0x7e, 0xf5, 0xe4, 0xb4, 0x72, 0xfb, 0xe5, 0xde, 0x1d, 0x32, 0x30, 0x02, 0x62, 0xcd,
-	0x6c, 0xf0, 0x18, 0x44, 0xfd, 0xef, 0x34, 0x2c, 0x62, 0x96, 0xa0, 0x7b, 0x41, 0x97, 0x3a, 0xb6,
-	0x39, 0x41, 0x5d, 0x28, 0x98, 0xd4, 0xb5, 0xec, 0x98, 0x6f, 0x7a, 0x74, 0x49, 0x90, 0x36, 0x95,
-	0x0a, 0x5b, 0x8d, 0x50, 0x12, 0x4f, 0x95, 0xa0, 0xfb, 0x90, 0xb5, 0x88, 0x63, 0x4c, 0x64, 0xb4,
-	0x78, 0xbb, 0x2a, 0x4a, 0x00, 0xd5, 0xb0, 0x04, 0x50, 0x6d, 0xca, 0x12, 0x00, 0x16, 0x38, 0x9e,
-	0x15, 0x19, 0x2f, 0x74, 0x23, 0x08, 0xc8, 0x70, 0x14, 0x88, 0x3d, 0x92, 0xc1, 0xc5, 0xa1, 0xf1,
-	0xa2, 0x26, 0x49, 0xe8, 0x21, 0xe4, 0x8e, 0x6d, 0xd7, 0xa2, 0xc7, 0x32, 0x1a, 0xbc, 0x42, 0xa9,
-	0x04, 0xaa, 0x27, 0x2c, 0x0c, 0x9a, 0x19, 0x26, 0xdb, 0x66, 0xed, 0x4e, 0x5b, 0x0b, 0xb7, 0x99,
-	0xe4, 0x77, 0xdc, 0x36, 0x75, 0x99, 0xf7, 0x80, 0x4e, 0x5b, 0xdf, 0xa8, 0xb5, 0xb6, 0x77, 0x31,
-	0xdb, 0x6a, 0x2b, 0x27, 0xa7, 0x15, 0x25, 0x82, 0x6c, 0x18, 0xb6, 0xc3, 0xd2, 0x93, 0xdb, 0x30,
-	0x5f, 0x6b, 0x7f, 0x47, 0x49, 0x97, 0x95, 0x93, 0xd3, 0x4a, 0x29, 0x62, 0xd7, 0xdc, 0xc9, 0xd4,
-	0xee, 0xb3, 0xfd, 0xaa, 0x7f, 0x33, 0x0f, 0xa5, 0xdd, 0x91, 0x65, 0x04, 0x44, 0x9c, 0x52, 0x54,
-	0x81, 0xe2, 0xc8, 0xf0, 0x0c, 0xc7, 0x21, 0x8e, 0xed, 0x0f, 0x65, 0x71, 0x23, 0x4e, 0x42, 0xef,
-	0x7e, 0x5e, 0x33, 0xd6, 0xf3, 0xec, 0xe4, 0x7d, 0xef, 0x5f, 0xd7, 0x53, 0xa1, 0x41, 0x77, 0x61,
-	0x69, 0x5f, 0x8c, 0x56, 0x37, 0x4c, 0xbe, 0xb0, 0xf3, 0x7c, 0x61, 0xab, 0x49, 0x0b, 0x1b, 0x1f,
-	0x56, 0x55, 0x4e, 0xb2, 0xc6, 0xa5, 0xf0, 0xe2, 0x7e, 0xbc, 0x89, 0x1e, 0xc3, 0xc2, 0x90, 0xba,
-	0x76, 0x40, 0xbd, 0xeb, 0x57, 0x21, 0x44, 0xa2, 0x7b, 0x70, 0x83, 0x2d, 0x6e, 0x38, 0x1e, 0xce,
-	0xe6, 0x21, 0x44, 0x1a, 0x2f, 0x0f, 0x8d, 0x17, 0xb2, 0x43, 0xcc, 0xc8, 0xa8, 0x0e, 0x59, 0xea,
-	0xb1, 0x18, 0x35, 0xc7, 0x87, 0xfb, 0xf6, 0xb5, 0xc3, 0x15, 0x8d, 0x0e, 0x93, 0xc1, 0x42, 0x54,
-	0xfd, 0x06, 0x2c, 0x5e, 0x98, 0x04, 0x0b, 0xcd, 0xba, 0xb5, 0xdd, 0x9e, 0xa6, 0xcc, 0xa1, 0x12,
-	0xe4, 0x1b, 0x9d, 0x76, 0xbf, 0xd5, 0xde, 0x65, 0xb1, 0x65, 0x09, 0xf2, 0xb8, 0xb3, 0xbd, 0x5d,
-	0xaf, 0x35, 0x9e, 0x2a, 0x69, 0xb5, 0x0a, 0xc5, 0x98, 0x36, 0xb4, 0x04, 0xd0, 0xeb, 0x77, 0xba,
-	0xfa, 0x46, 0x0b, 0xf7, 0xfa, 0x22, 0x32, 0xed, 0xf5, 0x6b, 0xb8, 0x2f, 0x09, 0x29, 0xf5, 0x3f,
-	0xd3, 0xe1, 0x8a, 0xca, 0x60, 0xb4, 0x7e, 0x31, 0x18, 0xbd, 0x62, 0xf0, 0x32, 0x1c, 0x9d, 0x36,
-	0xa2, 0xa0, 0xf4, 0x5d, 0x00, 0xbe, 0x71, 0x88, 0xa5, 0x1b, 0x81, 0x5c, 0xf8, 0xf2, 0x4b, 0x46,
-	0xee, 0x87, 0x35, 0x36, 0x5c, 0x90, 0xe8, 0x5a, 0x80, 0x3e, 0x80, 0x92, 0x49, 0x87, 0x23, 0x87,
-	0x48, 0xe1, 0xf9, 0x6b, 0x85, 0x8b, 0x11, 0xbe, 0x16, 0xc4, 0xc3, 0xe1, 0xcc, 0xc5, 0x80, 0xfd,
-	0xd7, 0x53, 0xa1, 0x65, 0x12, 0x22, 0xe0, 0x12, 0xe4, 0x77, 0xbb, 0xcd, 0x5a, 0xbf, 0xd5, 0xde,
-	0x54, 0x52, 0x08, 0x20, 0xc7, 0x4d, 0xdd, 0x54, 0xd2, 0x2c, 0x72, 0x6f, 0x74, 0x76, 0xba, 0xdb,
-	0x1a, 0xf7, 0x58, 0x68, 0x05, 0x94, 0xd0, 0xd8, 0x3a, 0x37, 0xa4, 0xd6, 0x54, 0x32, 0xe8, 0x26,
-	0x2c, 0x47, 0x54, 0x29, 0x99, 0x45, 0xb7, 0x00, 0x45, 0xc4, 0xa9, 0x8a, 0x9c, 0xfa, 0xab, 0xb0,
-	0xdc, 0xa0, 0x6e, 0x60, 0xd8, 0x6e, 0x94, 0xd5, 0x3c, 0x62, 0x93, 0x96, 0x24, 0xdd, 0x96, 0xb5,
-	0xa9, 0xfa, 0xf2, 0xf9, 0xd9, 0x7a, 0x31, 0x82, 0xb6, 0x9a, 0x3c, 0x3c, 0x93, 0x0d, 0x8b, 0x9d,
-	0xdf, 0x91, 0x6d, 0x71, 0xe3, 0x66, 0xeb, 0x0b, 0xe7, 0x67, 0xeb, 0xf3, 0xdd, 0x56, 0x13, 0x33,
-	0x1a, 0xfa, 0x32, 0x14, 0xc8, 0x0b, 0x3b, 0xd0, 0x4d, 0x76, 0xab, 0x31, 0x03, 0x66, 0x71, 0x9e,
-	0x11, 0x1a, 0xd4, 0x22, 0x6a, 0x1d, 0xa0, 0x4b, 0xbd, 0x40, 0xf6, 0xfc, 0x0e, 0x64, 0x47, 0xd4,
-	0xe3, 0xd5, 0x94, 0x4b, 0x6b, 0x7c, 0x0c, 0x2e, 0x36, 0x2a, 0x16, 0x60, 0xf5, 0xfb, 0xf3, 0x00,
-	0x7d, 0xc3, 0x3f, 0x94, 0x4a, 0x9e, 0x40, 0x21, 0xaa, 0x97, 0xca, 0xb2, 0xcc, 0x95, 0xab, 0x1d,
-	0x81, 0xd1, 0xe3, 0x70, 0xb3, 0x89, 0x7c, 0x2d, 0x31, 0xad, 0x0e, 0x3b, 0x4a, 0x4a, 0x79, 0x2e,
-	0x26, 0x65, 0x2c, 0x48, 0x20, 0x9e, 0x27, 0x57, 0x9e, 0xfd, 0x44, 0x0d, 0x7e, 0x2d, 0x08, 0xa3,
-	0xc9, 0x88, 0x3f, 0xb1, 0x10, 0x35, 0xb3, 0x22, 0x5b, 0x73, 0x78, 0x2a, 0x87, 0x3e, 0x84, 0x22,
-	0x9b, 0xb7, 0xee, 0x73, 0x9e, 0x0c, 0xf6, 0x2f, 0x35, 0x95, 0xd0, 0x80, 0x61, 0x34, 0xb5, 0xf2,
-	0xab, 0x00, 0xc6, 0x68, 0xe4, 0xd8, 0xc4, 0xd2, 0xf7, 0x26, 0x3c, 0xba, 0x2f, 0xe0, 0x82, 0xa4,
-	0xd4, 0x27, 0xec, 0xb8, 0x84, 0x6c, 0x23, 0xe0, 0x11, 0xfb, 0x35, 0x06, 0x94, 0xe8, 0x5a, 0x50,
-	0x57, 0x60, 0xc9, 0x1b, 0xbb, 0xcc, 0xa0, 0x72, 0x74, 0xea, 0x1f, 0xa7, 0xe1, 0x95, 0x36, 0x09,
-	0x8e, 0xa9, 0x77, 0x58, 0x0b, 0x02, 0xc3, 0x3c, 0x18, 0x12, 0x57, 0x2e, 0x5f, 0x2c, 0x89, 0x4a,
-	0x5d, 0x48, 0xa2, 0x56, 0x61, 0xc1, 0x70, 0x6c, 0xc3, 0x27, 0x22, 0xf4, 0x2b, 0xe0, 0xb0, 0xc9,
-	0x52, 0x3d, 0x96, 0x38, 0x12, 0xdf, 0x27, 0xa2, 0xd2, 0xc3, 0x06, 0x1e, 0x12, 0xd0, 0x77, 0xe1,
-	0x96, 0x0c, 0xf2, 0x8c, 0xa8, 0x2b, 0x96, 0xc4, 0x84, 0x25, 0x63, 0x2d, 0x31, 0x93, 0x4d, 0x1e,
-	0x9c, 0x8c, 0x02, 0xa7, 0xe4, 0xce, 0x28, 0x90, 0x31, 0xe5, 0x8a, 0x95, 0xc0, 0x2a, 0x6f, 0xc2,
-	0xed, 0x4b, 0x45, 0xbe, 0x50, 0x25, 0xe9, 0xef, 0xd3, 0x00, 0xad, 0x6e, 0x6d, 0x47, 0x1a, 0xa9,
-	0x09, 0xb9, 0x7d, 0x63, 0x68, 0x3b, 0x93, 0xab, 0x3c, 0xe0, 0x14, 0x5f, 0xad, 0x09, 0x73, 0x6c,
-	0x70, 0x19, 0x2c, 0x65, 0x79, 0x1e, 0x3b, 0xde, 0x73, 0x49, 0x10, 0xe5, 0xb1, 0xbc, 0xc5, 0x86,
-	0xe1, 0x19, 0x6e, 0xb4, 0x75, 0x45, 0x83, 0x2d, 0x00, 0x0b, 0x79, 0x8e, 0x8d, 0x49, 0xe8, 0xb6,
-	0x64, 0x13, 0x6d, 0xf1, 0x7a, 0x2d, 0xf1, 0x8e, 0x88, 0xb5, 0x9a, 0xe5, 0x46, 0xbd, 0x6e, 0x3c,
-	0x58, 0xc2, 0x85, 0xed, 0x22, 0xe9, 0xf2, 0xfb, 0x3c, 0x64, 0x9a, 0xb2, 0xbe, 0x90, 0x8d, 0x1e,
-	0xc0, 0xe2, 0x85, 0x79, 0xbe, 0x54, 0x40, 0x68, 0x75, 0x9f, 0xbd, 0xa3, 0x64, 0xe4, 0xaf, 0x6f,
-	0x28, 0x39, 0xf5, 0xaf, 0xe6, 0x85, 0xa3, 0x91, 0x56, 0x4d, 0x7e, 0xa7, 0xc8, 0xf3, 0xdd, 0x6d,
-	0x52, 0x47, 0x3a, 0x80, 0x37, 0xaf, 0xf6, 0x3f, 0x2c, 0x8f, 0xe4, 0x70, 0x1c, 0x09, 0xa2, 0x75,
-	0x28, 0x8a, 0x5d, 0xac, 0xb3, 0x03, 0xc7, 0xcd, 0xba, 0x88, 0x41, 0x90, 0x98, 0x24, 0xba, 0x0b,
-	0x4b, 0xbc, 0xe0, 0xe4, 0x1f, 0x10, 0x4b, 0x60, 0x32, 0x1c, 0xb3, 0x18, 0x51, 0x39, 0x6c, 0x07,
-	0x4a, 0x92, 0xa0, 0xf3, 0x6c, 0x20, 0xcb, 0x07, 0x74, 0xef, 0xba, 0x01, 0x09, 0x11, 0x9e, 0x24,
-	0x14, 0x47, 0xd3, 0x86, 0xfa, 0x8b, 0x90, 0x0f, 0x07, 0x8b, 0x56, 0x61, 0xbe, 0xdf, 0xe8, 0x2a,
-	0x73, 0xe5, 0xe5, 0x93, 0xd3, 0x4a, 0x31, 0x24, 0xf7, 0x1b, 0x5d, 0xc6, 0xd9, 0x6d, 0x76, 0x95,
-	0xd4, 0x45, 0xce, 0x6e, 0xb3, 0x8b, 0xca, 0x90, 0xe9, 0x35, 0xfa, 0xdd, 0x30, 0x3e, 0x0b, 0x59,
-	0x8c, 0x56, 0xce, 0xb0, 0xf8, 0x4c, 0xdd, 0x87, 0x62, 0xac, 0x77, 0xf4, 0x3a, 0x2c, 0xb4, 0xda,
-	0x9b, 0x58, 0xeb, 0xf5, 0x94, 0x39, 0x91, 0x1e, 0xc4, 0xb8, 0x2d, 0x77, 0xc0, 0xd6, 0x0e, 0xbd,
-	0x0a, 0x99, 0xad, 0x0e, 0xbb, 0xf7, 0x45, 0xfe, 0x11, 0x43, 0x6c, 0x51, 0x3f, 0x28, 0xdf, 0x94,
-	0x81, 0x5f, 0x5c, 0xb1, 0xfa, 0x7b, 0x29, 0xc8, 0x89, 0x83, 0x96, 0xb8, 0x88, 0xb5, 0x69, 0x52,
-	0x24, 0xd2, 0xc6, 0x37, 0x2f, 0x4f, 0xf1, 0xaa, 0x32, 0x23, 0x13, 0x5b, 0x33, 0x94, 0x2b, 0xbf,
-	0x07, 0xa5, 0x38, 0xe3, 0x0b, 0x6d, 0xcc, 0xef, 0x42, 0x91, 0xed, 0xfd, 0x30, 0xd5, 0x7b, 0x04,
-	0x39, 0xe1, 0x2c, 0xa2, 0x7b, 0xe8, 0xf2, 0x7c, 0x53, 0x22, 0xd1, 0x13, 0x58, 0x10, 0x39, 0x6a,
-	0x58, 0xcb, 0x5e, 0xbb, 0xfa, 0x84, 0xe1, 0x10, 0xae, 0x7e, 0x08, 0x99, 0x2e, 0x21, 0x1e, 0xb3,
-	0xbd, 0x4b, 0x2d, 0x32, 0xbd, 0xba, 0x65, 0x7a, 0x6d, 0x91, 0x56, 0x93, 0xa5, 0xd7, 0x16, 0x69,
-	0x59, 0x51, 0x3d, 0x2e, 0x1d, 0xab, 0xc7, 0xf5, 0xa1, 0xf4, 0x9c, 0xd8, 0x83, 0x83, 0x80, 0x58,
-	0x5c, 0xd1, 0xdb, 0x90, 0x19, 0x91, 0x68, 0xf0, 0xab, 0x89, 0x9b, 0x8f, 0x10, 0x0f, 0x73, 0x14,
-	0xf3, 0x31, 0xc7, 0x5c, 0x5a, 0x3e, 0xc0, 0xc8, 0x96, 0xfa, 0x77, 0x69, 0x58, 0x6a, 0xf9, 0xfe,
-	0xd8, 0x70, 0xcd, 0x30, 0xaa, 0xfb, 0xe6, 0xc5, 0xa8, 0x2e, 0xf1, 0xa5, 0xea, 0xa2, 0xc8, 0xc5,
-	0x32, 0xa3, 0xbc, 0x59, 0xd3, 0xd1, 0xcd, 0xaa, 0xfe, 0x47, 0x2a, 0xac, 0x25, 0xde, 0x8d, 0xb9,
-	0x02, 0x91, 0x23, 0xc6, 0x35, 0x91, 0x5d, 0xf7, 0xd0, 0xa5, 0xc7, 0x2e, 0xcb, 0x5e, 0xb1, 0xd6,
-	0xd6, 0x9e, 0x2b, 0x29, 0xb1, 0x3d, 0x2f, 0x80, 0x30, 0x71, 0xc9, 0x31, 0xd3, 0xd4, 0xd5, 0xda,
-	0x4d, 0x16, 0x85, 0xa5, 0x13, 0x34, 0x75, 0x89, 0x6b, 0xd9, 0xee, 0x00, 0xbd, 0x0e, 0xb9, 0x56,
-	0xaf, 0xb7, 0xcb, 0x53, 0xc8, 0x57, 0x4e, 0x4e, 0x2b, 0x37, 0x2f, 0xa0, 0x78, 0x1d, 0xd9, 0x62,
-	0x20, 0x96, 0x02, 0xb1, 0xf8, 0x2c, 0x01, 0xc4, 0x62, 0x6b, 0x01, 0xc2, 0x9d, 0x7e, 0xad, 0xaf,
-	0x29, 0xd9, 0x04, 0x10, 0xa6, 0xec, 0xaf, 0x3c, 0x6e, 0xff, 0x9c, 0x06, 0xa5, 0x66, 0x9a, 0x64,
-	0x14, 0x30, 0xbe, 0xcc, 0x3a, 0xfb, 0x90, 0x1f, 0xb1, 0x5f, 0x36, 0x09, 0x23, 0xa8, 0x27, 0x89,
-	0x6f, 0xad, 0x33, 0x72, 0x55, 0x4c, 0x1d, 0x52, 0xb3, 0x86, 0xb6, 0xef, 0xdb, 0xd4, 0x15, 0x34,
-	0x1c, 0x69, 0x2a, 0xff, 0x57, 0x0a, 0x6e, 0x26, 0x20, 0xd0, 0x03, 0xc8, 0x78, 0xd4, 0x09, 0xd7,
-	0xf0, 0xce, 0x65, 0x65, 0x62, 0x26, 0x8a, 0x39, 0x12, 0xad, 0x01, 0x18, 0xe3, 0x80, 0x1a, 0xbc,
-	0x7f, 0x51, 0x5c, 0xc3, 0x31, 0x0a, 0x7a, 0x0e, 0x39, 0x9f, 0x98, 0x1e, 0x09, 0xe3, 0xec, 0x0f,
-	0x7f, 0xd2, 0xd1, 0x57, 0x7b, 0x5c, 0x0d, 0x96, 0xea, 0xca, 0x55, 0xc8, 0x09, 0x0a, 0xdb, 0xf6,
-	0x96, 0x11, 0x18, 0xf2, 0x11, 0x81, 0xff, 0x66, 0xbb, 0xc9, 0x70, 0x06, 0xe1, 0x6e, 0x32, 0x9c,
-	0x81, 0xfa, 0x97, 0x69, 0x00, 0xed, 0x45, 0x40, 0x3c, 0xd7, 0x70, 0x1a, 0x35, 0xa4, 0xc5, 0x6e,
-	0x06, 0x31, 0xdb, 0xaf, 0x26, 0xbe, 0x9b, 0x44, 0x12, 0xd5, 0x46, 0x2d, 0xe1, 0x6e, 0xb8, 0x0d,
-	0xf3, 0x63, 0x4f, 0x3e, 0x9f, 0x8b, 0x18, 0x79, 0x17, 0x6f, 0x63, 0x46, 0x43, 0x5a, 0xbc, 0x96,
-	0x73, 0xe9, 0x23, 0x79, 0xac, 0x83, 0x44, 0xd7, 0xc5, 0x4e, 0xbe, 0x69, 0xe8, 0x26, 0x91, 0xb7,
-	0x4a, 0x49, 0x9c, 0xfc, 0x46, 0xad, 0x41, 0xbc, 0x00, 0xe7, 0x4c, 0x83, 0xfd, 0xff, 0xa9, 0xfc,
-	0xdb, 0xdb, 0x00, 0xd3, 0xa9, 0xa1, 0x35, 0xc8, 0x36, 0x36, 0x7a, 0xbd, 0x6d, 0x65, 0x4e, 0x38,
-	0xf0, 0x29, 0x8b, 0x93, 0xd5, 0x3f, 0x4b, 0x43, 0xbe, 0x51, 0x93, 0x57, 0x6e, 0x03, 0x14, 0xee,
-	0x95, 0xf8, 0xd3, 0x0b, 0x79, 0x31, 0xb2, 0xbd, 0x89, 0x74, 0x2c, 0x57, 0x24, 0xbc, 0x4b, 0x4c,
-	0x84, 0x8d, 0x5a, 0xe3, 0x02, 0x08, 0x43, 0x89, 0x48, 0x23, 0xe8, 0xa6, 0x11, 0xfa, 0xf8, 0xb5,
-	0xab, 0x8d, 0x25, 0x52, 0x97, 0x69, 0xdb, 0xc7, 0xc5, 0x50, 0x49, 0xc3, 0xf0, 0xd1, 0xbb, 0xb0,
-	0xec, 0xdb, 0x03, 0xd7, 0x76, 0x07, 0x7a, 0x68, 0x3c, 0xfe, 0x0e, 0x54, 0xbf, 0x71, 0x7e, 0xb6,
-	0xbe, 0xd8, 0x13, 0x2c, 0x69, 0xc3, 0x45, 0x89, 0x6c, 0x70, 0x53, 0xa2, 0x6f, 0xc0, 0x52, 0x4c,
-	0x94, 0x59, 0x51, 0x98, 0x9d, 0x57, 0x8c, 0x23, 0xc9, 0xa7, 0x64, 0x82, 0x4b, 0x91, 0xe0, 0x53,
-	0xc2, 0x6b, 0x33, 0xfb, 0xd4, 0x33, 0x89, 0xee, 0xf1, 0x33, 0xcd, 0x6f, 0xf7, 0x0c, 0x2e, 0x72,
-	0x9a, 0x38, 0xe6, 0xea, 0x33, 0xb8, 0xd9, 0xf1, 0xcc, 0x03, 0xe2, 0x07, 0xc2, 0x14, 0xd2, 0x8a,
-	0x1f, 0xc2, 0x9d, 0xc0, 0xf0, 0x0f, 0xf5, 0x03, 0xdb, 0x0f, 0xa8, 0x37, 0xd1, 0x3d, 0x12, 0x10,
-	0x97, 0xf1, 0x75, 0xfe, 0xb4, 0x2c, 0xcb, 0x89, 0xb7, 0x19, 0x66, 0x4b, 0x40, 0x70, 0x88, 0xd8,
-	0x66, 0x00, 0xb5, 0x05, 0x25, 0x96, 0xc2, 0xc8, 0xa2, 0x1a, 0x9b, 0x3d, 0x38, 0x74, 0xa0, 0x7f,
-	0xee, 0x6b, 0xaa, 0xe0, 0xd0, 0x81, 0xf8, 0xa9, 0x7e, 0x1b, 0x94, 0xa6, 0xed, 0x8f, 0x8c, 0xc0,
-	0x3c, 0x08, 0xeb, 0xa4, 0xa8, 0x09, 0xca, 0x01, 0x31, 0xbc, 0x60, 0x8f, 0x18, 0x81, 0x3e, 0x22,
-	0x9e, 0x4d, 0xad, 0xeb, 0x57, 0x79, 0x39, 0x12, 0xe9, 0x72, 0x09, 0xf5, 0x7f, 0x52, 0x00, 0xd8,
-	0xd8, 0x0f, 0xa3, 0xb5, 0xaf, 0xc1, 0x0d, 0xdf, 0x35, 0x46, 0xfe, 0x01, 0x0d, 0x74, 0xdb, 0x0d,
-	0x88, 0x77, 0x64, 0x38, 0xb2, 0xb8, 0xa3, 0x84, 0x8c, 0x96, 0xa4, 0xa3, 0xb7, 0x01, 0x1d, 0x12,
-	0x32, 0xd2, 0xa9, 0x63, 0xe9, 0x21, 0x53, 0x3c, 0x7c, 0x67, 0xb0, 0xc2, 0x38, 0x1d, 0xc7, 0xea,
-	0x85, 0x74, 0x54, 0x87, 0x35, 0x36, 0x7d, 0xe2, 0x06, 0x9e, 0x4d, 0x7c, 0x7d, 0x9f, 0x7a, 0xba,
-	0xef, 0xd0, 0x63, 0x7d, 0x9f, 0x3a, 0x0e, 0x3d, 0x26, 0x5e, 0x58, 0x37, 0x2b, 0x3b, 0x74, 0xa0,
-	0x09, 0xd0, 0x06, 0xf5, 0x7a, 0x0e, 0x3d, 0xde, 0x08, 0x11, 0x2c, 0xa4, 0x9b, 0xce, 0x39, 0xb0,
-	0xcd, 0xc3, 0x30, 0xa4, 0x8b, 0xa8, 0x7d, 0xdb, 0x3c, 0x44, 0xaf, 0xc3, 0x22, 0x71, 0x08, 0x2f,
-	0x9f, 0x08, 0x54, 0x96, 0xa3, 0x4a, 0x21, 0x91, 0x81, 0xd4, 0x8f, 0x40, 0xd1, 0x5c, 0xd3, 0x9b,
-	0x8c, 0x62, 0x6b, 0xfe, 0x36, 0x20, 0xe6, 0x24, 0x75, 0x87, 0x9a, 0x87, 0xfa, 0xd0, 0x70, 0x8d,
-	0x01, 0x1b, 0x97, 0x78, 0x71, 0x54, 0x18, 0x67, 0x9b, 0x9a, 0x87, 0x3b, 0x92, 0xae, 0xbe, 0x0b,
-	0xd0, 0x1b, 0x79, 0xc4, 0xb0, 0x3a, 0x2c, 0x9a, 0x60, 0xa6, 0xe3, 0x2d, 0xdd, 0x92, 0xef, 0xb9,
-	0xd4, 0x93, 0x47, 0x5d, 0x11, 0x8c, 0x66, 0x44, 0x57, 0x7f, 0x1e, 0x6e, 0x76, 0x1d, 0xc3, 0xe4,
-	0xdf, 0x36, 0x74, 0xa3, 0x27, 0x34, 0xf4, 0x04, 0x72, 0x02, 0x2a, 0x57, 0x32, 0xf1, 0xb8, 0x4d,
-	0xfb, 0xdc, 0x9a, 0xc3, 0x12, 0x5f, 0x2f, 0x01, 0x4c, 0xf5, 0xa8, 0xff, 0x98, 0x82, 0x42, 0xa4,
-	0x1f, 0x55, 0xc4, 0xcb, 0x50, 0xe0, 0x19, 0xb6, 0x2b, 0x33, 0xfe, 0x02, 0x8e, 0x93, 0x50, 0x0b,
-	0x8a, 0xa3, 0x48, 0xfa, 0xca, 0x78, 0x2e, 0x61, 0xd4, 0x38, 0x2e, 0x8b, 0xde, 0x83, 0x42, 0xf8,
-	0x80, 0x1e, 0x7a, 0xd8, 0xab, 0xdf, 0xdb, 0xa7, 0xf0, 0xb0, 0x90, 0xea, 0x91, 0x91, 0x63, 0x33,
-	0x9f, 0x93, 0x89, 0x0a, 0xa9, 0x58, 0x92, 0xd4, 0x6f, 0x02, 0x7c, 0x8b, 0xda, 0x6e, 0x9f, 0x1e,
-	0x12, 0x97, 0xbf, 0x0a, 0xb3, 0x94, 0x92, 0x84, 0x86, 0x96, 0x2d, 0x5e, 0x29, 0x10, 0xab, 0x14,
-	0x3d, 0x8e, 0x8a, 0xa6, 0xfa, 0x17, 0x69, 0xc8, 0x61, 0x4a, 0x83, 0x46, 0x0d, 0x55, 0x20, 0x27,
-	0x5d, 0x09, 0xbf, 0xa2, 0xea, 0x85, 0xf3, 0xb3, 0xf5, 0xac, 0xf0, 0x21, 0x59, 0x93, 0x3b, 0x8f,
-	0x98, 0x93, 0x4f, 0x5f, 0xe6, 0xe4, 0xd1, 0x03, 0x28, 0x49, 0x90, 0x7e, 0x60, 0xf8, 0x07, 0x22,
-	0xbf, 0xab, 0x2f, 0x9d, 0x9f, 0xad, 0x83, 0x40, 0x6e, 0x19, 0xfe, 0x01, 0x06, 0x81, 0x66, 0xbf,
-	0x91, 0x06, 0xc5, 0x8f, 0xa9, 0xed, 0xea, 0x01, 0x9f, 0x84, 0xac, 0x45, 0x26, 0x2e, 0xf5, 0x74,
-	0xaa, 0xf2, 0x03, 0x0a, 0xf8, 0x78, 0x3a, 0x79, 0x0d, 0x16, 0x3d, 0x4a, 0x03, 0xe1, 0xd9, 0x6c,
-	0xea, 0xca, 0x32, 0x47, 0x25, 0xb1, 0xfa, 0x4d, 0x69, 0x80, 0x25, 0x0e, 0x97, 0xbc, 0x58, 0x0b,
-	0x3d, 0x80, 0x15, 0xc7, 0xf0, 0x03, 0x9d, 0xbb, 0x44, 0x6b, 0xaa, 0x2d, 0xc7, 0x8d, 0x8f, 0x18,
-	0x6f, 0x83, 0xb3, 0x42, 0x09, 0xf5, 0x1f, 0x52, 0x50, 0x64, 0x93, 0xb1, 0xf7, 0x6d, 0x93, 0xc5,
-	0x81, 0x5f, 0x3c, 0x3c, 0xb9, 0x0d, 0xf3, 0xa6, 0xef, 0x49, 0xa3, 0xf2, 0xfb, 0xb9, 0xd1, 0xc3,
-	0x98, 0xd1, 0xd0, 0x47, 0x90, 0x93, 0xe5, 0x16, 0x11, 0x99, 0xa8, 0xd7, 0x47, 0xac, 0xd2, 0x36,
-	0x52, 0x8e, 0x6f, 0xf7, 0xe9, 0xe8, 0xc4, 0x3d, 0x81, 0xe3, 0x24, 0x74, 0x0b, 0xd2, 0xa6, 0x30,
-	0x97, 0xfc, 0x42, 0xa7, 0xd1, 0xc6, 0x69, 0xd3, 0x55, 0x7f, 0x94, 0x82, 0xc5, 0xa9, 0x4f, 0x60,
-	0x3b, 0xe0, 0x0e, 0x14, 0xfc, 0xf1, 0x9e, 0x3f, 0xf1, 0x03, 0x32, 0x0c, 0x5f, 0xbc, 0x23, 0x02,
-	0x6a, 0x41, 0xc1, 0x70, 0x06, 0xd4, 0xb3, 0x83, 0x83, 0xa1, 0x4c, 0x64, 0x93, 0xa3, 0x89, 0xb8,
-	0xce, 0x6a, 0x2d, 0x14, 0xc1, 0x53, 0xe9, 0x30, 0x34, 0x10, 0x9f, 0x45, 0xf0, 0xd0, 0xe0, 0x35,
-	0x28, 0x39, 0xc6, 0x90, 0xd7, 0x9f, 0x02, 0x7b, 0x48, 0xc2, 0xc3, 0x20, 0x69, 0x7d, 0x7b, 0x48,
-	0x54, 0x15, 0x0a, 0x91, 0x32, 0xb4, 0x0c, 0xc5, 0x9a, 0xd6, 0xd3, 0x1f, 0x3e, 0x7a, 0xa2, 0x6f,
-	0x36, 0x76, 0x94, 0x39, 0x19, 0xbe, 0xfe, 0x69, 0x0a, 0x16, 0xa5, 0xc7, 0x92, 0x29, 0xc1, 0xeb,
-	0xb0, 0xe0, 0x19, 0xfb, 0x41, 0x98, 0xb4, 0x64, 0xc4, 0xae, 0x66, 0x97, 0x00, 0x4b, 0x5a, 0x18,
-	0x2b, 0x39, 0x69, 0x89, 0x7d, 0x83, 0x31, 0x7f, 0xe5, 0x37, 0x18, 0x99, 0xff, 0x97, 0x6f, 0x30,
-	0xd4, 0x5f, 0x03, 0xd8, 0xb0, 0x1d, 0xd2, 0x17, 0xa5, 0xaa, 0xa4, 0x14, 0x94, 0x85, 0x79, 0xb2,
-	0x14, 0x1a, 0x86, 0x79, 0xad, 0x26, 0x66, 0x34, 0xc6, 0x1a, 0xd8, 0x96, 0x3c, 0x8c, 0x9c, 0xb5,
-	0xc9, 0x58, 0x03, 0xdb, 0x8a, 0x9e, 0xfd, 0x32, 0xd7, 0x3c, 0xfb, 0xa9, 0xcb, 0xb0, 0x88, 0x45,
-	0x8d, 0x4d, 0x8c, 0x41, 0x3d, 0x4d, 0xc1, 0xb2, 0x8c, 0x77, 0x23, 0x97, 0xfd, 0x55, 0x28, 0x88,
-	0xd0, 0x77, 0x9a, 0x04, 0xf2, 0x0f, 0x11, 0x04, 0xae, 0xd5, 0xc4, 0x79, 0xc1, 0x6e, 0x59, 0x68,
-	0x1d, 0x8a, 0x12, 0x1a, 0xfb, 0xbc, 0x0b, 0x04, 0xa9, 0xcd, 0xe6, 0xf3, 0x0e, 0x64, 0xf6, 0x6d,
-	0x87, 0xc8, 0x9d, 0x9f, 0xe8, 0x11, 0xa6, 0x16, 0xd9, 0x9a, 0xc3, 0x1c, 0x5d, 0xcf, 0x87, 0xc5,
-	0x3d, 0xf5, 0x5f, 0x52, 0xbc, 0xc4, 0xcc, 0x52, 0xd5, 0xf8, 0xf8, 0x44, 0xd6, 0x3a, 0x33, 0x3e,
-	0x81, 0x63, 0xe3, 0x13, 0x6c, 0x31, 0x3e, 0x09, 0x8d, 0x8f, 0x4f, 0x90, 0x7e, 0xf2, 0xf1, 0xa1,
-	0x0f, 0x60, 0x41, 0x96, 0x2a, 0xa5, 0xab, 0x7b, 0x2d, 0x71, 0x67, 0xc4, 0x2d, 0xbd, 0x35, 0x87,
-	0x43, 0x99, 0xd8, 0xf4, 0xb6, 0xe1, 0x56, 0xdd, 0x31, 0xcc, 0x43, 0xc7, 0xf6, 0x03, 0x62, 0xc5,
-	0x3d, 0xd0, 0x23, 0xc8, 0x5d, 0x88, 0x73, 0xaf, 0x2a, 0xa2, 0x4a, 0xa4, 0xfa, 0xef, 0x29, 0x28,
-	0x6d, 0x11, 0xc3, 0x09, 0x0e, 0xa6, 0x95, 0xaa, 0x80, 0xf8, 0x81, 0xbc, 0x1f, 0xf9, 0x6f, 0xf4,
-	0x75, 0xc8, 0x47, 0x61, 0xd0, 0xb5, 0xcf, 0x81, 0x11, 0x14, 0x3d, 0x86, 0x05, 0x36, 0x76, 0x3a,
-	0x0e, 0xf3, 0xab, 0xab, 0x5e, 0x9a, 0x24, 0x92, 0x5d, 0x5a, 0x1e, 0xe1, 0x71, 0x0f, 0xb7, 0x53,
-	0x16, 0x87, 0x4d, 0xf4, 0xb3, 0x50, 0xe2, 0x0f, 0x25, 0x61, 0x98, 0x97, 0xbd, 0x4e, 0x67, 0x51,
-	0xbc, 0x75, 0x8a, 0x10, 0xef, 0x8f, 0xd2, 0xb0, 0xb2, 0x63, 0x4c, 0xf6, 0x88, 0x74, 0x43, 0xc4,
-	0xc2, 0xc4, 0xa4, 0x9e, 0x85, 0xba, 0x71, 0xf7, 0x75, 0xc5, 0xd3, 0x69, 0x92, 0x70, 0xb2, 0x17,
-	0x0b, 0x73, 0xbe, 0x74, 0x2c, 0xe7, 0x5b, 0x81, 0xac, 0x4b, 0x5d, 0x93, 0x48, 0xdf, 0x26, 0x1a,
-	0xea, 0xef, 0xa4, 0xe2, 0xbe, 0xab, 0x1c, 0x3d, 0x6b, 0xf2, 0xa2, 0x57, 0x9b, 0x06, 0x51, 0x77,
-	0xe8, 0x23, 0x28, 0xf7, 0xb4, 0x06, 0xd6, 0xfa, 0xf5, 0xce, 0xb7, 0xf5, 0x5e, 0x6d, 0xbb, 0x57,
-	0x7b, 0xf4, 0x40, 0xef, 0x76, 0xb6, 0xbf, 0xf3, 0xf0, 0xf1, 0x83, 0xaf, 0x2b, 0xa9, 0x72, 0xe5,
-	0xe4, 0xb4, 0x72, 0xa7, 0x5d, 0x6b, 0x6c, 0x8b, 0x13, 0xb7, 0x47, 0x5f, 0xf4, 0x0c, 0xc7, 0x37,
-	0x1e, 0x3d, 0xe8, 0x52, 0x67, 0xc2, 0x30, 0xe8, 0x6b, 0x80, 0x36, 0x34, 0xdc, 0xd6, 0xfa, 0x7a,
-	0xe8, 0x20, 0x1b, 0xf5, 0x86, 0x92, 0x16, 0x99, 0xd4, 0x06, 0xf1, 0x5c, 0x12, 0xd4, 0xb4, 0xde,
-	0xc3, 0x47, 0x4f, 0x1a, 0xf5, 0x06, 0x3b, 0xe3, 0xa5, 0xf8, 0x6d, 0x19, 0x0f, 0x02, 0x52, 0x97,
-	0x06, 0x01, 0xd3, 0x58, 0x22, 0x7d, 0x49, 0x2c, 0xb1, 0x01, 0x2b, 0xa6, 0x47, 0x7d, 0x5f, 0x67,
-	0xe9, 0x09, 0xb1, 0x66, 0x12, 0xa0, 0x2f, 0x9d, 0x9f, 0xad, 0xdf, 0x68, 0x30, 0x7e, 0x8f, 0xb3,
-	0xa5, 0xfa, 0x1b, 0x66, 0x8c, 0xc4, 0x7b, 0x52, 0x7f, 0x30, 0xcf, 0x22, 0x3d, 0xfb, 0xc8, 0x76,
-	0xc8, 0x80, 0xf8, 0xe8, 0x19, 0x2c, 0x9b, 0x1e, 0xb1, 0x58, 0xde, 0x61, 0x38, 0xf1, 0x6f, 0x92,
-	0x7f, 0x26, 0x31, 0xe8, 0x8a, 0x04, 0xab, 0x8d, 0x48, 0xaa, 0x37, 0x22, 0x26, 0x5e, 0x32, 0x2f,
-	0xb4, 0xd1, 0xc7, 0xb0, 0xec, 0x13, 0xc7, 0x76, 0xc7, 0x2f, 0x74, 0x93, 0xba, 0x01, 0x79, 0x11,
-	0x3e, 0xe7, 0x5d, 0xa7, 0xb7, 0xa7, 0x6d, 0x33, 0xa9, 0x86, 0x10, 0xaa, 0xa3, 0xf3, 0xb3, 0xf5,
-	0xa5, 0x8b, 0x34, 0xbc, 0x24, 0x35, 0xcb, 0x76, 0xf9, 0x00, 0x96, 0x2e, 0x8e, 0x06, 0xad, 0x48,
-	0x47, 0xc3, 0xfd, 0x55, 0xe4, 0x48, 0xee, 0x40, 0xde, 0x23, 0x03, 0xdb, 0x0f, 0x3c, 0x61, 0x66,
-	0xc6, 0x89, 0x28, 0x68, 0x15, 0x72, 0xb1, 0x2f, 0x4e, 0x18, 0x4f, 0xb6, 0x99, 0x07, 0x11, 0x1f,
-	0x93, 0x95, 0x7f, 0x05, 0x66, 0xc6, 0xc2, 0x0e, 0x9d, 0x65, 0xfb, 0xc6, 0x9e, 0xec, 0x2c, 0x8f,
-	0xc3, 0x26, 0xdb, 0xcb, 0x63, 0x3f, 0x0a, 0x20, 0xf9, 0x6f, 0x46, 0xe3, 0x91, 0x8e, 0xfc, 0xb4,
-	0x8e, 0xc7, 0x32, 0xe1, 0x17, 0xbc, 0x99, 0xd8, 0x17, 0xbc, 0x2b, 0x90, 0x75, 0xc8, 0x11, 0x71,
-	0x44, 0x8c, 0x81, 0x45, 0xe3, 0xde, 0x03, 0x28, 0x85, 0x9f, 0x8a, 0xf2, 0x6f, 0x46, 0xf2, 0x90,
-	0xe9, 0xd7, 0x7a, 0x4f, 0x95, 0x39, 0x04, 0x90, 0x13, 0x7b, 0x5c, 0x3c, 0x42, 0x36, 0x3a, 0xed,
-	0x8d, 0xd6, 0xa6, 0x92, 0xbe, 0xf7, 0xbb, 0x19, 0x28, 0x44, 0xcf, 0x60, 0xec, 0x4e, 0x6b, 0x6b,
-	0xcf, 0xc3, 0x43, 0x12, 0xd1, 0xdb, 0xe4, 0x18, 0xbd, 0x36, 0x2d, 0xa0, 0x7d, 0x24, 0xde, 0xfd,
-	0x23, 0x76, 0x58, 0x3c, 0x7b, 0x03, 0xf2, 0xb5, 0x5e, 0xaf, 0xb5, 0xd9, 0xd6, 0x9a, 0xca, 0xa7,
-	0xa9, 0xf2, 0x97, 0x4e, 0x4e, 0x2b, 0x37, 0x22, 0x50, 0xcd, 0x17, 0xdb, 0x92, 0xa3, 0x1a, 0x0d,
-	0xad, 0xdb, 0xd7, 0x9a, 0xca, 0x27, 0xe9, 0x59, 0x14, 0x2f, 0x08, 0xf1, 0xef, 0x99, 0x0a, 0x5d,
-	0xac, 0x75, 0x6b, 0x98, 0x75, 0xf8, 0x69, 0x5a, 0xd4, 0xf5, 0xa6, 0x3d, 0x7a, 0x64, 0x64, 0x78,
-	0xac, 0xcf, 0xb5, 0xf0, 0xb3, 0xc2, 0x4f, 0xe6, 0xc5, 0x87, 0x2d, 0xd3, 0x37, 0x3d, 0x62, 0x58,
-	0x13, 0xd6, 0x1b, 0x7f, 0x4c, 0xe5, 0x6a, 0xe6, 0x67, 0x7a, 0xeb, 0x31, 0x1f, 0xc6, 0xb4, 0xa8,
-	0xb0, 0x80, 0x77, 0xdb, 0x6d, 0x06, 0xfa, 0x24, 0x33, 0x33, 0x3b, 0x3c, 0x76, 0x59, 0xb2, 0x8f,
-	0xee, 0x42, 0x3e, 0x7c, 0x6b, 0x55, 0x3e, 0xcd, 0xcc, 0x0c, 0xa8, 0x11, 0x3e, 0x14, 0xf3, 0x0e,
-	0xb7, 0x76, 0xfb, 0xfc, 0xab, 0xc7, 0x4f, 0xb2, 0xb3, 0x1d, 0x1e, 0x8c, 0x03, 0x8b, 0x1e, 0xbb,
-	0xec, 0x34, 0xcb, 0x12, 0xe2, 0xa7, 0x59, 0xe1, 0x25, 0x22, 0x8c, 0xac, 0x1f, 0xbe, 0x01, 0x79,
-	0xac, 0x7d, 0x4b, 0x7c, 0x20, 0xf9, 0x49, 0x6e, 0x46, 0x0f, 0x26, 0x1f, 0x13, 0x93, 0xf5, 0x56,
-	0x81, 0x1c, 0xd6, 0x76, 0x3a, 0xcf, 0x34, 0xe5, 0xf7, 0x73, 0x33, 0x7a, 0x30, 0x19, 0x52, 0xfe,
-	0xc1, 0x57, 0xbe, 0x83, 0xbb, 0x5b, 0x35, 0xbe, 0x28, 0xb3, 0x7a, 0x3a, 0xde, 0xe8, 0xc0, 0x70,
-	0x89, 0x35, 0xfd, 0xb8, 0x27, 0x62, 0xdd, 0xfb, 0x05, 0xc8, 0x87, 0x31, 0x35, 0x5a, 0x83, 0xdc,
-	0xf3, 0x0e, 0x7e, 0xaa, 0x61, 0x65, 0x4e, 0x58, 0x39, 0xe4, 0x3c, 0x17, 0xd9, 0x50, 0x05, 0x16,
-	0x76, 0x6a, 0xed, 0xda, 0xa6, 0x86, 0xc3, 0xfa, 0x7f, 0x08, 0x90, 0x81, 0x61, 0x59, 0x91, 0x1d,
-	0x44, 0x3a, 0xeb, 0xab, 0x3f, 0xfc, 0x6c, 0x6d, 0xee, 0xc7, 0x9f, 0xad, 0xcd, 0x7d, 0x72, 0xbe,
-	0x96, 0xfa, 0xe1, 0xf9, 0x5a, 0xea, 0x6f, 0xcf, 0xd7, 0x52, 0xff, 0x76, 0xbe, 0x96, 0xda, 0xcb,
-	0xf1, 0xeb, 0xe6, 0xf1, 0xff, 0x05, 0x00, 0x00, 0xff, 0xff, 0xb9, 0x62, 0x4d, 0x1b, 0x7b, 0x33,
-	0x00, 0x00,
+	0x56, 0xb6, 0x64, 0x49, 0x96, 0x9e, 0x64, 0xbb, 0x9c, 0xed, 0xed, 0x71, 0x6b, 0x7a, 0x6c, 0x4d,
+	0xcd, 0xcc, 0xce, 0x6c, 0xef, 0xa0, 0xfe, 0x9b, 0x9d, 0xe8, 0x99, 0x61, 0x76, 0x46, 0x7f, 0x6e,
+	0x6b, 0xdb, 0x96, 0x14, 0x29, 0xb9, 0x7b, 0x97, 0x08, 0x28, 0xca, 0x55, 0x69, 0xb9, 0xc6, 0xa5,
+	0xca, 0xa2, 0xaa, 0x64, 0xb7, 0x58, 0x08, 0xe6, 0x04, 0x84, 0x6f, 0x5c, 0x96, 0xdd, 0x20, 0x1c,
+	0x41, 0x04, 0xdc, 0x38, 0x70, 0xe0, 0xc0, 0xc2, 0x69, 0x88, 0x20, 0x88, 0x0d, 0x2e, 0xb0, 0x10,
+	0x01, 0x1b, 0x40, 0x18, 0xc6, 0x07, 0x6e, 0x04, 0x5c, 0x08, 0x2e, 0x1c, 0x88, 0xfc, 0xa9, 0x52,
+	0x59, 0x5d, 0xb6, 0x67, 0x76, 0xb9, 0xd8, 0xca, 0xf7, 0xbe, 0xf7, 0x32, 0xf3, 0x65, 0xe6, 0xcb,
+	0xf7, 0x5e, 0x16, 0xdc, 0x19, 0x5a, 0xc1, 0xc1, 0x78, 0xaf, 0x6a, 0xd0, 0xd1, 0x5d, 0x93, 0x1a,
+	0x87, 0xc4, 0xbb, 0xeb, 0x1f, 0xeb, 0xde, 0xe8, 0xd0, 0x0a, 0xee, 0xea, 0xae, 0x75, 0x37, 0x98,
+	0xb8, 0xc4, 0xaf, 0xba, 0x1e, 0x0d, 0x28, 0x42, 0x02, 0x50, 0x0d, 0x01, 0xd5, 0xa3, 0xfb, 0xe5,
+	0x8d, 0x21, 0xa5, 0x43, 0x9b, 0xdc, 0xe5, 0x88, 0xbd, 0xf1, 0xfe, 0xdd, 0xc0, 0x1a, 0x11, 0x3f,
+	0xd0, 0x47, 0xae, 0x10, 0x2a, 0xaf, 0xcf, 0x02, 0xcc, 0xb1, 0xa7, 0x07, 0x16, 0x75, 0x2e, 0xe3,
+	0x1f, 0x7b, 0xba, 0xeb, 0x12, 0x4f, 0x76, 0x5a, 0x5e, 0x1d, 0xd2, 0x21, 0xe5, 0x3f, 0xef, 0xb2,
+	0x5f, 0x82, 0xaa, 0x6e, 0xc0, 0xc2, 0x53, 0xe2, 0xf9, 0x16, 0x75, 0xd0, 0x2a, 0x64, 0x2d, 0xc7,
+	0x24, 0xcf, 0xd7, 0x52, 0x95, 0xd4, 0x5b, 0x19, 0x2c, 0x1a, 0xea, 0x3d, 0x80, 0x36, 0xfb, 0xd1,
+	0x72, 0x02, 0x6f, 0x82, 0x14, 0x98, 0x3f, 0x24, 0x13, 0x8e, 0x28, 0x60, 0xf6, 0x93, 0x51, 0x8e,
+	0x74, 0x7b, 0x2d, 0x2d, 0x28, 0x47, 0xba, 0xad, 0x7e, 0x9e, 0x82, 0x62, 0xcd, 0x71, 0x68, 0xc0,
+	0x47, 0xe7, 0x23, 0x04, 0x19, 0x47, 0x1f, 0x11, 0x29, 0xc4, 0x7f, 0xa3, 0x06, 0xe4, 0x6c, 0x7d,
+	0x8f, 0xd8, 0xfe, 0x5a, 0xba, 0x32, 0xff, 0x56, 0xf1, 0xc1, 0xd7, 0xab, 0x2f, 0x9a, 0xa4, 0x1a,
+	0x53, 0x52, 0xdd, 0xe6, 0x68, 0x3e, 0x08, 0x2c, 0x45, 0xd1, 0x37, 0x61, 0xc1, 0x72, 0x4c, 0xcb,
+	0x20, 0xfe, 0x5a, 0x86, 0x6b, 0x59, 0x4f, 0xd2, 0x32, 0x1d, 0x7d, 0x3d, 0xf3, 0xa3, 0xb3, 0x8d,
+	0x39, 0x1c, 0x0a, 0x95, 0xdf, 0x83, 0x62, 0x4c, 0x6d, 0xc2, 0xdc, 0x56, 0x21, 0x7b, 0xa4, 0xdb,
+	0x63, 0x22, 0x67, 0x27, 0x1a, 0xef, 0xa7, 0x1f, 0xa5, 0xd4, 0x8f, 0x61, 0xb5, 0xa3, 0x8f, 0x88,
+	0xf9, 0x98, 0x38, 0xc4, 0xb3, 0x0c, 0x4c, 0x7c, 0x3a, 0xf6, 0x0c, 0xc2, 0xe6, 0x7a, 0x68, 0x39,
+	0x66, 0x38, 0x57, 0xf6, 0x3b, 0x59, 0x8b, 0xda, 0x80, 0x97, 0x9a, 0x96, 0x6f, 0x78, 0x24, 0x20,
+	0x5f, 0x5a, 0xc9, 0x7c, 0xa8, 0xe4, 0x2c, 0x05, 0xcb, 0xb3, 0xd2, 0xbf, 0x00, 0x37, 0x98, 0x89,
+	0x4d, 0xcd, 0x93, 0x14, 0xcd, 0x77, 0x89, 0xc1, 0x95, 0x15, 0x1f, 0xbc, 0x95, 0x64, 0xa1, 0xa4,
+	0x99, 0x6c, 0xcd, 0xe1, 0x15, 0xae, 0x26, 0x24, 0xf4, 0x5d, 0x62, 0x20, 0x03, 0x6e, 0x9a, 0x72,
+	0xd0, 0x33, 0xea, 0xd3, 0x5c, 0x7d, 0xe2, 0x32, 0x5e, 0x32, 0xcd, 0xad, 0x39, 0xbc, 0x1a, 0x2a,
+	0x8b, 0x77, 0x52, 0x07, 0xc8, 0x87, 0xba, 0xd5, 0xef, 0xa7, 0xa0, 0x10, 0x32, 0x7d, 0xf4, 0x35,
+	0x28, 0x38, 0xba, 0x43, 0x35, 0xc3, 0x1d, 0xfb, 0x7c, 0x42, 0xf3, 0xf5, 0xd2, 0xf9, 0xd9, 0x46,
+	0xbe, 0xa3, 0x3b, 0xb4, 0xd1, 0xdb, 0xf5, 0x71, 0x9e, 0xb1, 0x1b, 0xee, 0xd8, 0x47, 0xaf, 0x42,
+	0x69, 0x44, 0x46, 0xd4, 0x9b, 0x68, 0x7b, 0x93, 0x80, 0xf8, 0xd2, 0x6c, 0x45, 0x41, 0xab, 0x33,
+	0x12, 0xfa, 0x10, 0x16, 0x86, 0x62, 0x48, 0x6b, 0xf3, 0x7c, 0xfb, 0xbc, 0x96, 0x34, 0xfa, 0x99,
+	0x51, 0xe3, 0x50, 0x46, 0xfd, 0x5e, 0x1a, 0x56, 0x23, 0x2a, 0xf9, 0x95, 0xb1, 0xe5, 0x91, 0x11,
+	0x71, 0x02, 0x1f, 0x7d, 0x03, 0x72, 0xb6, 0x35, 0xb2, 0x02, 0x5f, 0xda, 0xfc, 0x95, 0x24, 0xb5,
+	0xd1, 0xa4, 0xb0, 0x04, 0xa3, 0x1a, 0x94, 0x3c, 0xe2, 0x13, 0xef, 0x48, 0xec, 0x78, 0x69, 0xd1,
+	0x6b, 0x84, 0x2f, 0x88, 0xa0, 0xf7, 0x01, 0xfc, 0x63, 0xdd, 0x95, 0x53, 0x9e, 0xe7, 0x0a, 0x5e,
+	0xae, 0x0a, 0xbf, 0x50, 0x0d, 0xfd, 0x42, 0xb5, 0xed, 0x04, 0xef, 0xbe, 0xf3, 0x94, 0xed, 0x1f,
+	0x5c, 0x60, 0x70, 0x61, 0x8d, 0x2d, 0x58, 0x91, 0x06, 0x63, 0x34, 0xd7, 0x72, 0x88, 0xcf, 0x8e,
+	0xd5, 0xb5, 0x2a, 0x14, 0x21, 0xd5, 0x8f, 0x84, 0xd4, 0x4d, 0xc8, 0xf7, 0x6c, 0x3d, 0xd8, 0xa7,
+	0xde, 0x08, 0xa9, 0x50, 0xd2, 0x3d, 0xe3, 0xc0, 0x0a, 0x88, 0x11, 0x8c, 0xbd, 0xd0, 0x07, 0x5c,
+	0xa0, 0xa1, 0x9b, 0x90, 0xa6, 0x62, 0xba, 0x85, 0x7a, 0xee, 0xfc, 0x6c, 0x23, 0xdd, 0xed, 0xe3,
+	0x34, 0xf5, 0xd5, 0x0f, 0x60, 0xa5, 0x67, 0x8f, 0x87, 0x96, 0xd3, 0x24, 0xbe, 0xe1, 0x59, 0x2e,
+	0x9b, 0x23, 0x3b, 0x1b, 0xcc, 0x93, 0x86, 0x67, 0x83, 0xfd, 0x8e, 0x1c, 0x4c, 0x7a, 0xea, 0x60,
+	0xd4, 0xdf, 0x4a, 0xc3, 0x4a, 0xcb, 0x19, 0x5a, 0x0e, 0x89, 0x4b, 0xbf, 0x01, 0x4b, 0x84, 0x13,
+	0xb5, 0x23, 0xe1, 0xf4, 0xa4, 0x9e, 0x45, 0x41, 0x0d, 0x3d, 0x61, 0x7b, 0xc6, 0x3b, 0xdd, 0x4f,
+	0x5a, 0x84, 0x17, 0xb4, 0x27, 0xfa, 0xa8, 0x16, 0x2c, 0xb8, 0x7c, 0x12, 0xbe, 0xdc, 0x64, 0x6f,
+	0x24, 0xe9, 0x7a, 0x61, 0x9e, 0xa1, 0xab, 0x92, 0xb2, 0x3f, 0x8b, 0xab, 0xfa, 0xeb, 0x34, 0x2c,
+	0x77, 0xa8, 0x79, 0xc1, 0x0e, 0x65, 0xc8, 0x1f, 0x50, 0x3f, 0x88, 0xb9, 0xe5, 0xa8, 0x8d, 0x1e,
+	0x41, 0xde, 0x95, 0xcb, 0x27, 0xf7, 0xe0, 0xed, 0xe4, 0x21, 0x0b, 0x0c, 0x8e, 0xd0, 0xe8, 0x03,
+	0x28, 0x84, 0x07, 0x37, 0xdc, 0x7d, 0xd7, 0x6c, 0xdf, 0x29, 0x1e, 0x7d, 0x08, 0x39, 0xb1, 0x08,
+	0x72, 0xd3, 0xbd, 0xf1, 0x85, 0x6c, 0x8e, 0xa5, 0x10, 0x7a, 0x0c, 0xf9, 0xc0, 0xf6, 0x35, 0xcb,
+	0xd9, 0xa7, 0x6b, 0x59, 0xae, 0x60, 0x23, 0xd1, 0xd5, 0x51, 0x93, 0x0c, 0xb6, 0xfb, 0x6d, 0x67,
+	0x9f, 0xd6, 0x8b, 0xe7, 0x67, 0x1b, 0x0b, 0xb2, 0x81, 0x17, 0x02, 0xdb, 0x67, 0x3f, 0xd0, 0x6d,
+	0xc8, 0xec, 0x5b, 0xae, 0xbf, 0x96, 0xab, 0xa4, 0xde, 0xca, 0xd7, 0xf3, 0xe7, 0x67, 0x1b, 0x99,
+	0xcd, 0x76, 0xaf, 0x8f, 0x39, 0x55, 0xfd, 0x9d, 0x14, 0x14, 0x63, 0x3a, 0xd0, 0x2b, 0x00, 0x81,
+	0x37, 0xf6, 0x03, 0xcd, 0xa3, 0x34, 0xe0, 0xa6, 0x2c, 0xe1, 0x02, 0xa7, 0x60, 0x4a, 0x03, 0x54,
+	0x85, 0x1b, 0x06, 0xf1, 0x02, 0xcd, 0xf2, 0xfd, 0x31, 0xf1, 0x34, 0x7f, 0xbc, 0xf7, 0x09, 0x31,
+	0x02, 0x6e, 0xd6, 0x12, 0x5e, 0x61, 0xac, 0x36, 0xe7, 0xf4, 0x05, 0x03, 0x3d, 0x84, 0x9b, 0x71,
+	0xbc, 0x3b, 0xde, 0xb3, 0x2d, 0x43, 0x63, 0x4b, 0x3d, 0xcf, 0x45, 0x6e, 0x4c, 0x45, 0x7a, 0x9c,
+	0xf7, 0x84, 0x4c, 0xd4, 0x9f, 0xa4, 0x40, 0xc1, 0xfa, 0x7e, 0xb0, 0x43, 0x46, 0x7b, 0xc4, 0xeb,
+	0x07, 0x7a, 0x30, 0xf6, 0xd1, 0x4d, 0xc8, 0xd9, 0x44, 0x37, 0x89, 0xc7, 0x07, 0x95, 0xc7, 0xb2,
+	0x85, 0x76, 0x99, 0x97, 0xd1, 0x8d, 0x03, 0x7d, 0xcf, 0xb2, 0xad, 0x60, 0xc2, 0x87, 0xb2, 0x94,
+	0xbc, 0xc1, 0x67, 0x75, 0x56, 0x71, 0x4c, 0x10, 0x5f, 0x50, 0x83, 0xd6, 0x60, 0x61, 0x44, 0x7c,
+	0x5f, 0x1f, 0x12, 0x3e, 0xd2, 0x02, 0x0e, 0x9b, 0xea, 0x07, 0x50, 0x8a, 0xcb, 0xa1, 0x22, 0x2c,
+	0xec, 0x76, 0x9e, 0x74, 0xba, 0xcf, 0x3a, 0xca, 0x1c, 0x5a, 0x86, 0xe2, 0x6e, 0x07, 0xb7, 0x6a,
+	0x8d, 0xad, 0x5a, 0x7d, 0xbb, 0xa5, 0xa4, 0xd0, 0x22, 0x14, 0xa6, 0xcd, 0xb4, 0xfa, 0x27, 0x29,
+	0x00, 0x66, 0x6e, 0x39, 0xa9, 0xf7, 0x21, 0xeb, 0x07, 0x7a, 0x20, 0xf6, 0xec, 0xd2, 0x83, 0xd7,
+	0x2f, 0x5b, 0x61, 0x39, 0x5e, 0xf6, 0x8f, 0x60, 0x21, 0x12, 0x1f, 0x61, 0xfa, 0xc2, 0x08, 0x99,
+	0xfb, 0xd0, 0x4d, 0xd3, 0x93, 0x03, 0xe7, 0xbf, 0xd5, 0x0f, 0x20, 0xcb, 0xa5, 0x2f, 0x0e, 0x37,
+	0x0f, 0x99, 0x26, 0xfb, 0x95, 0x42, 0x05, 0xc8, 0xe2, 0x56, 0xad, 0xf9, 0x1d, 0x25, 0x8d, 0x14,
+	0x28, 0x35, 0xdb, 0xfd, 0x46, 0xb7, 0xd3, 0x69, 0x35, 0x06, 0xad, 0xa6, 0x32, 0xaf, 0xbe, 0x01,
+	0xd9, 0xf6, 0x88, 0x69, 0xbe, 0xcd, 0x0e, 0xc4, 0x3e, 0xf1, 0x88, 0x63, 0x84, 0xe7, 0x6c, 0x4a,
+	0x50, 0x3f, 0x2f, 0x41, 0x76, 0x87, 0x8e, 0x9d, 0x00, 0x3d, 0x88, 0x39, 0xb5, 0xa5, 0xe4, 0x28,
+	0x86, 0x03, 0xab, 0x83, 0x89, 0x4b, 0xa4, 0xd3, 0xbb, 0x09, 0x39, 0x71, 0x74, 0xe4, 0x74, 0x64,
+	0x8b, 0xd1, 0x03, 0xdd, 0x1b, 0x92, 0x40, 0xce, 0x47, 0xb6, 0xd0, 0x5b, 0xec, 0x56, 0xd5, 0x4d,
+	0xea, 0xd8, 0x13, 0x7e, 0xc2, 0xf2, 0xe2, 0xea, 0xc4, 0x44, 0x37, 0xbb, 0x8e, 0x3d, 0xc1, 0x11,
+	0x17, 0x6d, 0x41, 0x69, 0xcf, 0x72, 0x4c, 0x8d, 0xba, 0xe2, 0x22, 0xca, 0x5e, 0x7e, 0x1e, 0xc5,
+	0xa8, 0xea, 0x96, 0x63, 0x76, 0x05, 0x18, 0x17, 0xf7, 0xa6, 0x0d, 0xd4, 0x81, 0xa5, 0x23, 0x6a,
+	0x8f, 0x47, 0x24, 0xd2, 0x95, 0xe3, 0xba, 0xde, 0xbc, 0x5c, 0xd7, 0x53, 0x8e, 0x0f, 0xb5, 0x2d,
+	0x1e, 0xc5, 0x9b, 0xe8, 0x09, 0x2c, 0x06, 0x23, 0x77, 0xdf, 0x8f, 0xd4, 0x2d, 0x70, 0x75, 0x5f,
+	0xbd, 0xc2, 0x60, 0x0c, 0x1e, 0x6a, 0x2b, 0x05, 0xb1, 0x16, 0x7a, 0x0c, 0x45, 0x83, 0x3a, 0xbe,
+	0xe5, 0x07, 0xc4, 0x31, 0x26, 0x6b, 0x79, 0x6e, 0xfb, 0x2b, 0x66, 0xd9, 0x98, 0x82, 0x71, 0x5c,
+	0xb2, 0xfc, 0xc3, 0x79, 0x28, 0xc6, 0x4c, 0x80, 0xfa, 0x50, 0x74, 0x3d, 0xea, 0xea, 0x43, 0x7e,
+	0x2b, 0xcb, 0x45, 0xbd, 0xff, 0x85, 0xcc, 0x57, 0xed, 0x4d, 0x05, 0x71, 0x5c, 0x0b, 0x7a, 0x07,
+	0x4a, 0x0e, 0x75, 0x3c, 0x62, 0x8c, 0x3d, 0xdf, 0x3a, 0x12, 0x8b, 0x9e, 0xaf, 0x2b, 0xe7, 0x67,
+	0x1b, 0xa5, 0x0e, 0x75, 0x70, 0x48, 0xc7, 0x17, 0x50, 0xea, 0x69, 0x1a, 0x8a, 0x31, 0x95, 0xe8,
+	0x0e, 0xe4, 0x71, 0x0f, 0xb7, 0x9f, 0xd6, 0x06, 0x2d, 0x65, 0xae, 0x7c, 0xfb, 0xe4, 0xb4, 0xb2,
+	0xc6, 0xc7, 0x10, 0xef, 0xb6, 0xe7, 0x59, 0x47, 0x6c, 0xe7, 0xbf, 0x05, 0x0b, 0x21, 0x34, 0x55,
+	0x7e, 0xf9, 0xe4, 0xb4, 0xf2, 0xd2, 0x2c, 0x34, 0x86, 0xc4, 0xfd, 0xad, 0x1a, 0x6e, 0x35, 0x95,
+	0x74, 0x32, 0x12, 0xf7, 0x0f, 0x74, 0x8f, 0x98, 0xe8, 0xab, 0x90, 0x93, 0xc0, 0xf9, 0x72, 0xf9,
+	0xe4, 0xb4, 0x72, 0x73, 0x16, 0x38, 0xc5, 0xe1, 0xfe, 0x76, 0xed, 0x69, 0x4b, 0xc9, 0x24, 0xe3,
+	0x70, 0xdf, 0xd6, 0x8f, 0x08, 0x7a, 0x1d, 0xb2, 0x02, 0x96, 0x2d, 0xdf, 0x3a, 0x39, 0xad, 0x7c,
+	0xe5, 0x05, 0x75, 0x0c, 0x55, 0x5e, 0xfb, 0xed, 0x3f, 0x58, 0x9f, 0xfb, 0xf3, 0x3f, 0x5c, 0x57,
+	0x66, 0xd9, 0xe5, 0xff, 0x4d, 0xc1, 0xe2, 0x85, 0x1d, 0x87, 0x54, 0xc8, 0x39, 0xd4, 0xa0, 0xae,
+	0xb8, 0x5c, 0xf3, 0x75, 0x38, 0x3f, 0xdb, 0xc8, 0x75, 0x68, 0x83, 0xba, 0x13, 0x2c, 0x39, 0xe8,
+	0xc9, 0x4c, 0x78, 0xf0, 0xf0, 0x0b, 0x6e, 0xe7, 0xc4, 0x00, 0xe1, 0x23, 0x58, 0x34, 0x3d, 0xeb,
+	0x88, 0x78, 0x9a, 0x41, 0x9d, 0x7d, 0x6b, 0x28, 0x2f, 0xce, 0x72, 0x62, 0x24, 0xcd, 0x81, 0xb8,
+	0x24, 0x04, 0x1a, 0x1c, 0xff, 0x33, 0x84, 0x06, 0x65, 0x17, 0x4a, 0xf1, 0x03, 0xc2, 0x6e, 0x33,
+	0xdf, 0xfa, 0x55, 0x22, 0xe3, 0x47, 0x1e, 0x60, 0xe3, 0x02, 0xa3, 0x88, 0x10, 0xf1, 0x4d, 0xc8,
+	0x8c, 0xa8, 0x29, 0xf4, 0x2c, 0xd6, 0x6f, 0xb0, 0x08, 0xe5, 0x9f, 0xce, 0x36, 0x8a, 0xd4, 0xaf,
+	0x6e, 0x5a, 0x36, 0xd9, 0xa1, 0x26, 0xc1, 0x1c, 0xc0, 0x7c, 0x6d, 0x78, 0x42, 0xe5, 0x6d, 0x20,
+	0x9b, 0xea, 0x0f, 0x52, 0x90, 0x61, 0x4e, 0x0c, 0xbd, 0x0c, 0x99, 0x7a, 0xbb, 0xd3, 0x54, 0xe6,
+	0xca, 0x2b, 0x27, 0xa7, 0x95, 0x45, 0x6e, 0x2d, 0xc6, 0x60, 0x87, 0x01, 0x6d, 0x40, 0xee, 0x69,
+	0x77, 0x7b, 0x77, 0x87, 0xed, 0xbc, 0x1b, 0x27, 0xa7, 0x95, 0xe5, 0x88, 0x2d, 0xec, 0x89, 0x5e,
+	0x81, 0xec, 0x60, 0xa7, 0xb7, 0xd9, 0x57, 0xd2, 0x65, 0x74, 0x72, 0x5a, 0x59, 0x8a, 0xf8, 0x7c,
+	0x3a, 0xe8, 0x55, 0xc8, 0x76, 0x7a, 0xed, 0x5e, 0x4b, 0x99, 0x2f, 0xdf, 0x3c, 0x39, 0xad, 0xa0,
+	0x88, 0xcd, 0x33, 0x9d, 0x9e, 0xe5, 0x92, 0xf2, 0x8a, 0xdc, 0x13, 0x85, 0x88, 0xa7, 0xfe, 0x38,
+	0x05, 0xc5, 0xd8, 0x21, 0x67, 0xdb, 0xba, 0xd9, 0xda, 0xac, 0xed, 0x6e, 0x0f, 0x94, 0xb9, 0xd8,
+	0xb6, 0x8e, 0x41, 0x9a, 0x64, 0x5f, 0x1f, 0xdb, 0xcc, 0xb7, 0x42, 0xa3, 0xdb, 0xe9, 0xb7, 0xfb,
+	0x83, 0x56, 0x67, 0xa0, 0xa4, 0xca, 0x6b, 0x27, 0xa7, 0x95, 0xd5, 0x59, 0xf0, 0xe6, 0xd8, 0xb6,
+	0xd9, 0xc6, 0x6e, 0xd4, 0x1a, 0x5b, 0xfc, 0xa4, 0x4c, 0x37, 0x76, 0x0c, 0xd5, 0xd0, 0x8d, 0x03,
+	0x62, 0xa2, 0xb7, 0xa1, 0xd0, 0x6c, 0x6d, 0xb7, 0x1e, 0xd7, 0xf8, 0x8d, 0x52, 0x7e, 0xe5, 0xe4,
+	0xb4, 0x72, 0xeb, 0xc5, 0xde, 0x6d, 0x32, 0xd4, 0x03, 0x62, 0xce, 0x6c, 0xf0, 0x18, 0x44, 0xfd,
+	0xef, 0x34, 0x2c, 0x62, 0xe2, 0x07, 0xba, 0x17, 0xf4, 0xa8, 0x6d, 0x19, 0x13, 0xd4, 0x83, 0x82,
+	0x41, 0x1d, 0xd3, 0x8a, 0xf9, 0xa6, 0x07, 0x97, 0x04, 0x69, 0x53, 0xa9, 0xb0, 0xd5, 0x08, 0x25,
+	0xf1, 0x54, 0x09, 0xba, 0x0b, 0x59, 0x93, 0xd8, 0xfa, 0x44, 0x46, 0x8b, 0xb7, 0x5e, 0xc8, 0x16,
+	0x9a, 0xb2, 0x50, 0x81, 0x05, 0x8e, 0xe7, 0x66, 0xfa, 0x73, 0x4d, 0x0f, 0x02, 0x32, 0x72, 0x03,
+	0xb1, 0x47, 0x32, 0xb8, 0x38, 0xd2, 0x9f, 0xd7, 0x24, 0x09, 0xdd, 0x87, 0xdc, 0xb1, 0xe5, 0x98,
+	0xf4, 0x58, 0x46, 0x83, 0x57, 0x28, 0x95, 0x40, 0xf5, 0x84, 0x85, 0x41, 0x33, 0xc3, 0x64, 0xdb,
+	0xac, 0xd3, 0xed, 0xb4, 0xc2, 0x6d, 0x26, 0xf9, 0x5d, 0xa7, 0x43, 0x1d, 0xe6, 0x3d, 0xa0, 0xdb,
+	0xd1, 0x36, 0x6b, 0xed, 0xed, 0x5d, 0xcc, 0xb6, 0xda, 0xea, 0xc9, 0x69, 0x45, 0x89, 0x20, 0x9b,
+	0xba, 0x65, 0xb3, 0xf4, 0xe4, 0x16, 0xcc, 0xd7, 0x3a, 0xdf, 0x51, 0xd2, 0x65, 0xe5, 0xe4, 0xb4,
+	0x52, 0x8a, 0xd8, 0x35, 0x67, 0x32, 0xb5, 0xfb, 0x6c, 0xbf, 0xea, 0xdf, 0xcc, 0x43, 0x69, 0xd7,
+	0x35, 0xf5, 0x80, 0x88, 0x53, 0x8a, 0x2a, 0x50, 0x74, 0x75, 0x4f, 0xb7, 0x6d, 0x62, 0x5b, 0xfe,
+	0x48, 0x96, 0x58, 0xe2, 0x24, 0xf4, 0xde, 0x17, 0x35, 0x63, 0x3d, 0xcf, 0x4e, 0xde, 0xf7, 0xff,
+	0x75, 0x23, 0x15, 0x1a, 0x74, 0x17, 0x96, 0xf6, 0xc5, 0x68, 0x35, 0xdd, 0xe0, 0x0b, 0x3b, 0xcf,
+	0x17, 0xb6, 0x9a, 0xb4, 0xb0, 0xf1, 0x61, 0x55, 0xe5, 0x24, 0x6b, 0x5c, 0x0a, 0x2f, 0xee, 0xc7,
+	0x9b, 0xe8, 0x21, 0x2c, 0x8c, 0xa8, 0x63, 0x05, 0xd4, 0xbb, 0x7e, 0x15, 0x42, 0x24, 0xba, 0x03,
+	0x2b, 0x6c, 0x71, 0xc3, 0xf1, 0x70, 0x36, 0x0f, 0x21, 0xd2, 0x78, 0x79, 0xa4, 0x3f, 0x97, 0x1d,
+	0x62, 0x46, 0x46, 0x75, 0xc8, 0x52, 0x8f, 0xc5, 0xa8, 0x39, 0x3e, 0xdc, 0xb7, 0xaf, 0x1d, 0xae,
+	0x68, 0x74, 0x99, 0x0c, 0x16, 0xa2, 0xea, 0xbb, 0xb0, 0x78, 0x61, 0x12, 0x2c, 0x34, 0xeb, 0xd5,
+	0x76, 0xfb, 0x2d, 0x65, 0x0e, 0x95, 0x20, 0xdf, 0xe8, 0x76, 0x06, 0xed, 0xce, 0x2e, 0x8b, 0x2d,
+	0x4b, 0x90, 0xc7, 0xdd, 0xed, 0xed, 0x7a, 0xad, 0xf1, 0x44, 0x49, 0xab, 0x55, 0x28, 0xc6, 0xb4,
+	0xa1, 0x25, 0x80, 0xfe, 0xa0, 0xdb, 0xd3, 0x36, 0xdb, 0xb8, 0x3f, 0x10, 0x91, 0x69, 0x7f, 0x50,
+	0xc3, 0x03, 0x49, 0x48, 0xa9, 0xff, 0x99, 0x0e, 0x57, 0x54, 0x06, 0xa3, 0xf5, 0x8b, 0xc1, 0xe8,
+	0x15, 0x83, 0x97, 0xe1, 0xe8, 0xb4, 0x11, 0x05, 0xa5, 0xef, 0x01, 0xf0, 0x8d, 0x43, 0x4c, 0x4d,
+	0x0f, 0xe4, 0xc2, 0x97, 0x5f, 0x30, 0xf2, 0x20, 0xac, 0x04, 0xe2, 0x82, 0x44, 0xd7, 0x02, 0xf4,
+	0x21, 0x94, 0x0c, 0x3a, 0x72, 0x6d, 0x22, 0x85, 0xe7, 0xaf, 0x15, 0x2e, 0x46, 0xf8, 0x5a, 0x10,
+	0x0f, 0x87, 0x33, 0x17, 0x03, 0xf6, 0xdf, 0x4c, 0x85, 0x96, 0x49, 0x88, 0x80, 0x4b, 0x90, 0xdf,
+	0xed, 0x35, 0x6b, 0x83, 0x76, 0xe7, 0xb1, 0x92, 0x42, 0x00, 0x39, 0x6e, 0xea, 0xa6, 0x92, 0x66,
+	0x91, 0x7b, 0xa3, 0xbb, 0xd3, 0xdb, 0x6e, 0x71, 0x8f, 0x85, 0x56, 0x41, 0x09, 0x8d, 0xad, 0x71,
+	0x43, 0xb6, 0x9a, 0x4a, 0x06, 0xdd, 0x80, 0xe5, 0x88, 0x2a, 0x25, 0xb3, 0xe8, 0x26, 0xa0, 0x88,
+	0x38, 0x55, 0x91, 0x53, 0x7f, 0x1d, 0x96, 0x1b, 0xd4, 0x09, 0x74, 0xcb, 0x89, 0xb2, 0x9a, 0x07,
+	0x6c, 0xd2, 0x92, 0xa4, 0x59, 0xb2, 0x42, 0x56, 0x5f, 0x3e, 0x3f, 0xdb, 0x28, 0x46, 0xd0, 0x76,
+	0x93, 0x87, 0x67, 0xb2, 0x61, 0xb2, 0xf3, 0xeb, 0x5a, 0x26, 0x37, 0x6e, 0xb6, 0xbe, 0x70, 0x7e,
+	0xb6, 0x31, 0xdf, 0x6b, 0x37, 0x31, 0xa3, 0xa1, 0x97, 0xa1, 0x40, 0x9e, 0x5b, 0x81, 0x66, 0xb0,
+	0x5b, 0x8d, 0x19, 0x30, 0x8b, 0xf3, 0x8c, 0xd0, 0xa0, 0x26, 0x51, 0xeb, 0x00, 0x3d, 0xea, 0x05,
+	0xb2, 0xe7, 0x77, 0x20, 0xeb, 0x52, 0x8f, 0xd7, 0x74, 0x2e, 0xad, 0x34, 0x32, 0xb8, 0xd8, 0xa8,
+	0x58, 0x80, 0xd5, 0x1f, 0xcc, 0x03, 0x0c, 0x74, 0xff, 0x50, 0x2a, 0x79, 0x04, 0x85, 0xa8, 0xaa,
+	0x2b, 0x8b, 0x43, 0x57, 0xae, 0x76, 0x04, 0x46, 0x0f, 0xc3, 0xcd, 0x26, 0xf2, 0xb5, 0xc4, 0xb4,
+	0x3a, 0xec, 0x28, 0x29, 0xe5, 0xb9, 0x98, 0x94, 0xb1, 0x20, 0x81, 0x78, 0x9e, 0x5c, 0x79, 0xf6,
+	0x13, 0x35, 0xf8, 0xb5, 0x20, 0x8c, 0x26, 0x23, 0xfe, 0xc4, 0x72, 0xd8, 0xcc, 0x8a, 0x6c, 0xcd,
+	0xe1, 0xa9, 0x1c, 0xfa, 0x08, 0x8a, 0x6c, 0xde, 0x9a, 0xcf, 0x79, 0x32, 0xd8, 0xbf, 0xd4, 0x54,
+	0x42, 0x03, 0x06, 0x77, 0x6a, 0xe5, 0x57, 0x00, 0x74, 0xd7, 0xb5, 0x2d, 0x62, 0x6a, 0x7b, 0x13,
+	0x1e, 0xdd, 0x17, 0x70, 0x41, 0x52, 0xea, 0x13, 0x76, 0x5c, 0x42, 0xb6, 0x1e, 0xf0, 0x88, 0xfd,
+	0x1a, 0x03, 0x4a, 0x74, 0x2d, 0xa8, 0x2b, 0xb0, 0xe4, 0x8d, 0x1d, 0x66, 0x50, 0x39, 0x3a, 0xf5,
+	0x8f, 0xd3, 0xf0, 0x52, 0x87, 0x04, 0xc7, 0xd4, 0x3b, 0xac, 0x05, 0x81, 0x6e, 0x1c, 0x8c, 0x88,
+	0x23, 0x97, 0x2f, 0x96, 0x44, 0xa5, 0x2e, 0x24, 0x51, 0x6b, 0xb0, 0xa0, 0xdb, 0x96, 0xee, 0x13,
+	0x11, 0xfa, 0x15, 0x70, 0xd8, 0x64, 0xa9, 0x1e, 0x4b, 0x1c, 0x89, 0xef, 0x13, 0x51, 0xe9, 0x61,
+	0x03, 0x0f, 0x09, 0xe8, 0xbb, 0x70, 0x53, 0x06, 0x79, 0x7a, 0xd4, 0x15, 0x4b, 0x62, 0xc2, 0xc2,
+	0x75, 0x2b, 0x31, 0x93, 0x4d, 0x1e, 0x9c, 0x8c, 0x02, 0xa7, 0xe4, 0xae, 0x1b, 0xc8, 0x98, 0x72,
+	0xd5, 0x4c, 0x60, 0x95, 0x1f, 0xc3, 0xad, 0x4b, 0x45, 0xbe, 0x54, 0x25, 0xe9, 0xef, 0xd3, 0x00,
+	0xed, 0x5e, 0x6d, 0x47, 0x1a, 0xa9, 0x09, 0xb9, 0x7d, 0x7d, 0x64, 0xd9, 0x93, 0xab, 0x3c, 0xe0,
+	0x14, 0x5f, 0xad, 0x09, 0x73, 0x6c, 0x72, 0x19, 0x2c, 0x65, 0x79, 0x1e, 0x3b, 0xde, 0x73, 0x48,
+	0x10, 0xe5, 0xb1, 0xbc, 0xc5, 0x86, 0xe1, 0xe9, 0x4e, 0xb4, 0x75, 0x45, 0x83, 0x2d, 0x00, 0x0b,
+	0x79, 0x8e, 0xf5, 0x49, 0xe8, 0xb6, 0x64, 0x13, 0x6d, 0xf1, 0xaa, 0x31, 0xf1, 0x8e, 0x88, 0xb9,
+	0x96, 0xe5, 0x46, 0xbd, 0x6e, 0x3c, 0x58, 0xc2, 0x85, 0xed, 0x22, 0xe9, 0xf2, 0x07, 0x3c, 0x64,
+	0x9a, 0xb2, 0xbe, 0x94, 0x8d, 0xee, 0xc1, 0xe2, 0x85, 0x79, 0xbe, 0x50, 0x40, 0x68, 0xf7, 0x9e,
+	0xbe, 0xa3, 0x64, 0xe4, 0xaf, 0x77, 0x95, 0x9c, 0xfa, 0x57, 0xf3, 0xc2, 0xd1, 0x48, 0xab, 0x26,
+	0xbf, 0x96, 0xe4, 0xf9, 0xee, 0x36, 0xa8, 0x2d, 0x1d, 0xc0, 0x9b, 0x57, 0xfb, 0x1f, 0x96, 0x47,
+	0x72, 0x38, 0x8e, 0x04, 0xd1, 0x06, 0x14, 0xc5, 0x2e, 0xd6, 0xd8, 0x81, 0xe3, 0x66, 0x5d, 0xc4,
+	0x20, 0x48, 0x4c, 0x12, 0xbd, 0x01, 0x4b, 0xbc, 0xe0, 0xe4, 0x1f, 0x10, 0x53, 0x60, 0x32, 0x1c,
+	0xb3, 0x18, 0x51, 0x39, 0x6c, 0x07, 0x4a, 0x92, 0xa0, 0xf1, 0x6c, 0x20, 0xcb, 0x07, 0x74, 0xe7,
+	0xba, 0x01, 0x09, 0x11, 0x9e, 0x24, 0x14, 0xdd, 0x69, 0x43, 0xfd, 0x65, 0xc8, 0x87, 0x83, 0x45,
+	0x6b, 0x30, 0x3f, 0x68, 0xf4, 0x94, 0xb9, 0xf2, 0xf2, 0xc9, 0x69, 0xa5, 0x18, 0x92, 0x07, 0x8d,
+	0x1e, 0xe3, 0xec, 0x36, 0x7b, 0x4a, 0xea, 0x22, 0x67, 0xb7, 0xd9, 0x43, 0x65, 0xc8, 0xf4, 0x1b,
+	0x83, 0x5e, 0x18, 0x9f, 0x85, 0x2c, 0x46, 0x2b, 0x67, 0x58, 0x7c, 0xa6, 0xee, 0x43, 0x31, 0xd6,
+	0x3b, 0x7a, 0x0d, 0x16, 0xda, 0x9d, 0xc7, 0xb8, 0xd5, 0xef, 0x2b, 0x73, 0x22, 0x3d, 0x88, 0x71,
+	0xdb, 0xce, 0x90, 0xad, 0x1d, 0x7a, 0x05, 0x32, 0x5b, 0x5d, 0x76, 0xef, 0x8b, 0xfc, 0x23, 0x86,
+	0xd8, 0xa2, 0x7e, 0x50, 0xbe, 0x21, 0x03, 0xbf, 0xb8, 0x62, 0xf5, 0xf7, 0x52, 0x90, 0x13, 0x07,
+	0x2d, 0x71, 0x11, 0x6b, 0xd3, 0xa4, 0x48, 0xa4, 0x8d, 0x6f, 0x5e, 0x9e, 0xe2, 0x55, 0x65, 0x46,
+	0x26, 0xb6, 0x66, 0x28, 0x57, 0x7e, 0x1f, 0x4a, 0x71, 0xc6, 0x97, 0xda, 0x98, 0xdf, 0x85, 0x22,
+	0xdb, 0xfb, 0x61, 0xaa, 0xf7, 0x00, 0x72, 0xc2, 0x59, 0x44, 0xf7, 0xd0, 0xe5, 0xf9, 0xa6, 0x44,
+	0xa2, 0x47, 0xb0, 0x20, 0x72, 0xd4, 0xb0, 0x96, 0xbd, 0x7e, 0xf5, 0x09, 0xc3, 0x21, 0x5c, 0xfd,
+	0x08, 0x32, 0x3d, 0x42, 0x3c, 0x66, 0x7b, 0x87, 0x9a, 0x64, 0x7a, 0x75, 0xcb, 0xf4, 0xda, 0x24,
+	0xed, 0x26, 0x4b, 0xaf, 0x4d, 0xd2, 0x36, 0xa3, 0x7a, 0x5c, 0x3a, 0x56, 0x8f, 0x1b, 0x40, 0xe9,
+	0x19, 0xb1, 0x86, 0x07, 0x01, 0x31, 0xb9, 0xa2, 0xb7, 0x21, 0xe3, 0x92, 0x68, 0xf0, 0x6b, 0x89,
+	0x9b, 0x8f, 0x10, 0x0f, 0x73, 0x14, 0xf3, 0x31, 0xc7, 0x5c, 0x5a, 0x3e, 0x03, 0xc9, 0x96, 0xfa,
+	0x77, 0x69, 0x58, 0x6a, 0xfb, 0xfe, 0x58, 0x77, 0x8c, 0x30, 0xaa, 0xfb, 0xe6, 0xc5, 0xa8, 0x2e,
+	0xf1, 0xbd, 0xec, 0xa2, 0xc8, 0xc5, 0x32, 0xa3, 0xbc, 0x59, 0xd3, 0xd1, 0xcd, 0xaa, 0xfe, 0x47,
+	0x2a, 0xac, 0x25, 0xbe, 0x11, 0x73, 0x05, 0x22, 0x47, 0x8c, 0x6b, 0x22, 0xbb, 0xce, 0xa1, 0x43,
+	0x8f, 0x1d, 0x96, 0xbd, 0xe2, 0x56, 0xa7, 0xf5, 0x4c, 0x49, 0x89, 0xed, 0x79, 0x01, 0x84, 0x89,
+	0x43, 0x8e, 0x99, 0xa6, 0x5e, 0xab, 0xd3, 0x64, 0x51, 0x58, 0x3a, 0x41, 0x53, 0x8f, 0x38, 0xa6,
+	0xe5, 0x0c, 0xd1, 0x6b, 0x90, 0x6b, 0xf7, 0xfb, 0xbb, 0x3c, 0x85, 0x7c, 0xe9, 0xe4, 0xb4, 0x72,
+	0xe3, 0x02, 0x8a, 0xd7, 0x91, 0x4d, 0x06, 0x62, 0x29, 0x10, 0x8b, 0xcf, 0x12, 0x40, 0x2c, 0xb6,
+	0x16, 0x20, 0xdc, 0x1d, 0xd4, 0x06, 0x2d, 0x25, 0x9b, 0x00, 0xc2, 0x94, 0xfd, 0x95, 0xc7, 0xed,
+	0x9f, 0xd3, 0xa0, 0xd4, 0x0c, 0x83, 0xb8, 0x01, 0xe3, 0xcb, 0xac, 0x73, 0x00, 0x79, 0x97, 0xfd,
+	0xb2, 0x48, 0x18, 0x41, 0x3d, 0x4a, 0x7c, 0xf1, 0x9d, 0x91, 0xab, 0x62, 0x6a, 0x93, 0x9a, 0x39,
+	0xb2, 0x7c, 0xdf, 0xa2, 0x8e, 0xa0, 0xe1, 0x48, 0x53, 0xf9, 0xbf, 0x52, 0x70, 0x23, 0x01, 0x81,
+	0xee, 0x41, 0xc6, 0xa3, 0x76, 0xb8, 0x86, 0xb7, 0x2f, 0x2b, 0x13, 0x33, 0x51, 0xcc, 0x91, 0x68,
+	0x1d, 0x40, 0x1f, 0x07, 0x54, 0xe7, 0xfd, 0x8b, 0xe2, 0x1a, 0x8e, 0x51, 0xd0, 0x33, 0xc8, 0xf9,
+	0xc4, 0xf0, 0x48, 0x18, 0x67, 0x7f, 0xf4, 0xd3, 0x8e, 0xbe, 0xda, 0xe7, 0x6a, 0xb0, 0x54, 0x57,
+	0xae, 0x42, 0x4e, 0x50, 0xd8, 0xb6, 0x37, 0xf5, 0x40, 0x97, 0x8f, 0x08, 0xfc, 0x37, 0xdb, 0x4d,
+	0xba, 0x3d, 0x0c, 0x77, 0x93, 0x6e, 0x0f, 0xd5, 0xbf, 0x4c, 0x03, 0xb4, 0x9e, 0x07, 0xc4, 0x73,
+	0x74, 0xbb, 0x51, 0x43, 0xad, 0xd8, 0xcd, 0x20, 0x66, 0xfb, 0xb5, 0xc4, 0x77, 0x93, 0x48, 0xa2,
+	0xda, 0xa8, 0x25, 0xdc, 0x0d, 0xb7, 0x60, 0x7e, 0xec, 0xc9, 0x47, 0x7c, 0x11, 0x23, 0xef, 0xe2,
+	0x6d, 0xcc, 0x68, 0xa8, 0x15, 0xaf, 0xe5, 0x5c, 0xfa, 0x54, 0x1f, 0xeb, 0x20, 0xd1, 0x75, 0xb1,
+	0x93, 0x6f, 0xe8, 0x9a, 0x41, 0xe4, 0xad, 0x52, 0x12, 0x27, 0xbf, 0x51, 0x6b, 0x10, 0x2f, 0xc0,
+	0x39, 0x43, 0x67, 0xff, 0x7f, 0x26, 0xff, 0xf6, 0x36, 0xc0, 0x74, 0x6a, 0x68, 0x1d, 0xb2, 0x8d,
+	0xcd, 0x7e, 0x7f, 0x5b, 0x99, 0x13, 0x0e, 0x7c, 0xca, 0xe2, 0x64, 0xf5, 0xcf, 0xd2, 0x90, 0x6f,
+	0xd4, 0xe4, 0x95, 0xdb, 0x00, 0x85, 0x7b, 0x25, 0xfe, 0xf4, 0x42, 0x9e, 0xbb, 0x96, 0x37, 0x91,
+	0x8e, 0xe5, 0x8a, 0x84, 0x77, 0x89, 0x89, 0xb0, 0x51, 0xb7, 0xb8, 0x00, 0xc2, 0x50, 0x22, 0xd2,
+	0x08, 0x9a, 0xa1, 0x87, 0x3e, 0x7e, 0xfd, 0x6a, 0x63, 0x89, 0xd4, 0x65, 0xda, 0xf6, 0x71, 0x31,
+	0x54, 0xd2, 0xd0, 0x7d, 0xf4, 0x1e, 0x2c, 0xfb, 0xd6, 0xd0, 0xb1, 0x9c, 0xa1, 0x16, 0x1a, 0x8f,
+	0xbf, 0x03, 0xd5, 0x57, 0xce, 0xcf, 0x36, 0x16, 0xfb, 0x82, 0x25, 0x6d, 0xb8, 0x28, 0x91, 0x0d,
+	0x6e, 0x4a, 0xf4, 0x2e, 0x2c, 0xc5, 0x44, 0x99, 0x15, 0x85, 0xd9, 0x79, 0xc5, 0x38, 0x92, 0x7c,
+	0x42, 0x26, 0xb8, 0x14, 0x09, 0x3e, 0x21, 0xbc, 0x36, 0xb3, 0x4f, 0x3d, 0x83, 0x68, 0x1e, 0x3f,
+	0xd3, 0xfc, 0x76, 0xcf, 0xe0, 0x22, 0xa7, 0x89, 0x63, 0xae, 0x3e, 0x85, 0x1b, 0x5d, 0xcf, 0x38,
+	0x20, 0x7e, 0x20, 0x4c, 0x21, 0xad, 0xf8, 0x11, 0xdc, 0x0e, 0x74, 0xff, 0x50, 0x3b, 0xb0, 0xfc,
+	0x80, 0x7a, 0x13, 0xcd, 0x23, 0x01, 0x71, 0x18, 0x5f, 0xe3, 0x0f, 0xdc, 0xb2, 0x9c, 0x78, 0x8b,
+	0x61, 0xb6, 0x04, 0x04, 0x87, 0x88, 0x6d, 0x06, 0x50, 0xdb, 0x50, 0x62, 0x29, 0x8c, 0x2c, 0xaa,
+	0xb1, 0xd9, 0x83, 0x4d, 0x87, 0xda, 0x17, 0xbe, 0xa6, 0x0a, 0x36, 0x1d, 0x8a, 0x9f, 0xea, 0xb7,
+	0x41, 0x69, 0x5a, 0xbe, 0xab, 0x07, 0xc6, 0x41, 0x58, 0x27, 0x45, 0x4d, 0x50, 0x0e, 0x88, 0xee,
+	0x05, 0x7b, 0x44, 0x0f, 0x34, 0x97, 0x78, 0x16, 0x35, 0xaf, 0x5f, 0xe5, 0xe5, 0x48, 0xa4, 0xc7,
+	0x25, 0xd4, 0xff, 0x49, 0x01, 0x60, 0x7d, 0x3f, 0x8c, 0xd6, 0xbe, 0x0e, 0x2b, 0xbe, 0xa3, 0xbb,
+	0xfe, 0x01, 0x0d, 0x34, 0xcb, 0x09, 0x88, 0x77, 0xa4, 0xdb, 0xb2, 0xb8, 0xa3, 0x84, 0x8c, 0xb6,
+	0xa4, 0xa3, 0xb7, 0x01, 0x1d, 0x12, 0xe2, 0x6a, 0xd4, 0x36, 0xb5, 0x90, 0x29, 0x1e, 0xbe, 0x33,
+	0x58, 0x61, 0x9c, 0xae, 0x6d, 0xf6, 0x43, 0x3a, 0xaa, 0xc3, 0x3a, 0x9b, 0x3e, 0x71, 0x02, 0xcf,
+	0x22, 0xbe, 0xb6, 0x4f, 0x3d, 0xcd, 0xb7, 0xe9, 0xb1, 0xb6, 0x4f, 0x6d, 0x9b, 0x1e, 0x13, 0x2f,
+	0xac, 0x9b, 0x95, 0x6d, 0x3a, 0x6c, 0x09, 0xd0, 0x26, 0xf5, 0xfa, 0x36, 0x3d, 0xde, 0x0c, 0x11,
+	0x2c, 0xa4, 0x9b, 0xce, 0x39, 0xb0, 0x8c, 0xc3, 0x30, 0xa4, 0x8b, 0xa8, 0x03, 0xcb, 0x38, 0x44,
+	0xaf, 0xc1, 0x22, 0xb1, 0x09, 0x2f, 0x9f, 0x08, 0x54, 0x96, 0xa3, 0x4a, 0x21, 0x91, 0x81, 0xd4,
+	0x8f, 0x41, 0x69, 0x39, 0x86, 0x37, 0x71, 0x63, 0x6b, 0xfe, 0x36, 0x20, 0xe6, 0x24, 0x35, 0x9b,
+	0x1a, 0x87, 0xda, 0x48, 0x77, 0xf4, 0x21, 0x1b, 0x97, 0x78, 0x71, 0x54, 0x18, 0x67, 0x9b, 0x1a,
+	0x87, 0x3b, 0x92, 0xae, 0xbe, 0x07, 0xd0, 0x77, 0x3d, 0xa2, 0x9b, 0x5d, 0x16, 0x4d, 0x30, 0xd3,
+	0xf1, 0x96, 0x66, 0xca, 0xf7, 0x5c, 0xea, 0xc9, 0xa3, 0xae, 0x08, 0x46, 0x33, 0xa2, 0xab, 0xbf,
+	0x08, 0x37, 0x7a, 0xb6, 0x6e, 0xf0, 0x2f, 0x2c, 0x7a, 0xd1, 0x13, 0x1a, 0x7a, 0x04, 0x39, 0x01,
+	0x95, 0x2b, 0x99, 0x78, 0xdc, 0xa6, 0x7d, 0x6e, 0xcd, 0x61, 0x89, 0xaf, 0x97, 0x00, 0xa6, 0x7a,
+	0xd4, 0x7f, 0x4c, 0x41, 0x21, 0xd2, 0x8f, 0x2a, 0xe2, 0x65, 0x28, 0xf0, 0x74, 0xcb, 0x91, 0x19,
+	0x7f, 0x01, 0xc7, 0x49, 0xa8, 0x0d, 0x45, 0x37, 0x92, 0xbe, 0x32, 0x9e, 0x4b, 0x18, 0x35, 0x8e,
+	0xcb, 0xa2, 0xf7, 0xa1, 0x10, 0x3e, 0xa0, 0x87, 0x1e, 0xf6, 0xea, 0xf7, 0xf6, 0x29, 0x3c, 0x2c,
+	0xa4, 0x7a, 0xc4, 0xb5, 0x2d, 0xe6, 0x73, 0x32, 0x51, 0x21, 0x15, 0x4b, 0x92, 0xfa, 0x4d, 0x80,
+	0x6f, 0x51, 0xcb, 0x19, 0xd0, 0x43, 0xe2, 0xf0, 0x57, 0x61, 0x96, 0x52, 0x92, 0xd0, 0xd0, 0xb2,
+	0xc5, 0x2b, 0x05, 0x62, 0x95, 0xa2, 0xc7, 0x51, 0xd1, 0x54, 0xff, 0x22, 0x0d, 0x39, 0x4c, 0x69,
+	0xd0, 0xa8, 0xa1, 0x0a, 0xe4, 0xa4, 0x2b, 0xe1, 0x57, 0x54, 0xbd, 0x70, 0x7e, 0xb6, 0x91, 0x15,
+	0x3e, 0x24, 0x6b, 0x70, 0xe7, 0x11, 0x73, 0xf2, 0xe9, 0xcb, 0x9c, 0x3c, 0xba, 0x07, 0x25, 0x09,
+	0xd2, 0x0e, 0x74, 0xff, 0x40, 0xe4, 0x77, 0xf5, 0xa5, 0xf3, 0xb3, 0x0d, 0x10, 0xc8, 0x2d, 0xdd,
+	0x3f, 0xc0, 0x20, 0xd0, 0xec, 0x37, 0x6a, 0x41, 0xf1, 0x13, 0x6a, 0x39, 0x5a, 0xc0, 0x27, 0x21,
+	0x6b, 0x91, 0x89, 0x4b, 0x3d, 0x9d, 0xaa, 0xfc, 0x80, 0x02, 0x3e, 0x99, 0x4e, 0xbe, 0x05, 0x8b,
+	0x1e, 0xa5, 0x81, 0xf0, 0x6c, 0x16, 0x75, 0x64, 0x99, 0xa3, 0x92, 0x58, 0xfd, 0xa6, 0x34, 0xc0,
+	0x12, 0x87, 0x4b, 0x5e, 0xac, 0x85, 0xee, 0xc1, 0xaa, 0xad, 0xfb, 0x81, 0xc6, 0x5d, 0xa2, 0x39,
+	0xd5, 0x96, 0xe3, 0xc6, 0x47, 0x8c, 0xb7, 0xc9, 0x59, 0xa1, 0x84, 0xfa, 0x0f, 0x29, 0x28, 0xb2,
+	0xc9, 0x58, 0xfb, 0x96, 0xc1, 0xe2, 0xc0, 0x2f, 0x1f, 0x9e, 0xdc, 0x82, 0x79, 0xc3, 0xf7, 0xa4,
+	0x51, 0xf9, 0xfd, 0xdc, 0xe8, 0x63, 0xcc, 0x68, 0xe8, 0x63, 0xc8, 0xc9, 0x72, 0x8b, 0x88, 0x4c,
+	0xd4, 0xeb, 0x23, 0x56, 0x69, 0x1b, 0x29, 0xc7, 0xb7, 0xfb, 0x74, 0x74, 0xe2, 0x9e, 0xc0, 0x71,
+	0x12, 0xba, 0x09, 0x69, 0x43, 0x98, 0x4b, 0x7e, 0xa1, 0xd3, 0xe8, 0xe0, 0xb4, 0xe1, 0xa8, 0x3f,
+	0x4e, 0xc1, 0xe2, 0xd4, 0x27, 0xb0, 0x1d, 0x70, 0x1b, 0x0a, 0xfe, 0x78, 0xcf, 0x9f, 0xf8, 0x01,
+	0x19, 0x85, 0x2f, 0xde, 0x11, 0x01, 0xb5, 0xa1, 0xa0, 0xdb, 0x43, 0xea, 0x59, 0xc1, 0xc1, 0x48,
+	0x26, 0xb2, 0xc9, 0xd1, 0x44, 0x5c, 0x67, 0xb5, 0x16, 0x8a, 0xe0, 0xa9, 0x74, 0x18, 0x1a, 0x88,
+	0xcf, 0x22, 0x78, 0x68, 0xf0, 0x2a, 0x94, 0x6c, 0x7d, 0xc4, 0xeb, 0x4f, 0x81, 0x35, 0x22, 0xe1,
+	0x61, 0x90, 0xb4, 0x81, 0x35, 0x22, 0xaa, 0x0a, 0x85, 0x48, 0x19, 0x5a, 0x86, 0x62, 0xad, 0xd5,
+	0xd7, 0xee, 0x3f, 0x78, 0xa4, 0x3d, 0x6e, 0xec, 0x28, 0x73, 0x32, 0x7c, 0xfd, 0xd3, 0x14, 0x2c,
+	0x4a, 0x8f, 0x25, 0x53, 0x82, 0xd7, 0x60, 0xc1, 0xd3, 0xf7, 0x83, 0x30, 0x69, 0xc9, 0x88, 0x5d,
+	0xcd, 0x2e, 0x01, 0x96, 0xb4, 0x30, 0x56, 0x72, 0xd2, 0x12, 0xfb, 0x06, 0x63, 0xfe, 0xca, 0x6f,
+	0x30, 0x32, 0xff, 0x2f, 0xdf, 0x60, 0xa8, 0xbf, 0x01, 0xb0, 0x69, 0xd9, 0x64, 0x20, 0x4a, 0x55,
+	0x49, 0x29, 0x28, 0x0b, 0xf3, 0x64, 0x29, 0x34, 0x0c, 0xf3, 0xda, 0x4d, 0xcc, 0x68, 0x8c, 0x35,
+	0xb4, 0x4c, 0x79, 0x18, 0x39, 0xeb, 0x31, 0x63, 0x0d, 0x2d, 0x33, 0x7a, 0xf6, 0xcb, 0x5c, 0xf3,
+	0xec, 0xa7, 0x2e, 0xc3, 0x22, 0x16, 0x35, 0x36, 0x31, 0x06, 0xf5, 0x34, 0x05, 0xcb, 0x32, 0xde,
+	0x8d, 0x5c, 0xf6, 0xd7, 0xa0, 0x20, 0x42, 0xdf, 0x69, 0x12, 0xc8, 0x3f, 0x44, 0x10, 0xb8, 0x76,
+	0x13, 0xe7, 0x05, 0xbb, 0x6d, 0xa2, 0x0d, 0x28, 0x4a, 0x68, 0xec, 0xf3, 0x2e, 0x10, 0xa4, 0x0e,
+	0x9b, 0xcf, 0x3b, 0x90, 0xd9, 0xb7, 0x6c, 0x22, 0x77, 0x7e, 0xa2, 0x47, 0x98, 0x5a, 0x64, 0x6b,
+	0x0e, 0x73, 0x74, 0x3d, 0x1f, 0x16, 0xf7, 0xd4, 0x7f, 0x49, 0xf1, 0x12, 0x33, 0x4b, 0x55, 0xe3,
+	0xe3, 0x13, 0x59, 0xeb, 0xcc, 0xf8, 0x04, 0x8e, 0x8d, 0x4f, 0xb0, 0xc5, 0xf8, 0x24, 0x34, 0x3e,
+	0x3e, 0x41, 0xfa, 0xe9, 0xc7, 0x87, 0x3e, 0x84, 0x05, 0x59, 0xaa, 0x94, 0xae, 0xee, 0xd5, 0xc4,
+	0x9d, 0x11, 0xb7, 0xf4, 0xd6, 0x1c, 0x0e, 0x65, 0x62, 0xd3, 0xdb, 0x86, 0x9b, 0x75, 0x5b, 0x37,
+	0x0e, 0x6d, 0xcb, 0x0f, 0x88, 0x19, 0xf7, 0x40, 0x0f, 0x20, 0x77, 0x21, 0xce, 0xbd, 0xaa, 0x88,
+	0x2a, 0x91, 0xea, 0xbf, 0xa7, 0xa0, 0xb4, 0x45, 0x74, 0x3b, 0x38, 0x98, 0x56, 0xaa, 0x02, 0xe2,
+	0x07, 0xf2, 0x7e, 0xe4, 0xbf, 0xd1, 0x37, 0x20, 0x1f, 0x85, 0x41, 0xd7, 0x3e, 0x07, 0x46, 0x50,
+	0xf4, 0x10, 0x16, 0xd8, 0xd8, 0xe9, 0x38, 0xcc, 0xaf, 0xae, 0x7a, 0x69, 0x92, 0x48, 0x76, 0x69,
+	0x79, 0x84, 0xc7, 0x3d, 0xdc, 0x4e, 0x59, 0x1c, 0x36, 0xd1, 0xcf, 0x43, 0x89, 0x3f, 0x94, 0x84,
+	0x61, 0x5e, 0xf6, 0x3a, 0x9d, 0x45, 0xf1, 0xd6, 0x29, 0x42, 0xbc, 0x3f, 0x4a, 0xc3, 0xea, 0x8e,
+	0x3e, 0xd9, 0x23, 0xd2, 0x0d, 0x11, 0x13, 0x13, 0x83, 0x7a, 0x26, 0xea, 0xc5, 0xdd, 0xd7, 0x15,
+	0x4f, 0xa7, 0x49, 0xc2, 0xc9, 0x5e, 0x2c, 0xcc, 0xf9, 0xd2, 0xb1, 0x9c, 0x6f, 0x15, 0xb2, 0x0e,
+	0x75, 0x0c, 0x22, 0x7d, 0x9b, 0x68, 0xa8, 0xdf, 0x4b, 0xc5, 0x7d, 0x57, 0x39, 0x7a, 0xd6, 0xe4,
+	0x45, 0xaf, 0x0e, 0x0d, 0xa2, 0xee, 0xd0, 0xc7, 0x50, 0xee, 0xb7, 0x1a, 0xb8, 0x35, 0xa8, 0x77,
+	0xbf, 0xad, 0xf5, 0x6b, 0xdb, 0xfd, 0xda, 0x83, 0x7b, 0x5a, 0xaf, 0xbb, 0xfd, 0x9d, 0xfb, 0x0f,
+	0xef, 0x7d, 0x43, 0x49, 0x95, 0x2b, 0x27, 0xa7, 0x95, 0xdb, 0x9d, 0x5a, 0x63, 0x5b, 0x9c, 0xb8,
+	0x3d, 0xfa, 0xbc, 0xaf, 0xdb, 0xbe, 0xfe, 0xe0, 0x5e, 0x8f, 0xda, 0x13, 0x86, 0x41, 0x5f, 0x07,
+	0xb4, 0xd9, 0xc2, 0x9d, 0xd6, 0x40, 0x0b, 0x1d, 0x64, 0xa3, 0xde, 0x50, 0xd2, 0x22, 0x93, 0xda,
+	0x24, 0x9e, 0x43, 0x82, 0x5a, 0xab, 0x7f, 0xff, 0xc1, 0xa3, 0x46, 0xbd, 0xc1, 0xce, 0x78, 0x29,
+	0x7e, 0x5b, 0xc6, 0x83, 0x80, 0xd4, 0xa5, 0x41, 0xc0, 0x34, 0x96, 0x48, 0x5f, 0x12, 0x4b, 0x6c,
+	0xc2, 0xaa, 0xe1, 0x51, 0xdf, 0xd7, 0x58, 0x7a, 0x42, 0xcc, 0x99, 0x04, 0xe8, 0x2b, 0xe7, 0x67,
+	0x1b, 0x2b, 0x0d, 0xc6, 0xef, 0x73, 0xb6, 0x54, 0xbf, 0x62, 0xc4, 0x48, 0xbc, 0x27, 0xf5, 0x87,
+	0xf3, 0x2c, 0xd2, 0xb3, 0x8e, 0x2c, 0x9b, 0x0c, 0x89, 0x8f, 0x9e, 0xc2, 0xb2, 0xe1, 0x11, 0x93,
+	0xe5, 0x1d, 0xba, 0x1d, 0xff, 0x32, 0xfa, 0xe7, 0x12, 0x83, 0xae, 0x48, 0xb0, 0xda, 0x88, 0xa4,
+	0xfa, 0x2e, 0x31, 0xf0, 0x92, 0x71, 0xa1, 0x8d, 0x3e, 0x81, 0x65, 0x9f, 0xd8, 0x96, 0x33, 0x7e,
+	0xae, 0x19, 0xd4, 0x09, 0xc8, 0xf3, 0xf0, 0x39, 0xef, 0x3a, 0xbd, 0xfd, 0xd6, 0x36, 0x93, 0x6a,
+	0x08, 0xa1, 0x3a, 0x3a, 0x3f, 0xdb, 0x58, 0xba, 0x48, 0xc3, 0x4b, 0x52, 0xb3, 0x6c, 0x97, 0x0f,
+	0x60, 0xe9, 0xe2, 0x68, 0xd0, 0xaa, 0x74, 0x34, 0xdc, 0x5f, 0x45, 0x8e, 0xe4, 0x36, 0xe4, 0x3d,
+	0x32, 0xb4, 0xfc, 0xc0, 0x13, 0x66, 0x66, 0x9c, 0x88, 0x82, 0xd6, 0x20, 0x17, 0xfb, 0xe2, 0x84,
+	0xf1, 0x64, 0x9b, 0x79, 0x10, 0xf1, 0x31, 0x59, 0xf9, 0xd7, 0x60, 0x66, 0x2c, 0xec, 0xd0, 0x99,
+	0x96, 0xaf, 0xef, 0xc9, 0xce, 0xf2, 0x38, 0x6c, 0xb2, 0xbd, 0x3c, 0xf6, 0xa3, 0x00, 0x92, 0xff,
+	0x66, 0x34, 0x1e, 0xe9, 0xc8, 0x4f, 0xeb, 0x78, 0x2c, 0x13, 0x7e, 0xc1, 0x9b, 0x89, 0x7d, 0xc1,
+	0xbb, 0x0a, 0x59, 0x9b, 0x1c, 0x11, 0x5b, 0xc4, 0x18, 0x58, 0x34, 0xee, 0xdc, 0x83, 0x52, 0xf8,
+	0xa9, 0x28, 0xff, 0x66, 0x24, 0x0f, 0x99, 0x41, 0xad, 0xff, 0x44, 0x99, 0x43, 0x00, 0x39, 0xb1,
+	0xc7, 0xc5, 0x23, 0x64, 0xa3, 0xdb, 0xd9, 0x6c, 0x3f, 0x56, 0xd2, 0x77, 0x7e, 0x37, 0x03, 0x85,
+	0xe8, 0x19, 0x8c, 0xdd, 0x69, 0x9d, 0xd6, 0xb3, 0xf0, 0x90, 0x44, 0xf4, 0x0e, 0x39, 0x46, 0xaf,
+	0x4e, 0x0b, 0x68, 0x1f, 0x8b, 0x77, 0xff, 0x88, 0x1d, 0x16, 0xcf, 0x5e, 0x87, 0x7c, 0xad, 0xdf,
+	0x6f, 0x3f, 0xee, 0xb4, 0x9a, 0xca, 0x67, 0xa9, 0xf2, 0x57, 0x4e, 0x4e, 0x2b, 0x2b, 0x11, 0xa8,
+	0xe6, 0x8b, 0x6d, 0xc9, 0x51, 0x8d, 0x46, 0xab, 0x37, 0x68, 0x35, 0x95, 0x4f, 0xd3, 0xb3, 0x28,
+	0x5e, 0x10, 0xe2, 0xdf, 0x33, 0x15, 0x7a, 0xb8, 0xd5, 0xab, 0x61, 0xd6, 0xe1, 0x67, 0x69, 0x51,
+	0xd7, 0x9b, 0xf6, 0xe8, 0x11, 0x57, 0xf7, 0x58, 0x9f, 0xeb, 0xe1, 0x67, 0x85, 0x9f, 0xce, 0x8b,
+	0x0f, 0x5b, 0xa6, 0x6f, 0x7a, 0x44, 0x37, 0x27, 0xac, 0x37, 0xfe, 0x98, 0xca, 0xd5, 0xcc, 0xcf,
+	0xf4, 0xd6, 0x67, 0x3e, 0x8c, 0x69, 0x51, 0x61, 0x01, 0xef, 0x76, 0x3a, 0x0c, 0xf4, 0x69, 0x66,
+	0x66, 0x76, 0x78, 0xec, 0xb0, 0x64, 0x1f, 0xbd, 0x01, 0xf9, 0xf0, 0xad, 0x55, 0xf9, 0x2c, 0x33,
+	0x33, 0xa0, 0x46, 0xf8, 0x50, 0xcc, 0x3b, 0xdc, 0xda, 0x1d, 0xf0, 0xaf, 0x1e, 0x3f, 0xcd, 0xce,
+	0x76, 0x78, 0x30, 0x0e, 0x4c, 0x7a, 0xec, 0xb0, 0xd3, 0x2c, 0x4b, 0x88, 0x9f, 0x65, 0x85, 0x97,
+	0x88, 0x30, 0xb2, 0x7e, 0xf8, 0x3a, 0xe4, 0x71, 0xeb, 0x5b, 0xe2, 0x03, 0xc9, 0x4f, 0x73, 0x33,
+	0x7a, 0x30, 0xf9, 0x84, 0x18, 0xac, 0xb7, 0x0a, 0xe4, 0x70, 0x6b, 0xa7, 0xfb, 0xb4, 0xa5, 0xfc,
+	0x7e, 0x6e, 0x46, 0x0f, 0x26, 0x23, 0xca, 0x3f, 0xf8, 0xca, 0x77, 0x71, 0x6f, 0xab, 0xc6, 0x17,
+	0x65, 0x56, 0x4f, 0xd7, 0x73, 0x0f, 0x74, 0x87, 0x98, 0xd3, 0x8f, 0x7b, 0x22, 0xd6, 0x9d, 0x5f,
+	0x82, 0x7c, 0x18, 0x53, 0xa3, 0x75, 0xc8, 0x3d, 0xeb, 0xe2, 0x27, 0x2d, 0xac, 0xcc, 0x09, 0x2b,
+	0x87, 0x9c, 0x67, 0x22, 0x1b, 0xaa, 0xc0, 0xc2, 0x4e, 0xad, 0x53, 0x7b, 0xdc, 0xc2, 0x61, 0xfd,
+	0x3f, 0x04, 0xc8, 0xc0, 0xb0, 0xac, 0xc8, 0x0e, 0x22, 0x9d, 0xf5, 0xb5, 0x1f, 0x7d, 0xbe, 0x3e,
+	0xf7, 0x93, 0xcf, 0xd7, 0xe7, 0x3e, 0x3d, 0x5f, 0x4f, 0xfd, 0xe8, 0x7c, 0x3d, 0xf5, 0xb7, 0xe7,
+	0xeb, 0xa9, 0x7f, 0x3b, 0x5f, 0x4f, 0xed, 0xe5, 0xf8, 0x75, 0xf3, 0xf0, 0xff, 0x02, 0x00, 0x00,
+	0xff, 0xff, 0x6e, 0xf6, 0x47, 0x4c, 0x21, 0x34, 0x00, 0x00,
 }
 }

+ 12 - 0
vendor/github.com/docker/swarmkit/api/types.proto

@@ -4,6 +4,7 @@ package docker.swarmkit.v1;
 
 
 import "google/protobuf/timestamp.proto";
 import "google/protobuf/timestamp.proto";
 import "google/protobuf/duration.proto";
 import "google/protobuf/duration.proto";
+import "google/protobuf/wrappers.proto";
 import "gogoproto/gogo.proto";
 import "gogoproto/gogo.proto";
 
 
 // This file contains types that are common to objects and spec or that are not
 // This file contains types that are common to objects and spec or that are not
@@ -77,6 +78,17 @@ message Resources {
 message ResourceRequirements {
 message ResourceRequirements {
 	Resources limits = 1;
 	Resources limits = 1;
 	Resources reservations = 2;
 	Resources reservations = 2;
+
+	// Amount of swap in bytes - can only be used together with a memory limit
+	// -1 means unlimited
+	// a null pointer indicates that the default behaviour of granting twice
+	// the memory is maintained
+	google.protobuf.Int64Value swap_bytes = 3;
+
+	// Tune container memory swappiness (0 to 100) - if not specified, defaults
+	// to the container OS's default - generally 60, or the value predefined in
+	// the image; set to -1 to unset a previously set value
+	google.protobuf.Int64Value memory_swappiness = 4;
 }
 }
 
 
 message Platform {
 message Platform {

+ 5 - 11
vendor/github.com/docker/swarmkit/manager/allocator/network.go

@@ -989,8 +989,11 @@ func (a *Allocator) allocateNode(ctx context.Context, node *api.Node, existingAd
 
 
 	nc := a.netCtx
 	nc := a.netCtx
 
 
+	var nwIDs = make(map[string]struct{}, len(networks))
+
 	// go through all of the networks we've passed in
 	// go through all of the networks we've passed in
 	for _, network := range networks {
 	for _, network := range networks {
+		nwIDs[network.ID] = struct{}{}
 
 
 		// for each one, create space for an attachment. then, search through
 		// for each one, create space for an attachment. then, search through
 		// all of the attachments already on the node. if the attachment
 		// all of the attachments already on the node. if the attachment
@@ -1049,17 +1052,8 @@ func (a *Allocator) allocateNode(ctx context.Context, node *api.Node, existingAd
 	// https://github.com/golang/go/wiki/SliceTricks#filtering-without-allocating
 	// https://github.com/golang/go/wiki/SliceTricks#filtering-without-allocating
 	attachments := node.Attachments[:0]
 	attachments := node.Attachments[:0]
 	for _, attach := range node.Attachments {
 	for _, attach := range node.Attachments {
-		// for every attachment, go through every network. if the attachment
-		// belongs to one of the networks, then go to the next attachment. if
-		// no network matches, then the the attachment should be removed.
-		attachmentBelongs := false
-		for _, network := range networks {
-			if network.ID == attach.Network.ID {
-				attachmentBelongs = true
-				break
-			}
-		}
-		if attachmentBelongs {
+		if _, ok := nwIDs[attach.Network.ID]; ok {
+			// attachment belongs to one of the networks, so keep it
 			attachments = append(attachments, attach)
 			attachments = append(attachments, attach)
 		} else {
 		} else {
 			// free the attachment and remove it from the node's attachments by
 			// free the attachment and remove it from the node's attachments by

+ 133 - 0
vendor/github.com/docker/swarmkit/manager/controlapi/extension.go

@@ -0,0 +1,133 @@
+package controlapi
+
+import (
+	"context"
+	"strings"
+
+	"github.com/docker/swarmkit/api"
+	"github.com/docker/swarmkit/identity"
+	"github.com/docker/swarmkit/log"
+	"github.com/docker/swarmkit/manager/state/store"
+	"github.com/sirupsen/logrus"
+	"google.golang.org/grpc/codes"
+	"google.golang.org/grpc/status"
+)
+
+// CreateExtension creates an `Extension` based on the provided `CreateExtensionRequest.Extension`
+// and returns a `CreateExtensionResponse`.
+// - Returns `InvalidArgument` if the `CreateExtensionRequest.Extension` is malformed,
+//   or fails validation.
+// - Returns an error if the creation fails.
+func (s *Server) CreateExtension(ctx context.Context, request *api.CreateExtensionRequest) (*api.CreateExtensionResponse, error) {
+	if request.Annotations == nil || request.Annotations.Name == "" {
+		return nil, status.Errorf(codes.InvalidArgument, "extension name must be provided")
+	}
+
+	extension := &api.Extension{
+		ID:          identity.NewID(),
+		Annotations: *request.Annotations,
+		Description: request.Description,
+	}
+
+	err := s.store.Update(func(tx store.Tx) error {
+		return store.CreateExtension(tx, extension)
+	})
+
+	switch err {
+	case store.ErrNameConflict:
+		return nil, status.Errorf(codes.AlreadyExists, "extension %s already exists", request.Annotations.Name)
+	case nil:
+		log.G(ctx).WithFields(logrus.Fields{
+			"extension.Name": request.Annotations.Name,
+			"method":         "CreateExtension",
+		}).Debugf("extension created")
+
+		return &api.CreateExtensionResponse{Extension: extension}, nil
+	default:
+		return nil, status.Errorf(codes.Internal, "could not create extension: %v", err.Error())
+	}
+}
+
+// GetExtension returns a `GetExtensionResponse` with a `Extension` with the same
+// id as `GetExtensionRequest.extension_id`
+// - Returns `NotFound` if the Extension with the given id is not found.
+// - Returns `InvalidArgument` if the `GetExtensionRequest.extension_id` is empty.
+// - Returns an error if the get fails.
+func (s *Server) GetExtension(ctx context.Context, request *api.GetExtensionRequest) (*api.GetExtensionResponse, error) {
+	if request.ExtensionID == "" {
+		return nil, status.Errorf(codes.InvalidArgument, "extension ID must be provided")
+	}
+
+	var extension *api.Extension
+	s.store.View(func(tx store.ReadTx) {
+		extension = store.GetExtension(tx, request.ExtensionID)
+	})
+
+	if extension == nil {
+		return nil, status.Errorf(codes.NotFound, "extension %s not found", request.ExtensionID)
+	}
+
+	return &api.GetExtensionResponse{Extension: extension}, nil
+}
+
+// RemoveExtension removes the extension referenced by `RemoveExtensionRequest.ID`.
+// - Returns `InvalidArgument` if `RemoveExtensionRequest.extension_id` is empty.
+// - Returns `NotFound` if the an extension named `RemoveExtensionRequest.extension_id` is not found.
+// - Returns an error if the deletion fails.
+func (s *Server) RemoveExtension(ctx context.Context, request *api.RemoveExtensionRequest) (*api.RemoveExtensionResponse, error) {
+	if request.ExtensionID == "" {
+		return nil, status.Errorf(codes.InvalidArgument, "extension ID must be provided")
+	}
+
+	err := s.store.Update(func(tx store.Tx) error {
+		// Check if the extension exists
+		extension := store.GetExtension(tx, request.ExtensionID)
+		if extension == nil {
+			return status.Errorf(codes.NotFound, "could not find extension %s", request.ExtensionID)
+		}
+
+		// Check if any resources of this type present in the store, return error if so
+		resources, err := store.FindResources(tx, store.ByKind(request.ExtensionID))
+		if err != nil {
+			return status.Errorf(codes.Internal, "could not find resources using extension %s: %v", request.ExtensionID, err)
+		}
+
+		if len(resources) != 0 {
+			resourceNames := make([]string, 0, len(resources))
+			// Number of resources for an extension could be quite large.
+			// Show a limited number of resources for debugging.
+			attachedResourceForDebug := 10
+			for _, resource := range resources {
+				resourceNames = append(resourceNames, resource.Annotations.Name)
+				attachedResourceForDebug = attachedResourceForDebug - 1
+				if attachedResourceForDebug == 0 {
+					break
+				}
+			}
+
+			extensionName := extension.Annotations.Name
+			resourceNameStr := strings.Join(resourceNames, ", ")
+			resourceStr := "resources"
+			if len(resourceNames) == 1 {
+				resourceStr = "resource"
+			}
+
+			return status.Errorf(codes.InvalidArgument, "extension '%s' is in use by the following %s: %v", extensionName, resourceStr, resourceNameStr)
+		}
+
+		return store.DeleteExtension(tx, request.ExtensionID)
+	})
+	switch err {
+	case store.ErrNotExist:
+		return nil, status.Errorf(codes.NotFound, "extension %s not found", request.ExtensionID)
+	case nil:
+		log.G(ctx).WithFields(logrus.Fields{
+			"extension.ID": request.ExtensionID,
+			"method":       "RemoveExtension",
+		}).Debugf("extension removed")
+
+		return &api.RemoveExtensionResponse{}, nil
+	default:
+		return nil, err
+	}
+}

+ 226 - 0
vendor/github.com/docker/swarmkit/manager/controlapi/resource.go

@@ -0,0 +1,226 @@
+package controlapi
+
+import (
+	"context"
+
+	"github.com/sirupsen/logrus"
+	"google.golang.org/grpc/codes"
+	"google.golang.org/grpc/status"
+
+	"github.com/docker/swarmkit/api"
+	"github.com/docker/swarmkit/identity"
+	"github.com/docker/swarmkit/log"
+	"github.com/docker/swarmkit/manager/state/store"
+)
+
+// CreateResource returns a `CreateResourceResponse` after creating a `Resource` based
+// on the provided `CreateResourceRequest.Resource`.
+// - Returns `InvalidArgument` if the `CreateResourceRequest.Resource` is malformed,
+//   or if the config data is too long or contains invalid characters.
+// - Returns an error if the creation fails.
+func (s *Server) CreateResource(ctx context.Context, request *api.CreateResourceRequest) (*api.CreateResourceResponse, error) {
+	if request.Annotations == nil || request.Annotations.Name == "" {
+		return nil, status.Errorf(codes.InvalidArgument, "Resource must have a name")
+	}
+
+	// finally, validate that Kind is not an emptystring. We know that creating
+	// with Kind as empty string should fail at the store level, but to make
+	// errors clearer, special case this.
+	if request.Kind == "" {
+		return nil, status.Errorf(codes.InvalidArgument, "Resource must belong to an Extension")
+	}
+	r := &api.Resource{
+		ID:          identity.NewID(),
+		Annotations: *request.Annotations,
+		Kind:        request.Kind,
+		Payload:     request.Payload,
+	}
+
+	err := s.store.Update(func(tx store.Tx) error {
+		return store.CreateResource(tx, r)
+	})
+
+	switch err {
+	case store.ErrNoKind:
+		return nil, status.Errorf(codes.InvalidArgument, "Kind %v is not registered", r.Kind)
+	case store.ErrNameConflict:
+		return nil, status.Errorf(
+			codes.AlreadyExists,
+			"A resource with name %v already exists",
+			r.Annotations.Name,
+		)
+	case nil:
+		log.G(ctx).WithFields(logrus.Fields{
+			"resource.Name": r.Annotations.Name,
+			"method":        "CreateResource",
+		}).Debugf("resource created")
+		return &api.CreateResourceResponse{Resource: r}, nil
+	default:
+		return nil, err
+	}
+}
+
+// GetResource returns a `GetResourceResponse` with a `Resource` with the same
+// id as `GetResourceRequest.Resource`
+// - Returns `NotFound` if the Resource with the given id is not found.
+// - Returns `InvalidArgument` if the `GetResourceRequest.Resource` is empty.
+// - Returns an error if getting fails.
+func (s *Server) GetResource(ctx context.Context, request *api.GetResourceRequest) (*api.GetResourceResponse, error) {
+	if request.ResourceID == "" {
+		return nil, status.Errorf(codes.InvalidArgument, "resource ID must be present")
+	}
+	var resource *api.Resource
+	s.store.View(func(tx store.ReadTx) {
+		resource = store.GetResource(tx, request.ResourceID)
+	})
+
+	if resource == nil {
+		return nil, status.Errorf(codes.NotFound, "resource %s not found", request.ResourceID)
+	}
+
+	return &api.GetResourceResponse{Resource: resource}, nil
+}
+
+// RemoveResource removes the `Resource` referenced by `RemoveResourceRequest.ResourceID`.
+// - Returns `InvalidArgument` if `RemoveResourceRequest.ResourceID` is empty.
+// - Returns `NotFound` if the a resource named `RemoveResourceRequest.ResourceID` is not found.
+// - Returns an error if the deletion fails.
+func (s *Server) RemoveResource(ctx context.Context, request *api.RemoveResourceRequest) (*api.RemoveResourceResponse, error) {
+	if request.ResourceID == "" {
+		return nil, status.Errorf(codes.InvalidArgument, "resource ID must be present")
+	}
+	err := s.store.Update(func(tx store.Tx) error {
+		return store.DeleteResource(tx, request.ResourceID)
+	})
+	switch err {
+	case store.ErrNotExist:
+		return nil, status.Errorf(codes.NotFound, "resource %s not found", request.ResourceID)
+	case nil:
+		return &api.RemoveResourceResponse{}, nil
+	default:
+		return nil, err
+	}
+}
+
+// ListResources returns a `ListResourcesResponse` with a list of `Resource`s stored in the raft store,
+// or all resources matching any name in `ListConfigsRequest.Names`, any
+// name prefix in `ListResourcesRequest.NamePrefixes`, any id in
+// `ListResourcesRequest.ResourceIDs`, or any id prefix in `ListResourcesRequest.IDPrefixes`.
+// - Returns an error if listing fails.
+func (s *Server) ListResources(ctx context.Context, request *api.ListResourcesRequest) (*api.ListResourcesResponse, error) {
+	var (
+		resources     []*api.Resource
+		respResources []*api.Resource
+		err           error
+		byFilters     []store.By
+		by            store.By
+		labels        map[string]string
+	)
+
+	// andKind is set to true if the Extension filter is not the only filter
+	// being used. If this is the case, we do not have to compare by strings,
+	// which could be slow.
+	var andKind bool
+
+	if request.Filters != nil {
+		for _, name := range request.Filters.Names {
+			byFilters = append(byFilters, store.ByName(name))
+		}
+		for _, prefix := range request.Filters.NamePrefixes {
+			byFilters = append(byFilters, store.ByNamePrefix(prefix))
+		}
+		for _, prefix := range request.Filters.IDPrefixes {
+			byFilters = append(byFilters, store.ByIDPrefix(prefix))
+		}
+		labels = request.Filters.Labels
+		if request.Filters.Kind != "" {
+			// if we're filtering on Extensions, then set this to true. If Kind is
+			// the _only_ kind of filter, we'll set this to false below.
+			andKind = true
+		}
+	}
+
+	switch len(byFilters) {
+	case 0:
+		// NOTE(dperny): currently, filtering using store.ByKind would apply an
+		// Or operation, which means that filtering by kind would return a
+		// union. However, for Kind filters, we actually want the
+		// _intersection_; that is, _only_ objects of the specified kind. we
+		// could dig into the db code to figure out how to write and use an
+		// efficient And combinator, but I don't have the time nor expertise to
+		// do so at the moment. instead, we'll filter by kind after the fact.
+		// however, if there are no other kinds of filters, and we're ONLY
+		// listing by Kind, we can set that to be the only filter.
+		if andKind {
+			by = store.ByKind(request.Filters.Kind)
+			andKind = false
+		} else {
+			by = store.All
+		}
+	case 1:
+		by = byFilters[0]
+	default:
+		by = store.Or(byFilters...)
+	}
+
+	s.store.View(func(tx store.ReadTx) {
+		resources, err = store.FindResources(tx, by)
+	})
+	if err != nil {
+		return nil, err
+	}
+
+	// filter by label and extension
+	for _, resource := range resources {
+		if !filterMatchLabels(resource.Annotations.Labels, labels) {
+			continue
+		}
+		if andKind && resource.Kind != request.Filters.Kind {
+			continue
+		}
+		respResources = append(respResources, resource)
+	}
+
+	return &api.ListResourcesResponse{Resources: respResources}, nil
+}
+
+// UpdateResource updates the resource with the given `UpdateResourceRequest.Resource.Id` using the given `UpdateResourceRequest.Resource` and returns a `UpdateResourceResponse`.
+// - Returns `NotFound` if the Resource with the given `UpdateResourceRequest.Resource.Id` is not found.
+// - Returns `InvalidArgument` if the UpdateResourceRequest.Resource.Id` is empty.
+// - Returns an error if updating fails.
+func (s *Server) UpdateResource(ctx context.Context, request *api.UpdateResourceRequest) (*api.UpdateResourceResponse, error) {
+	if request.ResourceID == "" || request.ResourceVersion == nil {
+		return nil, status.Errorf(codes.InvalidArgument, "must include ID and version")
+	}
+	var r *api.Resource
+	err := s.store.Update(func(tx store.Tx) error {
+		r = store.GetResource(tx, request.ResourceID)
+		if r == nil {
+			return status.Errorf(codes.NotFound, "resource %v not found", request.ResourceID)
+		}
+
+		if request.Annotations != nil {
+			if r.Annotations.Name != request.Annotations.Name {
+				return status.Errorf(codes.InvalidArgument, "cannot change resource name")
+			}
+			r.Annotations = *request.Annotations
+		}
+		r.Meta.Version = *request.ResourceVersion
+		// only alter the payload if the
+		if request.Payload != nil {
+			r.Payload = request.Payload
+		}
+
+		return store.UpdateResource(tx, r)
+	})
+	switch err {
+	case store.ErrSequenceConflict:
+		return nil, status.Errorf(codes.InvalidArgument, "update out of sequence")
+	case nil:
+		return &api.UpdateResourceResponse{
+			Resource: r,
+		}, nil
+	default:
+		return nil, err
+	}
+}

+ 5 - 0
vendor/github.com/docker/swarmkit/manager/state/raft/util.go

@@ -2,6 +2,7 @@ package raft
 
 
 import (
 import (
 	"context"
 	"context"
+	"net"
 	"time"
 	"time"
 
 
 	"github.com/docker/swarmkit/api"
 	"github.com/docker/swarmkit/api"
@@ -14,11 +15,15 @@ import (
 
 
 // dial returns a grpc client connection
 // dial returns a grpc client connection
 func dial(addr string, protocol string, creds credentials.TransportCredentials, timeout time.Duration) (*grpc.ClientConn, error) {
 func dial(addr string, protocol string, creds credentials.TransportCredentials, timeout time.Duration) (*grpc.ClientConn, error) {
+	// gRPC dialer connects to proxy first. Provide a custom dialer here avoid that.
 	grpcOptions := []grpc.DialOption{
 	grpcOptions := []grpc.DialOption{
 		grpc.WithBackoffMaxDelay(2 * time.Second),
 		grpc.WithBackoffMaxDelay(2 * time.Second),
 		grpc.WithTransportCredentials(creds),
 		grpc.WithTransportCredentials(creds),
 		grpc.WithUnaryInterceptor(grpc_prometheus.UnaryClientInterceptor),
 		grpc.WithUnaryInterceptor(grpc_prometheus.UnaryClientInterceptor),
 		grpc.WithStreamInterceptor(grpc_prometheus.StreamClientInterceptor),
 		grpc.WithStreamInterceptor(grpc_prometheus.StreamClientInterceptor),
+		grpc.WithDialer(func(addr string, timeout time.Duration) (net.Conn, error) {
+			return net.DialTimeout("tcp", addr, timeout)
+		}),
 	}
 	}
 
 
 	if timeout != 0 {
 	if timeout != 0 {

+ 19 - 2
vendor/github.com/docker/swarmkit/manager/state/store/resources.go

@@ -1,6 +1,8 @@
 package store
 package store
 
 
 import (
 import (
+	"strings"
+
 	"github.com/docker/swarmkit/api"
 	"github.com/docker/swarmkit/api"
 	memdb "github.com/hashicorp/go-memdb"
 	memdb "github.com/hashicorp/go-memdb"
 	"github.com/pkg/errors"
 	"github.com/pkg/errors"
@@ -8,6 +10,12 @@ import (
 
 
 const tableResource = "resource"
 const tableResource = "resource"
 
 
+var (
+	// ErrNoKind is returned by resource create operations if the provided Kind
+	// of the resource does not exist
+	ErrNoKind = errors.New("object kind is unregistered")
+)
+
 func init() {
 func init() {
 	register(ObjectStoreConfig{
 	register(ObjectStoreConfig{
 		Table: &memdb.TableSchema{
 		Table: &memdb.TableSchema{
@@ -87,17 +95,26 @@ func confirmExtension(tx Tx, r *api.Resource) error {
 		return errors.Wrap(err, "failed to query extensions")
 		return errors.Wrap(err, "failed to query extensions")
 	}
 	}
 	if len(extensions) == 0 {
 	if len(extensions) == 0 {
-		return errors.Errorf("object kind %s is unregistered", r.Kind)
+		return ErrNoKind
 	}
 	}
 	return nil
 	return nil
 }
 }
 
 
 // CreateResource adds a new resource object to the store.
 // CreateResource adds a new resource object to the store.
 // Returns ErrExist if the ID is already taken.
 // Returns ErrExist if the ID is already taken.
+// Returns ErrNameConflict if a Resource with this Name already exists
+// Returns ErrNoKind if the specified Kind does not exist
 func CreateResource(tx Tx, r *api.Resource) error {
 func CreateResource(tx Tx, r *api.Resource) error {
 	if err := confirmExtension(tx, r); err != nil {
 	if err := confirmExtension(tx, r); err != nil {
 		return err
 		return err
 	}
 	}
+	// TODO(dperny): currently the "name" index is unique, which means only one
+	// Resource of _any_ Kind can exist with that name. This isn't a problem
+	// right now, but the ideal case would be for names to be namespaced to the
+	// kind.
+	if tx.lookup(tableResource, indexName, strings.ToLower(r.Annotations.Name)) != nil {
+		return ErrNameConflict
+	}
 	return tx.create(tableResource, resourceEntry{r})
 	return tx.create(tableResource, resourceEntry{r})
 }
 }
 
 
@@ -130,7 +147,7 @@ func GetResource(tx ReadTx, id string) *api.Resource {
 func FindResources(tx ReadTx, by By) ([]*api.Resource, error) {
 func FindResources(tx ReadTx, by By) ([]*api.Resource, error) {
 	checkType := func(by By) error {
 	checkType := func(by By) error {
 		switch by.(type) {
 		switch by.(type) {
-		case byIDPrefix, byName, byKind, byCustom, byCustomPrefix:
+		case byIDPrefix, byName, byNamePrefix, byKind, byCustom, byCustomPrefix:
 			return nil
 			return nil
 		default:
 		default:
 			return ErrInvalidFindBy
 			return ErrInvalidFindBy

Nem az összes módosított fájl került megjelenítésre, mert túl sok fájl változott