diff --git a/api/openapi-spec/swagger.json b/api/openapi-spec/swagger.json index c7e35804124..3ba22ca413e 100644 --- a/api/openapi-spec/swagger.json +++ b/api/openapi-spec/swagger.json @@ -59407,7 +59407,11 @@ ], "properties": { "path": { - "description": "Path of the directory on the host. More info: https://kubernetes.io/docs/concepts/storage/volumes#hostpath", + "description": "Path of the directory on the host. If the path is a symlink, it will follow the link to the real path. More info: https://kubernetes.io/docs/concepts/storage/volumes#hostpath", + "type": "string" + }, + "type": { + "description": "Type for HostPath Volume Defaults to \"\" More info: https://kubernetes.io/docs/concepts/storage/volumes#hostpath", "type": "string" } } diff --git a/api/swagger-spec/apps_v1beta1.json b/api/swagger-spec/apps_v1beta1.json index 7f851dc1d16..15c54a64d52 100644 --- a/api/swagger-spec/apps_v1beta1.json +++ b/api/swagger-spec/apps_v1beta1.json @@ -4135,10 +4135,18 @@ "properties": { "path": { "type": "string", - "description": "Path of the directory on the host. More info: https://kubernetes.io/docs/concepts/storage/volumes#hostpath" + "description": "Path of the directory on the host. If the path is a symlink, it will follow the link to the real path. More info: https://kubernetes.io/docs/concepts/storage/volumes#hostpath" + }, + "type": { + "$ref": "v1.HostPathType", + "description": "Type for HostPath Volume Defaults to \"\" More info: https://kubernetes.io/docs/concepts/storage/volumes#hostpath" } } }, + "v1.HostPathType": { + "id": "v1.HostPathType", + "properties": {} + }, "v1.EmptyDirVolumeSource": { "id": "v1.EmptyDirVolumeSource", "description": "Represents an empty directory for a pod. Empty directory volumes support ownership management and SELinux relabeling.", diff --git a/api/swagger-spec/apps_v1beta2.json b/api/swagger-spec/apps_v1beta2.json index fef4925de90..fef90e9ed72 100644 --- a/api/swagger-spec/apps_v1beta2.json +++ b/api/swagger-spec/apps_v1beta2.json @@ -6273,10 +6273,18 @@ "properties": { "path": { "type": "string", - "description": "Path of the directory on the host. More info: https://kubernetes.io/docs/concepts/storage/volumes#hostpath" + "description": "Path of the directory on the host. If the path is a symlink, it will follow the link to the real path. More info: https://kubernetes.io/docs/concepts/storage/volumes#hostpath" + }, + "type": { + "$ref": "v1.HostPathType", + "description": "Type for HostPath Volume Defaults to \"\" More info: https://kubernetes.io/docs/concepts/storage/volumes#hostpath" } } }, + "v1.HostPathType": { + "id": "v1.HostPathType", + "properties": {} + }, "v1.EmptyDirVolumeSource": { "id": "v1.EmptyDirVolumeSource", "description": "Represents an empty directory for a pod. Empty directory volumes support ownership management and SELinux relabeling.", diff --git a/api/swagger-spec/batch_v1.json b/api/swagger-spec/batch_v1.json index d5717ec9667..8cb18abe3cd 100644 --- a/api/swagger-spec/batch_v1.json +++ b/api/swagger-spec/batch_v1.json @@ -1717,10 +1717,18 @@ "properties": { "path": { "type": "string", - "description": "Path of the directory on the host. More info: https://kubernetes.io/docs/concepts/storage/volumes#hostpath" + "description": "Path of the directory on the host. If the path is a symlink, it will follow the link to the real path. More info: https://kubernetes.io/docs/concepts/storage/volumes#hostpath" + }, + "type": { + "$ref": "v1.HostPathType", + "description": "Type for HostPath Volume Defaults to \"\" More info: https://kubernetes.io/docs/concepts/storage/volumes#hostpath" } } }, + "v1.HostPathType": { + "id": "v1.HostPathType", + "properties": {} + }, "v1.EmptyDirVolumeSource": { "id": "v1.EmptyDirVolumeSource", "description": "Represents an empty directory for a pod. Empty directory volumes support ownership management and SELinux relabeling.", diff --git a/api/swagger-spec/batch_v1beta1.json b/api/swagger-spec/batch_v1beta1.json index 179dc318c1d..e06d9a67247 100644 --- a/api/swagger-spec/batch_v1beta1.json +++ b/api/swagger-spec/batch_v1beta1.json @@ -1772,10 +1772,18 @@ "properties": { "path": { "type": "string", - "description": "Path of the directory on the host. More info: https://kubernetes.io/docs/concepts/storage/volumes#hostpath" + "description": "Path of the directory on the host. If the path is a symlink, it will follow the link to the real path. More info: https://kubernetes.io/docs/concepts/storage/volumes#hostpath" + }, + "type": { + "$ref": "v1.HostPathType", + "description": "Type for HostPath Volume Defaults to \"\" More info: https://kubernetes.io/docs/concepts/storage/volumes#hostpath" } } }, + "v1.HostPathType": { + "id": "v1.HostPathType", + "properties": {} + }, "v1.EmptyDirVolumeSource": { "id": "v1.EmptyDirVolumeSource", "description": "Represents an empty directory for a pod. Empty directory volumes support ownership management and SELinux relabeling.", diff --git a/api/swagger-spec/batch_v2alpha1.json b/api/swagger-spec/batch_v2alpha1.json index 4be36f918ac..da31e4572ce 100644 --- a/api/swagger-spec/batch_v2alpha1.json +++ b/api/swagger-spec/batch_v2alpha1.json @@ -1772,10 +1772,18 @@ "properties": { "path": { "type": "string", - "description": "Path of the directory on the host. More info: https://kubernetes.io/docs/concepts/storage/volumes#hostpath" + "description": "Path of the directory on the host. If the path is a symlink, it will follow the link to the real path. More info: https://kubernetes.io/docs/concepts/storage/volumes#hostpath" + }, + "type": { + "$ref": "v1.HostPathType", + "description": "Type for HostPath Volume Defaults to \"\" More info: https://kubernetes.io/docs/concepts/storage/volumes#hostpath" } } }, + "v1.HostPathType": { + "id": "v1.HostPathType", + "properties": {} + }, "v1.EmptyDirVolumeSource": { "id": "v1.EmptyDirVolumeSource", "description": "Represents an empty directory for a pod. Empty directory volumes support ownership management and SELinux relabeling.", diff --git a/api/swagger-spec/extensions_v1beta1.json b/api/swagger-spec/extensions_v1beta1.json index 18f02453b46..b00cd68661b 100644 --- a/api/swagger-spec/extensions_v1beta1.json +++ b/api/swagger-spec/extensions_v1beta1.json @@ -6827,10 +6827,18 @@ "properties": { "path": { "type": "string", - "description": "Path of the directory on the host. More info: https://kubernetes.io/docs/concepts/storage/volumes#hostpath" + "description": "Path of the directory on the host. If the path is a symlink, it will follow the link to the real path. More info: https://kubernetes.io/docs/concepts/storage/volumes#hostpath" + }, + "type": { + "$ref": "v1.HostPathType", + "description": "Type for HostPath Volume Defaults to \"\" More info: https://kubernetes.io/docs/concepts/storage/volumes#hostpath" } } }, + "v1.HostPathType": { + "id": "v1.HostPathType", + "properties": {} + }, "v1.EmptyDirVolumeSource": { "id": "v1.EmptyDirVolumeSource", "description": "Represents an empty directory for a pod. Empty directory volumes support ownership management and SELinux relabeling.", diff --git a/api/swagger-spec/settings.k8s.io_v1alpha1.json b/api/swagger-spec/settings.k8s.io_v1alpha1.json index f5a1da5603a..ce3488154d0 100644 --- a/api/swagger-spec/settings.k8s.io_v1alpha1.json +++ b/api/swagger-spec/settings.k8s.io_v1alpha1.json @@ -1573,10 +1573,18 @@ "properties": { "path": { "type": "string", - "description": "Path of the directory on the host. More info: https://kubernetes.io/docs/concepts/storage/volumes#hostpath" + "description": "Path of the directory on the host. If the path is a symlink, it will follow the link to the real path. More info: https://kubernetes.io/docs/concepts/storage/volumes#hostpath" + }, + "type": { + "$ref": "v1.HostPathType", + "description": "Type for HostPath Volume Defaults to \"\" More info: https://kubernetes.io/docs/concepts/storage/volumes#hostpath" } } }, + "v1.HostPathType": { + "id": "v1.HostPathType", + "properties": {} + }, "v1.EmptyDirVolumeSource": { "id": "v1.EmptyDirVolumeSource", "description": "Represents an empty directory for a pod. Empty directory volumes support ownership management and SELinux relabeling.", diff --git a/api/swagger-spec/v1.json b/api/swagger-spec/v1.json index 3fdcb1c4132..57eaa0fe613 100644 --- a/api/swagger-spec/v1.json +++ b/api/swagger-spec/v1.json @@ -18998,10 +18998,18 @@ "properties": { "path": { "type": "string", - "description": "Path of the directory on the host. More info: https://kubernetes.io/docs/concepts/storage/volumes#hostpath" + "description": "Path of the directory on the host. If the path is a symlink, it will follow the link to the real path. More info: https://kubernetes.io/docs/concepts/storage/volumes#hostpath" + }, + "type": { + "$ref": "v1.HostPathType", + "description": "Type for HostPath Volume Defaults to \"\" More info: https://kubernetes.io/docs/concepts/storage/volumes#hostpath" } } }, + "v1.HostPathType": { + "id": "v1.HostPathType", + "properties": {} + }, "v1.GlusterfsVolumeSource": { "id": "v1.GlusterfsVolumeSource", "description": "Represents a Glusterfs mount that lasts the lifetime of a pod. Glusterfs volumes do not support ownership management or SELinux relabeling.", diff --git a/docs/api-reference/apps/v1beta1/definitions.html b/docs/api-reference/apps/v1beta1/definitions.html index 09d2dcda150..269932207ae 100755 --- a/docs/api-reference/apps/v1beta1/definitions.html +++ b/docs/api-reference/apps/v1beta1/definitions.html @@ -4588,6 +4588,10 @@ Examples:
+ +
+

v1.HostPathType

+

v1.Initializers

@@ -5874,11 +5878,18 @@ Examples:

path

-

Path of the directory on the host. More info: https://kubernetes.io/docs/concepts/storage/volumes#hostpath

+

Path of the directory on the host. If the path is a symlink, it will follow the link to the real path. More info: https://kubernetes.io/docs/concepts/storage/volumes#hostpath

true

string

+ +

type

+

Type for HostPath Volume Defaults to "" More info: https://kubernetes.io/docs/concepts/storage/volumes#hostpath

+

false

+

v1.HostPathType

+ + diff --git a/docs/api-reference/apps/v1beta2/definitions.html b/docs/api-reference/apps/v1beta2/definitions.html index f8c8478996b..516b3cb860b 100755 --- a/docs/api-reference/apps/v1beta2/definitions.html +++ b/docs/api-reference/apps/v1beta2/definitions.html @@ -4949,6 +4949,10 @@ Examples:
+
+
+

v1.HostPathType

+

v1beta2.ReplicaSet

@@ -6084,11 +6088,18 @@ Examples:

path

-

Path of the directory on the host. More info: https://kubernetes.io/docs/concepts/storage/volumes#hostpath

+

Path of the directory on the host. If the path is a symlink, it will follow the link to the real path. More info: https://kubernetes.io/docs/concepts/storage/volumes#hostpath

true

string

+ +

type

+

Type for HostPath Volume Defaults to "" More info: https://kubernetes.io/docs/concepts/storage/volumes#hostpath

+

false

+

v1.HostPathType

+ + diff --git a/docs/api-reference/batch/v1/definitions.html b/docs/api-reference/batch/v1/definitions.html index e7a02dfa36a..6c6ff9a8320 100755 --- a/docs/api-reference/batch/v1/definitions.html +++ b/docs/api-reference/batch/v1/definitions.html @@ -1483,6 +1483,10 @@ When an object is created, the system will populate this list with the current s +
+
+

types.UID

+

v1.AzureFileVolumeSource

@@ -1531,10 +1535,6 @@ When an object is created, the system will populate this list with the current s -
-
-

types.UID

-

v1.ISCSIVolumeSource

@@ -3831,6 +3831,10 @@ Examples:
+
+
+

v1.HostPathType

+

v1.Initializers

@@ -4842,11 +4846,18 @@ Examples:

path

-

Path of the directory on the host. More info: https://kubernetes.io/docs/concepts/storage/volumes#hostpath

+

Path of the directory on the host. If the path is a symlink, it will follow the link to the real path. More info: https://kubernetes.io/docs/concepts/storage/volumes#hostpath

true

string

+ +

type

+

Type for HostPath Volume Defaults to "" More info: https://kubernetes.io/docs/concepts/storage/volumes#hostpath

+

false

+

v1.HostPathType

+ + diff --git a/docs/api-reference/batch/v1beta1/definitions.html b/docs/api-reference/batch/v1beta1/definitions.html index fc245f69b1d..87cbfc1de31 100755 --- a/docs/api-reference/batch/v1beta1/definitions.html +++ b/docs/api-reference/batch/v1beta1/definitions.html @@ -3941,6 +3941,10 @@ Examples:
+
+
+

v1.HostPathType

+

v1.Initializers

@@ -4924,11 +4928,18 @@ Examples:

path

-

Path of the directory on the host. More info: https://kubernetes.io/docs/concepts/storage/volumes#hostpath

+

Path of the directory on the host. If the path is a symlink, it will follow the link to the real path. More info: https://kubernetes.io/docs/concepts/storage/volumes#hostpath

true

string

+ +

type

+

Type for HostPath Volume Defaults to "" More info: https://kubernetes.io/docs/concepts/storage/volumes#hostpath

+

false

+

v1.HostPathType

+ + diff --git a/docs/api-reference/batch/v2alpha1/definitions.html b/docs/api-reference/batch/v2alpha1/definitions.html index 50f7ff3f20b..59b28ef757c 100755 --- a/docs/api-reference/batch/v2alpha1/definitions.html +++ b/docs/api-reference/batch/v2alpha1/definitions.html @@ -3838,6 +3838,10 @@ Examples:
+
+
+

v1.HostPathType

+

v1.Initializers

@@ -4780,11 +4784,18 @@ Examples:

path

-

Path of the directory on the host. More info: https://kubernetes.io/docs/concepts/storage/volumes#hostpath

+

Path of the directory on the host. If the path is a symlink, it will follow the link to the real path. More info: https://kubernetes.io/docs/concepts/storage/volumes#hostpath

true

string

+ +

type

+

Type for HostPath Volume Defaults to "" More info: https://kubernetes.io/docs/concepts/storage/volumes#hostpath

+

false

+

v1.HostPathType

+ + diff --git a/docs/api-reference/extensions/v1beta1/definitions.html b/docs/api-reference/extensions/v1beta1/definitions.html index 9c43b839cdb..5c184f8eabd 100755 --- a/docs/api-reference/extensions/v1beta1/definitions.html +++ b/docs/api-reference/extensions/v1beta1/definitions.html @@ -5271,6 +5271,10 @@ Examples:
+
+
+

v1.HostPathType

+

v1beta1.FSType

@@ -6751,11 +6755,18 @@ Both these may change in the future. Incoming requests are matched against the h

path

-

Path of the directory on the host. More info: https://kubernetes.io/docs/concepts/storage/volumes#hostpath

+

Path of the directory on the host. If the path is a symlink, it will follow the link to the real path. More info: https://kubernetes.io/docs/concepts/storage/volumes#hostpath

true

string

+ +

type

+

Type for HostPath Volume Defaults to "" More info: https://kubernetes.io/docs/concepts/storage/volumes#hostpath

+

false

+

v1.HostPathType

+ + diff --git a/docs/api-reference/settings.k8s.io/v1alpha1/definitions.html b/docs/api-reference/settings.k8s.io/v1alpha1/definitions.html index 9a87b1f0f1e..b273a5e3ce3 100755 --- a/docs/api-reference/settings.k8s.io/v1alpha1/definitions.html +++ b/docs/api-reference/settings.k8s.io/v1alpha1/definitions.html @@ -680,6 +680,10 @@ span.icon > [class^="icon-"], span.icon > [class*=" icon-"] { cursor: default; } +
+
+

v1.HostPathType

+

v1.Preconditions

@@ -1997,11 +2001,18 @@ When an object is created, the system will populate this list with the current s

path

-

Path of the directory on the host. More info: https://kubernetes.io/docs/concepts/storage/volumes#hostpath

+

Path of the directory on the host. If the path is a symlink, it will follow the link to the real path. More info: https://kubernetes.io/docs/concepts/storage/volumes#hostpath

true

string

+ +

type

+

Type for HostPath Volume Defaults to "" More info: https://kubernetes.io/docs/concepts/storage/volumes#hostpath

+

false

+

v1.HostPathType

+ + @@ -3014,54 +3025,6 @@ When an object is created, the system will populate this list with the current s -
-
-

v1.KeyToPath

-
-

Maps a string key to a path within a volume.

-
- ------- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameDescriptionRequiredSchemaDefault

key

The key to project.

true

string

path

The relative path of the file to map the key to. May not be an absolute path. May not contain the path element ... May not start with the string ...

true

string

mode

Optional: mode bits to use on this file, must be a value between 0 and 0777. If not specified, the volume defaultMode will be used. This might be in conflict with other options that affect the file mode, like fsGroup, and the result can be other mode bits set.

false

integer (int32)

-

v1.AzureDiskVolumeSource

@@ -3131,6 +3094,54 @@ When an object is created, the system will populate this list with the current s +
+
+

v1.KeyToPath

+
+

Maps a string key to a path within a volume.

+
+ +++++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameDescriptionRequiredSchemaDefault

key

The key to project.

true

string

path

The relative path of the file to map the key to. May not be an absolute path. May not contain the path element ... May not start with the string ...

true

string

mode

Optional: mode bits to use on this file, must be a value between 0 and 0777. If not specified, the volume defaultMode will be used. This might be in conflict with other options that affect the file mode, like fsGroup, and the result can be other mode bits set.

false

integer (int32)

+

v1.VsphereVirtualDiskVolumeSource

diff --git a/docs/api-reference/v1/definitions.html b/docs/api-reference/v1/definitions.html index ec3805edbf1..362029d2e7d 100755 --- a/docs/api-reference/v1/definitions.html +++ b/docs/api-reference/v1/definitions.html @@ -3863,6 +3863,54 @@ The resulting set of endpoints can be viewed as:
+
+
+

v1.KeyToPath

+
+

Maps a string key to a path within a volume.

+
+ +++++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameDescriptionRequiredSchemaDefault

key

The key to project.

true

string

path

The relative path of the file to map the key to. May not be an absolute path. May not contain the path element ... May not start with the string ...

true

string

mode

Optional: mode bits to use on this file, must be a value between 0 and 0777. If not specified, the volume defaultMode will be used. This might be in conflict with other options that affect the file mode, like fsGroup, and the result can be other mode bits set.

false

integer (int32)

+

v1.AzureDiskVolumeSource

@@ -3932,54 +3980,6 @@ The resulting set of endpoints can be viewed as:
-
-
-

v1.KeyToPath

-
-

Maps a string key to a path within a volume.

-
- ------- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameDescriptionRequiredSchemaDefault

key

The key to project.

true

string

path

The relative path of the file to map the key to. May not be an absolute path. May not contain the path element ... May not start with the string ...

true

string

mode

Optional: mode bits to use on this file, must be a value between 0 and 0777. If not specified, the volume defaultMode will be used. This might be in conflict with other options that affect the file mode, like fsGroup, and the result can be other mode bits set.

false

integer (int32)

-

v1.Service

@@ -6375,6 +6375,10 @@ Examples:
+
+
+

v1.HostPathType

+

v1.Initializers

@@ -8031,11 +8035,18 @@ Examples:

path

-

Path of the directory on the host. More info: https://kubernetes.io/docs/concepts/storage/volumes#hostpath

+

Path of the directory on the host. If the path is a symlink, it will follow the link to the real path. More info: https://kubernetes.io/docs/concepts/storage/volumes#hostpath

true

string

+ +

type

+

Type for HostPath Volume Defaults to "" More info: https://kubernetes.io/docs/concepts/storage/volumes#hostpath

+

false

+

v1.HostPathType

+ + diff --git a/federation/apis/openapi-spec/swagger.json b/federation/apis/openapi-spec/swagger.json index 00532e864e5..96f9d9284ce 100644 --- a/federation/apis/openapi-spec/swagger.json +++ b/federation/apis/openapi-spec/swagger.json @@ -10605,7 +10605,11 @@ ], "properties": { "path": { - "description": "Path of the directory on the host. More info: https://kubernetes.io/docs/concepts/storage/volumes#hostpath", + "description": "Path of the directory on the host. If the path is a symlink, it will follow the link to the real path. More info: https://kubernetes.io/docs/concepts/storage/volumes#hostpath", + "type": "string" + }, + "type": { + "description": "Type for HostPath Volume Defaults to \"\" More info: https://kubernetes.io/docs/concepts/storage/volumes#hostpath", "type": "string" } } diff --git a/federation/apis/swagger-spec/extensions_v1beta1.json b/federation/apis/swagger-spec/extensions_v1beta1.json index 26c7a895222..530cd7a0a1c 100644 --- a/federation/apis/swagger-spec/extensions_v1beta1.json +++ b/federation/apis/swagger-spec/extensions_v1beta1.json @@ -5186,10 +5186,18 @@ "properties": { "path": { "type": "string", - "description": "Path of the directory on the host. More info: https://kubernetes.io/docs/concepts/storage/volumes#hostpath" + "description": "Path of the directory on the host. If the path is a symlink, it will follow the link to the real path. More info: https://kubernetes.io/docs/concepts/storage/volumes#hostpath" + }, + "type": { + "$ref": "v1.HostPathType", + "description": "Type for HostPath Volume Defaults to \"\" More info: https://kubernetes.io/docs/concepts/storage/volumes#hostpath" } } }, + "v1.HostPathType": { + "id": "v1.HostPathType", + "properties": {} + }, "v1.EmptyDirVolumeSource": { "id": "v1.EmptyDirVolumeSource", "description": "Represents an empty directory for a pod. Empty directory volumes support ownership management and SELinux relabeling.", diff --git a/federation/docs/api-reference/extensions/v1beta1/definitions.html b/federation/docs/api-reference/extensions/v1beta1/definitions.html index 2485c2105a5..336adc11d6c 100755 --- a/federation/docs/api-reference/extensions/v1beta1/definitions.html +++ b/federation/docs/api-reference/extensions/v1beta1/definitions.html @@ -4875,6 +4875,10 @@ Examples:
+
+
+

v1.HostPathType

+

v1.Initializers

@@ -6234,11 +6238,18 @@ Both these may change in the future. Incoming requests are matched against the h

path

-

Path of the directory on the host. More info: https://kubernetes.io/docs/concepts/storage/volumes#hostpath

+

Path of the directory on the host. If the path is a symlink, it will follow the link to the real path. More info: https://kubernetes.io/docs/concepts/storage/volumes#hostpath

true

string

+ +

type

+

Type for HostPath Volume Defaults to "" More info: https://kubernetes.io/docs/concepts/storage/volumes#hostpath

+

false

+

v1.HostPathType

+ + diff --git a/pkg/api/fuzzer/fuzzer.go b/pkg/api/fuzzer/fuzzer.go index 9d0f94a2678..045952d9cb1 100644 --- a/pkg/api/fuzzer/fuzzer.go +++ b/pkg/api/fuzzer/fuzzer.go @@ -355,6 +355,15 @@ var Funcs = func(codecs runtimeserializer.CodecFactory) []interface{} { r.Keyring = "/etc/ceph/keyring" } }, + func(obj *api.HostPathVolumeSource, c fuzz.Continue) { + c.FuzzNoCustom(obj) + types := []api.HostPathType{api.HostPathUnset, api.HostPathDirectoryOrCreate, api.HostPathDirectory, + api.HostPathFileOrCreate, api.HostPathFile, api.HostPathSocket, api.HostPathCharDev, api.HostPathBlockDev} + typeVol := types[c.Rand.Intn(len(types))] + if obj.Path != "" && obj.Type == nil { + obj.Type = &typeVol + } + }, func(pv *api.PersistentVolume, c fuzz.Continue) { c.FuzzNoCustom(pv) // fuzz self without calling this function again types := []api.PersistentVolumePhase{api.VolumeAvailable, api.VolumePending, api.VolumeBound, api.VolumeReleased, api.VolumeFailed} diff --git a/pkg/api/types.go b/pkg/api/types.go index c4843c8001a..630ca3b48af 100644 --- a/pkg/api/types.go +++ b/pkg/api/types.go @@ -597,10 +597,36 @@ const ( ClaimLost PersistentVolumeClaimPhase = "Lost" ) +type HostPathType string + +const ( + // For backwards compatible, leave it empty if unset + HostPathUnset HostPathType = "" + // If nothing exists at the given path, an empty directory will be created there + // as needed with file mode 0755, having the same group and ownership with Kubelet. + HostPathDirectoryOrCreate HostPathType = "DirectoryOrCreate" + // A directory must exist at the given path + HostPathDirectory HostPathType = "Directory" + // If nothing exists at the given path, an empty file will be created there + // as needed with file mode 0644, having the same group and ownership with Kubelet. + HostPathFileOrCreate HostPathType = "FileOrCreate" + // A file must exist at the given path + HostPathFile HostPathType = "File" + // A UNIX socket must exist at the given path + HostPathSocket HostPathType = "Socket" + // A character device must exist at the given path + HostPathCharDev HostPathType = "CharDevice" + // A block device must exist at the given path + HostPathBlockDev HostPathType = "BlockDevice" +) + // Represents a host path mapped into a pod. // Host path volumes do not support ownership management or SELinux relabeling. type HostPathVolumeSource struct { + // If the path is a symlink, it will follow the link to the real path. Path string + // Defaults to "" + Type *HostPathType } // Represents an empty directory for a pod. diff --git a/pkg/api/v1/defaults.go b/pkg/api/v1/defaults.go index 70c1d709efb..8b062695f93 100644 --- a/pkg/api/v1/defaults.go +++ b/pkg/api/v1/defaults.go @@ -369,3 +369,10 @@ func SetDefaults_ScaleIOVolumeSource(obj *v1.ScaleIOVolumeSource) { obj.FSType = "xfs" } } + +func SetDefaults_HostPathVolumeSource(obj *v1.HostPathVolumeSource) { + typeVol := v1.HostPathUnset + if obj.Type == nil { + obj.Type = &typeVol + } +} diff --git a/pkg/api/v1/defaults_test.go b/pkg/api/v1/defaults_test.go index 0e39bd55d9f..6b7027d1ae5 100644 --- a/pkg/api/v1/defaults_test.go +++ b/pkg/api/v1/defaults_test.go @@ -1277,3 +1277,25 @@ func TestSetDefaultSchedulerName(t *testing.T) { t.Errorf("Expected scheduler name: %+v\ngot: %+v\n", v1.DefaultSchedulerName, output.Spec.SchedulerName) } } + +func TestSetDefaultHostPathVolumeSource(t *testing.T) { + s := v1.PodSpec{} + s.Volumes = []v1.Volume{ + { + VolumeSource: v1.VolumeSource{ + HostPath: &v1.HostPathVolumeSource{Path: "foo"}, + }, + }, + } + pod := &v1.Pod{ + Spec: s, + } + output := roundTrip(t, runtime.Object(pod)) + pod2 := output.(*v1.Pod) + defaultType := pod2.Spec.Volumes[0].VolumeSource.HostPath.Type + expectedType := v1.HostPathUnset + + if defaultType == nil || *defaultType != expectedType { + t.Errorf("Expected v1.HostPathVolumeSource default type %v, got %v", expectedType, defaultType) + } +} diff --git a/pkg/api/v1/zz_generated.conversion.go b/pkg/api/v1/zz_generated.conversion.go index d77f1861004..228c8fe9361 100644 --- a/pkg/api/v1/zz_generated.conversion.go +++ b/pkg/api/v1/zz_generated.conversion.go @@ -1841,6 +1841,7 @@ func Convert_api_HostAlias_To_v1_HostAlias(in *api.HostAlias, out *v1.HostAlias, func autoConvert_v1_HostPathVolumeSource_To_api_HostPathVolumeSource(in *v1.HostPathVolumeSource, out *api.HostPathVolumeSource, s conversion.Scope) error { out.Path = in.Path + out.Type = (*api.HostPathType)(unsafe.Pointer(in.Type)) return nil } @@ -1851,6 +1852,7 @@ func Convert_v1_HostPathVolumeSource_To_api_HostPathVolumeSource(in *v1.HostPath func autoConvert_api_HostPathVolumeSource_To_v1_HostPathVolumeSource(in *api.HostPathVolumeSource, out *v1.HostPathVolumeSource, s conversion.Scope) error { out.Path = in.Path + out.Type = (*v1.HostPathType)(unsafe.Pointer(in.Type)) return nil } diff --git a/pkg/api/v1/zz_generated.defaults.go b/pkg/api/v1/zz_generated.defaults.go index b0b0c6ece9e..c41d6ae3e37 100644 --- a/pkg/api/v1/zz_generated.defaults.go +++ b/pkg/api/v1/zz_generated.defaults.go @@ -133,6 +133,9 @@ func SetObjectDefaults_NodeList(in *v1.NodeList) { func SetObjectDefaults_PersistentVolume(in *v1.PersistentVolume) { SetDefaults_PersistentVolume(in) SetDefaults_ResourceList(&in.Spec.Capacity) + if in.Spec.PersistentVolumeSource.HostPath != nil { + SetDefaults_HostPathVolumeSource(in.Spec.PersistentVolumeSource.HostPath) + } if in.Spec.PersistentVolumeSource.RBD != nil { SetDefaults_RBDVolumeSource(in.Spec.PersistentVolumeSource.RBD) } @@ -174,6 +177,9 @@ func SetObjectDefaults_Pod(in *v1.Pod) { for i := range in.Spec.Volumes { a := &in.Spec.Volumes[i] SetDefaults_Volume(a) + if a.VolumeSource.HostPath != nil { + SetDefaults_HostPathVolumeSource(a.VolumeSource.HostPath) + } if a.VolumeSource.Secret != nil { SetDefaults_SecretVolumeSource(a.VolumeSource.Secret) } @@ -322,6 +328,9 @@ func SetObjectDefaults_PodTemplate(in *v1.PodTemplate) { for i := range in.Template.Spec.Volumes { a := &in.Template.Spec.Volumes[i] SetDefaults_Volume(a) + if a.VolumeSource.HostPath != nil { + SetDefaults_HostPathVolumeSource(a.VolumeSource.HostPath) + } if a.VolumeSource.Secret != nil { SetDefaults_SecretVolumeSource(a.VolumeSource.Secret) } @@ -464,6 +473,9 @@ func SetObjectDefaults_ReplicationController(in *v1.ReplicationController) { for i := range in.Spec.Template.Spec.Volumes { a := &in.Spec.Template.Spec.Volumes[i] SetDefaults_Volume(a) + if a.VolumeSource.HostPath != nil { + SetDefaults_HostPathVolumeSource(a.VolumeSource.HostPath) + } if a.VolumeSource.Secret != nil { SetDefaults_SecretVolumeSource(a.VolumeSource.Secret) } diff --git a/pkg/api/validation/validation.go b/pkg/api/validation/validation.go index 981eda5196d..1dd650fe40d 100644 --- a/pkg/api/validation/validation.go +++ b/pkg/api/validation/validation.go @@ -623,6 +623,7 @@ func validateHostPathVolumeSource(hostPath *api.HostPathVolumeSource, fldPath *f } allErrs = append(allErrs, validatePathNoBacksteps(hostPath.Path, fldPath.Child("path"))...) + allErrs = append(allErrs, validateHostPathType(hostPath.Type, fldPath.Child("type"))...) return allErrs } @@ -974,6 +975,26 @@ func validateProjectedVolumeSource(projection *api.ProjectedVolumeSource, fldPat return allErrs } +var supportedHostPathTypes = sets.NewString( + string(api.HostPathUnset), + string(api.HostPathDirectoryOrCreate), + string(api.HostPathDirectory), + string(api.HostPathFileOrCreate), + string(api.HostPathFile), + string(api.HostPathSocket), + string(api.HostPathCharDev), + string(api.HostPathBlockDev)) + +func validateHostPathType(hostPathType *api.HostPathType, fldPath *field.Path) field.ErrorList { + allErrs := field.ErrorList{} + + if !supportedHostPathTypes.Has(string(*hostPathType)) { + allErrs = append(allErrs, field.NotSupported(fldPath, hostPathType, supportedHostPathTypes.List())) + } + + return allErrs +} + // This validate will make sure targetPath: // 1. is not abs path // 2. does not have any element which is ".." diff --git a/pkg/api/validation/validation_test.go b/pkg/api/validation/validation_test.go index 932616554ac..50e36fe6b6a 100644 --- a/pkg/api/validation/validation_test.go +++ b/pkg/api/validation/validation_test.go @@ -43,6 +43,12 @@ const ( envVarNameErrMsg = "a valid environment variable name must consist of" ) +func newHostPathType(pathType string) *api.HostPathType { + hostPathType := new(api.HostPathType) + *hostPathType = api.HostPathType(pathType) + return hostPathType +} + func testVolume(name string, namespace string, spec api.PersistentVolumeSpec) *api.PersistentVolume { objMeta := metav1.ObjectMeta{Name: name} if namespace != "" { @@ -86,7 +92,10 @@ func TestValidatePersistentVolumes(t *testing.T) { }, AccessModes: []api.PersistentVolumeAccessMode{api.ReadWriteOnce}, PersistentVolumeSource: api.PersistentVolumeSource{ - HostPath: &api.HostPathVolumeSource{Path: "/foo"}, + HostPath: &api.HostPathVolumeSource{ + Path: "/foo", + Type: newHostPathType(string(api.HostPathDirectory)), + }, }, StorageClassName: "valid", }), @@ -99,7 +108,10 @@ func TestValidatePersistentVolumes(t *testing.T) { }, AccessModes: []api.PersistentVolumeAccessMode{api.ReadWriteOnce}, PersistentVolumeSource: api.PersistentVolumeSource{ - HostPath: &api.HostPathVolumeSource{Path: "/foo"}, + HostPath: &api.HostPathVolumeSource{ + Path: "/foo", + Type: newHostPathType(string(api.HostPathDirectory)), + }, }, PersistentVolumeReclaimPolicy: api.PersistentVolumeReclaimRetain, }), @@ -112,7 +124,10 @@ func TestValidatePersistentVolumes(t *testing.T) { }, AccessModes: []api.PersistentVolumeAccessMode{"fakemode"}, PersistentVolumeSource: api.PersistentVolumeSource{ - HostPath: &api.HostPathVolumeSource{Path: "/foo"}, + HostPath: &api.HostPathVolumeSource{ + Path: "/foo", + Type: newHostPathType(string(api.HostPathDirectory)), + }, }, }), }, @@ -124,7 +139,10 @@ func TestValidatePersistentVolumes(t *testing.T) { }, AccessModes: []api.PersistentVolumeAccessMode{api.ReadWriteOnce}, PersistentVolumeSource: api.PersistentVolumeSource{ - HostPath: &api.HostPathVolumeSource{Path: "/foo"}, + HostPath: &api.HostPathVolumeSource{ + Path: "/foo", + Type: newHostPathType(string(api.HostPathDirectory)), + }, }, PersistentVolumeReclaimPolicy: "fakeReclaimPolicy", }), @@ -137,7 +155,10 @@ func TestValidatePersistentVolumes(t *testing.T) { }, AccessModes: []api.PersistentVolumeAccessMode{api.ReadWriteOnce}, PersistentVolumeSource: api.PersistentVolumeSource{ - HostPath: &api.HostPathVolumeSource{Path: "/foo"}, + HostPath: &api.HostPathVolumeSource{ + Path: "/foo", + Type: newHostPathType(string(api.HostPathDirectory)), + }, }, }), }, @@ -149,7 +170,10 @@ func TestValidatePersistentVolumes(t *testing.T) { }, AccessModes: []api.PersistentVolumeAccessMode{api.ReadWriteOnce}, PersistentVolumeSource: api.PersistentVolumeSource{ - HostPath: &api.HostPathVolumeSource{Path: "/foo"}, + HostPath: &api.HostPathVolumeSource{ + Path: "/foo", + Type: newHostPathType(string(api.HostPathDirectory)), + }, }, }), }, @@ -173,7 +197,10 @@ func TestValidatePersistentVolumes(t *testing.T) { api.ResourceName(api.ResourceStorage): resource.MustParse("10G"), }, PersistentVolumeSource: api.PersistentVolumeSource{ - HostPath: &api.HostPathVolumeSource{Path: "/foo"}, + HostPath: &api.HostPathVolumeSource{ + Path: "/foo", + Type: newHostPathType(string(api.HostPathDirectory)), + }, }, }), }, @@ -184,7 +211,10 @@ func TestValidatePersistentVolumes(t *testing.T) { api.ResourceName(api.ResourceStorage): resource.MustParse("5G"), }, PersistentVolumeSource: api.PersistentVolumeSource{ - HostPath: &api.HostPathVolumeSource{Path: "/foo"}, + HostPath: &api.HostPathVolumeSource{ + Path: "/foo", + Type: newHostPathType(string(api.HostPathDirectory)), + }, GCEPersistentDisk: &api.GCEPersistentDiskVolumeSource{PDName: "foo", FSType: "ext4"}, }, }), @@ -197,7 +227,10 @@ func TestValidatePersistentVolumes(t *testing.T) { }, AccessModes: []api.PersistentVolumeAccessMode{api.ReadWriteOnce}, PersistentVolumeSource: api.PersistentVolumeSource{ - HostPath: &api.HostPathVolumeSource{Path: "/"}, + HostPath: &api.HostPathVolumeSource{ + Path: "/", + Type: newHostPathType(string(api.HostPathDirectory)), + }, }, PersistentVolumeReclaimPolicy: api.PersistentVolumeReclaimRecycle, }), @@ -210,7 +243,10 @@ func TestValidatePersistentVolumes(t *testing.T) { }, AccessModes: []api.PersistentVolumeAccessMode{api.ReadWriteOnce}, PersistentVolumeSource: api.PersistentVolumeSource{ - HostPath: &api.HostPathVolumeSource{Path: "/a/.."}, + HostPath: &api.HostPathVolumeSource{ + Path: "/a/..", + Type: newHostPathType(string(api.HostPathDirectory)), + }, }, PersistentVolumeReclaimPolicy: api.PersistentVolumeReclaimRecycle, }), @@ -223,7 +259,10 @@ func TestValidatePersistentVolumes(t *testing.T) { }, AccessModes: []api.PersistentVolumeAccessMode{api.ReadWriteOnce}, PersistentVolumeSource: api.PersistentVolumeSource{ - HostPath: &api.HostPathVolumeSource{Path: "/foo"}, + HostPath: &api.HostPathVolumeSource{ + Path: "/foo", + Type: newHostPathType(string(api.HostPathDirectory)), + }, }, StorageClassName: "-invalid-", }), @@ -272,7 +311,10 @@ func TestValidatePersistentVolumes(t *testing.T) { }, AccessModes: []api.PersistentVolumeAccessMode{api.ReadWriteOnce}, PersistentVolumeSource: api.PersistentVolumeSource{ - HostPath: &api.HostPathVolumeSource{Path: "/foo/.."}, + HostPath: &api.HostPathVolumeSource{ + Path: "/foo/..", + Type: newHostPathType(string(api.HostPathDirectory)), + }, }, StorageClassName: "backstep-hostpath", }), @@ -1109,6 +1151,7 @@ func TestValidateVolumes(t *testing.T) { EmptyDir: &api.EmptyDirVolumeSource{}, HostPath: &api.HostPathVolumeSource{ Path: "/mnt/path", + Type: newHostPathType(string(api.HostPathDirectory)), }, }, }, @@ -1116,7 +1159,20 @@ func TestValidateVolumes(t *testing.T) { errfield: "hostPath", errdetail: "may not specify more than 1 volume", }, - // HostPath + // HostPath Default + { + name: "default HostPath", + vol: api.Volume{ + Name: "hostpath", + VolumeSource: api.VolumeSource{ + HostPath: &api.HostPathVolumeSource{ + Path: "/mnt/path", + Type: newHostPathType(string(api.HostPathDirectory)), + }, + }, + }, + }, + // HostPath Supported { name: "valid HostPath", vol: api.Volume{ @@ -1124,10 +1180,26 @@ func TestValidateVolumes(t *testing.T) { VolumeSource: api.VolumeSource{ HostPath: &api.HostPathVolumeSource{ Path: "/mnt/path", + Type: newHostPathType(string(api.HostPathSocket)), }, }, }, }, + // HostPath Invalid + { + name: "invalid HostPath", + vol: api.Volume{ + Name: "hostpath", + VolumeSource: api.VolumeSource{ + HostPath: &api.HostPathVolumeSource{ + Path: "/mnt/path", + Type: newHostPathType("invalid"), + }, + }, + }, + errtype: field.ErrorTypeNotSupported, + errfield: "type", + }, { name: "invalid HostPath backsteps", vol: api.Volume{ @@ -1135,6 +1207,7 @@ func TestValidateVolumes(t *testing.T) { VolumeSource: api.VolumeSource{ HostPath: &api.HostPathVolumeSource{ Path: "/mnt/path/..", + Type: newHostPathType(string(api.HostPathDirectory)), }, }, }, diff --git a/pkg/api/zz_generated.deepcopy.go b/pkg/api/zz_generated.deepcopy.go index 48e58a4a031..6ae4f9a97ae 100644 --- a/pkg/api/zz_generated.deepcopy.go +++ b/pkg/api/zz_generated.deepcopy.go @@ -2303,6 +2303,15 @@ func (in *HostAlias) DeepCopy() *HostAlias { // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *HostPathVolumeSource) DeepCopyInto(out *HostPathVolumeSource) { *out = *in + if in.Type != nil { + in, out := &in.Type, &out.Type + if *in == nil { + *out = nil + } else { + *out = new(HostPathType) + **out = **in + } + } return } @@ -3572,7 +3581,7 @@ func (in *PersistentVolumeSource) DeepCopyInto(out *PersistentVolumeSource) { *out = nil } else { *out = new(HostPathVolumeSource) - **out = **in + (*in).DeepCopyInto(*out) } } if in.Glusterfs != nil { @@ -5823,7 +5832,7 @@ func (in *VolumeSource) DeepCopyInto(out *VolumeSource) { *out = nil } else { *out = new(HostPathVolumeSource) - **out = **in + (*in).DeepCopyInto(*out) } } if in.EmptyDir != nil { diff --git a/pkg/apis/apps/v1beta1/zz_generated.defaults.go b/pkg/apis/apps/v1beta1/zz_generated.defaults.go index ed9daa94b5d..26fde73fe2d 100644 --- a/pkg/apis/apps/v1beta1/zz_generated.defaults.go +++ b/pkg/apis/apps/v1beta1/zz_generated.defaults.go @@ -43,6 +43,9 @@ func SetObjectDefaults_Deployment(in *v1beta1.Deployment) { for i := range in.Spec.Template.Spec.Volumes { a := &in.Spec.Template.Spec.Volumes[i] v1.SetDefaults_Volume(a) + if a.VolumeSource.HostPath != nil { + v1.SetDefaults_HostPathVolumeSource(a.VolumeSource.HostPath) + } if a.VolumeSource.Secret != nil { v1.SetDefaults_SecretVolumeSource(a.VolumeSource.Secret) } @@ -184,6 +187,9 @@ func SetObjectDefaults_StatefulSet(in *v1beta1.StatefulSet) { for i := range in.Spec.Template.Spec.Volumes { a := &in.Spec.Template.Spec.Volumes[i] v1.SetDefaults_Volume(a) + if a.VolumeSource.HostPath != nil { + v1.SetDefaults_HostPathVolumeSource(a.VolumeSource.HostPath) + } if a.VolumeSource.Secret != nil { v1.SetDefaults_SecretVolumeSource(a.VolumeSource.Secret) } diff --git a/pkg/apis/apps/v1beta2/zz_generated.defaults.go b/pkg/apis/apps/v1beta2/zz_generated.defaults.go index 02ced2d8e39..29eabcaf89b 100644 --- a/pkg/apis/apps/v1beta2/zz_generated.defaults.go +++ b/pkg/apis/apps/v1beta2/zz_generated.defaults.go @@ -47,6 +47,9 @@ func SetObjectDefaults_DaemonSet(in *v1beta2.DaemonSet) { for i := range in.Spec.Template.Spec.Volumes { a := &in.Spec.Template.Spec.Volumes[i] v1.SetDefaults_Volume(a) + if a.VolumeSource.HostPath != nil { + v1.SetDefaults_HostPathVolumeSource(a.VolumeSource.HostPath) + } if a.VolumeSource.Secret != nil { v1.SetDefaults_SecretVolumeSource(a.VolumeSource.Secret) } @@ -188,6 +191,9 @@ func SetObjectDefaults_Deployment(in *v1beta2.Deployment) { for i := range in.Spec.Template.Spec.Volumes { a := &in.Spec.Template.Spec.Volumes[i] v1.SetDefaults_Volume(a) + if a.VolumeSource.HostPath != nil { + v1.SetDefaults_HostPathVolumeSource(a.VolumeSource.HostPath) + } if a.VolumeSource.Secret != nil { v1.SetDefaults_SecretVolumeSource(a.VolumeSource.Secret) } @@ -329,6 +335,9 @@ func SetObjectDefaults_ReplicaSet(in *v1beta2.ReplicaSet) { for i := range in.Spec.Template.Spec.Volumes { a := &in.Spec.Template.Spec.Volumes[i] v1.SetDefaults_Volume(a) + if a.VolumeSource.HostPath != nil { + v1.SetDefaults_HostPathVolumeSource(a.VolumeSource.HostPath) + } if a.VolumeSource.Secret != nil { v1.SetDefaults_SecretVolumeSource(a.VolumeSource.Secret) } @@ -470,6 +479,9 @@ func SetObjectDefaults_StatefulSet(in *v1beta2.StatefulSet) { for i := range in.Spec.Template.Spec.Volumes { a := &in.Spec.Template.Spec.Volumes[i] v1.SetDefaults_Volume(a) + if a.VolumeSource.HostPath != nil { + v1.SetDefaults_HostPathVolumeSource(a.VolumeSource.HostPath) + } if a.VolumeSource.Secret != nil { v1.SetDefaults_SecretVolumeSource(a.VolumeSource.Secret) } diff --git a/pkg/apis/batch/v1/zz_generated.defaults.go b/pkg/apis/batch/v1/zz_generated.defaults.go index 6936429fb38..18c0cc6d82a 100644 --- a/pkg/apis/batch/v1/zz_generated.defaults.go +++ b/pkg/apis/batch/v1/zz_generated.defaults.go @@ -41,6 +41,9 @@ func SetObjectDefaults_Job(in *v1.Job) { for i := range in.Spec.Template.Spec.Volumes { a := &in.Spec.Template.Spec.Volumes[i] api_v1.SetDefaults_Volume(a) + if a.VolumeSource.HostPath != nil { + api_v1.SetDefaults_HostPathVolumeSource(a.VolumeSource.HostPath) + } if a.VolumeSource.Secret != nil { api_v1.SetDefaults_SecretVolumeSource(a.VolumeSource.Secret) } diff --git a/pkg/apis/batch/v1beta1/zz_generated.defaults.go b/pkg/apis/batch/v1beta1/zz_generated.defaults.go index a780cfe3d46..e9256b91d07 100644 --- a/pkg/apis/batch/v1beta1/zz_generated.defaults.go +++ b/pkg/apis/batch/v1beta1/zz_generated.defaults.go @@ -42,6 +42,9 @@ func SetObjectDefaults_CronJob(in *v1beta1.CronJob) { for i := range in.Spec.JobTemplate.Spec.Template.Spec.Volumes { a := &in.Spec.JobTemplate.Spec.Template.Spec.Volumes[i] v1.SetDefaults_Volume(a) + if a.VolumeSource.HostPath != nil { + v1.SetDefaults_HostPathVolumeSource(a.VolumeSource.HostPath) + } if a.VolumeSource.Secret != nil { v1.SetDefaults_SecretVolumeSource(a.VolumeSource.Secret) } @@ -182,6 +185,9 @@ func SetObjectDefaults_JobTemplate(in *v1beta1.JobTemplate) { for i := range in.Template.Spec.Template.Spec.Volumes { a := &in.Template.Spec.Template.Spec.Volumes[i] v1.SetDefaults_Volume(a) + if a.VolumeSource.HostPath != nil { + v1.SetDefaults_HostPathVolumeSource(a.VolumeSource.HostPath) + } if a.VolumeSource.Secret != nil { v1.SetDefaults_SecretVolumeSource(a.VolumeSource.Secret) } diff --git a/pkg/apis/batch/v2alpha1/zz_generated.defaults.go b/pkg/apis/batch/v2alpha1/zz_generated.defaults.go index b76e4407fad..46e8ca6121d 100644 --- a/pkg/apis/batch/v2alpha1/zz_generated.defaults.go +++ b/pkg/apis/batch/v2alpha1/zz_generated.defaults.go @@ -42,6 +42,9 @@ func SetObjectDefaults_CronJob(in *v2alpha1.CronJob) { for i := range in.Spec.JobTemplate.Spec.Template.Spec.Volumes { a := &in.Spec.JobTemplate.Spec.Template.Spec.Volumes[i] v1.SetDefaults_Volume(a) + if a.VolumeSource.HostPath != nil { + v1.SetDefaults_HostPathVolumeSource(a.VolumeSource.HostPath) + } if a.VolumeSource.Secret != nil { v1.SetDefaults_SecretVolumeSource(a.VolumeSource.Secret) } @@ -182,6 +185,9 @@ func SetObjectDefaults_JobTemplate(in *v2alpha1.JobTemplate) { for i := range in.Template.Spec.Template.Spec.Volumes { a := &in.Template.Spec.Template.Spec.Volumes[i] v1.SetDefaults_Volume(a) + if a.VolumeSource.HostPath != nil { + v1.SetDefaults_HostPathVolumeSource(a.VolumeSource.HostPath) + } if a.VolumeSource.Secret != nil { v1.SetDefaults_SecretVolumeSource(a.VolumeSource.Secret) } diff --git a/pkg/apis/extensions/v1beta1/zz_generated.defaults.go b/pkg/apis/extensions/v1beta1/zz_generated.defaults.go index 7c4b382fedb..ba0c3716a23 100644 --- a/pkg/apis/extensions/v1beta1/zz_generated.defaults.go +++ b/pkg/apis/extensions/v1beta1/zz_generated.defaults.go @@ -47,6 +47,9 @@ func SetObjectDefaults_DaemonSet(in *v1beta1.DaemonSet) { for i := range in.Spec.Template.Spec.Volumes { a := &in.Spec.Template.Spec.Volumes[i] v1.SetDefaults_Volume(a) + if a.VolumeSource.HostPath != nil { + v1.SetDefaults_HostPathVolumeSource(a.VolumeSource.HostPath) + } if a.VolumeSource.Secret != nil { v1.SetDefaults_SecretVolumeSource(a.VolumeSource.Secret) } @@ -188,6 +191,9 @@ func SetObjectDefaults_Deployment(in *v1beta1.Deployment) { for i := range in.Spec.Template.Spec.Volumes { a := &in.Spec.Template.Spec.Volumes[i] v1.SetDefaults_Volume(a) + if a.VolumeSource.HostPath != nil { + v1.SetDefaults_HostPathVolumeSource(a.VolumeSource.HostPath) + } if a.VolumeSource.Secret != nil { v1.SetDefaults_SecretVolumeSource(a.VolumeSource.Secret) } @@ -340,6 +346,9 @@ func SetObjectDefaults_ReplicaSet(in *v1beta1.ReplicaSet) { for i := range in.Spec.Template.Spec.Volumes { a := &in.Spec.Template.Spec.Volumes[i] v1.SetDefaults_Volume(a) + if a.VolumeSource.HostPath != nil { + v1.SetDefaults_HostPathVolumeSource(a.VolumeSource.HostPath) + } if a.VolumeSource.Secret != nil { v1.SetDefaults_SecretVolumeSource(a.VolumeSource.Secret) } diff --git a/pkg/apis/settings/v1alpha1/zz_generated.defaults.go b/pkg/apis/settings/v1alpha1/zz_generated.defaults.go index 0469b4aaa7f..b2fa4af7d3e 100644 --- a/pkg/apis/settings/v1alpha1/zz_generated.defaults.go +++ b/pkg/apis/settings/v1alpha1/zz_generated.defaults.go @@ -47,6 +47,9 @@ func SetObjectDefaults_PodPreset(in *v1alpha1.PodPreset) { for i := range in.Spec.Volumes { a := &in.Spec.Volumes[i] v1.SetDefaults_Volume(a) + if a.VolumeSource.HostPath != nil { + v1.SetDefaults_HostPathVolumeSource(a.VolumeSource.HostPath) + } if a.VolumeSource.Secret != nil { v1.SetDefaults_SecretVolumeSource(a.VolumeSource.Secret) } diff --git a/pkg/kubelet/kubelet_volumes.go b/pkg/kubelet/kubelet_volumes.go index 2baaf667472..2bb3c73c374 100644 --- a/pkg/kubelet/kubelet_volumes.go +++ b/pkg/kubelet/kubelet_volumes.go @@ -69,6 +69,7 @@ func (kl *Kubelet) newVolumeMounterFromPlugins(spec *volume.Spec, pod *v1.Pod, o if err != nil { return nil, fmt.Errorf("can't use volume plugins for %s: %v", spec.Name(), err) } + opts.Containerized = kl.kubeletConfiguration.Containerized physicalMounter, err := plugin.NewMounter(spec, pod, opts) if err != nil { return nil, fmt.Errorf("failed to instantiate mounter for volume: %s using plugin: %s with a root cause: %v", spec.Name(), plugin.GetPluginName(), err) diff --git a/pkg/registry/core/persistentvolume/storage/storage_test.go b/pkg/registry/core/persistentvolume/storage/storage_test.go index 264d159f03e..3b419ad3425 100644 --- a/pkg/registry/core/persistentvolume/storage/storage_test.go +++ b/pkg/registry/core/persistentvolume/storage/storage_test.go @@ -46,6 +46,12 @@ func newStorage(t *testing.T) (*REST, *StatusREST, *etcdtesting.EtcdTestServer) return persistentVolumeStorage, statusStorage, server } +func newHostPathType(pathType string) *api.HostPathType { + hostPathType := new(api.HostPathType) + *hostPathType = api.HostPathType(pathType) + return hostPathType +} + func validNewPersistentVolume(name string) *api.PersistentVolume { pv := &api.PersistentVolume{ ObjectMeta: metav1.ObjectMeta{ @@ -57,7 +63,7 @@ func validNewPersistentVolume(name string) *api.PersistentVolume { }, AccessModes: []api.PersistentVolumeAccessMode{api.ReadWriteOnce}, PersistentVolumeSource: api.PersistentVolumeSource{ - HostPath: &api.HostPathVolumeSource{Path: "/foo"}, + HostPath: &api.HostPathVolumeSource{Path: "/foo", Type: newHostPathType(string(api.HostPathDirectoryOrCreate))}, }, PersistentVolumeReclaimPolicy: api.PersistentVolumeReclaimRetain, }, diff --git a/pkg/volume/host_path/BUILD b/pkg/volume/host_path/BUILD index d55dabee5ce..c209bd63696 100644 --- a/pkg/volume/host_path/BUILD +++ b/pkg/volume/host_path/BUILD @@ -11,7 +11,20 @@ go_library( srcs = [ "doc.go", "host_path.go", - ], + "nsenter_unsupported.go", + ] + select({ + "@io_bazel_rules_go//go/platform:darwin_amd64": [ + "host_path_unix.go", + ], + "@io_bazel_rules_go//go/platform:linux_amd64": [ + "host_path_unix.go", + "nsenter.go", + ], + "@io_bazel_rules_go//go/platform:windows_amd64": [ + "host_path_windows.go", + ], + "//conditions:default": [], + }), deps = [ "//pkg/volume:go_default_library", "//pkg/volume/util/volumehelper:go_default_library", @@ -20,7 +33,12 @@ go_library( "//vendor/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library", "//vendor/k8s.io/apimachinery/pkg/types:go_default_library", "//vendor/k8s.io/apimachinery/pkg/util/uuid:go_default_library", - ], + ] + select({ + "@io_bazel_rules_go//go/platform:linux_amd64": [ + "//vendor/k8s.io/utils/exec:go_default_library", + ], + "//conditions:default": [], + }), ) go_test( diff --git a/pkg/volume/host_path/host_path.go b/pkg/volume/host_path/host_path.go index 13767047bd3..0b5f4b906a6 100644 --- a/pkg/volume/host_path/host_path.go +++ b/pkg/volume/host_path/host_path.go @@ -99,14 +99,15 @@ func (plugin *hostPathPlugin) GetAccessModes() []v1.PersistentVolumeAccessMode { } } -func (plugin *hostPathPlugin) NewMounter(spec *volume.Spec, pod *v1.Pod, _ volume.VolumeOptions) (volume.Mounter, error) { +func (plugin *hostPathPlugin) NewMounter(spec *volume.Spec, pod *v1.Pod, opts volume.VolumeOptions) (volume.Mounter, error) { hostPathVolumeSource, readOnly, err := getVolumeSource(spec) if err != nil { return nil, err } + path := hostPathVolumeSource.Path return &hostPathMounter{ - hostPath: &hostPath{path: hostPathVolumeSource.Path}, + hostPath: &hostPath{path: path, pathType: hostPathVolumeSource.Type, containerized: opts.Containerized}, readOnly: readOnly, }, nil } @@ -175,7 +176,9 @@ func newProvisioner(options volume.VolumeOptions, host volume.VolumeHost, plugin // HostPath volumes represent a bare host file or directory mount. // The direct at the specified path will be directly exposed to the container. type hostPath struct { - path string + path string + pathType *v1.HostPathType + containerized bool volume.MetricsNil } @@ -211,7 +214,11 @@ func (b *hostPathMounter) SetUp(fsGroup *int64) error { if err != nil { return fmt.Errorf("invalid HostPath `%s`: %v", b.GetPath(), err) } - return nil + + if *b.pathType == v1.HostPathUnset { + return nil + } + return checkType(b.GetPath(), b.pathType, b.containerized) } // SetUpAt does not make sense for host paths - probably programmer error. @@ -314,3 +321,182 @@ func getVolumeSource(spec *volume.Spec) (*v1.HostPathVolumeSource, bool, error) return nil, false, fmt.Errorf("Spec does not reference an HostPath volume type") } + +type hostPathTypeChecker interface { + Exists() bool + IsFile() bool + MakeFile() error + IsDir() bool + MakeDir() error + IsBlock() bool + IsChar() bool + IsSocket() bool + GetPath() string +} + +type fileTypeChecker interface { + getFileType(fileInfo os.FileInfo) (v1.HostPathType, error) +} + +// this is implemented in per-OS files +type defaultFileTypeChecker struct{} + +type osFileTypeChecker struct { + path string + exists bool + info os.FileInfo + checker fileTypeChecker +} + +func (ftc *osFileTypeChecker) Exists() bool { + return ftc.exists +} + +func (ftc *osFileTypeChecker) IsFile() bool { + if !ftc.Exists() { + return false + } + return !ftc.info.IsDir() +} + +func (ftc *osFileTypeChecker) MakeFile() error { + f, err := os.OpenFile(ftc.path, os.O_CREATE, os.FileMode(0644)) + defer f.Close() + if err != nil { + if !os.IsExist(err) { + return err + } + } + return nil +} + +func (ftc *osFileTypeChecker) IsDir() bool { + if !ftc.Exists() { + return false + } + return ftc.info.IsDir() +} + +func (ftc *osFileTypeChecker) MakeDir() error { + err := os.MkdirAll(ftc.path, os.FileMode(0755)) + if err != nil { + if !os.IsExist(err) { + return err + } + } + return nil +} + +func (ftc *osFileTypeChecker) IsBlock() bool { + if !ftc.Exists() { + return false + } + + blkDevType, err := ftc.checker.getFileType(ftc.info) + if err != nil { + return false + } + return blkDevType == v1.HostPathBlockDev +} + +func (ftc *osFileTypeChecker) IsChar() bool { + if !ftc.Exists() { + return false + } + + charDevType, err := ftc.checker.getFileType(ftc.info) + if err != nil { + return false + } + return charDevType == v1.HostPathCharDev +} + +func (ftc *osFileTypeChecker) IsSocket() bool { + if !ftc.Exists() { + return false + } + + socketType, err := ftc.checker.getFileType(ftc.info) + if err != nil { + return false + } + return socketType == v1.HostPathSocket +} + +func (ftc *osFileTypeChecker) GetPath() string { + return ftc.path +} + +func newOSFileTypeChecker(path string, checker fileTypeChecker) (hostPathTypeChecker, error) { + ftc := osFileTypeChecker{path: path, checker: checker} + info, err := os.Stat(path) + if err != nil { + ftc.exists = false + if !os.IsNotExist(err) { + return nil, err + } + } else { + ftc.info = info + ftc.exists = true + } + return &ftc, nil +} + +func checkType(path string, pathType *v1.HostPathType, containerized bool) error { + var ftc hostPathTypeChecker + var err error + if containerized { + // For a containerized kubelet, use nsenter to run commands in + // the host's mount namespace. + // TODO(dixudx): setns into docker's mount namespace, and then run the exact same go code for checks/setup + ftc, err = newNsenterFileTypeChecker(path) + if err != nil { + return err + } + } else { + ftc, err = newOSFileTypeChecker(path, &defaultFileTypeChecker{}) + if err != nil { + return err + } + } + return checkTypeInternal(ftc, pathType) +} + +func checkTypeInternal(ftc hostPathTypeChecker, pathType *v1.HostPathType) error { + switch *pathType { + case v1.HostPathDirectoryOrCreate: + if !ftc.Exists() { + return ftc.MakeDir() + } + fallthrough + case v1.HostPathDirectory: + if !ftc.IsDir() { + return fmt.Errorf("hostPath type check failed: %s is not a directory", ftc.GetPath()) + } + case v1.HostPathFileOrCreate: + if !ftc.Exists() { + return ftc.MakeFile() + } + fallthrough + case v1.HostPathFile: + if !ftc.IsFile() { + return fmt.Errorf("hostPath type check failed: %s is not a file", ftc.GetPath()) + } + case v1.HostPathSocket: + if !ftc.IsSocket() { + return fmt.Errorf("hostPath type check failed: %s is not a socket file", ftc.GetPath()) + } + case v1.HostPathCharDev: + if !ftc.IsChar() { + return fmt.Errorf("hostPath type check failed: %s is not a character device", ftc.GetPath()) + } + case v1.HostPathBlockDev: + if !ftc.IsBlock() { + return fmt.Errorf("hostPath type check failed: %s is not a block device", ftc.GetPath()) + } + default: + return fmt.Errorf("%s is an invalid volume type", *pathType) + } + + return nil +} diff --git a/pkg/volume/host_path/host_path_test.go b/pkg/volume/host_path/host_path_test.go index 01bd126a180..8d78b99d0fb 100644 --- a/pkg/volume/host_path/host_path_test.go +++ b/pkg/volume/host_path/host_path_test.go @@ -34,6 +34,21 @@ import ( volumetest "k8s.io/kubernetes/pkg/volume/testing" ) +func newHostPathType(pathType string) *v1.HostPathType { + hostPathType := new(v1.HostPathType) + *hostPathType = v1.HostPathType(pathType) + return hostPathType +} + +func newHostPathTypeList(pathType ...string) []*v1.HostPathType { + typeList := []*v1.HostPathType{} + for _, ele := range pathType { + typeList = append(typeList, newHostPathType(ele)) + } + + return typeList +} + func TestCanSupport(t *testing.T) { plugMgr := volume.VolumePluginMgr{} plugMgr.InitPlugins(ProbeVolumePlugins(volume.VolumeConfig{}), volumetest.NewFakeVolumeHost("fake", nil, nil)) @@ -108,7 +123,7 @@ func TestDeleter(t *testing.T) { if err := deleter.Delete(); err != nil { t.Errorf("Mock Recycler expected to return nil but got %s", err) } - if exists, _ := utilfile.FileExists("foo"); exists { + if exists, _ := utilfile.FileExists(tempPath); exists { t.Errorf("Temp path expected to be deleted, but was found at %s", tempPath) } } @@ -215,11 +230,14 @@ func TestPlugin(t *testing.T) { if err != nil { t.Errorf("Can't find the plugin by name") } + + volPath := "/tmp/vol1" spec := &v1.Volume{ Name: "vol1", - VolumeSource: v1.VolumeSource{HostPath: &v1.HostPathVolumeSource{Path: "/vol1"}}, + VolumeSource: v1.VolumeSource{HostPath: &v1.HostPathVolumeSource{Path: volPath, Type: newHostPathType(string(v1.HostPathDirectoryOrCreate))}}, } pod := &v1.Pod{ObjectMeta: metav1.ObjectMeta{UID: types.UID("poduid")}} + defer os.RemoveAll(volPath) mounter, err := plug.NewMounter(volume.NewSpecFromVolume(spec), pod, volume.VolumeOptions{}) if err != nil { t.Errorf("Failed to make a new Mounter: %v", err) @@ -229,7 +247,7 @@ func TestPlugin(t *testing.T) { } path := mounter.GetPath() - if path != "/vol1" { + if path != volPath { t.Errorf("Got unexpected path: %s", path) } @@ -257,13 +275,14 @@ func TestPersistentClaimReadOnlyFlag(t *testing.T) { }, Spec: v1.PersistentVolumeSpec{ PersistentVolumeSource: v1.PersistentVolumeSource{ - HostPath: &v1.HostPathVolumeSource{Path: "foo"}, + HostPath: &v1.HostPathVolumeSource{Path: "foo", Type: newHostPathType(string(v1.HostPathDirectoryOrCreate))}, }, ClaimRef: &v1.ObjectReference{ Name: "claimA", }, }, } + defer os.RemoveAll("foo") claim := &v1.PersistentVolumeClaim{ ObjectMeta: metav1.ObjectMeta{ @@ -296,3 +315,297 @@ func TestPersistentClaimReadOnlyFlag(t *testing.T) { t.Errorf("Expected true for mounter.IsReadOnly") } } + +type fakeFileTypeChecker struct { + desiredType string +} + +func (fftc *fakeFileTypeChecker) getFileType(_ os.FileInfo) (v1.HostPathType, error) { + return *newHostPathType(fftc.desiredType), nil +} + +func setUp() error { + err := os.MkdirAll("/tmp/ExistingFolder", os.FileMode(0755)) + if err != nil { + return err + } + + f, err := os.OpenFile("/tmp/ExistingFolder/foo", os.O_CREATE, os.FileMode(0644)) + defer f.Close() + if err != nil { + return err + } + + return nil +} + +func tearDown() { + os.RemoveAll("/tmp/ExistingFolder") +} + +func TestOSFileTypeChecker(t *testing.T) { + err := setUp() + if err != nil { + t.Error(err) + } + defer tearDown() + testCases := []struct { + name string + path string + desiredType string + isDir bool + isFile bool + isSocket bool + isBlock bool + isChar bool + }{ + { + name: "Existing Folder", + path: "/tmp/ExistingFolder", + isDir: true, + }, + { + name: "Existing File", + path: "/tmp/ExistingFolder/foo", + isFile: true, + }, + { + name: "Existing Socket File", + path: "/tmp/ExistingFolder/foo", + desiredType: string(v1.HostPathSocket), + isSocket: true, + }, + { + name: "Existing Character Device", + path: "/tmp/ExistingFolder/foo", + desiredType: string(v1.HostPathCharDev), + isChar: true, + }, + { + name: "Existing Block Device", + path: "/tmp/ExistingFolder/foo", + desiredType: string(v1.HostPathBlockDev), + isBlock: true, + }, + } + + for i, tc := range testCases { + oftc, err := newOSFileTypeChecker(tc.path, + &fakeFileTypeChecker{desiredType: tc.desiredType}) + if err != nil { + t.Errorf("[%d: %q] expect nil, but got %v", i, tc.name, err) + } + + path := oftc.GetPath() + if path != tc.path { + t.Errorf("[%d: %q] got unexpected path: %s", i, tc.name, path) + } + + exist := oftc.Exists() + if !exist { + t.Errorf("[%d: %q] path: %s does not exist", i, tc.name, path) + } + + if tc.isDir { + if !oftc.IsDir() { + t.Errorf("[%d: %q] expected folder, got unexpected: %s", i, tc.name, path) + } + if oftc.IsFile() { + t.Errorf("[%d: %q] expected folder, got unexpected file: %s", i, tc.name, path) + } + if oftc.IsSocket() { + t.Errorf("[%d: %q] expected folder, got unexpected socket file: %s", i, tc.name, path) + } + if oftc.IsBlock() { + t.Errorf("[%d: %q] expected folder, got unexpected block device: %s", i, tc.name, path) + } + if oftc.IsChar() { + t.Errorf("[%d: %q] expected folder, got unexpected character device: %s", i, tc.name, path) + } + } + + if tc.isFile { + if !oftc.IsFile() { + t.Errorf("[%d: %q] expected file, got unexpected: %s", i, tc.name, path) + } + if oftc.IsDir() { + t.Errorf("[%d: %q] expected file, got unexpected folder: %s", i, tc.name, path) + } + if oftc.IsSocket() { + t.Errorf("[%d: %q] expected file, got unexpected socket file: %s", i, tc.name, path) + } + if oftc.IsBlock() { + t.Errorf("[%d: %q] expected file, got unexpected block device: %s", i, tc.name, path) + } + if oftc.IsChar() { + t.Errorf("[%d: %q] expected file, got unexpected character device: %s", i, tc.name, path) + } + } + + if tc.isSocket { + if !oftc.IsSocket() { + t.Errorf("[%d: %q] expected socket file, got unexpected: %s", i, tc.name, path) + } + if oftc.IsDir() { + t.Errorf("[%d: %q] expected socket file, got unexpected folder: %s", i, tc.name, path) + } + if !oftc.IsFile() { + t.Errorf("[%d: %q] expected socket file, got unexpected file: %s", i, tc.name, path) + } + if oftc.IsBlock() { + t.Errorf("[%d: %q] expected socket file, got unexpected block device: %s", i, tc.name, path) + } + if oftc.IsChar() { + t.Errorf("[%d: %q] expected socket file, got unexpected character device: %s", i, tc.name, path) + } + } + + if tc.isChar { + if !oftc.IsChar() { + t.Errorf("[%d: %q] expected character device, got unexpected: %s", i, tc.name, path) + } + if oftc.IsDir() { + t.Errorf("[%d: %q] expected character device, got unexpected folder: %s", i, tc.name, path) + } + if !oftc.IsFile() { + t.Errorf("[%d: %q] expected character device, got unexpected file: %s", i, tc.name, path) + } + if oftc.IsSocket() { + t.Errorf("[%d: %q] expected character device, got unexpected socket file: %s", i, tc.name, path) + } + if oftc.IsBlock() { + t.Errorf("[%d: %q] expected character device, got unexpected block device: %s", i, tc.name, path) + } + } + + if tc.isBlock { + if !oftc.IsBlock() { + t.Errorf("[%d: %q] expected block device, got unexpected: %s", i, tc.name, path) + } + if oftc.IsDir() { + t.Errorf("[%d: %q] expected block device, got unexpected folder: %s", i, tc.name, path) + } + if !oftc.IsFile() { + t.Errorf("[%d: %q] expected block device, got unexpected file: %s", i, tc.name, path) + } + if oftc.IsSocket() { + t.Errorf("[%d: %q] expected block device, got unexpected socket file: %s", i, tc.name, path) + } + if oftc.IsChar() { + t.Errorf("[%d: %q] expected block device, got unexpected character device: %s", i, tc.name, path) + } + } + } + +} + +type fakeHostPathTypeChecker struct { + name string + path string + exists bool + isDir bool + isFile bool + isSocket bool + isBlock bool + isChar bool + validpathType []*v1.HostPathType + invalidpathType []*v1.HostPathType +} + +func (ftc *fakeHostPathTypeChecker) MakeFile() error { return nil } +func (ftc *fakeHostPathTypeChecker) MakeDir() error { return nil } +func (ftc *fakeHostPathTypeChecker) Exists() bool { return ftc.exists } +func (ftc *fakeHostPathTypeChecker) IsFile() bool { return ftc.isFile } +func (ftc *fakeHostPathTypeChecker) IsDir() bool { return ftc.isDir } +func (ftc *fakeHostPathTypeChecker) IsBlock() bool { return ftc.isBlock } +func (ftc *fakeHostPathTypeChecker) IsChar() bool { return ftc.isChar } +func (ftc *fakeHostPathTypeChecker) IsSocket() bool { return ftc.isSocket } +func (ftc *fakeHostPathTypeChecker) GetPath() string { return ftc.path } + +func TestHostPathTypeCheckerInternal(t *testing.T) { + testCases := []fakeHostPathTypeChecker{ + { + name: "Existing Folder", + path: "/existingFolder", + isDir: true, + exists: true, + validpathType: newHostPathTypeList(string(v1.HostPathDirectoryOrCreate), string(v1.HostPathDirectory)), + invalidpathType: newHostPathTypeList(string(v1.HostPathFileOrCreate), string(v1.HostPathFile), + string(v1.HostPathSocket), string(v1.HostPathCharDev), string(v1.HostPathBlockDev)), + }, + { + name: "New Folder", + path: "/newFolder", + isDir: false, + exists: false, + validpathType: newHostPathTypeList(string(v1.HostPathDirectoryOrCreate)), + invalidpathType: newHostPathTypeList(string(v1.HostPathDirectory), string(v1.HostPathFile), + string(v1.HostPathSocket), string(v1.HostPathCharDev), string(v1.HostPathBlockDev)), + }, + { + name: "Existing File", + path: "/existingFile", + isFile: true, + exists: true, + validpathType: newHostPathTypeList(string(v1.HostPathFileOrCreate), string(v1.HostPathFile)), + invalidpathType: newHostPathTypeList(string(v1.HostPathDirectoryOrCreate), string(v1.HostPathDirectory), + string(v1.HostPathSocket), string(v1.HostPathCharDev), string(v1.HostPathBlockDev)), + }, + { + name: "New File", + path: "/newFile", + isFile: false, + exists: false, + validpathType: newHostPathTypeList(string(v1.HostPathFileOrCreate)), + invalidpathType: newHostPathTypeList(string(v1.HostPathDirectory), + string(v1.HostPathSocket), string(v1.HostPathCharDev), string(v1.HostPathBlockDev)), + }, + { + name: "Existing Socket", + path: "/existing.socket", + isSocket: true, + isFile: true, + exists: true, + validpathType: newHostPathTypeList(string(v1.HostPathSocket), string(v1.HostPathFileOrCreate), string(v1.HostPathFile)), + invalidpathType: newHostPathTypeList(string(v1.HostPathDirectoryOrCreate), string(v1.HostPathDirectory), + string(v1.HostPathCharDev), string(v1.HostPathBlockDev)), + }, + { + name: "Existing Character Device", + path: "/existing.char", + isChar: true, + isFile: true, + exists: true, + validpathType: newHostPathTypeList(string(v1.HostPathCharDev), string(v1.HostPathFileOrCreate), string(v1.HostPathFile)), + invalidpathType: newHostPathTypeList(string(v1.HostPathDirectoryOrCreate), string(v1.HostPathDirectory), + string(v1.HostPathSocket), string(v1.HostPathBlockDev)), + }, + { + name: "Existing Block Device", + path: "/existing.block", + isBlock: true, + isFile: true, + exists: true, + validpathType: newHostPathTypeList(string(v1.HostPathBlockDev), string(v1.HostPathFileOrCreate), string(v1.HostPathFile)), + invalidpathType: newHostPathTypeList(string(v1.HostPathDirectoryOrCreate), string(v1.HostPathDirectory), + string(v1.HostPathSocket), string(v1.HostPathCharDev)), + }, + } + + for i, tc := range testCases { + for _, pathType := range tc.validpathType { + err := checkTypeInternal(&tc, pathType) + if err != nil { + t.Errorf("[%d: %q] [%q] expected nil, got %v", i, tc.name, string(*pathType), err) + } + } + + for _, pathType := range tc.invalidpathType { + checkResult := checkTypeInternal(&tc, pathType) + if checkResult == nil { + t.Errorf("[%d: %q] [%q] expected error, got nil", i, tc.name, string(*pathType)) + } + } + } + +} diff --git a/pkg/volume/host_path/host_path_unix.go b/pkg/volume/host_path/host_path_unix.go new file mode 100644 index 00000000000..05deaaed5b2 --- /dev/null +++ b/pkg/volume/host_path/host_path_unix.go @@ -0,0 +1,40 @@ +// +build linux darwin + +/* +Copyright 2017 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package host_path + +import ( + "fmt" + "os" + "syscall" + + "k8s.io/api/core/v1" +) + +func (dftc *defaultFileTypeChecker) getFileType(info os.FileInfo) (v1.HostPathType, error) { + mode := info.Sys().(*syscall.Stat_t).Mode + switch mode & syscall.S_IFMT { + case syscall.S_IFSOCK: + return v1.HostPathSocket, nil + case syscall.S_IFBLK: + return v1.HostPathBlockDev, nil + case syscall.S_IFCHR: + return v1.HostPathCharDev, nil + } + return "", fmt.Errorf("only recognise socket, block device and character device") +} diff --git a/pkg/volume/host_path/host_path_windows.go b/pkg/volume/host_path/host_path_windows.go new file mode 100644 index 00000000000..ff27e49371f --- /dev/null +++ b/pkg/volume/host_path/host_path_windows.go @@ -0,0 +1,38 @@ +/* +Copyright 2017 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package host_path + +import ( + "fmt" + "os" + "syscall" + + "k8s.io/api/core/v1" +) + +func (dftc *defaultFileTypeChecker) getFileType(info os.FileInfo) (v1.HostPathType, error) { + mode := info.Sys().(*syscall.Win32FileAttributeData).FileAttributes + switch mode & syscall.S_IFMT { + case syscall.S_IFSOCK: + return v1.HostPathSocket, nil + case syscall.S_IFBLK: + return v1.HostPathBlockDev, nil + case syscall.S_IFCHR: + return v1.HostPathCharDev, nil + } + return "", fmt.Errorf("only recognise socket, block device and character device") +} diff --git a/pkg/volume/host_path/nsenter.go b/pkg/volume/host_path/nsenter.go new file mode 100644 index 00000000000..c3c3cfece57 --- /dev/null +++ b/pkg/volume/host_path/nsenter.go @@ -0,0 +1,150 @@ +// +build linux + +/* +Copyright 2017 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package host_path + +import ( + "fmt" + + "k8s.io/utils/exec" +) + +const ( + hostProcMountsNamespace = "/rootfs/proc/1/ns/mnt" + nsenterCmd = "nsenter" + statCmd = "stat" + touchCmd = "touch" + mkdirCmd = "mkdir" +) + +// nsenterFileTypeChecker is part of experimental support for running the kubelet +// in a container. nsenterFileTypeChecker works by executing "nsenter" to run commands in +// the host's mount namespace. +// +// nsenterFileTypeChecker requires: +// +// 1. The host's root filesystem must be available at "/rootfs"; +// 2. The "nsenter" binary must be on the Kubelet process' PATH in the container's +// filesystem; +// 3. The Kubelet process must have CAP_SYS_ADMIN (required by "nsenter"); at +// the present, this effectively means that the kubelet is running in a +// privileged container; +// 4. The host image must have "stat", "touch", "mkdir" binaries in "/bin", "/usr/sbin", or "/usr/bin"; + +type nsenterFileTypeChecker struct { + path string + exists bool +} + +func newNsenterFileTypeChecker(path string) (hostPathTypeChecker, error) { + ftc := &nsenterFileTypeChecker{path: path} + ftc.Exists() + return ftc, nil +} + +func (ftc *nsenterFileTypeChecker) Exists() bool { + args := []string{ + fmt.Sprintf("--mount=%s", hostProcMountsNamespace), + "--", + "ls", + ftc.path, + } + exec := exec.New() + _, err := exec.Command(nsenterCmd, args...).CombinedOutput() + if err == nil { + ftc.exists = true + } + return ftc.exists +} + +func (ftc *nsenterFileTypeChecker) IsFile() bool { + if !ftc.Exists() { + return false + } + return !ftc.IsDir() +} + +func (ftc *nsenterFileTypeChecker) MakeFile() error { + args := []string{ + fmt.Sprintf("--mount=%s", hostProcMountsNamespace), + "--", + touchCmd, + ftc.path, + } + exec := exec.New() + if _, err := exec.Command(nsenterCmd, args...).CombinedOutput(); err != nil { + return err + } + return nil +} + +func (ftc *nsenterFileTypeChecker) IsDir() bool { + return ftc.checkMimetype("directory") +} + +func (ftc *nsenterFileTypeChecker) MakeDir() error { + args := []string{ + fmt.Sprintf("--mount=%s", hostProcMountsNamespace), + "--", + mkdirCmd, + "-p", + ftc.path, + } + exec := exec.New() + if _, err := exec.Command(nsenterCmd, args...).CombinedOutput(); err != nil { + return err + } + return nil +} + +func (ftc *nsenterFileTypeChecker) IsBlock() bool { + return ftc.checkMimetype("block special file") +} + +func (ftc *nsenterFileTypeChecker) IsChar() bool { + return ftc.checkMimetype("character special file") +} + +func (ftc *nsenterFileTypeChecker) IsSocket() bool { + return ftc.checkMimetype("socket") +} + +func (ftc *nsenterFileTypeChecker) GetPath() string { + return ftc.path +} + +func (ftc *nsenterFileTypeChecker) checkMimetype(checkedType string) bool { + if !ftc.Exists() { + return false + } + + args := []string{ + fmt.Sprintf("--mount=%s", hostProcMountsNamespace), + "--", + statCmd, + "-L", + `--printf "%F"`, + ftc.path, + } + exec := exec.New() + outputBytes, err := exec.Command(nsenterCmd, args...).CombinedOutput() + if err != nil { + return false + } + return string(outputBytes) == checkedType +} diff --git a/pkg/volume/host_path/nsenter_unsupported.go b/pkg/volume/host_path/nsenter_unsupported.go new file mode 100644 index 00000000000..166ef9f0a39 --- /dev/null +++ b/pkg/volume/host_path/nsenter_unsupported.go @@ -0,0 +1,66 @@ +// +build !linux + +/* +Copyright 2017 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package host_path + +type nsenterFileTypeChecker struct { + path string + exists bool +} + +func newNsenterFileTypeChecker(path string) (hostPathTypeChecker, error) { + ftc := &nsenterFileTypeChecker{path: path} + ftc.Exists() + return ftc, nil +} + +func (ftc *nsenterFileTypeChecker) Exists() bool { + return false +} + +func (ftc *nsenterFileTypeChecker) IsFile() bool { + return false +} + +func (ftc *nsenterFileTypeChecker) MakeFile() error { + return nil +} + +func (ftc *nsenterFileTypeChecker) IsDir() bool { + return false +} + +func (ftc *nsenterFileTypeChecker) MakeDir() error { + return nil +} + +func (ftc *nsenterFileTypeChecker) IsBlock() bool { + return false +} + +func (ftc *nsenterFileTypeChecker) IsChar() bool { + return false +} + +func (ftc *nsenterFileTypeChecker) IsSocket() bool { + return false +} + +func (ftc *nsenterFileTypeChecker) GetPath() string { + return ftc.path +} diff --git a/pkg/volume/plugins.go b/pkg/volume/plugins.go index 60d6358d41c..7ba0d3ec67d 100644 --- a/pkg/volume/plugins.go +++ b/pkg/volume/plugins.go @@ -66,6 +66,8 @@ type VolumeOptions struct { CloudTags *map[string]string // Volume provisioning parameters from StorageClass Parameters map[string]string + // This flag helps identify whether kubelet is running in a container + Containerized bool } // VolumePlugin is an interface to volume plugins that can be used on a diff --git a/staging/src/k8s.io/api/core/v1/generated.pb.go b/staging/src/k8s.io/api/core/v1/generated.pb.go index 5f44dd22d7a..9053f04d54c 100644 --- a/staging/src/k8s.io/api/core/v1/generated.pb.go +++ b/staging/src/k8s.io/api/core/v1/generated.pb.go @@ -3553,6 +3553,12 @@ func (m *HostPathVolumeSource) MarshalTo(dAtA []byte) (int, error) { i++ i = encodeVarintGenerated(dAtA, i, uint64(len(m.Path))) i += copy(dAtA[i:], m.Path) + if m.Type != nil { + dAtA[i] = 0x12 + i++ + i = encodeVarintGenerated(dAtA, i, uint64(len(*m.Type))) + i += copy(dAtA[i:], *m.Type) + } return i, nil } @@ -10485,6 +10491,10 @@ func (m *HostPathVolumeSource) Size() (n int) { _ = l l = len(m.Path) n += 1 + l + sovGenerated(uint64(l)) + if m.Type != nil { + l = len(*m.Type) + n += 1 + l + sovGenerated(uint64(l)) + } return n } @@ -13369,6 +13379,7 @@ func (this *HostPathVolumeSource) String() string { } s := strings.Join([]string{`&HostPathVolumeSource{`, `Path:` + fmt.Sprintf("%v", this.Path) + `,`, + `Type:` + valueToStringGenerated(this.Type) + `,`, `}`, }, "") return s @@ -23467,6 +23478,36 @@ func (m *HostPathVolumeSource) Unmarshal(dAtA []byte) error { } m.Path = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Type", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + s := HostPathType(dAtA[iNdEx:postIndex]) + m.Type = &s + iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipGenerated(dAtA[iNdEx:]) @@ -44802,728 +44843,729 @@ func init() { } var fileDescriptorGenerated = []byte{ - // 11560 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0x7d, 0x5b, 0x70, 0x24, 0xd7, - 0x75, 0x98, 0x7a, 0x06, 0xaf, 0x39, 0x78, 0xdf, 0xc5, 0x2e, 0x67, 0x41, 0x72, 0x67, 0xd9, 0x94, - 0xc8, 0xe5, 0x0b, 0x10, 0x97, 0xa4, 0x48, 0x89, 0x14, 0x25, 0x00, 0x03, 0xec, 0x82, 0xfb, 0x1a, - 0xde, 0xc1, 0xee, 0x9a, 0x14, 0x4d, 0xab, 0x31, 0x73, 0x01, 0x34, 0xd1, 0xe8, 0x1e, 0x76, 0xf7, - 0x60, 0x17, 0x2c, 0xab, 0x2a, 0x51, 0x64, 0xe5, 0x21, 0x7f, 0xb8, 0x52, 0xae, 0xc4, 0xb1, 0x54, - 0x4e, 0x55, 0x1e, 0x65, 0x2b, 0x4e, 0x52, 0x76, 0xe4, 0xf8, 0x21, 0x39, 0x95, 0xc4, 0x79, 0x94, - 0xf4, 0xe3, 0xd8, 0xae, 0x4a, 0x49, 0x55, 0xa9, 0xc0, 0x16, 0x94, 0x4a, 0x2a, 0x1f, 0x49, 0xe5, - 0xf1, 0x65, 0xc4, 0x89, 0x52, 0xf7, 0xd9, 0xf7, 0xf6, 0x74, 0xcf, 0x0c, 0x96, 0x58, 0x90, 0x52, - 0xf9, 0x6f, 0xe6, 0x9c, 0x73, 0xcf, 0xbd, 0x7d, 0x1f, 0xe7, 0x9e, 0x73, 0xee, 0xb9, 0xe7, 0xc2, - 0xcb, 0xdb, 0x2f, 0x45, 0x73, 0x6e, 0x30, 0xbf, 0xdd, 0x5e, 0x27, 0xa1, 0x4f, 0x62, 0x12, 0xcd, - 0xef, 0x12, 0xbf, 0x19, 0x84, 0xf3, 0x02, 0xe1, 0xb4, 0xdc, 0xf9, 0x46, 0x10, 0x92, 0xf9, 0xdd, - 0x67, 0xe7, 0x37, 0x89, 0x4f, 0x42, 0x27, 0x26, 0xcd, 0xb9, 0x56, 0x18, 0xc4, 0x01, 0x42, 0x9c, - 0x66, 0xce, 0x69, 0xb9, 0x73, 0x94, 0x66, 0x6e, 0xf7, 0xd9, 0xd9, 0x67, 0x36, 0xdd, 0x78, 0xab, - 0xbd, 0x3e, 0xd7, 0x08, 0x76, 0xe6, 0x37, 0x83, 0xcd, 0x60, 0x9e, 0x91, 0xae, 0xb7, 0x37, 0xd8, - 0x3f, 0xf6, 0x87, 0xfd, 0xe2, 0x2c, 0x66, 0x9f, 0x4f, 0xaa, 0xd9, 0x71, 0x1a, 0x5b, 0xae, 0x4f, - 0xc2, 0xbd, 0xf9, 0xd6, 0xf6, 0x26, 0xab, 0x37, 0x24, 0x51, 0xd0, 0x0e, 0x1b, 0x24, 0x5d, 0x71, - 0xd7, 0x52, 0xd1, 0xfc, 0x0e, 0x89, 0x9d, 0x8c, 0xe6, 0xce, 0xce, 0xe7, 0x95, 0x0a, 0xdb, 0x7e, - 0xec, 0xee, 0x74, 0x56, 0xf3, 0x89, 0x5e, 0x05, 0xa2, 0xc6, 0x16, 0xd9, 0x71, 0x3a, 0xca, 0x3d, - 0x97, 0x57, 0xae, 0x1d, 0xbb, 0xde, 0xbc, 0xeb, 0xc7, 0x51, 0x1c, 0xa6, 0x0b, 0xd9, 0xdf, 0xb5, - 0xe0, 0xfc, 0xc2, 0xed, 0xfa, 0xb2, 0xe7, 0x44, 0xb1, 0xdb, 0x58, 0xf4, 0x82, 0xc6, 0x76, 0x3d, - 0x0e, 0x42, 0x72, 0x2b, 0xf0, 0xda, 0x3b, 0xa4, 0xce, 0x3a, 0x02, 0x3d, 0x0d, 0x23, 0xbb, 0xec, - 0xff, 0x6a, 0xb5, 0x6c, 0x9d, 0xb7, 0x2e, 0x94, 0x16, 0xa7, 0xbe, 0xbd, 0x5f, 0xf9, 0xc8, 0xc1, - 0x7e, 0x65, 0xe4, 0x96, 0x80, 0x63, 0x45, 0x81, 0x1e, 0x83, 0xa1, 0x8d, 0x68, 0x6d, 0xaf, 0x45, - 0xca, 0x05, 0x46, 0x3b, 0x21, 0x68, 0x87, 0x56, 0xea, 0x14, 0x8a, 0x05, 0x16, 0xcd, 0x43, 0xa9, - 0xe5, 0x84, 0xb1, 0x1b, 0xbb, 0x81, 0x5f, 0x2e, 0x9e, 0xb7, 0x2e, 0x0c, 0x2e, 0x4e, 0x0b, 0xd2, - 0x52, 0x4d, 0x22, 0x70, 0x42, 0x43, 0x9b, 0x11, 0x12, 0xa7, 0x79, 0xc3, 0xf7, 0xf6, 0xca, 0x03, - 0xe7, 0xad, 0x0b, 0x23, 0x49, 0x33, 0xb0, 0x80, 0x63, 0x45, 0x61, 0xff, 0x62, 0x01, 0x46, 0x16, - 0x36, 0x36, 0x5c, 0xdf, 0x8d, 0xf7, 0xd0, 0x2d, 0x18, 0xf3, 0x83, 0x26, 0x91, 0xff, 0xd9, 0x57, - 0x8c, 0x5e, 0x3c, 0x3f, 0xd7, 0x39, 0x95, 0xe6, 0xae, 0x6b, 0x74, 0x8b, 0x53, 0x07, 0xfb, 0x95, - 0x31, 0x1d, 0x82, 0x0d, 0x3e, 0x08, 0xc3, 0x68, 0x2b, 0x68, 0x2a, 0xb6, 0x05, 0xc6, 0xb6, 0x92, - 0xc5, 0xb6, 0x96, 0x90, 0x2d, 0x4e, 0x1e, 0xec, 0x57, 0x46, 0x35, 0x00, 0xd6, 0x99, 0xa0, 0x75, - 0x98, 0xa4, 0x7f, 0xfd, 0xd8, 0x55, 0x7c, 0x8b, 0x8c, 0xef, 0xa3, 0x79, 0x7c, 0x35, 0xd2, 0xc5, - 0x53, 0x07, 0xfb, 0x95, 0xc9, 0x14, 0x10, 0xa7, 0x19, 0xda, 0xef, 0xc1, 0xc4, 0x42, 0x1c, 0x3b, - 0x8d, 0x2d, 0xd2, 0xe4, 0x23, 0x88, 0x9e, 0x87, 0x01, 0xdf, 0xd9, 0x21, 0x62, 0x7c, 0xcf, 0x8b, - 0x8e, 0x1d, 0xb8, 0xee, 0xec, 0x90, 0xc3, 0xfd, 0xca, 0xd4, 0x4d, 0xdf, 0x7d, 0xb7, 0x2d, 0x66, - 0x05, 0x85, 0x61, 0x46, 0x8d, 0x2e, 0x02, 0x34, 0xc9, 0xae, 0xdb, 0x20, 0x35, 0x27, 0xde, 0x12, - 0xe3, 0x8d, 0x44, 0x59, 0xa8, 0x2a, 0x0c, 0xd6, 0xa8, 0xec, 0xbb, 0x50, 0x5a, 0xd8, 0x0d, 0xdc, - 0x66, 0x2d, 0x68, 0x46, 0x68, 0x1b, 0x26, 0x5b, 0x21, 0xd9, 0x20, 0xa1, 0x02, 0x95, 0xad, 0xf3, - 0xc5, 0x0b, 0xa3, 0x17, 0x2f, 0x64, 0x7e, 0xac, 0x49, 0xba, 0xec, 0xc7, 0xe1, 0xde, 0xe2, 0x03, - 0xa2, 0xbe, 0xc9, 0x14, 0x16, 0xa7, 0x39, 0xdb, 0xff, 0xba, 0x00, 0xa7, 0x17, 0xde, 0x6b, 0x87, - 0xa4, 0xea, 0x46, 0xdb, 0xe9, 0x19, 0xde, 0x74, 0xa3, 0xed, 0xeb, 0x49, 0x0f, 0xa8, 0xa9, 0x55, - 0x15, 0x70, 0xac, 0x28, 0xd0, 0x33, 0x30, 0x4c, 0x7f, 0xdf, 0xc4, 0xab, 0xe2, 0x93, 0x4f, 0x09, - 0xe2, 0xd1, 0xaa, 0x13, 0x3b, 0x55, 0x8e, 0xc2, 0x92, 0x06, 0x5d, 0x83, 0xd1, 0x06, 0x5b, 0x90, - 0x9b, 0xd7, 0x82, 0x26, 0x61, 0x83, 0x59, 0x5a, 0x7c, 0x8a, 0x92, 0x2f, 0x25, 0xe0, 0xc3, 0xfd, - 0x4a, 0x99, 0xb7, 0x4d, 0xb0, 0xd0, 0x70, 0x58, 0x2f, 0x8f, 0x6c, 0xb5, 0xbe, 0x06, 0x18, 0x27, - 0xc8, 0x58, 0x5b, 0x17, 0xb4, 0xa5, 0x32, 0xc8, 0x96, 0xca, 0x58, 0xf6, 0x32, 0x41, 0xcf, 0xc2, - 0xc0, 0xb6, 0xeb, 0x37, 0xcb, 0x43, 0x8c, 0xd7, 0xc3, 0x74, 0xcc, 0xaf, 0xb8, 0x7e, 0xf3, 0x70, - 0xbf, 0x32, 0x6d, 0x34, 0x87, 0x02, 0x31, 0x23, 0xb5, 0xff, 0x81, 0x25, 0xba, 0x71, 0xc5, 0xf5, - 0x4c, 0x41, 0x71, 0x11, 0x20, 0x22, 0x8d, 0x90, 0xc4, 0x5a, 0x47, 0xaa, 0xe9, 0x50, 0x57, 0x18, - 0xac, 0x51, 0x51, 0x31, 0x10, 0x6d, 0x39, 0x21, 0x9b, 0x55, 0xa2, 0x3b, 0x95, 0x18, 0xa8, 0x4b, - 0x04, 0x4e, 0x68, 0x0c, 0x31, 0x50, 0xec, 0x29, 0x06, 0x7e, 0xdb, 0x82, 0xe1, 0x45, 0xd7, 0x6f, - 0xba, 0xfe, 0x26, 0xfa, 0x3c, 0x8c, 0x50, 0x29, 0xdd, 0x74, 0x62, 0x47, 0x48, 0x80, 0x8f, 0x6b, - 0xb3, 0x4c, 0x09, 0xcd, 0xb9, 0xd6, 0xf6, 0x26, 0x05, 0x44, 0x73, 0x94, 0x9a, 0xce, 0xbb, 0x1b, - 0xeb, 0xef, 0x90, 0x46, 0x7c, 0x8d, 0xc4, 0x4e, 0xf2, 0x39, 0x09, 0x0c, 0x2b, 0xae, 0xe8, 0x0a, - 0x0c, 0xc5, 0x4e, 0xb8, 0x49, 0x62, 0x21, 0x0a, 0x32, 0x97, 0x2c, 0x2f, 0x89, 0xe9, 0xdc, 0x24, - 0x7e, 0x83, 0x24, 0x02, 0x72, 0x8d, 0x15, 0xc5, 0x82, 0x85, 0xdd, 0x80, 0xb1, 0x25, 0xa7, 0xe5, - 0xac, 0xbb, 0x9e, 0x1b, 0xbb, 0x24, 0x42, 0x8f, 0x43, 0xd1, 0x69, 0x36, 0xd9, 0xfa, 0x28, 0x2d, - 0x9e, 0x3e, 0xd8, 0xaf, 0x14, 0x17, 0x9a, 0x74, 0xa0, 0x40, 0x51, 0xed, 0x61, 0x4a, 0x81, 0x9e, - 0x84, 0x81, 0x66, 0x18, 0xb4, 0xca, 0x05, 0x46, 0x79, 0x86, 0x8e, 0x69, 0x35, 0x0c, 0x5a, 0x29, - 0x52, 0x46, 0x63, 0x7f, 0xab, 0x00, 0x68, 0x89, 0xb4, 0xb6, 0x56, 0xea, 0xc6, 0x48, 0x5e, 0x80, - 0x91, 0x9d, 0xc0, 0x77, 0xe3, 0x20, 0x8c, 0x44, 0x85, 0x6c, 0x02, 0x5d, 0x13, 0x30, 0xac, 0xb0, - 0xe8, 0x3c, 0x0c, 0xb4, 0x92, 0xc5, 0x3f, 0x26, 0x05, 0x07, 0x5b, 0xf6, 0x0c, 0x43, 0x29, 0xda, - 0x11, 0x09, 0xc5, 0xc4, 0x57, 0x14, 0x37, 0x23, 0x12, 0x62, 0x86, 0x49, 0xe6, 0x0d, 0x9d, 0x51, - 0x62, 0x5a, 0xa7, 0xe6, 0x0d, 0xc5, 0x60, 0x8d, 0x0a, 0xdd, 0x84, 0x12, 0xff, 0x87, 0xc9, 0x06, - 0x9b, 0xe3, 0x39, 0x32, 0xe3, 0x6a, 0xd0, 0x70, 0xbc, 0x74, 0x97, 0x8f, 0xb3, 0xd9, 0x25, 0x8b, - 0xe3, 0x84, 0x93, 0x31, 0xbb, 0x86, 0x7a, 0xce, 0xae, 0x5f, 0xb0, 0x00, 0x2d, 0xb9, 0x7e, 0x93, - 0x84, 0x27, 0xb0, 0x61, 0x1e, 0x6d, 0xe2, 0xff, 0x07, 0xda, 0xb4, 0x60, 0xa7, 0x15, 0xf8, 0xc4, - 0x8f, 0x97, 0x02, 0xbf, 0xc9, 0x37, 0xd1, 0x4f, 0xc1, 0x40, 0x4c, 0xab, 0xe2, 0xcd, 0x7a, 0x4c, - 0x0e, 0x06, 0xad, 0xe0, 0x70, 0xbf, 0x72, 0xa6, 0xb3, 0x04, 0x6b, 0x02, 0x2b, 0x83, 0x3e, 0x09, - 0x43, 0x51, 0xec, 0xc4, 0xed, 0x48, 0x34, 0xf4, 0x11, 0xd9, 0xd0, 0x3a, 0x83, 0x1e, 0xee, 0x57, - 0x26, 0x55, 0x31, 0x0e, 0xc2, 0xa2, 0x00, 0x7a, 0x02, 0x86, 0x77, 0x48, 0x14, 0x39, 0x9b, 0x52, - 0xfe, 0x4d, 0x8a, 0xb2, 0xc3, 0xd7, 0x38, 0x18, 0x4b, 0x3c, 0x7a, 0x14, 0x06, 0x49, 0x18, 0x06, - 0xa1, 0x98, 0x07, 0xe3, 0x82, 0x70, 0x70, 0x99, 0x02, 0x31, 0xc7, 0xd9, 0xff, 0xce, 0x82, 0x49, - 0xd5, 0x56, 0x5e, 0xd7, 0x09, 0x2c, 0xef, 0x37, 0x01, 0x1a, 0xf2, 0x03, 0x23, 0xb6, 0xbc, 0x46, - 0x2f, 0x3e, 0x96, 0x35, 0xe9, 0x3a, 0xbb, 0x31, 0xe1, 0xac, 0x40, 0x11, 0xd6, 0xb8, 0xd9, 0xff, - 0xcc, 0x82, 0x53, 0xa9, 0x2f, 0xba, 0xea, 0x46, 0x31, 0x7a, 0xab, 0xe3, 0xab, 0xe6, 0xfa, 0xfb, - 0x2a, 0x5a, 0x9a, 0x7d, 0x93, 0x9a, 0x25, 0x12, 0xa2, 0x7d, 0xd1, 0x65, 0x18, 0x74, 0x63, 0xb2, - 0x23, 0x3f, 0xe6, 0xd1, 0xae, 0x1f, 0xc3, 0x5b, 0x95, 0x8c, 0xc8, 0x2a, 0x2d, 0x89, 0x39, 0x03, - 0xfb, 0x7f, 0x5a, 0x50, 0x5a, 0x0a, 0xfc, 0x0d, 0x77, 0xf3, 0x9a, 0xd3, 0x3a, 0x81, 0xb1, 0x58, - 0x85, 0x01, 0xc6, 0x9d, 0x37, 0xfc, 0xf1, 0xec, 0x86, 0x8b, 0xe6, 0xcc, 0xd1, 0x5d, 0x8c, 0x6b, - 0x0b, 0x4a, 0xfc, 0x50, 0x10, 0x66, 0x2c, 0x66, 0x5f, 0x84, 0x92, 0x22, 0x40, 0x53, 0x50, 0xdc, - 0x26, 0x5c, 0x43, 0x2c, 0x61, 0xfa, 0x13, 0xcd, 0xc0, 0xe0, 0xae, 0xe3, 0xb5, 0xc5, 0xf2, 0xc4, - 0xfc, 0xcf, 0xa7, 0x0a, 0x2f, 0x59, 0xf6, 0x37, 0xd9, 0x1a, 0x13, 0x95, 0x2c, 0xfb, 0xbb, 0x62, - 0xf9, 0xbf, 0x07, 0x33, 0x5e, 0x86, 0xd4, 0x11, 0x1d, 0xd1, 0xbf, 0x94, 0x7a, 0x48, 0xb4, 0x75, - 0x26, 0x0b, 0x8b, 0x33, 0xeb, 0xa0, 0x82, 0x3b, 0x68, 0xd1, 0x19, 0xe5, 0x78, 0xac, 0xbd, 0x62, - 0xe7, 0xbf, 0x21, 0x60, 0x58, 0x61, 0xa9, 0x80, 0x98, 0x51, 0x8d, 0xbf, 0x42, 0xf6, 0xea, 0xc4, - 0x23, 0x8d, 0x38, 0x08, 0x3f, 0xd0, 0xe6, 0x3f, 0xcc, 0x7b, 0x9f, 0xcb, 0x97, 0x51, 0xc1, 0xa0, - 0x78, 0x85, 0xec, 0xf1, 0xa1, 0xd0, 0xbf, 0xae, 0xd8, 0xf5, 0xeb, 0x7e, 0xdd, 0x82, 0x71, 0xf5, - 0x75, 0x27, 0xb0, 0x90, 0x16, 0xcd, 0x85, 0xf4, 0x70, 0xd7, 0xf9, 0x98, 0xb3, 0x84, 0x7e, 0xc8, - 0x44, 0x80, 0xa0, 0xa9, 0x85, 0x01, 0xed, 0x1a, 0x2a, 0xb3, 0x3f, 0xc8, 0x01, 0xe9, 0xe7, 0xbb, - 0xae, 0x90, 0xbd, 0xb5, 0x80, 0x6e, 0xf8, 0xd9, 0xdf, 0x65, 0x8c, 0xda, 0x40, 0xd7, 0x51, 0xfb, - 0x8d, 0x02, 0x9c, 0x56, 0x3d, 0x60, 0x6c, 0xa9, 0x3f, 0xea, 0x7d, 0xf0, 0x2c, 0x8c, 0x36, 0xc9, - 0x86, 0xd3, 0xf6, 0x62, 0x65, 0x04, 0x0c, 0x72, 0x43, 0xb0, 0x9a, 0x80, 0xb1, 0x4e, 0x73, 0x84, - 0x6e, 0xfb, 0x37, 0xc0, 0x64, 0x6f, 0xec, 0xd0, 0x19, 0x4c, 0xf5, 0x2d, 0xcd, 0x94, 0x1b, 0xd3, - 0x4d, 0x39, 0x61, 0xb6, 0x3d, 0x0a, 0x83, 0xee, 0x0e, 0xdd, 0x8b, 0x0b, 0xe6, 0x16, 0xbb, 0x4a, - 0x81, 0x98, 0xe3, 0xd0, 0xc7, 0x60, 0xb8, 0x11, 0xec, 0xec, 0x38, 0x7e, 0xb3, 0x5c, 0x64, 0x1a, - 0xe0, 0x28, 0xdd, 0xae, 0x97, 0x38, 0x08, 0x4b, 0x1c, 0x7a, 0x08, 0x06, 0x9c, 0x70, 0x33, 0x2a, - 0x0f, 0x30, 0x9a, 0x11, 0x5a, 0xd3, 0x42, 0xb8, 0x19, 0x61, 0x06, 0xa5, 0x9a, 0xdd, 0x9d, 0x20, - 0xdc, 0x76, 0xfd, 0xcd, 0xaa, 0x1b, 0x32, 0x35, 0x4d, 0xd3, 0xec, 0x6e, 0x2b, 0x0c, 0xd6, 0xa8, - 0xd0, 0x0a, 0x0c, 0xb6, 0x82, 0x30, 0x8e, 0xca, 0x43, 0xac, 0xbb, 0x1f, 0xc9, 0x59, 0x4a, 0xfc, - 0x6b, 0x6b, 0x41, 0x18, 0x27, 0x1f, 0x40, 0xff, 0x45, 0x98, 0x17, 0x47, 0x9f, 0x84, 0x22, 0xf1, - 0x77, 0xcb, 0xc3, 0x8c, 0xcb, 0x6c, 0x16, 0x97, 0x65, 0x7f, 0xf7, 0x96, 0x13, 0x26, 0x72, 0x66, - 0xd9, 0xdf, 0xc5, 0xb4, 0x0c, 0x7a, 0x03, 0x4a, 0xd2, 0x0d, 0x14, 0x95, 0x47, 0xf2, 0xa7, 0x18, - 0x16, 0x44, 0x98, 0xbc, 0xdb, 0x76, 0x43, 0xb2, 0x43, 0xfc, 0x38, 0x4a, 0xcc, 0x17, 0x89, 0x8d, - 0x70, 0xc2, 0x0d, 0xbd, 0x01, 0x63, 0x5c, 0xf3, 0xbb, 0x16, 0xb4, 0xfd, 0x38, 0x2a, 0x97, 0x58, - 0xf3, 0x32, 0x7d, 0x06, 0xb7, 0x12, 0xba, 0xc5, 0x19, 0xc1, 0x74, 0x4c, 0x03, 0x46, 0xd8, 0x60, - 0x85, 0x30, 0x8c, 0x7b, 0xee, 0x2e, 0xf1, 0x49, 0x14, 0xd5, 0xc2, 0x60, 0x9d, 0x94, 0x81, 0xb5, - 0xfc, 0x6c, 0xb6, 0x29, 0x1d, 0xac, 0x93, 0xc5, 0xe9, 0x83, 0xfd, 0xca, 0xf8, 0x55, 0xbd, 0x0c, - 0x36, 0x59, 0xa0, 0x9b, 0x30, 0x41, 0x55, 0x4a, 0x37, 0x61, 0x3a, 0xda, 0x8b, 0x29, 0x3a, 0xd8, - 0xaf, 0x4c, 0x60, 0xa3, 0x10, 0x4e, 0x31, 0x41, 0xaf, 0x41, 0xc9, 0x73, 0x37, 0x48, 0x63, 0xaf, - 0xe1, 0x91, 0xf2, 0x18, 0xe3, 0x98, 0xb9, 0xac, 0xae, 0x4a, 0x22, 0xae, 0xb2, 0xab, 0xbf, 0x38, - 0x29, 0x8e, 0x6e, 0xc1, 0x99, 0x98, 0x84, 0x3b, 0xae, 0xef, 0xd0, 0xe5, 0x20, 0xf4, 0x49, 0xe6, - 0x90, 0x18, 0x67, 0xf3, 0xed, 0x9c, 0xe8, 0xba, 0x33, 0x6b, 0x99, 0x54, 0x38, 0xa7, 0x34, 0xba, - 0x01, 0x93, 0x6c, 0x25, 0xd4, 0xda, 0x9e, 0x57, 0x0b, 0x3c, 0xb7, 0xb1, 0x57, 0x9e, 0x60, 0x0c, - 0x3f, 0x26, 0x3d, 0x0e, 0xab, 0x26, 0x9a, 0x1a, 0x58, 0xc9, 0x3f, 0x9c, 0x2e, 0x8d, 0xd6, 0x61, - 0x32, 0x22, 0x8d, 0x76, 0xe8, 0xc6, 0x7b, 0x74, 0xfe, 0x92, 0xbb, 0x71, 0x79, 0x32, 0xdf, 0x4c, - 0xac, 0x9b, 0xa4, 0xdc, 0xb3, 0x93, 0x02, 0xe2, 0x34, 0x43, 0xba, 0xb4, 0xa3, 0xb8, 0xe9, 0xfa, - 0xe5, 0x29, 0x26, 0x31, 0xd4, 0xca, 0xa8, 0x53, 0x20, 0xe6, 0x38, 0x66, 0x73, 0xd3, 0x1f, 0x37, - 0xa8, 0x04, 0x9d, 0x66, 0x84, 0x89, 0xcd, 0x2d, 0x11, 0x38, 0xa1, 0xa1, 0xdb, 0x72, 0x1c, 0xef, - 0x95, 0x11, 0x23, 0x55, 0xcb, 0x65, 0x6d, 0xed, 0x0d, 0x4c, 0xe1, 0xe8, 0x2a, 0x0c, 0x13, 0x7f, - 0x77, 0x25, 0x0c, 0x76, 0xca, 0xa7, 0xf2, 0xd7, 0xec, 0x32, 0x27, 0xe1, 0x02, 0x3d, 0x31, 0x00, - 0x04, 0x18, 0x4b, 0x16, 0xe8, 0x2e, 0x94, 0x33, 0x46, 0x84, 0x0f, 0xc0, 0x0c, 0x1b, 0x80, 0x57, - 0x44, 0xd9, 0xf2, 0x5a, 0x0e, 0xdd, 0x61, 0x17, 0x1c, 0xce, 0xe5, 0x6e, 0xaf, 0xc3, 0x84, 0x12, - 0x2c, 0x6c, 0x6c, 0x51, 0x05, 0x06, 0xa9, 0xc4, 0x94, 0x46, 0x70, 0x89, 0x76, 0x25, 0x15, 0xa4, - 0x11, 0xe6, 0x70, 0xd6, 0x95, 0xee, 0x7b, 0x64, 0x71, 0x2f, 0x26, 0xdc, 0x2c, 0x2a, 0x6a, 0x5d, - 0x29, 0x11, 0x38, 0xa1, 0xb1, 0xff, 0x1f, 0x57, 0x4c, 0x12, 0xe9, 0xd5, 0x87, 0xbc, 0x7e, 0x1a, - 0x46, 0xb6, 0x82, 0x28, 0xa6, 0xd4, 0xac, 0x8e, 0xc1, 0x44, 0x15, 0xb9, 0x2c, 0xe0, 0x58, 0x51, - 0xa0, 0x97, 0x61, 0xbc, 0xa1, 0x57, 0x20, 0x36, 0x9b, 0xd3, 0xa2, 0x88, 0x59, 0x3b, 0x36, 0x69, - 0xd1, 0x4b, 0x30, 0xc2, 0x3c, 0xc3, 0x8d, 0xc0, 0x13, 0x06, 0x98, 0xdc, 0x31, 0x47, 0x6a, 0x02, - 0x7e, 0xa8, 0xfd, 0xc6, 0x8a, 0x9a, 0x9a, 0xb1, 0xb4, 0x09, 0xab, 0x35, 0x21, 0xe6, 0x95, 0x19, - 0x7b, 0x99, 0x41, 0xb1, 0xc0, 0xda, 0x7f, 0xbd, 0xa0, 0xf5, 0x32, 0x35, 0x29, 0x08, 0xaa, 0xc1, - 0xf0, 0x1d, 0xc7, 0x8d, 0x5d, 0x7f, 0x53, 0xec, 0xe7, 0x4f, 0x74, 0x95, 0xf9, 0xac, 0xd0, 0x6d, - 0x5e, 0x80, 0xef, 0x4a, 0xe2, 0x0f, 0x96, 0x6c, 0x28, 0xc7, 0xb0, 0xed, 0xfb, 0x94, 0x63, 0xa1, - 0x5f, 0x8e, 0x98, 0x17, 0xe0, 0x1c, 0xc5, 0x1f, 0x2c, 0xd9, 0xa0, 0xb7, 0x00, 0xe4, 0xbc, 0x21, - 0x4d, 0xe1, 0x91, 0x7d, 0xba, 0x37, 0xd3, 0x35, 0x55, 0x66, 0x71, 0x82, 0xee, 0x79, 0xc9, 0x7f, - 0xac, 0xf1, 0xb3, 0x63, 0xa6, 0xf7, 0x74, 0x36, 0x06, 0x7d, 0x8e, 0x2e, 0x55, 0x27, 0x8c, 0x49, - 0x73, 0x21, 0x16, 0x9d, 0xf3, 0x64, 0x7f, 0x6a, 0xeb, 0x9a, 0xbb, 0x43, 0xf4, 0x65, 0x2d, 0x98, - 0xe0, 0x84, 0x9f, 0xfd, 0x5b, 0x45, 0x28, 0xe7, 0x35, 0x97, 0x4e, 0x3a, 0x72, 0xd7, 0x8d, 0x97, - 0xa8, 0xba, 0x62, 0x99, 0x93, 0x6e, 0x59, 0xc0, 0xb1, 0xa2, 0xa0, 0xa3, 0x1f, 0xb9, 0x9b, 0xd2, - 0xea, 0x18, 0x4c, 0x46, 0xbf, 0xce, 0xa0, 0x58, 0x60, 0x29, 0x5d, 0x48, 0x9c, 0x48, 0xb8, 0xfc, - 0xb5, 0x59, 0x82, 0x19, 0x14, 0x0b, 0xac, 0xee, 0x30, 0x18, 0xe8, 0xe1, 0x30, 0x30, 0xba, 0x68, - 0xf0, 0x78, 0xbb, 0x08, 0xbd, 0x0d, 0xb0, 0xe1, 0xfa, 0x6e, 0xb4, 0xc5, 0xb8, 0x0f, 0x1d, 0x99, - 0xbb, 0x52, 0x76, 0x56, 0x14, 0x17, 0xac, 0x71, 0x44, 0x2f, 0xc0, 0xa8, 0x5a, 0x80, 0xab, 0xd5, - 0xf2, 0xb0, 0xe9, 0x4f, 0x4e, 0xa4, 0x51, 0x15, 0xeb, 0x74, 0xf6, 0x3b, 0xe9, 0xf9, 0x22, 0x56, - 0x80, 0xd6, 0xbf, 0x56, 0xbf, 0xfd, 0x5b, 0xe8, 0xde, 0xbf, 0xf6, 0xef, 0x15, 0x61, 0xd2, 0xa8, - 0xac, 0x1d, 0xf5, 0x21, 0xb3, 0x2e, 0xd1, 0x8d, 0xc8, 0x89, 0x89, 0x58, 0x7f, 0x76, 0xef, 0xa5, - 0xa2, 0x6f, 0x56, 0x74, 0x05, 0xf0, 0xf2, 0xe8, 0x6d, 0x28, 0x79, 0x4e, 0xc4, 0x9c, 0x0f, 0x44, - 0xac, 0xbb, 0x7e, 0x98, 0x25, 0x8a, 0xbe, 0x13, 0xc5, 0xda, 0x5e, 0xc0, 0x79, 0x27, 0x2c, 0xe9, - 0x8e, 0x49, 0x95, 0x13, 0x79, 0xa6, 0xa4, 0x1a, 0x41, 0x35, 0x98, 0x3d, 0xcc, 0x71, 0xe8, 0x25, - 0x18, 0x0b, 0x09, 0x9b, 0x15, 0x4b, 0x54, 0xd7, 0x62, 0xd3, 0x6c, 0x30, 0x51, 0xca, 0xb0, 0x86, - 0xc3, 0x06, 0x65, 0xa2, 0x6b, 0x0f, 0x75, 0xd1, 0xb5, 0x9f, 0x80, 0x61, 0xf6, 0x43, 0xcd, 0x00, - 0x35, 0x1a, 0xab, 0x1c, 0x8c, 0x25, 0x3e, 0x3d, 0x61, 0x46, 0xfa, 0x9c, 0x30, 0x4f, 0xc2, 0x44, - 0xd5, 0x21, 0x3b, 0x81, 0xbf, 0xec, 0x37, 0x5b, 0x81, 0xeb, 0xc7, 0xa8, 0x0c, 0x03, 0x6c, 0x77, - 0xe0, 0x6b, 0x7b, 0x80, 0x72, 0xc0, 0x03, 0x54, 0x73, 0xb6, 0xff, 0xb0, 0x00, 0xe3, 0x55, 0xe2, - 0x91, 0x98, 0x70, 0x5b, 0x23, 0x42, 0x2b, 0x80, 0x36, 0x43, 0xa7, 0x41, 0x6a, 0x24, 0x74, 0x83, - 0x66, 0x9d, 0x34, 0x02, 0x9f, 0x9d, 0xd4, 0xd0, 0xed, 0xee, 0xcc, 0xc1, 0x7e, 0x05, 0x5d, 0xea, - 0xc0, 0xe2, 0x8c, 0x12, 0xe8, 0x4d, 0x18, 0x6f, 0x85, 0xc4, 0xf0, 0xa1, 0x59, 0x79, 0xea, 0x42, - 0x4d, 0x27, 0xe4, 0x9a, 0xaa, 0x01, 0xc2, 0x26, 0x2b, 0xf4, 0x59, 0x98, 0x0a, 0xc2, 0xd6, 0x96, - 0xe3, 0x57, 0x49, 0x8b, 0xf8, 0x4d, 0xaa, 0x8a, 0x0b, 0x1f, 0xc1, 0xcc, 0xc1, 0x7e, 0x65, 0xea, - 0x46, 0x0a, 0x87, 0x3b, 0xa8, 0xd1, 0x9b, 0x30, 0xdd, 0x0a, 0x83, 0x96, 0xb3, 0xc9, 0x26, 0x8a, - 0xd0, 0x38, 0xb8, 0xf4, 0x79, 0xfa, 0x60, 0xbf, 0x32, 0x5d, 0x4b, 0x23, 0x0f, 0xf7, 0x2b, 0xa7, - 0x58, 0x47, 0x51, 0x48, 0x82, 0xc4, 0x9d, 0x6c, 0xec, 0x4d, 0x38, 0x5d, 0x0d, 0xee, 0xf8, 0x77, - 0x9c, 0xb0, 0xb9, 0x50, 0x5b, 0xd5, 0x8c, 0xfb, 0xeb, 0xd2, 0xb8, 0xe4, 0xe7, 0x5e, 0x99, 0xfb, - 0x94, 0x56, 0x92, 0xab, 0xff, 0x2b, 0xae, 0x47, 0x72, 0x9c, 0x08, 0x7f, 0xb3, 0x60, 0xd4, 0x94, - 0xd0, 0x2b, 0x4f, 0xbd, 0x95, 0xeb, 0xa9, 0x7f, 0x1d, 0x46, 0x36, 0x5c, 0xe2, 0x35, 0x31, 0xd9, - 0x10, 0x23, 0xf3, 0x78, 0xfe, 0x01, 0xc6, 0x0a, 0xa5, 0x94, 0x4e, 0x23, 0x6e, 0x9a, 0xae, 0x88, - 0xc2, 0x58, 0xb1, 0x41, 0xdb, 0x30, 0x25, 0x6d, 0x1f, 0x89, 0x15, 0x8b, 0xf8, 0x89, 0x6e, 0x06, - 0x95, 0xc9, 0x9c, 0x0d, 0x20, 0x4e, 0xb1, 0xc1, 0x1d, 0x8c, 0xa9, 0x2d, 0xba, 0x43, 0xb7, 0xab, - 0x01, 0x36, 0xa5, 0x99, 0x2d, 0xca, 0xcc, 0x6a, 0x06, 0xb5, 0xbf, 0x66, 0xc1, 0x03, 0x1d, 0x3d, - 0x23, 0xdc, 0x0b, 0xc7, 0x3c, 0x0a, 0x69, 0x73, 0xbf, 0xd0, 0xdb, 0xdc, 0xb7, 0x7f, 0xcd, 0x82, - 0x99, 0xe5, 0x9d, 0x56, 0xbc, 0x57, 0x75, 0xcd, 0xd3, 0x84, 0x17, 0x61, 0x68, 0x87, 0x34, 0xdd, - 0xf6, 0x8e, 0x18, 0xb9, 0x8a, 0x14, 0xe9, 0xd7, 0x18, 0xf4, 0x70, 0xbf, 0x32, 0x5e, 0x8f, 0x83, - 0xd0, 0xd9, 0x24, 0x1c, 0x80, 0x05, 0x39, 0xfa, 0x29, 0xae, 0x9b, 0x5e, 0x75, 0x77, 0x5c, 0x79, - 0x20, 0xd5, 0xd5, 0xe5, 0x35, 0x27, 0x3b, 0x74, 0xee, 0xf5, 0xb6, 0xe3, 0xc7, 0x6e, 0xbc, 0x67, - 0xea, 0xb2, 0x8c, 0x11, 0x4e, 0x78, 0xda, 0xdf, 0xb5, 0x60, 0x52, 0xca, 0x93, 0x85, 0x66, 0x33, - 0x24, 0x51, 0x84, 0x66, 0xa1, 0xe0, 0xb6, 0x44, 0x4b, 0x41, 0x94, 0x2e, 0xac, 0xd6, 0x70, 0xc1, - 0x6d, 0xa1, 0x1a, 0x94, 0xf8, 0xd9, 0x56, 0x32, 0xc1, 0xfa, 0x3a, 0x21, 0x63, 0xb6, 0xdf, 0x9a, - 0x2c, 0x89, 0x13, 0x26, 0x52, 0x33, 0x66, 0x7b, 0x51, 0xd1, 0x3c, 0x69, 0xb9, 0x2c, 0xe0, 0x58, - 0x51, 0xa0, 0x0b, 0x30, 0xe2, 0x07, 0x4d, 0x7e, 0xd4, 0xc8, 0xd7, 0x35, 0x9b, 0xb6, 0xd7, 0x05, - 0x0c, 0x2b, 0xac, 0xfd, 0xb3, 0x16, 0x8c, 0xc9, 0x2f, 0xeb, 0x53, 0x49, 0xa7, 0xcb, 0x2b, 0x51, - 0xd0, 0x93, 0xe5, 0x45, 0x95, 0x6c, 0x86, 0x31, 0x74, 0xeb, 0xe2, 0x51, 0x74, 0x6b, 0xfb, 0xab, - 0x05, 0x98, 0x90, 0xcd, 0xa9, 0xb7, 0xd7, 0x23, 0x12, 0xa3, 0x35, 0x28, 0x39, 0xbc, 0xcb, 0x89, - 0x9c, 0xb5, 0x8f, 0x66, 0x5b, 0x5d, 0xc6, 0xf8, 0x24, 0x23, 0xba, 0x20, 0x4b, 0xe3, 0x84, 0x11, - 0xf2, 0x60, 0xda, 0x0f, 0x62, 0xb6, 0xf5, 0x29, 0x7c, 0xb7, 0xb3, 0x81, 0x34, 0xf7, 0xb3, 0x82, - 0xfb, 0xf4, 0xf5, 0x34, 0x17, 0xdc, 0xc9, 0x18, 0x2d, 0x4b, 0x4f, 0x4f, 0x91, 0xd5, 0x70, 0xbe, - 0x5b, 0x0d, 0xf9, 0x8e, 0x1e, 0xfb, 0x77, 0x2d, 0x28, 0x49, 0xb2, 0x93, 0x38, 0x06, 0xba, 0x06, - 0xc3, 0x11, 0x1b, 0x04, 0xd9, 0x35, 0x76, 0xb7, 0x86, 0xf3, 0xf1, 0x4a, 0x76, 0x74, 0xfe, 0x3f, - 0xc2, 0x92, 0x07, 0x73, 0x55, 0xab, 0xe6, 0x7f, 0x48, 0x5c, 0xd5, 0xaa, 0x3d, 0x39, 0xbb, 0xcc, - 0x7f, 0x61, 0x6d, 0xd6, 0xec, 0x79, 0xaa, 0x78, 0xb6, 0x42, 0xb2, 0xe1, 0xde, 0x4d, 0x2b, 0x9e, - 0x35, 0x06, 0xc5, 0x02, 0x8b, 0xde, 0x82, 0xb1, 0x86, 0xf4, 0xf0, 0x26, 0x62, 0xe0, 0xb1, 0xae, - 0xfe, 0x72, 0x75, 0xb4, 0xc2, 0x03, 0x72, 0x96, 0xb4, 0xf2, 0xd8, 0xe0, 0x46, 0x25, 0x4c, 0x72, - 0x2a, 0x5c, 0xec, 0xea, 0x5c, 0x09, 0x49, 0x9c, 0xf0, 0xcd, 0x3d, 0x10, 0xb6, 0x7f, 0xc9, 0x82, - 0x21, 0xee, 0x27, 0xec, 0xcf, 0xb1, 0xaa, 0x1d, 0x15, 0x25, 0x7d, 0x77, 0x8b, 0x02, 0xc5, 0xc9, - 0x11, 0xba, 0x06, 0x25, 0xf6, 0x83, 0xf9, 0x4b, 0x8a, 0xf9, 0x91, 0x48, 0xbc, 0x56, 0xbd, 0x81, - 0xb7, 0x64, 0x31, 0x9c, 0x70, 0xb0, 0x7f, 0xbe, 0x48, 0x45, 0x55, 0x42, 0x6a, 0xec, 0xe2, 0xd6, - 0xfd, 0xdb, 0xc5, 0x0b, 0xf7, 0x6b, 0x17, 0xdf, 0x84, 0xc9, 0x86, 0x76, 0x2e, 0x95, 0x8c, 0xe4, - 0x85, 0xae, 0x93, 0x44, 0x3b, 0xc2, 0xe2, 0xbe, 0xb2, 0x25, 0x93, 0x09, 0x4e, 0x73, 0x45, 0x9f, - 0x83, 0x31, 0x3e, 0xce, 0xa2, 0x96, 0x01, 0x56, 0xcb, 0xc7, 0xf2, 0xe7, 0x8b, 0x5e, 0x05, 0x9b, - 0x89, 0x75, 0xad, 0x38, 0x36, 0x98, 0xd9, 0x5f, 0x1e, 0x84, 0xc1, 0xe5, 0x5d, 0xe2, 0xc7, 0x27, - 0x20, 0x90, 0x1a, 0x30, 0xe1, 0xfa, 0xbb, 0x81, 0xb7, 0x4b, 0x9a, 0x1c, 0x7f, 0x94, 0xcd, 0xf5, - 0x8c, 0x60, 0x3d, 0xb1, 0x6a, 0xb0, 0xc0, 0x29, 0x96, 0xf7, 0xc3, 0x72, 0xbf, 0x04, 0x43, 0x7c, - 0xec, 0x85, 0xd9, 0x9e, 0xe9, 0x05, 0x67, 0x9d, 0x28, 0x56, 0x41, 0xe2, 0x55, 0xe0, 0x6e, 0x77, - 0x51, 0x1c, 0xbd, 0x03, 0x13, 0x1b, 0x6e, 0x18, 0xc5, 0xd4, 0xe4, 0x8e, 0x62, 0x67, 0xa7, 0x75, - 0x0f, 0x96, 0xba, 0xea, 0x87, 0x15, 0x83, 0x13, 0x4e, 0x71, 0x46, 0x9b, 0x30, 0x4e, 0x8d, 0xc7, - 0xa4, 0xaa, 0xe1, 0x23, 0x57, 0xa5, 0x5c, 0x71, 0x57, 0x75, 0x46, 0xd8, 0xe4, 0x4b, 0x85, 0x49, - 0x83, 0x19, 0x9b, 0x23, 0x4c, 0xa3, 0x50, 0xc2, 0x84, 0x5b, 0x99, 0x1c, 0x47, 0x65, 0x12, 0x8b, - 0xe7, 0x28, 0x99, 0x32, 0x29, 0x89, 0xda, 0xb0, 0xbf, 0x4e, 0x77, 0x47, 0xda, 0x87, 0x27, 0xb0, - 0xb5, 0xbc, 0x6a, 0x6e, 0x2d, 0x67, 0x73, 0xc7, 0x33, 0x67, 0x5b, 0xf9, 0x3c, 0x8c, 0x6a, 0xc3, - 0x8d, 0xe6, 0xa1, 0xd4, 0x90, 0xc1, 0x07, 0x42, 0xea, 0x2a, 0xf5, 0x45, 0x45, 0x25, 0xe0, 0x84, - 0x86, 0xf6, 0x06, 0x55, 0xf6, 0xd2, 0xc1, 0x48, 0x54, 0x15, 0xc4, 0x0c, 0x63, 0x3f, 0x07, 0xb0, - 0x7c, 0x97, 0x34, 0x16, 0xb8, 0xf1, 0xa5, 0x9d, 0x71, 0x59, 0xf9, 0x67, 0x5c, 0xf6, 0x1f, 0x59, - 0x30, 0xb1, 0xb2, 0x64, 0x28, 0xe5, 0x73, 0x00, 0x5c, 0x0b, 0xbd, 0x7d, 0xfb, 0xba, 0xf4, 0x0e, - 0x73, 0x07, 0x9f, 0x82, 0x62, 0x8d, 0x02, 0x9d, 0x85, 0xa2, 0xd7, 0xf6, 0x85, 0x72, 0x38, 0x7c, - 0xb0, 0x5f, 0x29, 0x5e, 0x6d, 0xfb, 0x98, 0xc2, 0xb4, 0xf8, 0x9f, 0x62, 0xdf, 0xf1, 0x3f, 0x3d, - 0xe3, 0x5f, 0x51, 0x05, 0x06, 0xef, 0xdc, 0x71, 0x9b, 0x51, 0x79, 0x30, 0xf1, 0x5c, 0xdf, 0xbe, - 0xbd, 0x5a, 0x8d, 0x30, 0x87, 0xdb, 0x7f, 0xb1, 0x08, 0x53, 0x2b, 0x1e, 0xb9, 0x6b, 0x7c, 0xd6, - 0x63, 0x30, 0xd4, 0x0c, 0xdd, 0x5d, 0x12, 0xa6, 0x77, 0xf1, 0x2a, 0x83, 0x62, 0x81, 0xed, 0x3b, - 0x66, 0xe9, 0x66, 0xe7, 0x7e, 0x7c, 0xdc, 0x51, 0x5a, 0xbd, 0xbb, 0xe2, 0x2d, 0x18, 0xe6, 0x47, - 0xa5, 0xbc, 0x33, 0x46, 0x2f, 0x3e, 0x9b, 0xd5, 0x84, 0x74, 0x5f, 0xcc, 0x09, 0xe7, 0x07, 0x8f, - 0x1b, 0x51, 0x42, 0x4c, 0x40, 0xb1, 0x64, 0x39, 0xfb, 0x29, 0x18, 0xd3, 0x29, 0x8f, 0x14, 0x40, - 0xf2, 0x97, 0x2c, 0x38, 0xb5, 0xe2, 0x05, 0x8d, 0xed, 0x54, 0x00, 0xd9, 0x0b, 0x30, 0x4a, 0xd7, - 0x53, 0x64, 0x44, 0x52, 0x1a, 0x51, 0xa6, 0x02, 0x85, 0x75, 0x3a, 0xad, 0xd8, 0xcd, 0x9b, 0xab, - 0xd5, 0xac, 0xe0, 0x54, 0x81, 0xc2, 0x3a, 0x9d, 0xfd, 0xfb, 0x16, 0x3c, 0x7c, 0x69, 0x69, 0xb9, - 0x46, 0xc2, 0xc8, 0x8d, 0x62, 0xe2, 0xc7, 0x1d, 0xf1, 0xb1, 0x54, 0xb9, 0x6b, 0x6a, 0x4d, 0x49, - 0x94, 0xbb, 0x2a, 0x6b, 0x85, 0xc0, 0x7e, 0x58, 0x62, 0xbf, 0x7f, 0xc5, 0x82, 0x53, 0x97, 0xdc, - 0x18, 0x93, 0x56, 0x90, 0x8e, 0x4f, 0x0d, 0x49, 0x2b, 0x88, 0xdc, 0x38, 0x08, 0xf7, 0xd2, 0xf1, - 0xa9, 0x58, 0x61, 0xb0, 0x46, 0xc5, 0x6b, 0xde, 0x75, 0x23, 0xda, 0xd2, 0x82, 0x69, 0x61, 0x62, - 0x01, 0xc7, 0x8a, 0x82, 0x7e, 0x58, 0xd3, 0x0d, 0x99, 0x86, 0xb0, 0x27, 0x96, 0xb3, 0xfa, 0xb0, - 0xaa, 0x44, 0xe0, 0x84, 0xc6, 0xfe, 0x9a, 0x05, 0xa7, 0x2f, 0x79, 0xed, 0x28, 0x26, 0xe1, 0x46, - 0x64, 0x34, 0xf6, 0x39, 0x28, 0x11, 0xa9, 0x85, 0x8b, 0xb6, 0xaa, 0x7d, 0x43, 0xa9, 0xe7, 0x3c, - 0x38, 0x56, 0xd1, 0xf5, 0x11, 0x8d, 0x79, 0xb4, 0x28, 0xc2, 0x6f, 0x14, 0x60, 0xfc, 0xf2, 0xda, - 0x5a, 0xed, 0x12, 0x89, 0x85, 0xc8, 0xec, 0xed, 0x45, 0xc2, 0x9a, 0x21, 0xdc, 0x4d, 0xd7, 0x69, - 0xc7, 0xae, 0x37, 0xc7, 0xef, 0x25, 0xcc, 0xad, 0xfa, 0xf1, 0x8d, 0xb0, 0x1e, 0x87, 0xae, 0xbf, - 0x99, 0x69, 0x3a, 0x4b, 0xc1, 0x5e, 0xcc, 0x13, 0xec, 0xe8, 0x39, 0x18, 0x62, 0x17, 0x23, 0xa4, - 0xd6, 0xf1, 0xa0, 0x52, 0x15, 0x18, 0xf4, 0x70, 0xbf, 0x52, 0xba, 0x89, 0x57, 0xf9, 0x1f, 0x2c, - 0x48, 0xd1, 0x4d, 0x18, 0xdd, 0x8a, 0xe3, 0xd6, 0x65, 0xe2, 0x34, 0x49, 0x28, 0xa5, 0xc3, 0xb9, - 0x2c, 0xe9, 0x40, 0x3b, 0x81, 0x93, 0x25, 0x0b, 0x2a, 0x81, 0x45, 0x58, 0xe7, 0x63, 0xd7, 0x01, - 0x12, 0xdc, 0x31, 0x99, 0x0d, 0xf6, 0x0f, 0x2c, 0x18, 0xbe, 0xec, 0xf8, 0x4d, 0x8f, 0x84, 0xe8, - 0x15, 0x18, 0x20, 0x77, 0x49, 0x43, 0xec, 0xe0, 0x99, 0x0d, 0x4e, 0x76, 0x39, 0xee, 0x08, 0xa3, - 0xff, 0x31, 0x2b, 0x85, 0x2e, 0xc3, 0x30, 0x6d, 0xed, 0x25, 0x15, 0xa6, 0xfc, 0x48, 0xde, 0x17, - 0xab, 0x61, 0xe7, 0x1b, 0xa3, 0x00, 0x61, 0x59, 0x9c, 0x39, 0x74, 0x1a, 0xad, 0x3a, 0x15, 0x60, - 0x71, 0x37, 0x73, 0x6b, 0x6d, 0xa9, 0xc6, 0x89, 0x04, 0x37, 0xee, 0xd0, 0x91, 0x40, 0x9c, 0x30, - 0xb1, 0xd7, 0xa0, 0x44, 0x07, 0x75, 0xc1, 0x73, 0x9d, 0xee, 0xbe, 0xa4, 0xa7, 0xa0, 0x24, 0xfd, - 0x3a, 0x91, 0x88, 0x74, 0x66, 0x5c, 0xa5, 0xdb, 0x27, 0xc2, 0x09, 0xde, 0x7e, 0x09, 0x66, 0xd8, - 0x41, 0xa9, 0x13, 0x6f, 0x19, 0x6b, 0xac, 0xe7, 0x64, 0xb6, 0xff, 0xd3, 0x00, 0x4c, 0xaf, 0xd6, - 0x97, 0xea, 0xa6, 0xbb, 0xf0, 0x25, 0x18, 0xe3, 0x7b, 0x3b, 0x9d, 0xa2, 0x8e, 0x27, 0xca, 0xab, - 0xe3, 0x80, 0x35, 0x0d, 0x87, 0x0d, 0x4a, 0xf4, 0x30, 0x14, 0xdd, 0x77, 0xfd, 0x74, 0x80, 0xdb, - 0xea, 0xeb, 0xd7, 0x31, 0x85, 0x53, 0x34, 0x55, 0x13, 0xb8, 0x48, 0x54, 0x68, 0xa5, 0x2a, 0xbc, - 0x0a, 0x13, 0x6e, 0xd4, 0x88, 0xdc, 0x55, 0x9f, 0xca, 0x0b, 0xa7, 0x21, 0x27, 0x7b, 0xa2, 0xc3, - 0xd3, 0xa6, 0x2a, 0x2c, 0x4e, 0x51, 0x6b, 0xf2, 0x79, 0xb0, 0x6f, 0x55, 0xa3, 0x67, 0x14, 0x34, - 0xd5, 0xa2, 0x5a, 0xec, 0xeb, 0x22, 0x16, 0x6c, 0x23, 0xb4, 0x28, 0xfe, 0xc1, 0x11, 0x96, 0x38, - 0x74, 0x09, 0xa6, 0x1b, 0x5b, 0x4e, 0x6b, 0xa1, 0x1d, 0x6f, 0x55, 0xdd, 0xa8, 0x11, 0xec, 0x92, - 0x70, 0x8f, 0xe9, 0xb6, 0x23, 0x89, 0xdb, 0x48, 0x21, 0x96, 0x2e, 0x2f, 0xd4, 0x28, 0x25, 0xee, - 0x2c, 0x63, 0x2a, 0x15, 0x70, 0x6c, 0x4a, 0xc5, 0x02, 0x4c, 0xca, 0xba, 0xea, 0x24, 0x62, 0x02, - 0x7f, 0x94, 0xb5, 0x4e, 0xdd, 0x30, 0x11, 0x60, 0xd5, 0xb6, 0x34, 0x3d, 0x7a, 0x11, 0xc6, 0x5d, - 0xdf, 0x8d, 0x5d, 0x27, 0x0e, 0x42, 0xb6, 0x5d, 0x8e, 0xf1, 0x2d, 0x80, 0xca, 0xec, 0x55, 0x1d, - 0x81, 0x4d, 0x3a, 0xfb, 0x1d, 0x28, 0xa9, 0x08, 0x32, 0x19, 0x04, 0x69, 0xe5, 0x04, 0x41, 0xf6, - 0x96, 0xf1, 0xd2, 0x0f, 0x5e, 0xcc, 0xf4, 0x83, 0xff, 0x2d, 0x0b, 0x92, 0x40, 0x1a, 0x74, 0x19, - 0x4a, 0xad, 0x80, 0x9d, 0x85, 0x85, 0xf2, 0x80, 0xf9, 0xc1, 0x4c, 0x71, 0xc0, 0x45, 0x0f, 0xef, - 0xbf, 0x9a, 0x2c, 0x81, 0x93, 0xc2, 0x68, 0x11, 0x86, 0x5b, 0x21, 0xa9, 0xc7, 0xec, 0xe6, 0x41, - 0x4f, 0x3e, 0x7c, 0x8e, 0x70, 0x7a, 0x2c, 0x0b, 0xda, 0xbf, 0x61, 0x01, 0x70, 0x37, 0xb3, 0xe3, - 0x6f, 0x92, 0x13, 0x30, 0x9d, 0xab, 0x30, 0x10, 0xb5, 0x48, 0xa3, 0xdb, 0x29, 0x65, 0xd2, 0x9e, - 0x7a, 0x8b, 0x34, 0x92, 0x0e, 0xa7, 0xff, 0x30, 0x2b, 0x6d, 0xff, 0x0c, 0xc0, 0x44, 0x42, 0x46, - 0x4d, 0x1a, 0xf4, 0x8c, 0x11, 0x68, 0x7f, 0x36, 0x15, 0x68, 0x5f, 0x62, 0xd4, 0x5a, 0x6c, 0xfd, - 0x3b, 0x50, 0xdc, 0x71, 0xee, 0x0a, 0xbb, 0xe9, 0xa9, 0xee, 0xcd, 0xa0, 0xfc, 0xe7, 0xae, 0x39, - 0x77, 0xb9, 0x66, 0xfa, 0x94, 0x9c, 0x20, 0xd7, 0x9c, 0xbb, 0x87, 0xfc, 0x2c, 0x92, 0x09, 0x29, - 0x6a, 0x9e, 0x7d, 0xf1, 0x8f, 0x93, 0xff, 0x6c, 0xda, 0xd1, 0x4a, 0x58, 0x5d, 0xae, 0x2f, 0x9c, - 0xae, 0x7d, 0xd5, 0xe5, 0xfa, 0xe9, 0xba, 0x5c, 0xbf, 0x8f, 0xba, 0x5c, 0x1f, 0xbd, 0x07, 0xc3, - 0xe2, 0x90, 0x83, 0x45, 0x08, 0x8e, 0x5e, 0x9c, 0xef, 0xa3, 0x3e, 0x71, 0x46, 0xc2, 0xeb, 0x9c, - 0x97, 0x9a, 0xb7, 0x80, 0xf6, 0xac, 0x57, 0x56, 0x88, 0xfe, 0x86, 0x05, 0x13, 0xe2, 0x37, 0x26, - 0xef, 0xb6, 0x49, 0x14, 0x8b, 0x1d, 0xfe, 0x13, 0xfd, 0xb7, 0x41, 0x14, 0xe4, 0x4d, 0xf9, 0x84, - 0x14, 0xb3, 0x26, 0xb2, 0x67, 0x8b, 0x52, 0xad, 0x40, 0xff, 0xd8, 0x82, 0x99, 0x1d, 0xe7, 0x2e, - 0xaf, 0x91, 0xc3, 0xb0, 0x13, 0xbb, 0x81, 0x88, 0x78, 0x7c, 0xa5, 0xbf, 0xe1, 0xef, 0x28, 0xce, - 0x1b, 0x29, 0x83, 0xa3, 0x66, 0xb2, 0x48, 0x7a, 0x36, 0x35, 0xb3, 0x5d, 0xb3, 0x1b, 0x30, 0x22, - 0xe7, 0x5b, 0x86, 0x7d, 0x53, 0xd5, 0xd5, 0x97, 0x23, 0x9f, 0x31, 0x69, 0xf6, 0x10, 0xab, 0x47, - 0xcc, 0xb5, 0xfb, 0x5a, 0xcf, 0x3b, 0x30, 0xa6, 0xcf, 0xb1, 0xfb, 0x5a, 0xd7, 0xbb, 0x70, 0x2a, - 0x63, 0x2e, 0xdd, 0xd7, 0x2a, 0xef, 0xc0, 0xd9, 0xdc, 0xf9, 0x71, 0x3f, 0x2b, 0xb6, 0xbf, 0x61, - 0xe9, 0x72, 0xf0, 0x04, 0x1c, 0x4e, 0x4b, 0xa6, 0xc3, 0xe9, 0x5c, 0xf7, 0x95, 0x93, 0xe3, 0x75, - 0x7a, 0x4b, 0x6f, 0x34, 0x95, 0xea, 0xe8, 0x35, 0x18, 0xf2, 0x28, 0x44, 0x9e, 0xac, 0xd9, 0xbd, - 0x57, 0x64, 0xa2, 0x4b, 0x31, 0x78, 0x84, 0x05, 0x07, 0xfb, 0xb7, 0x2d, 0x18, 0x38, 0x81, 0x9e, - 0xc0, 0x66, 0x4f, 0x3c, 0x93, 0xcb, 0x5a, 0x5c, 0x23, 0x9f, 0xc3, 0xce, 0x9d, 0xe5, 0xbb, 0x31, - 0xf1, 0x23, 0xa6, 0x90, 0x67, 0x76, 0xcc, 0xff, 0x2d, 0xc0, 0x28, 0xad, 0x4a, 0x86, 0x81, 0xbc, - 0x0c, 0xe3, 0x9e, 0xb3, 0x4e, 0x3c, 0xe9, 0x04, 0x4f, 0x9b, 0xa5, 0x57, 0x75, 0x24, 0x36, 0x69, - 0x69, 0xe1, 0x0d, 0xfd, 0x3c, 0x40, 0xe8, 0x2f, 0xaa, 0xb0, 0x71, 0x58, 0x80, 0x4d, 0x5a, 0x6a, - 0x21, 0xdd, 0x71, 0xe2, 0xc6, 0x96, 0x30, 0x59, 0x55, 0x73, 0x6f, 0x53, 0x20, 0xe6, 0x38, 0xaa, - 0xc0, 0xc9, 0xd9, 0x79, 0x8b, 0x84, 0x4c, 0x81, 0xe3, 0xea, 0xb1, 0x52, 0xe0, 0xb0, 0x89, 0xc6, - 0x69, 0x7a, 0xf4, 0x29, 0x98, 0xa0, 0x9d, 0x13, 0xb4, 0x63, 0x19, 0xe4, 0x32, 0xc8, 0x82, 0x5c, - 0x58, 0x4c, 0xf3, 0x9a, 0x81, 0xc1, 0x29, 0x4a, 0x54, 0x83, 0x19, 0xd7, 0x6f, 0x78, 0xed, 0x26, - 0xb9, 0xe9, 0x73, 0xed, 0xce, 0x73, 0xdf, 0x23, 0x4d, 0xa1, 0x40, 0xab, 0x78, 0xa4, 0xd5, 0x0c, - 0x1a, 0x9c, 0x59, 0xd2, 0xfe, 0x29, 0x38, 0x75, 0x35, 0x70, 0x9a, 0x8b, 0x8e, 0xe7, 0xf8, 0x0d, - 0x12, 0xae, 0xfa, 0x9b, 0x3d, 0x8f, 0xd8, 0xf5, 0x03, 0xf1, 0x42, 0xaf, 0x03, 0x71, 0x7b, 0x0b, - 0x90, 0x5e, 0x81, 0x08, 0xee, 0xc2, 0x30, 0xec, 0xf2, 0xaa, 0xc4, 0xf4, 0x7f, 0x3c, 0x5b, 0xbb, - 0xee, 0x68, 0x99, 0x16, 0xb6, 0xc4, 0x01, 0x58, 0x32, 0xa2, 0x16, 0x58, 0x96, 0x3a, 0xde, 0xdb, - 0x38, 0xb6, 0x5f, 0x80, 0x69, 0x56, 0xf2, 0x88, 0x86, 0xdb, 0x5f, 0xb5, 0x60, 0xf2, 0x7a, 0xea, - 0x56, 0xeb, 0x63, 0x30, 0x14, 0x91, 0x30, 0xc3, 0xbb, 0x59, 0x67, 0x50, 0x2c, 0xb0, 0xc7, 0xee, - 0x45, 0xf9, 0xa1, 0x05, 0x25, 0x16, 0x35, 0xdc, 0xa2, 0x46, 0xd8, 0xfd, 0x57, 0x6a, 0x97, 0x0c, - 0xa5, 0x36, 0xd3, 0xba, 0x57, 0xcd, 0xc9, 0xd3, 0x69, 0xd1, 0x15, 0x75, 0xdb, 0xb3, 0x8b, 0x61, - 0x9f, 0xb0, 0xe1, 0x77, 0x03, 0x27, 0xcc, 0x2b, 0xa1, 0xf2, 0xfe, 0x27, 0x3b, 0xe3, 0x56, 0xb4, - 0x1f, 0x92, 0x33, 0x6e, 0xd5, 0x9e, 0x1c, 0xe9, 0x57, 0xd3, 0x9a, 0xcc, 0x76, 0x85, 0xcf, 0xb0, - 0x58, 0x50, 0xb6, 0x36, 0xd5, 0xb5, 0xe8, 0x8a, 0x88, 0xed, 0x14, 0xd0, 0x43, 0x26, 0xc8, 0xc4, - 0x3f, 0x7e, 0xd7, 0x3d, 0x29, 0x62, 0x5f, 0x86, 0xc9, 0x54, 0x87, 0xa1, 0x17, 0x60, 0xb0, 0xb5, - 0xe5, 0x44, 0x24, 0x15, 0xdb, 0x33, 0x58, 0xa3, 0xc0, 0xc3, 0xfd, 0xca, 0x84, 0x2a, 0xc0, 0x20, - 0x98, 0x53, 0xdb, 0xff, 0xc3, 0x82, 0x81, 0xeb, 0x41, 0xf3, 0x24, 0x26, 0xd3, 0xab, 0xc6, 0x64, - 0x7a, 0x28, 0x2f, 0x67, 0x46, 0xee, 0x3c, 0x5a, 0x49, 0xcd, 0xa3, 0x73, 0xb9, 0x1c, 0xba, 0x4f, - 0xa1, 0x1d, 0x18, 0x65, 0x99, 0x38, 0x44, 0x9c, 0xd1, 0x73, 0x86, 0x7d, 0x55, 0x49, 0xd9, 0x57, - 0x93, 0x1a, 0xa9, 0x66, 0x65, 0x3d, 0x01, 0xc3, 0x22, 0xd6, 0x25, 0x1d, 0xf5, 0x2a, 0x68, 0xb1, - 0xc4, 0xdb, 0xbf, 0x54, 0x04, 0x23, 0xf3, 0x07, 0xfa, 0x5d, 0x0b, 0xe6, 0x42, 0x7e, 0xcf, 0xa7, - 0x59, 0x6d, 0x87, 0xae, 0xbf, 0x59, 0x6f, 0x6c, 0x91, 0x66, 0xdb, 0x73, 0xfd, 0xcd, 0xd5, 0x4d, - 0x3f, 0x50, 0xe0, 0xe5, 0xbb, 0xa4, 0xd1, 0x66, 0x9e, 0xed, 0x1e, 0x69, 0x46, 0xd4, 0x59, 0xf2, - 0xc5, 0x83, 0xfd, 0xca, 0x1c, 0x3e, 0x12, 0x6f, 0x7c, 0xc4, 0xb6, 0xa0, 0xdf, 0xb7, 0x60, 0x9e, - 0x27, 0xc4, 0xe8, 0xbf, 0xfd, 0x5d, 0xac, 0xd1, 0x9a, 0x64, 0x95, 0x30, 0x59, 0x23, 0xe1, 0xce, - 0xe2, 0x8b, 0xa2, 0x43, 0xe7, 0x6b, 0x47, 0xab, 0x0b, 0x1f, 0xb5, 0x71, 0xf6, 0xbf, 0x2c, 0xc2, - 0x38, 0xed, 0xc5, 0xe4, 0x6e, 0xfb, 0x0b, 0xc6, 0x94, 0x78, 0x24, 0x35, 0x25, 0xa6, 0x0d, 0xe2, - 0xe3, 0xb9, 0xd6, 0x1e, 0xc1, 0xb4, 0xe7, 0x44, 0xf1, 0x65, 0xe2, 0x84, 0xf1, 0x3a, 0x71, 0xd8, - 0xe1, 0xad, 0x98, 0xe6, 0x47, 0x39, 0x0f, 0x56, 0xee, 0xaf, 0xab, 0x69, 0x66, 0xb8, 0x93, 0x3f, - 0xda, 0x05, 0xc4, 0x0e, 0x8a, 0x43, 0xc7, 0x8f, 0xf8, 0xb7, 0xb8, 0xc2, 0xeb, 0x7d, 0xb4, 0x5a, - 0x67, 0x45, 0xad, 0xe8, 0x6a, 0x07, 0x37, 0x9c, 0x51, 0x83, 0x16, 0x00, 0x30, 0xd8, 0x6f, 0x00, - 0xc0, 0x50, 0x8f, 0xd0, 0xf2, 0x1d, 0x98, 0x12, 0xa3, 0xb2, 0xe1, 0x6e, 0x8a, 0x4d, 0xfa, 0x8d, - 0x54, 0x80, 0x90, 0xd5, 0x7f, 0x28, 0x43, 0x8f, 0xe8, 0x20, 0xfb, 0xa7, 0xe1, 0x14, 0xad, 0xce, - 0x0c, 0x84, 0x8e, 0x10, 0x81, 0xc9, 0xed, 0xf6, 0x3a, 0xf1, 0x48, 0x2c, 0x61, 0xa2, 0xd2, 0x4c, - 0xb5, 0xdf, 0x2c, 0x9d, 0xe8, 0x96, 0x57, 0x4c, 0x16, 0x38, 0xcd, 0xd3, 0xfe, 0x65, 0x0b, 0x58, - 0xa8, 0xe1, 0x09, 0x6c, 0x7f, 0x9f, 0x36, 0xb7, 0xbf, 0x72, 0x9e, 0x04, 0xca, 0xd9, 0xf9, 0x9e, - 0xe7, 0xc3, 0x52, 0x0b, 0x83, 0xbb, 0x7b, 0x52, 0xf7, 0xef, 0xad, 0x71, 0xfd, 0x1f, 0x8b, 0x2f, - 0x48, 0x75, 0xed, 0x11, 0x7d, 0x01, 0x46, 0x1a, 0x4e, 0xcb, 0x69, 0xf0, 0x94, 0x4b, 0xb9, 0xde, - 0x1f, 0xa3, 0xd0, 0xdc, 0x92, 0x28, 0xc1, 0xbd, 0x19, 0x1f, 0x97, 0x5f, 0x29, 0xc1, 0x3d, 0x3d, - 0x18, 0xaa, 0xca, 0xd9, 0x6d, 0x18, 0x37, 0x98, 0xdd, 0x57, 0xd3, 0xf7, 0x0b, 0x7c, 0xbb, 0x50, - 0x16, 0xcb, 0x0e, 0x4c, 0xfb, 0xda, 0x7f, 0x2a, 0x1c, 0xa5, 0x3a, 0xfd, 0xd1, 0x5e, 0x1b, 0x02, - 0x93, 0xa4, 0x5a, 0x28, 0x65, 0x8a, 0x0d, 0xee, 0xe4, 0x6c, 0xff, 0x1d, 0x0b, 0x1e, 0xd0, 0x09, - 0xb5, 0x1b, 0xa9, 0xbd, 0xfc, 0xc9, 0x55, 0x18, 0x09, 0x5a, 0x24, 0x74, 0x12, 0x9b, 0xec, 0x82, - 0xec, 0xf4, 0x1b, 0x02, 0x7e, 0xb8, 0x5f, 0x99, 0xd1, 0xb9, 0x4b, 0x38, 0x56, 0x25, 0x91, 0x0d, - 0x43, 0xac, 0x33, 0x22, 0x71, 0x5b, 0x98, 0xa5, 0x25, 0x62, 0x07, 0x58, 0x11, 0x16, 0x18, 0xfb, - 0x67, 0x2c, 0x3e, 0xb1, 0xf4, 0xa6, 0xa3, 0x77, 0x61, 0x6a, 0x87, 0x9a, 0x6f, 0xcb, 0x77, 0x5b, - 0x21, 0x77, 0xa3, 0xcb, 0x7e, 0x7a, 0xaa, 0x57, 0x3f, 0x69, 0x1f, 0xb9, 0x58, 0x16, 0x6d, 0x9e, - 0xba, 0x96, 0x62, 0x86, 0x3b, 0xd8, 0xdb, 0x7f, 0x5a, 0xe0, 0x2b, 0x91, 0x69, 0x75, 0x4f, 0xc0, - 0x70, 0x2b, 0x68, 0x2e, 0xad, 0x56, 0xb1, 0xe8, 0x21, 0x25, 0xae, 0x6a, 0x1c, 0x8c, 0x25, 0x1e, - 0x5d, 0x04, 0x20, 0x77, 0x63, 0x12, 0xfa, 0x8e, 0xa7, 0x8e, 0xd7, 0x95, 0xf2, 0xb4, 0xac, 0x30, - 0x58, 0xa3, 0xa2, 0x65, 0x5a, 0x61, 0xb0, 0xeb, 0x36, 0xd9, 0x75, 0x8d, 0xa2, 0x59, 0xa6, 0xa6, - 0x30, 0x58, 0xa3, 0xa2, 0xa6, 0x72, 0xdb, 0x8f, 0xf8, 0x06, 0xe8, 0xac, 0x8b, 0x94, 0x38, 0x23, - 0x89, 0xa9, 0x7c, 0x53, 0x47, 0x62, 0x93, 0x16, 0x2d, 0xc0, 0x50, 0xec, 0xb0, 0x43, 0xe3, 0xc1, - 0xfc, 0x20, 0x9c, 0x35, 0x4a, 0xa1, 0x67, 0x1e, 0xa2, 0x05, 0xb0, 0x28, 0x88, 0xde, 0x94, 0x22, - 0x98, 0x8b, 0x64, 0x11, 0x4c, 0x95, 0x3b, 0x6d, 0x75, 0xf1, 0xad, 0xcb, 0x60, 0x11, 0xa4, 0x65, - 0xf0, 0xb2, 0xbf, 0x54, 0x02, 0x48, 0xb4, 0x3d, 0xf4, 0x5e, 0x87, 0x88, 0x78, 0xba, 0xbb, 0x7e, - 0x78, 0x7c, 0xf2, 0x01, 0x7d, 0xd9, 0x82, 0x51, 0xc7, 0xf3, 0x82, 0x86, 0x13, 0xb3, 0x5e, 0x2e, - 0x74, 0x17, 0x51, 0xa2, 0xfe, 0x85, 0xa4, 0x04, 0x6f, 0xc2, 0x73, 0xf2, 0x3c, 0x58, 0xc3, 0xf4, - 0x6c, 0x85, 0x5e, 0x31, 0xfa, 0xb8, 0x34, 0x02, 0xf8, 0xf4, 0x98, 0x4d, 0x1b, 0x01, 0x25, 0x26, - 0x8d, 0x35, 0xfd, 0x1f, 0xdd, 0x34, 0x32, 0xd1, 0x0c, 0xe4, 0x5f, 0xba, 0x35, 0x94, 0x9e, 0x5e, - 0x49, 0x68, 0x50, 0x4d, 0x0f, 0x2a, 0x1f, 0xcc, 0xbf, 0x99, 0xae, 0x69, 0xd7, 0x3d, 0x02, 0xca, - 0xdf, 0x81, 0xc9, 0xa6, 0xb9, 0xdd, 0x8a, 0xd9, 0xf4, 0x78, 0x1e, 0xdf, 0xd4, 0xee, 0x9c, 0x6c, - 0xb0, 0x29, 0x04, 0x4e, 0x33, 0x46, 0x35, 0x1e, 0xde, 0xbf, 0xea, 0x6f, 0x04, 0x22, 0x28, 0xcf, - 0xce, 0x1d, 0xcb, 0xbd, 0x28, 0x26, 0x3b, 0x94, 0x32, 0xd9, 0x47, 0xaf, 0x8b, 0xb2, 0x58, 0x71, - 0x41, 0xaf, 0xc1, 0x10, 0xbb, 0x77, 0x15, 0x95, 0x47, 0xf2, 0xfd, 0x80, 0xe6, 0x95, 0xe1, 0x64, - 0x51, 0xb1, 0xbf, 0x11, 0x16, 0x1c, 0xd0, 0x65, 0x79, 0xf1, 0x3f, 0x5a, 0xf5, 0x6f, 0x46, 0x84, - 0x5d, 0xfc, 0x2f, 0x2d, 0x7e, 0x34, 0xb9, 0xd3, 0xcf, 0xe1, 0x99, 0xd9, 0xf6, 0x8c, 0x92, 0x54, - 0x5f, 0x11, 0xff, 0x65, 0x12, 0xbf, 0x32, 0xe4, 0x37, 0xcf, 0x4c, 0xf4, 0x97, 0x74, 0xe7, 0x2d, - 0x93, 0x05, 0x4e, 0xf3, 0x3c, 0xd1, 0xed, 0x73, 0xd6, 0x87, 0xa9, 0xf4, 0xc2, 0xba, 0xaf, 0xdb, - 0xf5, 0x0f, 0x06, 0x60, 0xc2, 0x9c, 0x08, 0x68, 0x1e, 0x4a, 0x82, 0x89, 0x4a, 0xdb, 0xa5, 0xe6, - 0xf6, 0x35, 0x89, 0xc0, 0x09, 0x0d, 0x4b, 0x5b, 0xc6, 0x8a, 0x6b, 0xd1, 0x56, 0x49, 0xda, 0x32, - 0x85, 0xc1, 0x1a, 0x15, 0x55, 0xa2, 0xd7, 0x83, 0x20, 0x56, 0x5b, 0x81, 0x9a, 0x2d, 0x8b, 0x0c, - 0x8a, 0x05, 0x96, 0x6e, 0x01, 0xdb, 0x24, 0xf4, 0x89, 0x67, 0x7a, 0x32, 0xd5, 0x16, 0x70, 0x45, - 0x47, 0x62, 0x93, 0x96, 0x6e, 0x69, 0x41, 0xc4, 0xa6, 0x9f, 0x50, 0xd5, 0x93, 0xe8, 0xb5, 0x3a, - 0xbf, 0x77, 0x28, 0xf1, 0xe8, 0x0d, 0x78, 0x40, 0x5d, 0x13, 0xc4, 0xdc, 0x33, 0x2c, 0x6b, 0x1c, - 0x32, 0x2c, 0xeb, 0x07, 0x96, 0xb2, 0xc9, 0x70, 0x5e, 0x79, 0xf4, 0x2a, 0x4c, 0x08, 0x15, 0x58, - 0x72, 0x1c, 0x36, 0x83, 0x15, 0xae, 0x18, 0x58, 0x9c, 0xa2, 0x46, 0x55, 0x98, 0xa2, 0x10, 0xa6, - 0x85, 0x4a, 0x0e, 0xfc, 0xba, 0xa3, 0xda, 0xeb, 0xaf, 0xa4, 0xf0, 0xb8, 0xa3, 0x04, 0x5a, 0x80, - 0x49, 0xae, 0xa3, 0x50, 0x9b, 0x92, 0x8d, 0x83, 0x88, 0x95, 0x55, 0x0b, 0xe1, 0x86, 0x89, 0xc6, - 0x69, 0x7a, 0xf4, 0x12, 0x8c, 0x39, 0x61, 0x63, 0xcb, 0x8d, 0x49, 0x23, 0x6e, 0x87, 0x3c, 0xad, - 0x86, 0x16, 0xed, 0xb1, 0xa0, 0xe1, 0xb0, 0x41, 0x69, 0xbf, 0x07, 0xa7, 0x32, 0xc2, 0xec, 0xe9, - 0xc4, 0x71, 0x5a, 0xae, 0xfc, 0xa6, 0x54, 0x1c, 0xda, 0x42, 0x6d, 0x55, 0x7e, 0x8d, 0x46, 0x45, - 0x67, 0x27, 0x73, 0x89, 0x6b, 0x99, 0x36, 0xd5, 0xec, 0x5c, 0x91, 0x08, 0x9c, 0xd0, 0xd8, 0xdf, - 0x01, 0xd0, 0x1c, 0x3a, 0x7d, 0x44, 0x21, 0xbd, 0x04, 0x63, 0x32, 0x3d, 0xac, 0x96, 0x8c, 0x51, - 0x7d, 0xe6, 0x25, 0x0d, 0x87, 0x0d, 0x4a, 0xda, 0x36, 0x5f, 0xba, 0xa9, 0xd2, 0x51, 0x6f, 0xca, - 0x7f, 0x85, 0x13, 0x1a, 0xf4, 0x34, 0x8c, 0x44, 0xc4, 0xdb, 0xb8, 0xea, 0xfa, 0xdb, 0x62, 0x62, - 0x2b, 0x29, 0x5c, 0x17, 0x70, 0xac, 0x28, 0xd0, 0x22, 0x14, 0xdb, 0x6e, 0x53, 0x4c, 0x65, 0xb9, - 0xe1, 0x17, 0x6f, 0xae, 0x56, 0x0f, 0xf7, 0x2b, 0x8f, 0xe4, 0x65, 0xbd, 0xa5, 0xa6, 0x7d, 0x34, - 0x47, 0x97, 0x1f, 0x2d, 0x9c, 0x75, 0x36, 0x30, 0x74, 0xc4, 0xb3, 0x81, 0x8b, 0x00, 0xe2, 0xab, - 0xe5, 0x5c, 0x2e, 0x26, 0xa3, 0x76, 0x49, 0x61, 0xb0, 0x46, 0x85, 0x22, 0x98, 0x6e, 0x84, 0xc4, - 0x91, 0x36, 0x34, 0x0f, 0x18, 0x1f, 0xb9, 0x77, 0x07, 0xc1, 0x52, 0x9a, 0x19, 0xee, 0xe4, 0x8f, - 0x02, 0x98, 0x6e, 0x8a, 0x5b, 0xa9, 0x49, 0xa5, 0xa5, 0xa3, 0x47, 0xa9, 0xb3, 0x80, 0x9c, 0x34, - 0x23, 0xdc, 0xc9, 0x1b, 0xbd, 0x0d, 0xb3, 0x12, 0xd8, 0x79, 0x11, 0x98, 0x2d, 0x97, 0xe2, 0xe2, - 0xb9, 0x83, 0xfd, 0xca, 0x6c, 0x35, 0x97, 0x0a, 0x77, 0xe1, 0x80, 0x30, 0x0c, 0xb1, 0xb3, 0xa4, - 0xa8, 0x3c, 0xca, 0xf6, 0xb9, 0x27, 0xf3, 0x9d, 0x01, 0x74, 0xae, 0xcf, 0xb1, 0x73, 0x28, 0x11, - 0xb8, 0x9b, 0x1c, 0xcb, 0x31, 0x20, 0x16, 0x9c, 0xd0, 0x06, 0x8c, 0x3a, 0xbe, 0x1f, 0xc4, 0x0e, - 0x57, 0xa1, 0xc6, 0xf2, 0x75, 0x3f, 0x8d, 0xf1, 0x42, 0x52, 0x82, 0x73, 0x57, 0xb1, 0x80, 0x1a, - 0x06, 0xeb, 0x8c, 0xd1, 0x1d, 0x98, 0x0c, 0xee, 0x50, 0xe1, 0x28, 0xbd, 0x14, 0x51, 0x79, 0x9c, - 0xd5, 0xf5, 0x7c, 0x9f, 0x7e, 0x5a, 0xa3, 0xb0, 0x26, 0xb5, 0x4c, 0xa6, 0x38, 0x5d, 0x0b, 0x9a, - 0x33, 0xbc, 0xd5, 0x13, 0x49, 0x84, 0x7a, 0xe2, 0xad, 0xd6, 0x9d, 0xd3, 0xec, 0x62, 0x39, 0x0f, - 0x44, 0x65, 0xab, 0x7f, 0x32, 0x75, 0xb1, 0x3c, 0x41, 0x61, 0x9d, 0x0e, 0x6d, 0xc1, 0x58, 0x72, - 0x64, 0x15, 0x46, 0x2c, 0xef, 0xcc, 0xe8, 0xc5, 0x8b, 0xfd, 0x7d, 0xdc, 0xaa, 0x56, 0x92, 0x5b, - 0x0e, 0x3a, 0x04, 0x1b, 0x9c, 0x67, 0x3f, 0x09, 0xa3, 0xda, 0xc0, 0x1e, 0x25, 0xce, 0x7a, 0xf6, - 0x55, 0x98, 0x4a, 0x0f, 0xdd, 0x91, 0xe2, 0xb4, 0xff, 0x57, 0x01, 0x26, 0x33, 0x4e, 0xae, 0x58, - 0xe6, 0xdc, 0x94, 0x40, 0x4d, 0x12, 0xe5, 0x9a, 0x62, 0xb1, 0xd0, 0x87, 0x58, 0x94, 0x32, 0xba, - 0x98, 0x2b, 0xa3, 0x85, 0x28, 0x1c, 0x78, 0x3f, 0xa2, 0xd0, 0xdc, 0x7d, 0x06, 0xfb, 0xda, 0x7d, - 0x8e, 0x41, 0x7c, 0x1a, 0x1b, 0xd8, 0x70, 0x1f, 0x1b, 0xd8, 0xcf, 0x17, 0x60, 0x2a, 0x89, 0x49, - 0x17, 0x79, 0xaa, 0xef, 0xff, 0x79, 0xc7, 0x6b, 0xc6, 0x79, 0x47, 0x76, 0x1e, 0xea, 0x54, 0xab, - 0x72, 0xcf, 0x3e, 0x70, 0xea, 0xec, 0xe3, 0xc9, 0xbe, 0xb8, 0x75, 0x3f, 0x07, 0xf9, 0xbb, 0x05, - 0x38, 0x9d, 0x2e, 0xb2, 0xe4, 0x39, 0xee, 0xce, 0x09, 0xf4, 0xcd, 0x0d, 0xa3, 0x6f, 0x9e, 0xe9, - 0xe7, 0x6b, 0x58, 0xd3, 0x72, 0x3b, 0xe8, 0x76, 0xaa, 0x83, 0xe6, 0xfb, 0x67, 0xd9, 0xbd, 0x97, - 0xbe, 0x63, 0xc1, 0xd9, 0xcc, 0x72, 0x27, 0xe0, 0x7d, 0xbd, 0x6e, 0x7a, 0x5f, 0x9f, 0xe8, 0xfb, - 0x9b, 0x72, 0xdc, 0xb1, 0x5f, 0x2b, 0xe6, 0x7c, 0x0b, 0xf3, 0x5f, 0xdd, 0x80, 0x51, 0xa7, 0xd1, - 0x20, 0x51, 0x74, 0x2d, 0x68, 0xaa, 0x44, 0x55, 0xcf, 0xb0, 0x3d, 0x29, 0x01, 0x1f, 0xee, 0x57, - 0x66, 0xd3, 0x2c, 0x12, 0x34, 0xd6, 0x39, 0x98, 0xc9, 0xef, 0x0a, 0xc7, 0x9a, 0xfc, 0xee, 0x22, - 0xc0, 0xae, 0xb2, 0x6a, 0xd3, 0xce, 0x30, 0xcd, 0xde, 0xd5, 0xa8, 0xd0, 0x4f, 0x32, 0x5d, 0x91, - 0x87, 0x8c, 0xf0, 0x43, 0x8e, 0xe7, 0xfa, 0x1c, 0x2b, 0x3d, 0xfc, 0x84, 0x5f, 0x6d, 0x55, 0x8e, - 0x43, 0xc5, 0x12, 0x7d, 0x16, 0xa6, 0x22, 0x9e, 0x3d, 0x61, 0xc9, 0x73, 0x22, 0x76, 0xa1, 0x42, - 0xc8, 0x44, 0x76, 0x5f, 0xb5, 0x9e, 0xc2, 0xe1, 0x0e, 0x6a, 0xfb, 0x1f, 0x16, 0xe1, 0xc1, 0x2e, - 0x53, 0x14, 0x2d, 0x98, 0x47, 0xbc, 0x4f, 0xa5, 0xbd, 0x3b, 0xb3, 0x99, 0x85, 0x0d, 0x77, 0x4f, - 0x6a, 0x8c, 0x0b, 0xef, 0x7b, 0x8c, 0xbf, 0x62, 0x69, 0x7e, 0x37, 0x1e, 0x08, 0xfa, 0xe9, 0x23, - 0x2e, 0xbd, 0x1f, 0x55, 0x47, 0xfd, 0x17, 0x2d, 0x78, 0x24, 0xf3, 0xb3, 0x8c, 0x50, 0x91, 0x79, - 0x28, 0x35, 0x28, 0x50, 0xbb, 0xf4, 0x94, 0x5c, 0x3d, 0x94, 0x08, 0x9c, 0xd0, 0x18, 0x11, 0x21, - 0x85, 0x9e, 0x11, 0x21, 0xff, 0xdc, 0x82, 0x99, 0x74, 0x23, 0x4e, 0x40, 0x32, 0xad, 0x9a, 0x92, - 0xe9, 0xa3, 0xfd, 0x0c, 0x79, 0x8e, 0x50, 0xfa, 0xf7, 0x13, 0x70, 0xa6, 0x63, 0xe7, 0xe2, 0x7d, - 0xb7, 0x0b, 0xd3, 0x9b, 0x4c, 0x85, 0xd7, 0xae, 0x93, 0x89, 0x8f, 0xc9, 0xbc, 0x79, 0xd7, 0xf5, - 0xee, 0x19, 0x37, 0x43, 0x3a, 0x48, 0x70, 0x67, 0x15, 0xe8, 0x8b, 0x16, 0xcc, 0x38, 0x77, 0xa2, - 0x8e, 0xc7, 0x4c, 0xc4, 0x9c, 0x79, 0x3e, 0xd3, 0x3b, 0xd6, 0xe3, 0xf1, 0x93, 0xc5, 0xf2, 0xc1, - 0x7e, 0x65, 0x26, 0x8b, 0x0a, 0x67, 0xd6, 0x85, 0xb0, 0xc8, 0xd5, 0x47, 0xb5, 0x9c, 0x2e, 0x17, - 0x1e, 0xb3, 0xae, 0xa3, 0x70, 0x19, 0x25, 0x31, 0x58, 0xf1, 0x41, 0xb7, 0xa0, 0xb4, 0x29, 0xef, - 0x88, 0x09, 0x19, 0x98, 0xb9, 0xa9, 0x64, 0x5e, 0x24, 0xe3, 0x11, 0xfb, 0x0a, 0x85, 0x13, 0x56, - 0xe8, 0x55, 0x28, 0xfa, 0x1b, 0x91, 0xb8, 0x7c, 0x9d, 0x1d, 0xdf, 0x63, 0x46, 0x50, 0xf1, 0x9b, - 0xab, 0xd7, 0x57, 0xea, 0x98, 0x16, 0xa4, 0xe5, 0xc3, 0xf5, 0xa6, 0x70, 0xe8, 0x66, 0x96, 0xc7, - 0x8b, 0xd5, 0xce, 0xf2, 0x78, 0xb1, 0x8a, 0x69, 0x41, 0xb4, 0x02, 0x83, 0xec, 0x82, 0x8a, 0xf0, - 0xd6, 0x66, 0xde, 0xbc, 0xef, 0xb8, 0x7c, 0xc3, 0xaf, 0xb2, 0x32, 0x30, 0xe6, 0xc5, 0xd1, 0x6b, - 0x30, 0xd4, 0x60, 0x59, 0xf8, 0x85, 0x69, 0x9d, 0x9d, 0x4d, 0xa2, 0x23, 0x4f, 0x3f, 0x3f, 0xa3, - 0xe2, 0x70, 0x2c, 0x38, 0x30, 0x5e, 0xa4, 0xb5, 0xb5, 0x11, 0x09, 0x8b, 0x39, 0x9b, 0x57, 0xc7, - 0x8b, 0x09, 0x82, 0x17, 0x83, 0x63, 0xc1, 0x01, 0x7d, 0x0a, 0x0a, 0x1b, 0x0d, 0x71, 0x43, 0x25, - 0xd3, 0x37, 0x6b, 0x5e, 0x2a, 0x5e, 0x1c, 0x3a, 0xd8, 0xaf, 0x14, 0x56, 0x96, 0x70, 0x61, 0xa3, - 0x81, 0xae, 0xc3, 0xf0, 0x06, 0xbf, 0x19, 0x2a, 0x32, 0xae, 0x3e, 0x9e, 0x7d, 0x69, 0xb5, 0xe3, - 0xf2, 0x28, 0xbf, 0x59, 0x21, 0x10, 0x58, 0x32, 0x41, 0x6b, 0x00, 0x1b, 0xea, 0x86, 0xab, 0x48, - 0xb9, 0xfa, 0xd1, 0x7e, 0xee, 0xc1, 0x0a, 0xa3, 0x51, 0x41, 0xb1, 0xc6, 0x87, 0xce, 0x4c, 0x47, - 0x3e, 0x05, 0xc2, 0xd2, 0xad, 0xe6, 0xcc, 0xcc, 0xcc, 0xf7, 0x42, 0xf8, 0xcc, 0x54, 0x28, 0x9c, - 0xb0, 0x42, 0xdb, 0x30, 0xbe, 0x1b, 0xb5, 0xb6, 0x88, 0x5c, 0x8c, 0x2c, 0xf3, 0xaa, 0x69, 0x56, - 0x26, 0x69, 0x72, 0x05, 0xa1, 0x1b, 0xc6, 0x6d, 0xc7, 0xeb, 0x90, 0x1f, 0xec, 0xf2, 0xcd, 0x2d, - 0x9d, 0x19, 0x36, 0x79, 0xd3, 0xae, 0x7e, 0xb7, 0x1d, 0xac, 0xef, 0xc5, 0x44, 0xe4, 0x63, 0xcd, - 0xec, 0xea, 0xd7, 0x39, 0x49, 0x67, 0x57, 0x0b, 0x04, 0x96, 0x4c, 0x54, 0xa7, 0x30, 0xb9, 0x37, - 0xd5, 0xa3, 0x53, 0x3a, 0xda, 0x9b, 0x74, 0x0a, 0x93, 0x73, 0x09, 0x2b, 0x26, 0xdf, 0x5a, 0x5b, - 0x41, 0x1c, 0xf8, 0x29, 0xd9, 0x3a, 0x9d, 0x2f, 0xdf, 0x6a, 0x19, 0xf4, 0x9d, 0xf2, 0x2d, 0x8b, - 0x0a, 0x67, 0xd6, 0x85, 0x9a, 0x30, 0xd1, 0x0a, 0xc2, 0xf8, 0x4e, 0x10, 0xca, 0xb9, 0x84, 0xba, - 0x18, 0x4a, 0x06, 0xa5, 0xa8, 0x91, 0xc5, 0xd2, 0x9a, 0x18, 0x9c, 0xe2, 0x49, 0x87, 0x24, 0x6a, - 0x38, 0x1e, 0x59, 0xbd, 0x51, 0x3e, 0x95, 0x3f, 0x24, 0x75, 0x4e, 0xd2, 0x39, 0x24, 0x02, 0x81, - 0x25, 0x13, 0x2a, 0x69, 0x58, 0x6a, 0x6f, 0x96, 0x40, 0x36, 0x47, 0xd2, 0x74, 0x44, 0x99, 0x72, - 0x49, 0xc3, 0xc0, 0x98, 0x17, 0x47, 0x9f, 0x87, 0x92, 0xd0, 0xff, 0x82, 0xa8, 0x7c, 0xba, 0x43, - 0x1b, 0x4d, 0x5a, 0xc6, 0x89, 0x6e, 0xd4, 0xb3, 0xb7, 0x48, 0x71, 0x0b, 0x4d, 0x12, 0xe1, 0x84, - 0xa9, 0xfd, 0xa5, 0xa1, 0x4e, 0xcd, 0x80, 0xe9, 0xf9, 0x5f, 0xb2, 0x3a, 0x8e, 0x4a, 0x3f, 0xd1, - 0xaf, 0x71, 0x7a, 0x8c, 0x87, 0xa6, 0x5f, 0xb4, 0xe0, 0x4c, 0x2b, 0xf3, 0xa3, 0xc4, 0x36, 0xdb, - 0x9f, 0x8d, 0xcb, 0xbb, 0x41, 0xa5, 0x66, 0xce, 0xc6, 0xe3, 0x9c, 0x9a, 0xd2, 0xfa, 0x70, 0xf1, - 0x7d, 0xeb, 0xc3, 0xd7, 0x60, 0x84, 0xa9, 0x72, 0x49, 0x1a, 0x98, 0xbe, 0x02, 0x8e, 0xd8, 0x86, - 0xbd, 0x24, 0x0a, 0x62, 0xc5, 0x02, 0xfd, 0xac, 0x05, 0x0f, 0xa7, 0x9b, 0x8e, 0x09, 0x43, 0x8b, - 0xb4, 0x82, 0xdc, 0xc4, 0x58, 0x11, 0xdf, 0xff, 0x70, 0xad, 0x1b, 0xf1, 0x61, 0x2f, 0x02, 0xdc, - 0xbd, 0x32, 0x54, 0xcd, 0xb0, 0x71, 0x86, 0xcc, 0x93, 0x94, 0xde, 0x76, 0xce, 0xc9, 0x6a, 0xe9, - 0x5f, 0xb7, 0x32, 0xd4, 0x4b, 0x6e, 0x4f, 0xbd, 0x62, 0xda, 0x53, 0x8f, 0xa5, 0xed, 0xa9, 0x0e, - 0xef, 0x88, 0x61, 0x4a, 0xf5, 0x9f, 0xf8, 0xb4, 0xdf, 0x8c, 0x37, 0xb6, 0x07, 0xe7, 0x7b, 0x89, - 0x59, 0x16, 0x3e, 0xd5, 0x54, 0xe7, 0x8a, 0x49, 0xf8, 0x54, 0x73, 0xb5, 0x8a, 0x19, 0xa6, 0xdf, - 0xdc, 0x09, 0xf6, 0x7f, 0xb3, 0xa0, 0x58, 0x0b, 0x9a, 0x27, 0xe0, 0xed, 0xf9, 0xb4, 0xe1, 0xed, - 0x79, 0x30, 0xe7, 0xf9, 0xb9, 0x5c, 0xdf, 0xce, 0x72, 0xca, 0xb7, 0xf3, 0x70, 0x1e, 0x83, 0xee, - 0x9e, 0x9c, 0xbf, 0x57, 0x04, 0xfd, 0xb1, 0x3c, 0xf4, 0xaf, 0xee, 0x25, 0x0e, 0xb7, 0xd8, 0xed, - 0xfd, 0x3c, 0xc1, 0x99, 0x45, 0x5d, 0xc9, 0x2b, 0x7e, 0x3f, 0x62, 0xe1, 0xb8, 0xb7, 0x89, 0xbb, - 0xb9, 0x15, 0x93, 0x66, 0xfa, 0x73, 0x4e, 0x2e, 0x1c, 0xf7, 0x3f, 0x5b, 0x30, 0x99, 0xaa, 0x1d, - 0x79, 0x59, 0xf7, 0x85, 0xee, 0xd1, 0x7f, 0x33, 0xdd, 0xf3, 0x82, 0xd1, 0x1c, 0x80, 0x72, 0xa5, - 0x4b, 0x1f, 0x09, 0xd3, 0x5d, 0x95, 0xaf, 0x3d, 0xc2, 0x1a, 0x05, 0x7a, 0x01, 0x46, 0xe3, 0xa0, - 0x15, 0x78, 0xc1, 0xe6, 0xde, 0x15, 0x22, 0xb3, 0x75, 0xa8, 0x03, 0x8f, 0xb5, 0x04, 0x85, 0x75, - 0x3a, 0xfb, 0x57, 0x8a, 0x90, 0x7e, 0x60, 0xf1, 0xcf, 0xe7, 0xe4, 0x87, 0x73, 0x4e, 0x7e, 0xd7, - 0x82, 0x29, 0x5a, 0x3b, 0x8b, 0x68, 0x91, 0x81, 0xac, 0xea, 0x85, 0x04, 0xab, 0xcb, 0x0b, 0x09, - 0x8f, 0x51, 0xd9, 0xd5, 0x0c, 0xda, 0xb1, 0xf0, 0xe5, 0x68, 0xc2, 0x89, 0x42, 0xb1, 0xc0, 0x0a, - 0x3a, 0x12, 0x86, 0xe2, 0x16, 0x90, 0x4e, 0x47, 0xc2, 0x10, 0x0b, 0xac, 0x7c, 0x40, 0x61, 0x20, - 0xe7, 0x01, 0x05, 0x96, 0xe8, 0x4a, 0x44, 0x51, 0x08, 0xd5, 0x40, 0x4b, 0x74, 0x25, 0xc3, 0x2b, - 0x12, 0x1a, 0xfb, 0x1b, 0x45, 0x18, 0xab, 0x05, 0xcd, 0x24, 0xf6, 0xfd, 0x79, 0x23, 0xf6, 0xfd, - 0x7c, 0x2a, 0xf6, 0x7d, 0x4a, 0xa7, 0x3d, 0x9e, 0xd0, 0x77, 0x91, 0x06, 0x8d, 0x3d, 0xe7, 0x71, - 0x8f, 0x61, 0xef, 0x46, 0x1a, 0x34, 0xc5, 0x08, 0x9b, 0x7c, 0x7f, 0x9c, 0xc2, 0xdd, 0xff, 0xcc, - 0x82, 0x89, 0x5a, 0xd0, 0xa4, 0x13, 0xf4, 0xc7, 0x69, 0x36, 0xea, 0x69, 0xd4, 0x86, 0xba, 0xa4, - 0x51, 0xfb, 0xfb, 0x16, 0x0c, 0xd7, 0x82, 0xe6, 0x09, 0xf8, 0x39, 0x5f, 0x31, 0xfd, 0x9c, 0x0f, - 0xe4, 0x48, 0xd9, 0x1c, 0xd7, 0xe6, 0x6f, 0x16, 0x61, 0x9c, 0xb6, 0x33, 0xd8, 0x94, 0xa3, 0x64, - 0xf4, 0x88, 0xd5, 0x47, 0x8f, 0x50, 0x65, 0x2e, 0xf0, 0xbc, 0xe0, 0x4e, 0x7a, 0xc4, 0x56, 0x18, - 0x14, 0x0b, 0x2c, 0x7a, 0x1a, 0x46, 0x5a, 0x21, 0xd9, 0x75, 0x83, 0x76, 0x94, 0xbe, 0x47, 0x58, - 0x13, 0x70, 0xac, 0x28, 0xd0, 0xf3, 0x30, 0x16, 0xb9, 0x7e, 0x83, 0xc8, 0xc8, 0x8a, 0x01, 0x16, - 0x59, 0xc1, 0x33, 0x51, 0x6a, 0x70, 0x6c, 0x50, 0xa1, 0xdb, 0x50, 0x62, 0xff, 0xd9, 0xba, 0x39, - 0xfa, 0xfb, 0x08, 0xdc, 0x54, 0x95, 0x0c, 0x70, 0xc2, 0x0b, 0x5d, 0x04, 0x88, 0x65, 0x0c, 0x48, - 0x24, 0xae, 0xb9, 0x2a, 0x8d, 0x52, 0x45, 0x87, 0x44, 0x58, 0xa3, 0x42, 0x4f, 0x41, 0x29, 0x76, - 0x5c, 0xef, 0xaa, 0xeb, 0x93, 0x48, 0xc4, 0xd0, 0x88, 0xec, 0xce, 0x02, 0x88, 0x13, 0x3c, 0xdd, - 0xd1, 0xd9, 0x25, 0x6a, 0xfe, 0xba, 0xca, 0x08, 0xa3, 0x66, 0x3b, 0xfa, 0x55, 0x05, 0xc5, 0x1a, - 0x85, 0xfd, 0x12, 0x9c, 0xae, 0x05, 0xcd, 0x5a, 0x10, 0xc6, 0x2b, 0x41, 0x78, 0xc7, 0x09, 0x9b, - 0x72, 0xfc, 0x2a, 0x32, 0xd1, 0x30, 0xdd, 0x75, 0x07, 0xb9, 0x5d, 0x6f, 0xa4, 0x10, 0x7e, 0x8e, - 0xed, 0xe9, 0x47, 0xbc, 0xf0, 0xf0, 0x6f, 0x0b, 0x80, 0x6a, 0x2c, 0x4a, 0xc5, 0x78, 0x82, 0xe7, - 0x6d, 0x98, 0x88, 0xc8, 0x55, 0xd7, 0x6f, 0xdf, 0x15, 0xac, 0xba, 0xdd, 0x26, 0xa9, 0x2f, 0xeb, - 0x94, 0xdc, 0x37, 0x62, 0xc2, 0x70, 0x8a, 0x1b, 0xed, 0xc2, 0xb0, 0xed, 0x2f, 0x44, 0x37, 0x23, - 0x12, 0x8a, 0x27, 0x67, 0x58, 0x17, 0x62, 0x09, 0xc4, 0x09, 0x9e, 0x4e, 0x19, 0xf6, 0xe7, 0x7a, - 0xe0, 0xe3, 0x20, 0x88, 0xe5, 0x24, 0x63, 0x8f, 0x16, 0x68, 0x70, 0x6c, 0x50, 0xa1, 0x15, 0x40, - 0x51, 0xbb, 0xd5, 0xf2, 0xd8, 0xa1, 0x9e, 0xe3, 0x5d, 0x0a, 0x83, 0x76, 0x8b, 0x87, 0x19, 0x8b, - 0x7c, 0xff, 0xf5, 0x0e, 0x2c, 0xce, 0x28, 0x41, 0x05, 0xc3, 0x46, 0xc4, 0x7e, 0x8b, 0x7b, 0xd4, - 0xdc, 0x37, 0x59, 0x67, 0x20, 0x2c, 0x71, 0xf6, 0x17, 0xd8, 0x66, 0xc6, 0x5e, 0x0a, 0x89, 0xdb, - 0x21, 0x41, 0x3b, 0x30, 0xde, 0x62, 0x1b, 0x56, 0x1c, 0x06, 0x9e, 0x47, 0xa4, 0xde, 0x78, 0x6f, - 0x11, 0x33, 0xfc, 0xe5, 0x00, 0x9d, 0x1d, 0x36, 0xb9, 0xdb, 0x5f, 0x9a, 0x64, 0x72, 0xa9, 0xce, - 0x8d, 0x96, 0x61, 0x11, 0x07, 0x2b, 0x34, 0xb4, 0xd9, 0xfc, 0x97, 0xb9, 0x12, 0x49, 0x2f, 0x62, - 0x69, 0xb1, 0x2c, 0x8b, 0x5e, 0x67, 0xf1, 0xd9, 0x5c, 0x18, 0xf4, 0x7a, 0x13, 0x90, 0x53, 0x19, - 0xb1, 0xd9, 0xa2, 0x20, 0xd6, 0x98, 0xa0, 0xab, 0x30, 0x2e, 0x1e, 0x96, 0x10, 0x2e, 0x84, 0xa2, - 0x61, 0xfe, 0x8e, 0x63, 0x1d, 0x79, 0x98, 0x06, 0x60, 0xb3, 0x30, 0xda, 0x84, 0x87, 0xb5, 0x67, - 0x90, 0x32, 0xa2, 0xb6, 0xb8, 0x6c, 0x79, 0xe4, 0x60, 0xbf, 0xf2, 0xf0, 0x5a, 0x37, 0x42, 0xdc, - 0x9d, 0x0f, 0xba, 0x01, 0xa7, 0x9d, 0x46, 0xec, 0xee, 0x92, 0x2a, 0x71, 0x9a, 0x9e, 0xeb, 0x13, - 0xf3, 0x62, 0xfd, 0xd9, 0x83, 0xfd, 0xca, 0xe9, 0x85, 0x2c, 0x02, 0x9c, 0x5d, 0x0e, 0xbd, 0x02, - 0xa5, 0xa6, 0x1f, 0x89, 0x3e, 0x18, 0x32, 0x5e, 0xf8, 0x2a, 0x55, 0xaf, 0xd7, 0xd5, 0xf7, 0x27, - 0x7f, 0x70, 0x52, 0x00, 0x6d, 0xf2, 0x97, 0xe0, 0x95, 0x45, 0x32, 0xdc, 0x91, 0x2d, 0x21, 0x6d, - 0xdb, 0x1a, 0x37, 0x4e, 0xb8, 0xff, 0x4c, 0xc5, 0x44, 0x1a, 0x97, 0x51, 0x0c, 0xc6, 0xe8, 0x35, - 0x40, 0x11, 0x09, 0x77, 0xdd, 0x06, 0x59, 0x68, 0xb0, 0x54, 0xad, 0xcc, 0xeb, 0x32, 0x62, 0x04, - 0xf8, 0xa3, 0x7a, 0x07, 0x05, 0xce, 0x28, 0x85, 0x2e, 0x53, 0x89, 0xa2, 0x43, 0x45, 0x08, 0xab, - 0x54, 0xf3, 0xca, 0x55, 0xd2, 0x0a, 0x49, 0xc3, 0x89, 0x49, 0xd3, 0xe4, 0x88, 0x53, 0xe5, 0xe8, - 0x7e, 0xa3, 0x32, 0xe0, 0x83, 0x19, 0x78, 0xd9, 0x99, 0x05, 0x9f, 0x5a, 0x48, 0x5b, 0x41, 0x14, - 0x5f, 0x27, 0xf1, 0x9d, 0x20, 0xdc, 0x16, 0xd9, 0xb0, 0x92, 0xf4, 0x77, 0x09, 0x0a, 0xeb, 0x74, - 0x54, 0x23, 0x62, 0x47, 0x57, 0xab, 0x55, 0x76, 0xce, 0x30, 0x92, 0xac, 0x93, 0xcb, 0x1c, 0x8c, - 0x25, 0x5e, 0x92, 0xae, 0xd6, 0x96, 0xd8, 0xe9, 0x41, 0x8a, 0x74, 0xb5, 0xb6, 0x84, 0x25, 0x1e, - 0x91, 0xce, 0xd7, 0xd3, 0x26, 0xf2, 0x4f, 0x68, 0x3a, 0xe5, 0x72, 0x9f, 0x0f, 0xa8, 0xf9, 0x30, - 0xa5, 0xde, 0x6d, 0xe3, 0x69, 0xc2, 0xa2, 0xf2, 0x64, 0xfe, 0x93, 0xf4, 0x99, 0x39, 0xc6, 0x94, - 0x57, 0x6d, 0x35, 0xc5, 0x09, 0x77, 0xf0, 0x36, 0x12, 0x36, 0x4c, 0xf5, 0x7c, 0xc1, 0x60, 0x1e, - 0x4a, 0x51, 0x7b, 0xbd, 0x19, 0xec, 0x38, 0xae, 0xcf, 0xdc, 0xfe, 0xfa, 0x6b, 0xe9, 0x12, 0x81, - 0x13, 0x1a, 0xb4, 0x02, 0x23, 0x8e, 0x30, 0xbe, 0x84, 0xa3, 0x3e, 0xf3, 0x06, 0xb7, 0x34, 0xd0, - 0xb8, 0x47, 0x53, 0xfe, 0xc3, 0xaa, 0x2c, 0x7a, 0x19, 0xc6, 0xc5, 0x25, 0x23, 0x11, 0x1f, 0x78, - 0xca, 0x8c, 0x47, 0xaf, 0xeb, 0x48, 0x6c, 0xd2, 0xa2, 0x9f, 0x84, 0x09, 0xca, 0x25, 0x11, 0x6c, - 0xe5, 0x99, 0x7e, 0x24, 0xa2, 0x96, 0x99, 0x5a, 0x2f, 0x8c, 0x53, 0xcc, 0x50, 0x13, 0x1e, 0x72, - 0xda, 0x71, 0xb0, 0x43, 0x67, 0xb8, 0x39, 0xff, 0xd7, 0x82, 0x6d, 0xe2, 0x33, 0x3f, 0xfd, 0xc8, - 0xe2, 0xf9, 0x83, 0xfd, 0xca, 0x43, 0x0b, 0x5d, 0xe8, 0x70, 0x57, 0x2e, 0xe8, 0x26, 0x8c, 0xc6, - 0x81, 0x27, 0x02, 0x7b, 0xa3, 0xf2, 0x99, 0xfc, 0x84, 0x33, 0x6b, 0x8a, 0x4c, 0x77, 0x27, 0xa8, - 0xa2, 0x58, 0xe7, 0x83, 0xd6, 0xf8, 0x1a, 0x63, 0x09, 0x0f, 0x49, 0x54, 0x7e, 0x20, 0xbf, 0x63, - 0x54, 0x5e, 0x44, 0x73, 0x09, 0x8a, 0x92, 0x58, 0x67, 0x83, 0x2e, 0xc1, 0x74, 0x2b, 0x74, 0x03, - 0x36, 0xb1, 0x95, 0xcb, 0xb7, 0x6c, 0xa4, 0x22, 0x9b, 0xae, 0xa5, 0x09, 0x70, 0x67, 0x19, 0x74, - 0x81, 0x2a, 0xa8, 0x1c, 0x58, 0x3e, 0xcb, 0x5f, 0xb6, 0xe0, 0xca, 0x29, 0x87, 0x61, 0x85, 0x9d, - 0xfd, 0x0c, 0x4c, 0x77, 0x48, 0xca, 0x23, 0x05, 0x59, 0xfe, 0xda, 0x20, 0x94, 0x94, 0x3b, 0x10, - 0xcd, 0x9b, 0x5e, 0xde, 0xb3, 0x69, 0x2f, 0xef, 0x08, 0xd5, 0xd7, 0x74, 0xc7, 0xee, 0x5a, 0xc6, - 0xe3, 0xdc, 0xe7, 0x73, 0x44, 0x43, 0xff, 0x37, 0xa2, 0x8e, 0xf0, 0x70, 0x79, 0x62, 0x30, 0x0e, - 0x74, 0x35, 0x18, 0xfb, 0x7c, 0x28, 0x8f, 0x9a, 0x86, 0xad, 0xa0, 0xb9, 0x5a, 0x4b, 0xbf, 0x1c, - 0x55, 0xa3, 0x40, 0xcc, 0x71, 0x4c, 0xb9, 0xa7, 0xdb, 0x3a, 0x53, 0xee, 0x87, 0xef, 0x51, 0xb9, - 0x97, 0x0c, 0x70, 0xc2, 0x0b, 0x79, 0x30, 0xdd, 0x30, 0x1f, 0xfd, 0x52, 0xb7, 0xa0, 0x1e, 0xed, - 0xf9, 0xfc, 0x56, 0x5b, 0x7b, 0x09, 0x64, 0x29, 0xcd, 0x05, 0x77, 0x32, 0x46, 0x2f, 0xc3, 0xc8, - 0xbb, 0x41, 0xc4, 0xa6, 0x9d, 0xd8, 0xdb, 0xe4, 0xbd, 0x93, 0x91, 0xd7, 0x6f, 0xd4, 0x19, 0xfc, - 0x70, 0xbf, 0x32, 0x5a, 0x0b, 0x9a, 0xf2, 0x2f, 0x56, 0x05, 0xd0, 0x5d, 0x38, 0x6d, 0x48, 0x04, - 0xd5, 0x5c, 0xe8, 0xbf, 0xb9, 0x0f, 0x8b, 0xea, 0x4e, 0xaf, 0x66, 0x71, 0xc2, 0xd9, 0x15, 0xd8, - 0xdf, 0xe4, 0x4e, 0x4f, 0xe1, 0x1a, 0x21, 0x51, 0xdb, 0x3b, 0x89, 0x74, 0xff, 0xcb, 0x86, 0xd7, - 0xe6, 0x9e, 0x1d, 0xeb, 0xbf, 0x67, 0x31, 0xc7, 0xfa, 0x1a, 0xd9, 0x69, 0x79, 0x4e, 0x7c, 0x12, - 0xa1, 0xb5, 0xaf, 0xc3, 0x48, 0x2c, 0x6a, 0xeb, 0xf6, 0x42, 0x81, 0xd6, 0x28, 0x76, 0xb8, 0xa0, - 0x36, 0x44, 0x09, 0xc5, 0x8a, 0x8d, 0xfd, 0x4f, 0xf9, 0x08, 0x48, 0xcc, 0x09, 0xf8, 0x16, 0xaa, - 0xa6, 0x6f, 0xa1, 0xd2, 0xe3, 0x0b, 0x72, 0x7c, 0x0c, 0xff, 0xc4, 0x6c, 0x37, 0xb3, 0x3d, 0x3e, - 0xec, 0x27, 0x3a, 0xf6, 0x2f, 0x5a, 0x30, 0x93, 0x75, 0xa4, 0x4f, 0x95, 0x18, 0x6e, 0xf9, 0xa8, - 0x13, 0x2e, 0xd5, 0x83, 0xb7, 0x04, 0x1c, 0x2b, 0x8a, 0xbe, 0xb3, 0x84, 0x1f, 0x2d, 0xc9, 0xd2, - 0x0d, 0x30, 0xdf, 0x87, 0x43, 0xaf, 0xf2, 0x58, 0x79, 0x4b, 0x3d, 0xe0, 0x76, 0xb4, 0x38, 0x79, - 0xfb, 0x57, 0x0b, 0x30, 0xc3, 0x5d, 0xd4, 0x0b, 0xbb, 0x81, 0xdb, 0xac, 0x05, 0x4d, 0x71, 0x73, - 0xe0, 0x4d, 0x18, 0x6b, 0x69, 0xe6, 0x6a, 0xb7, 0x34, 0x2f, 0xba, 0x59, 0x9b, 0x98, 0x0d, 0x3a, - 0x14, 0x1b, 0xbc, 0x50, 0x13, 0xc6, 0xc8, 0xae, 0xdb, 0x50, 0x7e, 0xce, 0xc2, 0x91, 0x45, 0xba, - 0xaa, 0x65, 0x59, 0xe3, 0x83, 0x0d, 0xae, 0xf7, 0xe1, 0x2d, 0x0f, 0xfb, 0xab, 0x16, 0x3c, 0x90, - 0x93, 0x14, 0x86, 0x56, 0x77, 0x87, 0x1d, 0x06, 0x88, 0xc7, 0x06, 0x55, 0x75, 0xfc, 0x88, 0x00, - 0x0b, 0x2c, 0xfa, 0x09, 0x00, 0xee, 0xe2, 0x67, 0x4f, 0xbb, 0x17, 0xba, 0xdf, 0x3a, 0x37, 0x92, - 0x25, 0x68, 0x37, 0xea, 0xd5, 0x63, 0xee, 0x1a, 0x2f, 0xfb, 0x97, 0x8b, 0x30, 0xc8, 0x5f, 0x9e, - 0x5e, 0x81, 0xe1, 0x2d, 0x9e, 0x82, 0xb6, 0x9f, 0x6c, 0xb7, 0x89, 0x39, 0xc2, 0x01, 0x58, 0x16, - 0x46, 0xd7, 0xe0, 0x94, 0xb8, 0x9d, 0x52, 0x25, 0x9e, 0xb3, 0x27, 0xad, 0x5a, 0xfe, 0xc0, 0x83, - 0x4c, 0x3e, 0x7e, 0x6a, 0xb5, 0x93, 0x04, 0x67, 0x95, 0x43, 0xaf, 0x76, 0x24, 0x9e, 0xe3, 0xc9, - 0x7b, 0x95, 0x0e, 0xdc, 0x23, 0xf9, 0xdc, 0xcb, 0x30, 0xde, 0xea, 0xb0, 0xdf, 0xb5, 0x47, 0x7f, - 0x4d, 0x9b, 0xdd, 0xa4, 0x65, 0xf1, 0x01, 0x6d, 0x16, 0x0d, 0xb1, 0xb6, 0x15, 0x92, 0x68, 0x2b, - 0xf0, 0x9a, 0xe2, 0x85, 0xcb, 0x24, 0x3e, 0x20, 0x85, 0xc7, 0x1d, 0x25, 0x28, 0x97, 0x0d, 0xc7, - 0xf5, 0xda, 0x21, 0x49, 0xb8, 0x0c, 0x99, 0x5c, 0x56, 0x52, 0x78, 0xdc, 0x51, 0x82, 0xce, 0xa3, - 0xd3, 0xe2, 0x79, 0x44, 0x79, 0x67, 0x59, 0x05, 0x7d, 0x0c, 0xcb, 0xa8, 0xf4, 0x2e, 0x79, 0x34, - 0xc4, 0x91, 0xbf, 0x7a, 0x60, 0x51, 0x7b, 0x78, 0x4b, 0xc4, 0xa3, 0x4b, 0x2e, 0xf7, 0xf2, 0x48, - 0xdf, 0x9f, 0x58, 0x70, 0x2a, 0x23, 0x10, 0x8c, 0x8b, 0xaa, 0x4d, 0x37, 0x8a, 0xd5, 0xbb, 0x02, - 0x9a, 0xa8, 0xe2, 0x70, 0xac, 0x28, 0xe8, 0x7a, 0xe0, 0xc2, 0x30, 0x2d, 0x00, 0x45, 0xf0, 0x86, - 0xc0, 0x1e, 0x4d, 0x00, 0xa2, 0xf3, 0x30, 0xd0, 0x8e, 0x48, 0x28, 0x5f, 0xb6, 0x93, 0xf2, 0x9b, - 0x79, 0x04, 0x19, 0x86, 0x6a, 0x94, 0x9b, 0xca, 0x19, 0xa7, 0x69, 0x94, 0xdc, 0x1d, 0xc7, 0x71, - 0xf6, 0x57, 0x8a, 0x30, 0x99, 0x0a, 0xdb, 0xa4, 0x0d, 0xd9, 0x09, 0x7c, 0x37, 0x0e, 0x54, 0xde, - 0x33, 0x9e, 0xe6, 0x81, 0xb4, 0xb6, 0xae, 0x09, 0x38, 0x56, 0x14, 0xe8, 0x31, 0xf9, 0xe4, 0x69, - 0xfa, 0xbd, 0x84, 0xc5, 0xaa, 0xf1, 0xea, 0x69, 0xbf, 0x0f, 0x9f, 0x3c, 0x0a, 0x03, 0xad, 0x40, - 0xbd, 0x47, 0xad, 0xc6, 0x13, 0x2f, 0x56, 0x6b, 0x41, 0xe0, 0x61, 0x86, 0x44, 0x1f, 0x13, 0x5f, - 0x9f, 0x3a, 0xaf, 0xc0, 0x4e, 0x33, 0x88, 0xb4, 0x2e, 0x78, 0x02, 0x86, 0xb7, 0xc9, 0x5e, 0xe8, - 0xfa, 0x9b, 0xe9, 0xd3, 0x9a, 0x2b, 0x1c, 0x8c, 0x25, 0xde, 0x4c, 0x33, 0x3e, 0x7c, 0x5f, 0xde, - 0x2e, 0x19, 0xe9, 0xb9, 0xab, 0xfd, 0xa6, 0x05, 0x93, 0x2c, 0xc7, 0xa8, 0xb8, 0x1d, 0xef, 0x06, - 0xfe, 0x09, 0xe8, 0x09, 0x8f, 0xc2, 0x60, 0x48, 0x2b, 0x4d, 0x3f, 0x48, 0xc0, 0x5a, 0x82, 0x39, - 0x0e, 0x3d, 0x04, 0x03, 0xac, 0x09, 0x74, 0xf0, 0xc6, 0x78, 0x96, 0xf1, 0xaa, 0x13, 0x3b, 0x98, - 0x41, 0xd9, 0x35, 0x25, 0x4c, 0x5a, 0x9e, 0xcb, 0x1b, 0x9d, 0xb8, 0x5b, 0x3f, 0x1c, 0xd7, 0x94, - 0x32, 0x9b, 0xf6, 0xfe, 0xae, 0x29, 0x65, 0xb3, 0xec, 0xae, 0x83, 0xff, 0xf7, 0x02, 0x9c, 0xcb, - 0x2c, 0x97, 0x9c, 0xec, 0xae, 0x18, 0x27, 0xbb, 0x17, 0x53, 0x27, 0xbb, 0x76, 0xf7, 0xd2, 0xc7, - 0x73, 0xd6, 0x9b, 0x7d, 0x04, 0x5b, 0x3c, 0xc1, 0x23, 0xd8, 0x81, 0x7e, 0xd5, 0x94, 0xc1, 0x1e, - 0x6a, 0xca, 0x77, 0x2c, 0x38, 0x9b, 0xd9, 0x65, 0x1f, 0x92, 0x7b, 0x61, 0x99, 0x6d, 0xcb, 0xb1, - 0x21, 0x7e, 0x58, 0xc8, 0xf9, 0x16, 0x66, 0x4d, 0x5c, 0xa0, 0x72, 0x86, 0x21, 0x23, 0xa1, 0x76, - 0x8d, 0x71, 0x19, 0xc3, 0x61, 0x58, 0x61, 0x91, 0xab, 0xdd, 0xb0, 0xe2, 0x4d, 0x7b, 0xf9, 0x48, - 0x4b, 0x66, 0xce, 0xf4, 0x8e, 0xeb, 0x57, 0xf9, 0xd3, 0xb7, 0xad, 0xae, 0x69, 0x16, 0x60, 0xb1, - 0x7f, 0x0b, 0x70, 0x2c, 0xdb, 0xfa, 0x43, 0x0b, 0x30, 0xb9, 0xe3, 0xfa, 0xec, 0x55, 0x51, 0x53, - 0xef, 0x51, 0xd7, 0x52, 0xaf, 0x99, 0x68, 0x9c, 0xa6, 0x9f, 0x7d, 0x19, 0xc6, 0xef, 0xdd, 0x65, - 0xf5, 0xdd, 0x22, 0x3c, 0xd8, 0x65, 0xd9, 0x73, 0x59, 0x6f, 0x8c, 0x81, 0x26, 0xeb, 0x3b, 0xc6, - 0xa1, 0x06, 0x33, 0x1b, 0x6d, 0xcf, 0xdb, 0x63, 0x51, 0x4e, 0xa4, 0x29, 0x29, 0x84, 0x62, 0xa2, - 0x12, 0x08, 0xaf, 0x64, 0xd0, 0xe0, 0xcc, 0x92, 0xe8, 0x35, 0x40, 0xc1, 0x3a, 0x4b, 0x6a, 0xdb, - 0x4c, 0x12, 0x14, 0xb0, 0x8e, 0x2f, 0x26, 0x8b, 0xf1, 0x46, 0x07, 0x05, 0xce, 0x28, 0x45, 0x35, - 0x4c, 0xf6, 0x16, 0xba, 0x6a, 0x56, 0x4a, 0xc3, 0xc4, 0x3a, 0x12, 0x9b, 0xb4, 0xe8, 0x12, 0x4c, - 0x3b, 0xbb, 0x8e, 0xcb, 0x13, 0x56, 0x49, 0x06, 0x5c, 0xc5, 0x54, 0x8e, 0xa2, 0x85, 0x34, 0x01, - 0xee, 0x2c, 0x83, 0x36, 0x0c, 0x2f, 0x1f, 0xcf, 0x97, 0x7f, 0xb1, 0xef, 0xd9, 0xda, 0xb7, 0xdf, - 0xcf, 0xfe, 0x8f, 0x16, 0xdd, 0xbe, 0x32, 0x9e, 0xb1, 0xa4, 0xfd, 0xa0, 0xfc, 0x57, 0xda, 0xed, - 0x30, 0xd5, 0x0f, 0x4b, 0x3a, 0x12, 0x9b, 0xb4, 0x7c, 0x42, 0x44, 0x49, 0xb8, 0xb4, 0xa1, 0x27, - 0x8a, 0xeb, 0x94, 0x8a, 0x02, 0xbd, 0x01, 0xc3, 0x4d, 0x77, 0xd7, 0x8d, 0x82, 0x50, 0x2c, 0x96, - 0xa3, 0x3e, 0xdf, 0xac, 0xe4, 0x60, 0x95, 0xb3, 0xc1, 0x92, 0x9f, 0xfd, 0x95, 0x02, 0x8c, 0xcb, - 0x1a, 0x5f, 0x6f, 0x07, 0xb1, 0x73, 0x02, 0xdb, 0xf2, 0x25, 0x63, 0x5b, 0xfe, 0x58, 0xb7, 0x3b, - 0xa5, 0xac, 0x49, 0xb9, 0xdb, 0xf1, 0x8d, 0xd4, 0x76, 0xfc, 0x78, 0x6f, 0x56, 0xdd, 0xb7, 0xe1, - 0xdf, 0xb1, 0x60, 0xda, 0xa0, 0x3f, 0x81, 0xdd, 0x60, 0xc5, 0xdc, 0x0d, 0x1e, 0xe9, 0xf9, 0x0d, - 0x39, 0xbb, 0xc0, 0xd7, 0x0b, 0xa9, 0xb6, 0x33, 0xe9, 0xff, 0x2e, 0x0c, 0x6c, 0x39, 0x61, 0xb3, - 0x5b, 0xda, 0xc5, 0x8e, 0x42, 0x73, 0x97, 0x9d, 0xb0, 0xc9, 0x65, 0xf8, 0xd3, 0xea, 0x85, 0x2d, - 0x27, 0x6c, 0xf6, 0xbc, 0x1d, 0xc0, 0xaa, 0x42, 0x2f, 0xc1, 0x50, 0xd4, 0x08, 0x5a, 0x2a, 0xf6, - 0xf2, 0x3c, 0x7f, 0x7d, 0x8b, 0x42, 0x0e, 0xf7, 0x2b, 0xc8, 0xac, 0x8e, 0x82, 0xb1, 0xa0, 0x9f, - 0xdd, 0x84, 0x92, 0xaa, 0xfa, 0xbe, 0x46, 0x95, 0xff, 0x61, 0x11, 0x4e, 0x65, 0xcc, 0x0b, 0x14, - 0x19, 0xbd, 0xf5, 0x6c, 0x9f, 0xd3, 0xe9, 0x7d, 0xf6, 0x57, 0xc4, 0x2c, 0x96, 0xa6, 0x18, 0xff, - 0xbe, 0x2b, 0xbd, 0x19, 0x91, 0x74, 0xa5, 0x14, 0xd4, 0xbb, 0x52, 0x5a, 0xd9, 0x89, 0x75, 0x35, - 0xad, 0x48, 0xb5, 0xf4, 0xbe, 0x8e, 0xe9, 0xff, 0x2e, 0xc2, 0x4c, 0xd6, 0x55, 0x74, 0xf4, 0xd3, - 0xa9, 0x47, 0x1c, 0x9e, 0xef, 0xf7, 0x12, 0x3b, 0x7f, 0xd9, 0x41, 0x64, 0x78, 0x99, 0x33, 0x9f, - 0x75, 0xe8, 0xd9, 0xcd, 0xa2, 0x4e, 0x76, 0x5d, 0x27, 0xe4, 0x8f, 0x6f, 0xc8, 0x25, 0xfe, 0x89, - 0xbe, 0x1b, 0x20, 0x5e, 0xed, 0x88, 0x52, 0xd7, 0x75, 0x24, 0xb8, 0xf7, 0x75, 0x1d, 0x59, 0xf3, - 0xac, 0x0b, 0xa3, 0xda, 0xd7, 0xdc, 0xd7, 0x11, 0xdf, 0xa6, 0x3b, 0x8a, 0xd6, 0xee, 0xfb, 0x3a, - 0xea, 0x5f, 0xb5, 0x20, 0x15, 0x27, 0xa5, 0xfc, 0x1f, 0x56, 0xae, 0xff, 0xe3, 0x3c, 0x0c, 0x84, - 0x81, 0x47, 0xd2, 0x79, 0xfd, 0x71, 0xe0, 0x11, 0xcc, 0x30, 0xea, 0x39, 0xdd, 0x62, 0xde, 0x73, - 0xba, 0xd4, 0x34, 0xf6, 0xc8, 0x2e, 0x91, 0xde, 0x08, 0x25, 0x93, 0xaf, 0x52, 0x20, 0xe6, 0x38, - 0xfb, 0xd7, 0x07, 0xe0, 0x54, 0xc6, 0xe5, 0x34, 0x6a, 0xa8, 0x6c, 0x3a, 0x31, 0xb9, 0xe3, 0xec, - 0xa5, 0x73, 0x8d, 0x5e, 0xe2, 0x60, 0x2c, 0xf1, 0x2c, 0x96, 0x93, 0xa7, 0x2b, 0x4b, 0xf9, 0x88, - 0x44, 0x96, 0x32, 0x81, 0xbd, 0x5f, 0x2f, 0xac, 0x5e, 0x04, 0x88, 0x22, 0x6f, 0xd9, 0xa7, 0xca, - 0x57, 0x53, 0x44, 0x8a, 0x26, 0xb9, 0xed, 0xea, 0x57, 0x05, 0x06, 0x6b, 0x54, 0xa8, 0x0a, 0x53, - 0xad, 0x30, 0x88, 0xb9, 0xdf, 0xad, 0xca, 0x63, 0x14, 0x06, 0xcd, 0x6b, 0x46, 0xb5, 0x14, 0x1e, - 0x77, 0x94, 0x40, 0x2f, 0xc0, 0xa8, 0xb8, 0x7a, 0x54, 0x0b, 0x02, 0x4f, 0x78, 0x69, 0xd4, 0x89, - 0x77, 0x3d, 0x41, 0x61, 0x9d, 0x4e, 0x2b, 0xc6, 0x9c, 0x79, 0xc3, 0x99, 0xc5, 0xb8, 0x43, 0x4f, - 0xa3, 0x4b, 0x65, 0xa4, 0x18, 0xe9, 0x2b, 0x23, 0x45, 0xe2, 0xb7, 0x2a, 0xf5, 0x7d, 0x7e, 0x01, - 0x3d, 0x3d, 0x3d, 0xdf, 0x2c, 0xc2, 0x10, 0x1f, 0x8a, 0x13, 0x50, 0xc5, 0x56, 0x84, 0xef, 0xa6, - 0x4b, 0x1e, 0x00, 0xde, 0x96, 0xb9, 0xaa, 0x13, 0x3b, 0x5c, 0x0c, 0xa9, 0xd5, 0x90, 0x78, 0x79, - 0xd0, 0x9c, 0xb1, 0x5e, 0x66, 0x53, 0xce, 0x09, 0xe0, 0x3c, 0xb4, 0xd5, 0xf3, 0x36, 0x40, 0xc4, - 0x5e, 0xf9, 0xa4, 0x3c, 0x44, 0xde, 0xd2, 0x27, 0xbb, 0xd4, 0x5e, 0x57, 0xc4, 0xbc, 0x0d, 0xc9, - 0x14, 0x54, 0x08, 0xac, 0x71, 0x9c, 0x7d, 0x11, 0x4a, 0x8a, 0xb8, 0x97, 0x25, 0x37, 0xa6, 0x0b, - 0xaf, 0x4f, 0xc3, 0x64, 0xaa, 0xae, 0x23, 0x19, 0x82, 0xbf, 0x65, 0xc1, 0x24, 0x6f, 0xf2, 0xb2, - 0xbf, 0x2b, 0x16, 0xfb, 0x7b, 0x30, 0xe3, 0x65, 0x2c, 0x3a, 0x31, 0xa2, 0xfd, 0x2f, 0x52, 0x65, - 0xf8, 0x65, 0x61, 0x71, 0x66, 0x1d, 0xd4, 0xf8, 0xe7, 0xef, 0x13, 0x3b, 0x9e, 0x88, 0x40, 0x1e, - 0xe3, 0xf9, 0x9c, 0x39, 0x0c, 0x2b, 0xac, 0xfd, 0x3d, 0x0b, 0xa6, 0x3b, 0x5e, 0xb7, 0xff, 0x40, - 0xdb, 0x2e, 0xd2, 0x55, 0x17, 0x72, 0xd2, 0x55, 0xeb, 0x9f, 0x56, 0xec, 0xfa, 0x69, 0xbf, 0x6a, - 0x81, 0x98, 0x81, 0x27, 0xa0, 0xce, 0x7f, 0xc6, 0x54, 0xe7, 0x67, 0xf3, 0x27, 0x75, 0x8e, 0x1e, - 0xff, 0x67, 0x16, 0x4c, 0x71, 0x82, 0xe4, 0xf0, 0xe2, 0x03, 0x1d, 0x87, 0x7e, 0xde, 0x50, 0x51, - 0x8f, 0x56, 0x66, 0x7f, 0x94, 0x31, 0x58, 0x03, 0x5d, 0x07, 0xeb, 0xbf, 0x5a, 0x80, 0xf8, 0xe7, - 0xa7, 0x9f, 0x6c, 0xe6, 0x9b, 0x92, 0x66, 0x6a, 0x27, 0x42, 0x40, 0x61, 0xb0, 0x46, 0x75, 0x2c, - 0x0d, 0x4f, 0x9d, 0x0d, 0x15, 0x7b, 0x9f, 0x0d, 0x1d, 0xe1, 0x5b, 0xff, 0xda, 0x00, 0xa4, 0x03, - 0x11, 0xd1, 0x2d, 0x18, 0x6b, 0x38, 0x2d, 0x67, 0xdd, 0xf5, 0xdc, 0xd8, 0x25, 0x51, 0xb7, 0x43, - 0xe5, 0x25, 0x8d, 0x4e, 0x1c, 0xc4, 0x68, 0x10, 0x6c, 0xf0, 0x41, 0x73, 0x00, 0xad, 0xd0, 0xdd, - 0x75, 0x3d, 0xb2, 0xc9, 0x6c, 0x0d, 0x76, 0x1b, 0x81, 0x9f, 0x94, 0x4a, 0x28, 0xd6, 0x28, 0x32, - 0xa2, 0xd7, 0x8b, 0xf7, 0x2f, 0x7a, 0x7d, 0xe0, 0x88, 0xd1, 0xeb, 0x83, 0x7d, 0x45, 0xaf, 0x63, - 0x38, 0x23, 0x77, 0x55, 0xfa, 0x7f, 0xc5, 0xf5, 0x88, 0x50, 0xa5, 0xf8, 0x1d, 0x85, 0xd9, 0x83, - 0xfd, 0xca, 0x19, 0x9c, 0x49, 0x81, 0x73, 0x4a, 0xa2, 0x9f, 0x80, 0xb2, 0xe3, 0x79, 0xc1, 0x1d, - 0xd5, 0x6b, 0xcb, 0x51, 0xc3, 0xf1, 0x92, 0x54, 0xa0, 0x23, 0x8b, 0x0f, 0x1d, 0xec, 0x57, 0xca, - 0x0b, 0x39, 0x34, 0x38, 0xb7, 0xb4, 0xbd, 0x0d, 0xa7, 0xea, 0x24, 0x94, 0x0f, 0x81, 0xa9, 0xd5, - 0xb7, 0x06, 0xa5, 0x30, 0xb5, 0xdc, 0xfb, 0xba, 0x92, 0xae, 0x25, 0xe0, 0x92, 0xcb, 0x3b, 0x61, - 0x64, 0xff, 0xa9, 0x05, 0xc3, 0x22, 0xb8, 0xf1, 0x04, 0xb4, 0x8c, 0x05, 0xc3, 0xe1, 0x53, 0xc9, - 0x16, 0x89, 0xac, 0x31, 0xb9, 0xae, 0x9e, 0xd5, 0x94, 0xab, 0xe7, 0x91, 0x6e, 0x4c, 0xba, 0x3b, - 0x79, 0x7e, 0xa1, 0x08, 0x13, 0x66, 0x60, 0xe7, 0x09, 0x74, 0xc1, 0x75, 0x18, 0x8e, 0x44, 0x14, - 0x71, 0x21, 0x3f, 0x1a, 0x2d, 0x3d, 0x88, 0xc9, 0x99, 0xb5, 0x88, 0x1b, 0x96, 0x4c, 0x32, 0xc3, - 0x93, 0x8b, 0xf7, 0x31, 0x3c, 0xb9, 0x57, 0x6c, 0xed, 0xc0, 0x71, 0xc4, 0xd6, 0xda, 0xdf, 0x62, - 0xc2, 0x5f, 0x87, 0x9f, 0xc0, 0x8e, 0x7d, 0xc9, 0xdc, 0x26, 0xec, 0x2e, 0x33, 0x4b, 0x34, 0x2a, - 0x67, 0xe7, 0xfe, 0x47, 0x16, 0x8c, 0x0a, 0xc2, 0x13, 0x68, 0xf6, 0x67, 0xcd, 0x66, 0x3f, 0xd8, - 0xa5, 0xd9, 0x39, 0xed, 0xfd, 0xdb, 0x05, 0xd5, 0xde, 0x9a, 0x78, 0x5c, 0xbf, 0x67, 0x6a, 0xe8, - 0x11, 0x6a, 0xa7, 0x05, 0x8d, 0xc0, 0x13, 0x7a, 0xd9, 0x43, 0xc9, 0x35, 0x35, 0x0e, 0x3f, 0xd4, - 0x7e, 0x63, 0x45, 0xcd, 0x6e, 0x51, 0x05, 0x61, 0x2c, 0x36, 0xd0, 0xac, 0xa7, 0xfd, 0x9b, 0x00, - 0xc9, 0x0b, 0xe9, 0xe2, 0x5e, 0x67, 0xfe, 0x2a, 0x6c, 0xc7, 0xae, 0x37, 0xe7, 0xfa, 0x71, 0x14, - 0x87, 0x73, 0xab, 0x7e, 0x7c, 0x23, 0xe4, 0x5a, 0xbb, 0x76, 0xef, 0x4c, 0xf1, 0xc2, 0x1a, 0x5f, - 0x79, 0xf1, 0x81, 0xd5, 0x31, 0x68, 0x9e, 0xc4, 0x5c, 0x17, 0x70, 0xac, 0x28, 0xec, 0x17, 0x99, - 0x4c, 0x66, 0x1d, 0x74, 0xb4, 0x2b, 0x61, 0x7f, 0x34, 0xac, 0xba, 0x96, 0xb9, 0x61, 0xab, 0xfa, - 0xc5, 0xb3, 0xee, 0x22, 0x90, 0x56, 0xac, 0x07, 0xf9, 0x26, 0xb7, 0xd3, 0xd0, 0xe7, 0x3a, 0x0e, - 0xe8, 0x9e, 0xe9, 0x21, 0x4b, 0x8f, 0x70, 0x24, 0xc7, 0x32, 0xdd, 0xb1, 0x8c, 0x60, 0xab, 0xb5, - 0x74, 0xf2, 0xee, 0x25, 0x89, 0xc0, 0x09, 0x0d, 0x9a, 0x17, 0x36, 0x1f, 0x77, 0x80, 0x3c, 0x98, - 0xb2, 0xf9, 0xe4, 0xe7, 0x6b, 0x46, 0xdf, 0xb3, 0x30, 0xaa, 0x1e, 0x44, 0xa9, 0xf1, 0x77, 0x25, - 0x4a, 0x5c, 0x97, 0x5a, 0x4e, 0xc0, 0x58, 0xa7, 0x41, 0x6b, 0x30, 0x19, 0xf1, 0xd7, 0x5a, 0xe4, - 0x5d, 0x04, 0x61, 0xd1, 0x3f, 0x99, 0x7a, 0x8b, 0x5d, 0xa2, 0x0f, 0x19, 0x88, 0x2f, 0x56, 0x79, - 0x7b, 0x21, 0xcd, 0x02, 0xbd, 0x0a, 0x13, 0x9e, 0xfe, 0x6a, 0x65, 0x4d, 0x18, 0xfc, 0x2a, 0xc8, - 0xca, 0x78, 0xd3, 0xb2, 0x86, 0x53, 0xd4, 0x54, 0x09, 0xd0, 0x21, 0x22, 0x49, 0x8d, 0xe3, 0x6f, - 0x92, 0x48, 0x3c, 0xe7, 0xc0, 0x94, 0x80, 0xab, 0x39, 0x34, 0x38, 0xb7, 0x34, 0x7a, 0x09, 0xc6, - 0xe4, 0xe7, 0x6b, 0x77, 0x73, 0x92, 0x50, 0x3e, 0x0d, 0x87, 0x0d, 0x4a, 0x74, 0x07, 0x4e, 0xcb, - 0xff, 0x6b, 0xa1, 0xb3, 0xb1, 0xe1, 0x36, 0xc4, 0xd5, 0xa8, 0x51, 0xc6, 0x62, 0x41, 0xc6, 0x35, - 0x2f, 0x67, 0x11, 0x1d, 0xee, 0x57, 0xce, 0x8b, 0x5e, 0xcb, 0xc4, 0xb3, 0x41, 0xcc, 0xe6, 0x8f, - 0xae, 0xc1, 0xa9, 0x2d, 0xe2, 0x78, 0xf1, 0xd6, 0xd2, 0x16, 0x69, 0x6c, 0xcb, 0x45, 0xc4, 0x6e, - 0xfc, 0x68, 0x01, 0x70, 0x97, 0x3b, 0x49, 0x70, 0x56, 0x39, 0xf4, 0x16, 0x94, 0x5b, 0xed, 0x75, - 0xcf, 0x8d, 0xb6, 0xae, 0x07, 0x31, 0x3b, 0x4b, 0x54, 0xef, 0x89, 0x88, 0xab, 0x41, 0xea, 0xb6, - 0x53, 0x2d, 0x87, 0x0e, 0xe7, 0x72, 0x78, 0x7f, 0xa7, 0xbc, 0xef, 0xd2, 0xc2, 0x9a, 0x86, 0x81, - 0x3e, 0x0f, 0x63, 0xfa, 0x48, 0x0a, 0x21, 0xff, 0x58, 0xaf, 0x57, 0x52, 0x85, 0x7e, 0xa2, 0x46, - 0x55, 0xc7, 0x61, 0x83, 0xa3, 0xfd, 0x2f, 0x0a, 0x50, 0xe9, 0x91, 0x43, 0x2a, 0xe5, 0xba, 0xb2, - 0xfa, 0x72, 0x5d, 0x2d, 0xc8, 0xa7, 0x43, 0xae, 0xa7, 0x12, 0x53, 0xa7, 0x9e, 0x05, 0x49, 0xd2, - 0x53, 0xa7, 0xe9, 0xfb, 0x8e, 0xda, 0xd2, 0xbd, 0x5f, 0x03, 0x3d, 0x83, 0xd7, 0x6a, 0xba, 0x1b, - 0x73, 0xb0, 0x7f, 0x75, 0x37, 0xd7, 0x83, 0x69, 0x7f, 0xab, 0x00, 0xa7, 0x55, 0x17, 0xfe, 0xf8, - 0x76, 0xdc, 0xcd, 0xce, 0x8e, 0x3b, 0x06, 0xff, 0xaf, 0x7d, 0x03, 0x86, 0xea, 0x7b, 0x51, 0x23, - 0xf6, 0xfa, 0xd0, 0x0e, 0x1e, 0x35, 0x56, 0x4e, 0xb2, 0x87, 0xb1, 0xd7, 0xbf, 0xc4, 0x42, 0xb2, - 0xff, 0xb2, 0x05, 0x93, 0x6b, 0x4b, 0xb5, 0x7a, 0xd0, 0xd8, 0x26, 0xf1, 0x02, 0xf7, 0x6e, 0x60, - 0xa1, 0x1c, 0x58, 0xf7, 0xb8, 0xe9, 0x67, 0xa9, 0x13, 0xe7, 0x61, 0x60, 0x2b, 0x88, 0xe2, 0xb4, - 0x8f, 0xff, 0x72, 0x10, 0xc5, 0x98, 0x61, 0xec, 0x3f, 0xb6, 0x60, 0x90, 0x3d, 0x78, 0xd5, 0xeb, - 0x61, 0xb4, 0x7e, 0xbe, 0x0b, 0xbd, 0x00, 0x43, 0x64, 0x63, 0x83, 0x34, 0x62, 0x31, 0xaa, 0xf2, - 0x22, 0xc9, 0xd0, 0x32, 0x83, 0xd2, 0x1d, 0x91, 0x55, 0xc6, 0xff, 0x62, 0x41, 0x8c, 0x3e, 0x07, - 0xa5, 0xd8, 0xdd, 0x21, 0x0b, 0xcd, 0xa6, 0x70, 0xaf, 0x1f, 0x2d, 0x92, 0x4a, 0xed, 0xd0, 0x6b, - 0x92, 0x09, 0x4e, 0xf8, 0xd9, 0x3f, 0x57, 0x00, 0x48, 0x2e, 0x9c, 0xf5, 0xfa, 0xcc, 0xc5, 0x8e, - 0xf7, 0xdf, 0x1e, 0xcb, 0x78, 0xff, 0x0d, 0x25, 0x0c, 0x33, 0x5e, 0x7f, 0x53, 0x5d, 0x55, 0xec, - 0xab, 0xab, 0x06, 0x8e, 0xd2, 0x55, 0x4b, 0x30, 0x9d, 0x5c, 0x98, 0x33, 0x6f, 0x0f, 0xb3, 0xdc, - 0xb0, 0x6b, 0x69, 0x24, 0xee, 0xa4, 0xb7, 0xbf, 0x6c, 0x81, 0x88, 0xae, 0xed, 0x63, 0x42, 0xbf, - 0x29, 0x9f, 0x6a, 0x32, 0x12, 0xdb, 0x9d, 0xcf, 0x0f, 0x37, 0x16, 0xe9, 0xec, 0x94, 0x64, 0x37, - 0x92, 0xd8, 0x19, 0xbc, 0xec, 0xdf, 0xb1, 0x60, 0x94, 0xa3, 0xaf, 0x31, 0x13, 0xb4, 0x77, 0x6b, - 0x8e, 0x94, 0x59, 0x98, 0xbd, 0x62, 0x44, 0x19, 0xab, 0x04, 0xb4, 0xfa, 0x2b, 0x46, 0x12, 0x81, - 0x13, 0x1a, 0xf4, 0x04, 0x0c, 0x47, 0xed, 0x75, 0x46, 0x9e, 0x0a, 0xb0, 0xad, 0x73, 0x30, 0x96, - 0x78, 0x3a, 0xaf, 0xa6, 0xd2, 0xf1, 0xd5, 0xe8, 0x32, 0x0c, 0x71, 0xb1, 0x21, 0x96, 0x71, 0x97, - 0xc3, 0x04, 0x2d, 0x2a, 0x1b, 0xf8, 0xb3, 0xdb, 0x4c, 0xdc, 0x88, 0xf2, 0xe8, 0x2d, 0x18, 0x6d, - 0x06, 0x77, 0xfc, 0x3b, 0x4e, 0xd8, 0x5c, 0xa8, 0xad, 0x8a, 0x5e, 0xcf, 0x8c, 0x92, 0xab, 0x26, - 0x64, 0x7a, 0xa4, 0x37, 0x73, 0xcf, 0x25, 0x28, 0xac, 0xb3, 0x43, 0x6b, 0x2c, 0x87, 0x07, 0x7f, - 0x0c, 0xb4, 0x5b, 0xdc, 0x88, 0x7a, 0x3f, 0x54, 0xe3, 0x3c, 0x2e, 0x12, 0x7d, 0x88, 0xa7, 0x44, - 0x13, 0x46, 0xf6, 0x17, 0x4f, 0x81, 0x31, 0xda, 0x46, 0xfe, 0x5f, 0xeb, 0x98, 0xf2, 0xff, 0x62, - 0x18, 0x21, 0x3b, 0xad, 0x78, 0xaf, 0xea, 0x86, 0xdd, 0x12, 0xb2, 0x2f, 0x0b, 0x9a, 0x4e, 0x9e, - 0x12, 0x83, 0x15, 0x9f, 0xec, 0x24, 0xcd, 0xc5, 0x0f, 0x30, 0x49, 0xf3, 0xc0, 0x09, 0x26, 0x69, - 0xbe, 0x0e, 0xc3, 0x9b, 0x6e, 0x8c, 0x49, 0x2b, 0x10, 0x5b, 0x66, 0xe6, 0x4c, 0xb8, 0xc4, 0x49, - 0x3a, 0xd3, 0x8b, 0x0a, 0x04, 0x96, 0x4c, 0xd0, 0x6b, 0x6a, 0x0d, 0x0c, 0xe5, 0xab, 0x82, 0x9d, - 0xde, 0xed, 0xcc, 0x55, 0x20, 0x92, 0x32, 0x0f, 0xdf, 0x6b, 0x52, 0x66, 0x95, 0x54, 0x79, 0xe4, - 0xfd, 0x25, 0x55, 0x36, 0x92, 0x4e, 0x97, 0x8e, 0x2f, 0xe9, 0xf4, 0x97, 0x2d, 0x38, 0xdd, 0xca, - 0xca, 0xbf, 0x2e, 0x12, 0x25, 0xbf, 0xd0, 0x77, 0x1e, 0x7a, 0xa3, 0x42, 0x96, 0x48, 0x22, 0x93, - 0x0c, 0x67, 0x57, 0x27, 0xb3, 0x57, 0x8f, 0xde, 0x6b, 0xf6, 0xea, 0xfb, 0x93, 0x51, 0x39, 0xc9, - 0x65, 0x3d, 0x7e, 0x8c, 0xb9, 0xac, 0x27, 0xde, 0x77, 0x2e, 0x6b, 0x2d, 0x1f, 0xf5, 0xe4, 0x71, - 0xe4, 0xa3, 0x7e, 0xdb, 0x14, 0xf6, 0x3c, 0x4d, 0xf2, 0x53, 0x3d, 0x84, 0xbd, 0xc1, 0xb7, 0xbb, - 0xb8, 0xe7, 0xb9, 0xb7, 0xa7, 0xef, 0x29, 0xf7, 0xb6, 0x91, 0xd5, 0x1a, 0x1d, 0x5f, 0x56, 0xeb, - 0x5b, 0xfa, 0x16, 0x74, 0x2a, 0x9f, 0xaf, 0xda, 0x69, 0x3a, 0xf9, 0x66, 0x6d, 0x42, 0x9d, 0xd9, - 0xb2, 0x67, 0x4e, 0x26, 0x5b, 0xf6, 0xe9, 0x63, 0xcf, 0x96, 0x7d, 0xe6, 0x04, 0xb2, 0x65, 0x3f, - 0xf0, 0x81, 0x66, 0xcb, 0x2e, 0xdf, 0xdf, 0x6c, 0xd9, 0x67, 0x8f, 0x23, 0x5b, 0xf6, 0x2d, 0x28, - 0xb5, 0xe4, 0x15, 0xbc, 0xf2, 0x6c, 0xfe, 0x90, 0x64, 0xde, 0xd3, 0xe3, 0x43, 0xa2, 0x50, 0x38, - 0x61, 0x45, 0xf9, 0x26, 0xd9, 0xb3, 0x1f, 0xcc, 0xe7, 0x9b, 0x69, 0xb6, 0x77, 0xc9, 0x99, 0xfd, - 0x57, 0x0a, 0x70, 0xae, 0xfb, 0xbc, 0x4e, 0x6c, 0xfe, 0x5a, 0xe2, 0xc0, 0x4d, 0xd9, 0xfc, 0x4c, - 0xe9, 0xd2, 0xa8, 0xfa, 0xbe, 0xa7, 0x7c, 0x09, 0xa6, 0x55, 0x24, 0x92, 0xe7, 0x36, 0xf6, 0xb4, - 0xc7, 0x6d, 0x54, 0x70, 0x7b, 0x3d, 0x4d, 0x80, 0x3b, 0xcb, 0xa0, 0x05, 0x98, 0x34, 0x80, 0xab, - 0x55, 0xa1, 0x92, 0x2b, 0x27, 0x43, 0xdd, 0x44, 0xe3, 0x34, 0xbd, 0xfd, 0x75, 0x0b, 0x1e, 0xc8, - 0x49, 0xbc, 0xd9, 0xf7, 0x35, 0xdc, 0x0d, 0x98, 0x6c, 0x99, 0x45, 0x7b, 0xdc, 0xd6, 0x37, 0xd2, - 0x7b, 0xaa, 0xb6, 0xa6, 0x10, 0x38, 0xcd, 0x74, 0xf1, 0xc2, 0xb7, 0xbf, 0x7f, 0xee, 0x23, 0x7f, - 0xf0, 0xfd, 0x73, 0x1f, 0xf9, 0xde, 0xf7, 0xcf, 0x7d, 0xe4, 0x2f, 0x1c, 0x9c, 0xb3, 0xbe, 0x7d, - 0x70, 0xce, 0xfa, 0x83, 0x83, 0x73, 0xd6, 0xf7, 0x0e, 0xce, 0x59, 0x7f, 0x72, 0x70, 0xce, 0xfa, - 0xb9, 0x1f, 0x9c, 0xfb, 0xc8, 0x9b, 0x85, 0xdd, 0x67, 0xff, 0x7f, 0x00, 0x00, 0x00, 0xff, 0xff, - 0xb5, 0xda, 0x8c, 0x23, 0x31, 0xca, 0x00, 0x00, + // 11579 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0xbd, 0x6b, 0x70, 0x24, 0xd7, + 0x75, 0x18, 0xac, 0x9e, 0xc1, 0x6b, 0x0e, 0xde, 0x77, 0x1f, 0x9c, 0x05, 0xc9, 0xc5, 0xb2, 0x29, + 0x91, 0xcb, 0x17, 0x60, 0x2e, 0x49, 0x91, 0x16, 0x29, 0x5a, 0x00, 0x06, 0xd8, 0x05, 0xf7, 0x35, + 0xbc, 0x83, 0x5d, 0x9a, 0x14, 0x4d, 0xab, 0x31, 0x7d, 0x01, 0x34, 0xd1, 0xe8, 0x1e, 0x76, 0xf7, + 0x60, 0x17, 0x2c, 0xab, 0xea, 0xfb, 0x14, 0x59, 0x79, 0xc8, 0x3f, 0x5c, 0x29, 0x57, 0xe2, 0x58, + 0x2a, 0xa7, 0x2a, 0x8f, 0xb2, 0x15, 0x27, 0x29, 0x3b, 0x72, 0xfc, 0x90, 0x9c, 0x4a, 0xe2, 0x3c, + 0x4a, 0xfa, 0xe3, 0xd8, 0xae, 0x4a, 0x49, 0x55, 0xa9, 0xc0, 0x16, 0x94, 0x4a, 0x2a, 0x3f, 0x92, + 0xca, 0xe3, 0x97, 0x11, 0x27, 0x4a, 0xdd, 0x67, 0xdf, 0xdb, 0xd3, 0x3d, 0x33, 0x58, 0x62, 0x41, + 0x4a, 0x95, 0x7f, 0x33, 0xe7, 0x9c, 0x7b, 0xee, 0xed, 0xfb, 0x38, 0xf7, 0x9c, 0x73, 0xcf, 0x3d, + 0x17, 0x5e, 0xde, 0x7e, 0x29, 0x9e, 0xf3, 0xc2, 0xf9, 0xed, 0xf6, 0x3a, 0x89, 0x02, 0x92, 0x90, + 0x78, 0x7e, 0x97, 0x04, 0x6e, 0x18, 0xcd, 0x0b, 0x84, 0xd3, 0xf2, 0xe6, 0x9b, 0x61, 0x44, 0xe6, + 0x77, 0x9f, 0x9d, 0xdf, 0x24, 0x01, 0x89, 0x9c, 0x84, 0xb8, 0x73, 0xad, 0x28, 0x4c, 0x42, 0x84, + 0x38, 0xcd, 0x9c, 0xd3, 0xf2, 0xe6, 0x28, 0xcd, 0xdc, 0xee, 0xb3, 0x33, 0xcf, 0x6c, 0x7a, 0xc9, + 0x56, 0x7b, 0x7d, 0xae, 0x19, 0xee, 0xcc, 0x6f, 0x86, 0x9b, 0xe1, 0x3c, 0x23, 0x5d, 0x6f, 0x6f, + 0xb0, 0x7f, 0xec, 0x0f, 0xfb, 0xc5, 0x59, 0xcc, 0x3c, 0x9f, 0x56, 0xb3, 0xe3, 0x34, 0xb7, 0xbc, + 0x80, 0x44, 0x7b, 0xf3, 0xad, 0xed, 0x4d, 0x56, 0x6f, 0x44, 0xe2, 0xb0, 0x1d, 0x35, 0x49, 0xb6, + 0xe2, 0xae, 0xa5, 0xe2, 0xf9, 0x1d, 0x92, 0x38, 0x39, 0xcd, 0x9d, 0x99, 0x2f, 0x2a, 0x15, 0xb5, + 0x83, 0xc4, 0xdb, 0xe9, 0xac, 0xe6, 0x93, 0xbd, 0x0a, 0xc4, 0xcd, 0x2d, 0xb2, 0xe3, 0x74, 0x94, + 0x7b, 0xae, 0xa8, 0x5c, 0x3b, 0xf1, 0xfc, 0x79, 0x2f, 0x48, 0xe2, 0x24, 0xca, 0x16, 0xb2, 0xbf, + 0x63, 0xc1, 0x85, 0x85, 0x37, 0x1a, 0xcb, 0xbe, 0x13, 0x27, 0x5e, 0x73, 0xd1, 0x0f, 0x9b, 0xdb, + 0x8d, 0x24, 0x8c, 0xc8, 0xed, 0xd0, 0x6f, 0xef, 0x90, 0x06, 0xeb, 0x08, 0xf4, 0x34, 0x8c, 0xec, + 0xb2, 0xff, 0xab, 0xb5, 0xaa, 0x75, 0xc1, 0xba, 0x58, 0x59, 0x9c, 0xfa, 0xd6, 0xfe, 0xec, 0xc7, + 0x0e, 0xf6, 0x67, 0x47, 0x6e, 0x0b, 0x38, 0x56, 0x14, 0xe8, 0x31, 0x18, 0xda, 0x88, 0xd7, 0xf6, + 0x5a, 0xa4, 0x5a, 0x62, 0xb4, 0x13, 0x82, 0x76, 0x68, 0xa5, 0x41, 0xa1, 0x58, 0x60, 0xd1, 0x3c, + 0x54, 0x5a, 0x4e, 0x94, 0x78, 0x89, 0x17, 0x06, 0xd5, 0xf2, 0x05, 0xeb, 0xe2, 0xe0, 0xe2, 0xb4, + 0x20, 0xad, 0xd4, 0x25, 0x02, 0xa7, 0x34, 0xb4, 0x19, 0x11, 0x71, 0xdc, 0x9b, 0x81, 0xbf, 0x57, + 0x1d, 0xb8, 0x60, 0x5d, 0x1c, 0x49, 0x9b, 0x81, 0x05, 0x1c, 0x2b, 0x0a, 0xfb, 0x97, 0x4a, 0x30, + 0xb2, 0xb0, 0xb1, 0xe1, 0x05, 0x5e, 0xb2, 0x87, 0x6e, 0xc3, 0x58, 0x10, 0xba, 0x44, 0xfe, 0x67, + 0x5f, 0x31, 0x7a, 0xe9, 0xc2, 0x5c, 0xe7, 0x54, 0x9a, 0xbb, 0xa1, 0xd1, 0x2d, 0x4e, 0x1d, 0xec, + 0xcf, 0x8e, 0xe9, 0x10, 0x6c, 0xf0, 0x41, 0x18, 0x46, 0x5b, 0xa1, 0xab, 0xd8, 0x96, 0x18, 0xdb, + 0xd9, 0x3c, 0xb6, 0xf5, 0x94, 0x6c, 0x71, 0xf2, 0x60, 0x7f, 0x76, 0x54, 0x03, 0x60, 0x9d, 0x09, + 0x5a, 0x87, 0x49, 0xfa, 0x37, 0x48, 0x3c, 0xc5, 0xb7, 0xcc, 0xf8, 0x3e, 0x5a, 0xc4, 0x57, 0x23, + 0x5d, 0x3c, 0x75, 0xb0, 0x3f, 0x3b, 0x99, 0x01, 0xe2, 0x2c, 0x43, 0xfb, 0x7d, 0x98, 0x58, 0x48, + 0x12, 0xa7, 0xb9, 0x45, 0x5c, 0x3e, 0x82, 0xe8, 0x79, 0x18, 0x08, 0x9c, 0x1d, 0x22, 0xc6, 0xf7, + 0x82, 0xe8, 0xd8, 0x81, 0x1b, 0xce, 0x0e, 0x39, 0xdc, 0x9f, 0x9d, 0xba, 0x15, 0x78, 0xef, 0xb5, + 0xc5, 0xac, 0xa0, 0x30, 0xcc, 0xa8, 0xd1, 0x25, 0x00, 0x97, 0xec, 0x7a, 0x4d, 0x52, 0x77, 0x92, + 0x2d, 0x31, 0xde, 0x48, 0x94, 0x85, 0x9a, 0xc2, 0x60, 0x8d, 0xca, 0xbe, 0x0b, 0x95, 0x85, 0xdd, + 0xd0, 0x73, 0xeb, 0xa1, 0x1b, 0xa3, 0x6d, 0x98, 0x6c, 0x45, 0x64, 0x83, 0x44, 0x0a, 0x54, 0xb5, + 0x2e, 0x94, 0x2f, 0x8e, 0x5e, 0xba, 0x98, 0xfb, 0xb1, 0x26, 0xe9, 0x72, 0x90, 0x44, 0x7b, 0x8b, + 0x0f, 0x88, 0xfa, 0x26, 0x33, 0x58, 0x9c, 0xe5, 0x6c, 0xff, 0xcb, 0x12, 0x9c, 0x59, 0x78, 0xbf, + 0x1d, 0x91, 0x9a, 0x17, 0x6f, 0x67, 0x67, 0xb8, 0xeb, 0xc5, 0xdb, 0x37, 0xd2, 0x1e, 0x50, 0x53, + 0xab, 0x26, 0xe0, 0x58, 0x51, 0xa0, 0x67, 0x60, 0x98, 0xfe, 0xbe, 0x85, 0x57, 0xc5, 0x27, 0x9f, + 0x12, 0xc4, 0xa3, 0x35, 0x27, 0x71, 0x6a, 0x1c, 0x85, 0x25, 0x0d, 0xba, 0x0e, 0xa3, 0x4d, 0xb6, + 0x20, 0x37, 0xaf, 0x87, 0x2e, 0x61, 0x83, 0x59, 0x59, 0x7c, 0x8a, 0x92, 0x2f, 0xa5, 0xe0, 0xc3, + 0xfd, 0xd9, 0x2a, 0x6f, 0x9b, 0x60, 0xa1, 0xe1, 0xb0, 0x5e, 0x1e, 0xd9, 0x6a, 0x7d, 0x0d, 0x30, + 0x4e, 0x90, 0xb3, 0xb6, 0x2e, 0x6a, 0x4b, 0x65, 0x90, 0x2d, 0x95, 0xb1, 0xfc, 0x65, 0x82, 0x9e, + 0x85, 0x81, 0x6d, 0x2f, 0x70, 0xab, 0x43, 0x8c, 0xd7, 0xc3, 0x74, 0xcc, 0xaf, 0x7a, 0x81, 0x7b, + 0xb8, 0x3f, 0x3b, 0x6d, 0x34, 0x87, 0x02, 0x31, 0x23, 0xb5, 0xff, 0x9e, 0x25, 0xba, 0x71, 0xc5, + 0xf3, 0x4d, 0x41, 0x71, 0x09, 0x20, 0x26, 0xcd, 0x88, 0x24, 0x5a, 0x47, 0xaa, 0xe9, 0xd0, 0x50, + 0x18, 0xac, 0x51, 0x51, 0x31, 0x10, 0x6f, 0x39, 0x11, 0x9b, 0x55, 0xa2, 0x3b, 0x95, 0x18, 0x68, + 0x48, 0x04, 0x4e, 0x69, 0x0c, 0x31, 0x50, 0xee, 0x29, 0x06, 0x7e, 0xc7, 0x82, 0xe1, 0x45, 0x2f, + 0x70, 0xbd, 0x60, 0x13, 0x7d, 0x0e, 0x46, 0xa8, 0x94, 0x76, 0x9d, 0xc4, 0x11, 0x12, 0xe0, 0xc7, + 0xb4, 0x59, 0xa6, 0x84, 0xe6, 0x5c, 0x6b, 0x7b, 0x93, 0x02, 0xe2, 0x39, 0x4a, 0x4d, 0xe7, 0xdd, + 0xcd, 0xf5, 0x77, 0x49, 0x33, 0xb9, 0x4e, 0x12, 0x27, 0xfd, 0x9c, 0x14, 0x86, 0x15, 0x57, 0x74, + 0x15, 0x86, 0x12, 0x27, 0xda, 0x24, 0x89, 0x10, 0x05, 0xb9, 0x4b, 0x96, 0x97, 0xc4, 0x74, 0x6e, + 0x92, 0xa0, 0x49, 0x52, 0x01, 0xb9, 0xc6, 0x8a, 0x62, 0xc1, 0xc2, 0x6e, 0xc2, 0xd8, 0x92, 0xd3, + 0x72, 0xd6, 0x3d, 0xdf, 0x4b, 0x3c, 0x12, 0xa3, 0xc7, 0xa1, 0xec, 0xb8, 0x2e, 0x5b, 0x1f, 0x95, + 0xc5, 0x33, 0x07, 0xfb, 0xb3, 0xe5, 0x05, 0x97, 0x0e, 0x14, 0x28, 0xaa, 0x3d, 0x4c, 0x29, 0xd0, + 0x93, 0x30, 0xe0, 0x46, 0x61, 0xab, 0x5a, 0x62, 0x94, 0x67, 0xe9, 0x98, 0xd6, 0xa2, 0xb0, 0x95, + 0x21, 0x65, 0x34, 0xf6, 0x37, 0x4b, 0x80, 0x96, 0x48, 0x6b, 0x6b, 0xa5, 0x61, 0x8c, 0xe4, 0x45, + 0x18, 0xd9, 0x09, 0x03, 0x2f, 0x09, 0xa3, 0x58, 0x54, 0xc8, 0x26, 0xd0, 0x75, 0x01, 0xc3, 0x0a, + 0x8b, 0x2e, 0xc0, 0x40, 0x2b, 0x5d, 0xfc, 0x63, 0x52, 0x70, 0xb0, 0x65, 0xcf, 0x30, 0x94, 0xa2, + 0x1d, 0x93, 0x48, 0x4c, 0x7c, 0x45, 0x71, 0x2b, 0x26, 0x11, 0x66, 0x98, 0x74, 0xde, 0xd0, 0x19, + 0x25, 0xa6, 0x75, 0x66, 0xde, 0x50, 0x0c, 0xd6, 0xa8, 0xd0, 0x2d, 0xa8, 0xf0, 0x7f, 0x98, 0x6c, + 0xb0, 0x39, 0x5e, 0x20, 0x33, 0xae, 0x85, 0x4d, 0xc7, 0xcf, 0x76, 0xf9, 0x38, 0x9b, 0x5d, 0xb2, + 0x38, 0x4e, 0x39, 0x19, 0xb3, 0x6b, 0xa8, 0xe7, 0xec, 0xfa, 0x45, 0x0b, 0xd0, 0x92, 0x17, 0xb8, + 0x24, 0x3a, 0x81, 0x0d, 0xf3, 0x68, 0x13, 0xff, 0xdf, 0xd1, 0xa6, 0x85, 0x3b, 0xad, 0x30, 0x20, + 0x41, 0xb2, 0x14, 0x06, 0x2e, 0xdf, 0x44, 0x3f, 0x05, 0x03, 0x09, 0xad, 0x8a, 0x37, 0xeb, 0x31, + 0x39, 0x18, 0xb4, 0x82, 0xc3, 0xfd, 0xd9, 0xb3, 0x9d, 0x25, 0x58, 0x13, 0x58, 0x19, 0xf4, 0xe3, + 0x30, 0x14, 0x27, 0x4e, 0xd2, 0x8e, 0x45, 0x43, 0x1f, 0x91, 0x0d, 0x6d, 0x30, 0xe8, 0xe1, 0xfe, + 0xec, 0xa4, 0x2a, 0xc6, 0x41, 0x58, 0x14, 0x40, 0x4f, 0xc0, 0xf0, 0x0e, 0x89, 0x63, 0x67, 0x53, + 0xca, 0xbf, 0x49, 0x51, 0x76, 0xf8, 0x3a, 0x07, 0x63, 0x89, 0x47, 0x8f, 0xc2, 0x20, 0x89, 0xa2, + 0x30, 0x12, 0xf3, 0x60, 0x5c, 0x10, 0x0e, 0x2e, 0x53, 0x20, 0xe6, 0x38, 0xfb, 0xdf, 0x58, 0x30, + 0xa9, 0xda, 0xca, 0xeb, 0x3a, 0x81, 0xe5, 0xfd, 0x16, 0x40, 0x53, 0x7e, 0x60, 0xcc, 0x96, 0xd7, + 0xe8, 0xa5, 0xc7, 0xf2, 0x26, 0x5d, 0x67, 0x37, 0xa6, 0x9c, 0x15, 0x28, 0xc6, 0x1a, 0x37, 0xfb, + 0x9f, 0x58, 0x70, 0x2a, 0xf3, 0x45, 0xd7, 0xbc, 0x38, 0x41, 0x6f, 0x77, 0x7c, 0xd5, 0x5c, 0x7f, + 0x5f, 0x45, 0x4b, 0xb3, 0x6f, 0x52, 0xb3, 0x44, 0x42, 0xb4, 0x2f, 0xba, 0x02, 0x83, 0x5e, 0x42, + 0x76, 0xe4, 0xc7, 0x3c, 0xda, 0xf5, 0x63, 0x78, 0xab, 0xd2, 0x11, 0x59, 0xa5, 0x25, 0x31, 0x67, + 0x60, 0xff, 0x77, 0x0b, 0x2a, 0x4b, 0x61, 0xb0, 0xe1, 0x6d, 0x5e, 0x77, 0x5a, 0x27, 0x30, 0x16, + 0xab, 0x30, 0xc0, 0xb8, 0xf3, 0x86, 0x3f, 0x9e, 0xdf, 0x70, 0xd1, 0x9c, 0x39, 0xba, 0x8b, 0x71, + 0x6d, 0x41, 0x89, 0x1f, 0x0a, 0xc2, 0x8c, 0xc5, 0xcc, 0x8b, 0x50, 0x51, 0x04, 0x68, 0x0a, 0xca, + 0xdb, 0x84, 0x6b, 0x88, 0x15, 0x4c, 0x7f, 0xa2, 0xd3, 0x30, 0xb8, 0xeb, 0xf8, 0x6d, 0xb1, 0x3c, + 0x31, 0xff, 0xf3, 0xa9, 0xd2, 0x4b, 0x96, 0xfd, 0x0d, 0xb6, 0xc6, 0x44, 0x25, 0xcb, 0xc1, 0xae, + 0x58, 0xfe, 0xef, 0xc3, 0x69, 0x3f, 0x47, 0xea, 0x88, 0x8e, 0xe8, 0x5f, 0x4a, 0x3d, 0x24, 0xda, + 0x7a, 0x3a, 0x0f, 0x8b, 0x73, 0xeb, 0xa0, 0x82, 0x3b, 0x6c, 0xd1, 0x19, 0xe5, 0xf8, 0xac, 0xbd, + 0x62, 0xe7, 0xbf, 0x29, 0x60, 0x58, 0x61, 0xa9, 0x80, 0x38, 0xad, 0x1a, 0x7f, 0x95, 0xec, 0x35, + 0x88, 0x4f, 0x9a, 0x49, 0x18, 0x7d, 0xa8, 0xcd, 0x7f, 0x98, 0xf7, 0x3e, 0x97, 0x2f, 0xa3, 0x82, + 0x41, 0xf9, 0x2a, 0xd9, 0xe3, 0x43, 0xa1, 0x7f, 0x5d, 0xb9, 0xeb, 0xd7, 0xfd, 0x86, 0x05, 0xe3, + 0xea, 0xeb, 0x4e, 0x60, 0x21, 0x2d, 0x9a, 0x0b, 0xe9, 0xe1, 0xae, 0xf3, 0xb1, 0x60, 0x09, 0xfd, + 0x80, 0x89, 0x00, 0x41, 0x53, 0x8f, 0x42, 0xda, 0x35, 0x54, 0x66, 0x7f, 0x98, 0x03, 0xd2, 0xcf, + 0x77, 0x5d, 0x25, 0x7b, 0x6b, 0x21, 0xdd, 0xf0, 0xf3, 0xbf, 0xcb, 0x18, 0xb5, 0x81, 0xae, 0xa3, + 0xf6, 0x9b, 0x25, 0x38, 0xa3, 0x7a, 0xc0, 0xd8, 0x52, 0x7f, 0xd8, 0xfb, 0xe0, 0x59, 0x18, 0x75, + 0xc9, 0x86, 0xd3, 0xf6, 0x13, 0x65, 0x04, 0x0c, 0x72, 0x43, 0xb0, 0x96, 0x82, 0xb1, 0x4e, 0x73, + 0x84, 0x6e, 0xfb, 0x57, 0xc0, 0x64, 0x6f, 0xe2, 0xd0, 0x19, 0x4c, 0xf5, 0x2d, 0xcd, 0x94, 0x1b, + 0xd3, 0x4d, 0x39, 0x61, 0xb6, 0x3d, 0x0a, 0x83, 0xde, 0x0e, 0xdd, 0x8b, 0x4b, 0xe6, 0x16, 0xbb, + 0x4a, 0x81, 0x98, 0xe3, 0xd0, 0x27, 0x60, 0xb8, 0x19, 0xee, 0xec, 0x38, 0x81, 0x5b, 0x2d, 0x33, + 0x0d, 0x70, 0x94, 0x6e, 0xd7, 0x4b, 0x1c, 0x84, 0x25, 0x0e, 0x3d, 0x04, 0x03, 0x4e, 0xb4, 0x19, + 0x57, 0x07, 0x18, 0xcd, 0x08, 0xad, 0x69, 0x21, 0xda, 0x8c, 0x31, 0x83, 0x52, 0xcd, 0xee, 0x4e, + 0x18, 0x6d, 0x7b, 0xc1, 0x66, 0xcd, 0x8b, 0x98, 0x9a, 0xa6, 0x69, 0x76, 0x6f, 0x28, 0x0c, 0xd6, + 0xa8, 0xd0, 0x0a, 0x0c, 0xb6, 0xc2, 0x28, 0x89, 0xab, 0x43, 0xac, 0xbb, 0x1f, 0x29, 0x58, 0x4a, + 0xfc, 0x6b, 0xeb, 0x61, 0x94, 0xa4, 0x1f, 0x40, 0xff, 0xc5, 0x98, 0x17, 0x47, 0x3f, 0x0e, 0x65, + 0x12, 0xec, 0x56, 0x87, 0x19, 0x97, 0x99, 0x3c, 0x2e, 0xcb, 0xc1, 0xee, 0x6d, 0x27, 0x4a, 0xe5, + 0xcc, 0x72, 0xb0, 0x8b, 0x69, 0x19, 0xf4, 0x26, 0x54, 0xa4, 0x1b, 0x28, 0xae, 0x8e, 0x14, 0x4f, + 0x31, 0x2c, 0x88, 0x30, 0x79, 0xaf, 0xed, 0x45, 0x64, 0x87, 0x04, 0x49, 0x9c, 0x9a, 0x2f, 0x12, + 0x1b, 0xe3, 0x94, 0x1b, 0x7a, 0x13, 0xc6, 0xb8, 0xe6, 0x77, 0x3d, 0x6c, 0x07, 0x49, 0x5c, 0xad, + 0xb0, 0xe6, 0xe5, 0xfa, 0x0c, 0x6e, 0xa7, 0x74, 0x8b, 0xa7, 0x05, 0xd3, 0x31, 0x0d, 0x18, 0x63, + 0x83, 0x15, 0xc2, 0x30, 0xee, 0x7b, 0xbb, 0x24, 0x20, 0x71, 0x5c, 0x8f, 0xc2, 0x75, 0x52, 0x05, + 0xd6, 0xf2, 0x73, 0xf9, 0xa6, 0x74, 0xb8, 0x4e, 0x16, 0xa7, 0x0f, 0xf6, 0x67, 0xc7, 0xaf, 0xe9, + 0x65, 0xb0, 0xc9, 0x02, 0xdd, 0x82, 0x09, 0xaa, 0x52, 0x7a, 0x29, 0xd3, 0xd1, 0x5e, 0x4c, 0xd1, + 0xc1, 0xfe, 0xec, 0x04, 0x36, 0x0a, 0xe1, 0x0c, 0x13, 0xf4, 0x1a, 0x54, 0x7c, 0x6f, 0x83, 0x34, + 0xf7, 0x9a, 0x3e, 0xa9, 0x8e, 0x31, 0x8e, 0xb9, 0xcb, 0xea, 0x9a, 0x24, 0xe2, 0x2a, 0xbb, 0xfa, + 0x8b, 0xd3, 0xe2, 0xe8, 0x36, 0x9c, 0x4d, 0x48, 0xb4, 0xe3, 0x05, 0x0e, 0x5d, 0x0e, 0x42, 0x9f, + 0x64, 0x0e, 0x89, 0x71, 0x36, 0xdf, 0xce, 0x8b, 0xae, 0x3b, 0xbb, 0x96, 0x4b, 0x85, 0x0b, 0x4a, + 0xa3, 0x9b, 0x30, 0xc9, 0x56, 0x42, 0xbd, 0xed, 0xfb, 0xf5, 0xd0, 0xf7, 0x9a, 0x7b, 0xd5, 0x09, + 0xc6, 0xf0, 0x13, 0xd2, 0xe3, 0xb0, 0x6a, 0xa2, 0xa9, 0x81, 0x95, 0xfe, 0xc3, 0xd9, 0xd2, 0x68, + 0x1d, 0x26, 0x63, 0xd2, 0x6c, 0x47, 0x5e, 0xb2, 0x47, 0xe7, 0x2f, 0xb9, 0x9b, 0x54, 0x27, 0x8b, + 0xcd, 0xc4, 0x86, 0x49, 0xca, 0x3d, 0x3b, 0x19, 0x20, 0xce, 0x32, 0xa4, 0x4b, 0x3b, 0x4e, 0x5c, + 0x2f, 0xa8, 0x4e, 0x31, 0x89, 0xa1, 0x56, 0x46, 0x83, 0x02, 0x31, 0xc7, 0x31, 0x9b, 0x9b, 0xfe, + 0xb8, 0x49, 0x25, 0xe8, 0x34, 0x23, 0x4c, 0x6d, 0x6e, 0x89, 0xc0, 0x29, 0x0d, 0xdd, 0x96, 0x93, + 0x64, 0xaf, 0x8a, 0x18, 0xa9, 0x5a, 0x2e, 0x6b, 0x6b, 0x6f, 0x62, 0x0a, 0x47, 0xd7, 0x60, 0x98, + 0x04, 0xbb, 0x2b, 0x51, 0xb8, 0x53, 0x3d, 0x55, 0xbc, 0x66, 0x97, 0x39, 0x09, 0x17, 0xe8, 0xa9, + 0x01, 0x20, 0xc0, 0x58, 0xb2, 0x40, 0x77, 0xa1, 0x9a, 0x33, 0x22, 0x7c, 0x00, 0x4e, 0xb3, 0x01, + 0x78, 0x45, 0x94, 0xad, 0xae, 0x15, 0xd0, 0x1d, 0x76, 0xc1, 0xe1, 0x42, 0xee, 0xf6, 0x3a, 0x4c, + 0x28, 0xc1, 0xc2, 0xc6, 0x16, 0xcd, 0xc2, 0x20, 0x95, 0x98, 0xd2, 0x08, 0xae, 0xd0, 0xae, 0xa4, + 0x82, 0x34, 0xc6, 0x1c, 0xce, 0xba, 0xd2, 0x7b, 0x9f, 0x2c, 0xee, 0x25, 0x84, 0x9b, 0x45, 0x65, + 0xad, 0x2b, 0x25, 0x02, 0xa7, 0x34, 0xf6, 0xff, 0xe1, 0x8a, 0x49, 0x2a, 0xbd, 0xfa, 0x90, 0xd7, + 0x4f, 0xc3, 0xc8, 0x56, 0x18, 0x27, 0x94, 0x9a, 0xd5, 0x31, 0x98, 0xaa, 0x22, 0x57, 0x04, 0x1c, + 0x2b, 0x0a, 0xf4, 0x32, 0x8c, 0x37, 0xf5, 0x0a, 0xc4, 0x66, 0x73, 0x46, 0x14, 0x31, 0x6b, 0xc7, + 0x26, 0x2d, 0x7a, 0x09, 0x46, 0x98, 0x67, 0xb8, 0x19, 0xfa, 0xc2, 0x00, 0x93, 0x3b, 0xe6, 0x48, + 0x5d, 0xc0, 0x0f, 0xb5, 0xdf, 0x58, 0x51, 0x53, 0x33, 0x96, 0x36, 0x61, 0xb5, 0x2e, 0xc4, 0xbc, + 0x32, 0x63, 0xaf, 0x30, 0x28, 0x16, 0x58, 0xfb, 0xaf, 0x96, 0xb4, 0x5e, 0xa6, 0x26, 0x05, 0x41, + 0x75, 0x18, 0xbe, 0xe3, 0x78, 0x89, 0x17, 0x6c, 0x8a, 0xfd, 0xfc, 0x89, 0xae, 0x32, 0x9f, 0x15, + 0x7a, 0x83, 0x17, 0xe0, 0xbb, 0x92, 0xf8, 0x83, 0x25, 0x1b, 0xca, 0x31, 0x6a, 0x07, 0x01, 0xe5, + 0x58, 0xea, 0x97, 0x23, 0xe6, 0x05, 0x38, 0x47, 0xf1, 0x07, 0x4b, 0x36, 0xe8, 0x6d, 0x00, 0x39, + 0x6f, 0x88, 0x2b, 0x3c, 0xb2, 0x4f, 0xf7, 0x66, 0xba, 0xa6, 0xca, 0x2c, 0x4e, 0xd0, 0x3d, 0x2f, + 0xfd, 0x8f, 0x35, 0x7e, 0x76, 0xc2, 0xf4, 0x9e, 0xce, 0xc6, 0xa0, 0xcf, 0xd2, 0xa5, 0xea, 0x44, + 0x09, 0x71, 0x17, 0x12, 0xd1, 0x39, 0x4f, 0xf6, 0xa7, 0xb6, 0xae, 0x79, 0x3b, 0x44, 0x5f, 0xd6, + 0x82, 0x09, 0x4e, 0xf9, 0xd9, 0xbf, 0x5d, 0x86, 0x6a, 0x51, 0x73, 0xe9, 0xa4, 0x23, 0x77, 0xbd, + 0x64, 0x89, 0xaa, 0x2b, 0x96, 0x39, 0xe9, 0x96, 0x05, 0x1c, 0x2b, 0x0a, 0x3a, 0xfa, 0xb1, 0xb7, + 0x29, 0xad, 0x8e, 0xc1, 0x74, 0xf4, 0x1b, 0x0c, 0x8a, 0x05, 0x96, 0xd2, 0x45, 0xc4, 0x89, 0x85, + 0xcb, 0x5f, 0x9b, 0x25, 0x98, 0x41, 0xb1, 0xc0, 0xea, 0x0e, 0x83, 0x81, 0x1e, 0x0e, 0x03, 0xa3, + 0x8b, 0x06, 0x8f, 0xb7, 0x8b, 0xd0, 0x3b, 0x00, 0x1b, 0x5e, 0xe0, 0xc5, 0x5b, 0x8c, 0xfb, 0xd0, + 0x91, 0xb9, 0x2b, 0x65, 0x67, 0x45, 0x71, 0xc1, 0x1a, 0x47, 0xf4, 0x02, 0x8c, 0xaa, 0x05, 0xb8, + 0x5a, 0xab, 0x0e, 0x9b, 0xfe, 0xe4, 0x54, 0x1a, 0xd5, 0xb0, 0x4e, 0x67, 0xbf, 0x9b, 0x9d, 0x2f, + 0x62, 0x05, 0x68, 0xfd, 0x6b, 0xf5, 0xdb, 0xbf, 0xa5, 0xee, 0xfd, 0x6b, 0xff, 0x7e, 0x19, 0x26, + 0x8d, 0xca, 0xda, 0x71, 0x1f, 0x32, 0xeb, 0x32, 0xdd, 0x88, 0x9c, 0x84, 0x88, 0xf5, 0x67, 0xf7, + 0x5e, 0x2a, 0xfa, 0x66, 0x45, 0x57, 0x00, 0x2f, 0x8f, 0xde, 0x81, 0x8a, 0xef, 0xc4, 0xcc, 0xf9, + 0x40, 0xc4, 0xba, 0xeb, 0x87, 0x59, 0xaa, 0xe8, 0x3b, 0x71, 0xa2, 0xed, 0x05, 0x9c, 0x77, 0xca, + 0x92, 0xee, 0x98, 0x54, 0x39, 0x91, 0x67, 0x4a, 0xaa, 0x11, 0x54, 0x83, 0xd9, 0xc3, 0x1c, 0x87, + 0x5e, 0x82, 0xb1, 0x88, 0xb0, 0x59, 0xb1, 0x44, 0x75, 0x2d, 0x36, 0xcd, 0x06, 0x53, 0xa5, 0x0c, + 0x6b, 0x38, 0x6c, 0x50, 0xa6, 0xba, 0xf6, 0x50, 0x17, 0x5d, 0xfb, 0x09, 0x18, 0x66, 0x3f, 0xd4, + 0x0c, 0x50, 0xa3, 0xb1, 0xca, 0xc1, 0x58, 0xe2, 0xb3, 0x13, 0x66, 0xa4, 0xcf, 0x09, 0xf3, 0x24, + 0x4c, 0xd4, 0x1c, 0xb2, 0x13, 0x06, 0xcb, 0x81, 0xdb, 0x0a, 0xbd, 0x20, 0x41, 0x55, 0x18, 0x60, + 0xbb, 0x03, 0x5f, 0xdb, 0x03, 0x94, 0x03, 0x1e, 0xa0, 0x9a, 0xb3, 0xfd, 0x47, 0x25, 0x18, 0xaf, + 0x11, 0x9f, 0x24, 0x84, 0xdb, 0x1a, 0x31, 0x5a, 0x01, 0xb4, 0x19, 0x39, 0x4d, 0x52, 0x27, 0x91, + 0x17, 0xba, 0x0d, 0xd2, 0x0c, 0x03, 0x76, 0x52, 0x43, 0xb7, 0xbb, 0xb3, 0x07, 0xfb, 0xb3, 0xe8, + 0x72, 0x07, 0x16, 0xe7, 0x94, 0x40, 0x6f, 0xc1, 0x78, 0x2b, 0x22, 0x86, 0x0f, 0xcd, 0x2a, 0x52, + 0x17, 0xea, 0x3a, 0x21, 0xd7, 0x54, 0x0d, 0x10, 0x36, 0x59, 0xa1, 0xcf, 0xc0, 0x54, 0x18, 0xb5, + 0xb6, 0x9c, 0xa0, 0x46, 0x5a, 0x24, 0x70, 0xa9, 0x2a, 0x2e, 0x7c, 0x04, 0xa7, 0x0f, 0xf6, 0x67, + 0xa7, 0x6e, 0x66, 0x70, 0xb8, 0x83, 0x1a, 0xbd, 0x05, 0xd3, 0xad, 0x28, 0x6c, 0x39, 0x9b, 0x6c, + 0xa2, 0x08, 0x8d, 0x83, 0x4b, 0x9f, 0xa7, 0x0f, 0xf6, 0x67, 0xa7, 0xeb, 0x59, 0xe4, 0xe1, 0xfe, + 0xec, 0x29, 0xd6, 0x51, 0x14, 0x92, 0x22, 0x71, 0x27, 0x1b, 0x7b, 0x13, 0xce, 0xd4, 0xc2, 0x3b, + 0xc1, 0x1d, 0x27, 0x72, 0x17, 0xea, 0xab, 0x9a, 0x71, 0x7f, 0x43, 0x1a, 0x97, 0xfc, 0xdc, 0x2b, + 0x77, 0x9f, 0xd2, 0x4a, 0x72, 0xf5, 0x7f, 0xc5, 0xf3, 0x49, 0x81, 0x13, 0xe1, 0xaf, 0x97, 0x8c, + 0x9a, 0x52, 0x7a, 0xe5, 0xa9, 0xb7, 0x0a, 0x3d, 0xf5, 0xaf, 0xc3, 0xc8, 0x86, 0x47, 0x7c, 0x17, + 0x93, 0x0d, 0x31, 0x32, 0x8f, 0x17, 0x1f, 0x60, 0xac, 0x50, 0x4a, 0xe9, 0x34, 0xe2, 0xa6, 0xe9, + 0x8a, 0x28, 0x8c, 0x15, 0x1b, 0xb4, 0x0d, 0x53, 0xd2, 0xf6, 0x91, 0x58, 0xb1, 0x88, 0x9f, 0xe8, + 0x66, 0x50, 0x99, 0xcc, 0xd9, 0x00, 0xe2, 0x0c, 0x1b, 0xdc, 0xc1, 0x98, 0xda, 0xa2, 0x3b, 0x74, + 0xbb, 0x1a, 0x60, 0x53, 0x9a, 0xd9, 0xa2, 0xcc, 0xac, 0x66, 0x50, 0xfb, 0xab, 0x16, 0x3c, 0xd0, + 0xd1, 0x33, 0xc2, 0xbd, 0x70, 0xcc, 0xa3, 0x90, 0x35, 0xf7, 0x4b, 0xbd, 0xcd, 0x7d, 0xfb, 0xd7, + 0x2d, 0x38, 0xbd, 0xbc, 0xd3, 0x4a, 0xf6, 0x6a, 0x9e, 0x79, 0x9a, 0xf0, 0x22, 0x0c, 0xed, 0x10, + 0xd7, 0x6b, 0xef, 0x88, 0x91, 0x9b, 0x95, 0x22, 0xfd, 0x3a, 0x83, 0x1e, 0xee, 0xcf, 0x8e, 0x37, + 0x92, 0x30, 0x72, 0x36, 0x09, 0x07, 0x60, 0x41, 0x8e, 0x7e, 0x9a, 0xeb, 0xa6, 0xd7, 0xbc, 0x1d, + 0x4f, 0x1e, 0x48, 0x75, 0x75, 0x79, 0xcd, 0xc9, 0x0e, 0x9d, 0x7b, 0xbd, 0xed, 0x04, 0x89, 0x97, + 0xec, 0x99, 0xba, 0x2c, 0x63, 0x84, 0x53, 0x9e, 0xf6, 0x77, 0x2c, 0x98, 0x94, 0xf2, 0x64, 0xc1, + 0x75, 0x23, 0x12, 0xc7, 0x68, 0x06, 0x4a, 0x5e, 0x4b, 0xb4, 0x14, 0x44, 0xe9, 0xd2, 0x6a, 0x1d, + 0x97, 0xbc, 0x16, 0xaa, 0x43, 0x85, 0x9f, 0x6d, 0xa5, 0x13, 0xac, 0xaf, 0x13, 0x32, 0x66, 0xfb, + 0xad, 0xc9, 0x92, 0x38, 0x65, 0x22, 0x35, 0x63, 0xb6, 0x17, 0x95, 0xcd, 0x93, 0x96, 0x2b, 0x02, + 0x8e, 0x15, 0x05, 0xba, 0x08, 0x23, 0x41, 0xe8, 0xf2, 0xa3, 0x46, 0xbe, 0xae, 0xd9, 0xb4, 0xbd, + 0x21, 0x60, 0x58, 0x61, 0xed, 0x9f, 0xb3, 0x60, 0x4c, 0x7e, 0x59, 0x9f, 0x4a, 0x3a, 0x5d, 0x5e, + 0xa9, 0x82, 0x9e, 0x2e, 0x2f, 0xaa, 0x64, 0x33, 0x8c, 0xa1, 0x5b, 0x97, 0x8f, 0xa2, 0x5b, 0xdb, + 0x5f, 0x29, 0xc1, 0x84, 0x6c, 0x4e, 0xa3, 0xbd, 0x1e, 0x93, 0x04, 0xad, 0x41, 0xc5, 0xe1, 0x5d, + 0x4e, 0xe4, 0xac, 0x7d, 0x34, 0xdf, 0xea, 0x32, 0xc6, 0x27, 0x1d, 0xd1, 0x05, 0x59, 0x1a, 0xa7, + 0x8c, 0x90, 0x0f, 0xd3, 0x41, 0x98, 0xb0, 0xad, 0x4f, 0xe1, 0xbb, 0x9d, 0x0d, 0x64, 0xb9, 0x9f, + 0x13, 0xdc, 0xa7, 0x6f, 0x64, 0xb9, 0xe0, 0x4e, 0xc6, 0x68, 0x59, 0x7a, 0x7a, 0xca, 0xac, 0x86, + 0x0b, 0xdd, 0x6a, 0x28, 0x76, 0xf4, 0xd8, 0xbf, 0x67, 0x41, 0x45, 0x92, 0x9d, 0xc4, 0x31, 0xd0, + 0x75, 0x18, 0x8e, 0xd9, 0x20, 0xc8, 0xae, 0xb1, 0xbb, 0x35, 0x9c, 0x8f, 0x57, 0xba, 0xa3, 0xf3, + 0xff, 0x31, 0x96, 0x3c, 0x98, 0xab, 0x5a, 0x35, 0xff, 0x23, 0xe2, 0xaa, 0x56, 0xed, 0x29, 0xd8, + 0x65, 0xfe, 0x13, 0x6b, 0xb3, 0x66, 0xcf, 0x53, 0xc5, 0xb3, 0x15, 0x91, 0x0d, 0xef, 0x6e, 0x56, + 0xf1, 0xac, 0x33, 0x28, 0x16, 0x58, 0xf4, 0x36, 0x8c, 0x35, 0xa5, 0x87, 0x37, 0x15, 0x03, 0x8f, + 0x75, 0xf5, 0x97, 0xab, 0xa3, 0x15, 0x1e, 0x90, 0xb3, 0xa4, 0x95, 0xc7, 0x06, 0x37, 0x2a, 0x61, + 0xd2, 0x53, 0xe1, 0x72, 0x57, 0xe7, 0x4a, 0x44, 0x92, 0x94, 0x6f, 0xe1, 0x81, 0xb0, 0xfd, 0xcb, + 0x16, 0x0c, 0x71, 0x3f, 0x61, 0x7f, 0x8e, 0x55, 0xed, 0xa8, 0x28, 0xed, 0xbb, 0xdb, 0x14, 0x28, + 0x4e, 0x8e, 0xd0, 0x75, 0xa8, 0xb0, 0x1f, 0xcc, 0x5f, 0x52, 0x2e, 0x8e, 0x44, 0xe2, 0xb5, 0xea, + 0x0d, 0xbc, 0x2d, 0x8b, 0xe1, 0x94, 0x83, 0xfd, 0x0b, 0x65, 0x2a, 0xaa, 0x52, 0x52, 0x63, 0x17, + 0xb7, 0xee, 0xdf, 0x2e, 0x5e, 0xba, 0x5f, 0xbb, 0xf8, 0x26, 0x4c, 0x36, 0xb5, 0x73, 0xa9, 0x74, + 0x24, 0x2f, 0x76, 0x9d, 0x24, 0xda, 0x11, 0x16, 0xf7, 0x95, 0x2d, 0x99, 0x4c, 0x70, 0x96, 0x2b, + 0xfa, 0x2c, 0x8c, 0xf1, 0x71, 0x16, 0xb5, 0x0c, 0xb0, 0x5a, 0x3e, 0x51, 0x3c, 0x5f, 0xf4, 0x2a, + 0xd8, 0x4c, 0x6c, 0x68, 0xc5, 0xb1, 0xc1, 0xcc, 0xfe, 0xd2, 0x20, 0x0c, 0x2e, 0xef, 0x92, 0x20, + 0x39, 0x01, 0x81, 0xd4, 0x84, 0x09, 0x2f, 0xd8, 0x0d, 0xfd, 0x5d, 0xe2, 0x72, 0xfc, 0x51, 0x36, + 0xd7, 0xb3, 0x82, 0xf5, 0xc4, 0xaa, 0xc1, 0x02, 0x67, 0x58, 0xde, 0x0f, 0xcb, 0xfd, 0x32, 0x0c, + 0xf1, 0xb1, 0x17, 0x66, 0x7b, 0xae, 0x17, 0x9c, 0x75, 0xa2, 0x58, 0x05, 0xa9, 0x57, 0x81, 0xbb, + 0xdd, 0x45, 0x71, 0xf4, 0x2e, 0x4c, 0x6c, 0x78, 0x51, 0x9c, 0x50, 0x93, 0x3b, 0x4e, 0x9c, 0x9d, + 0xd6, 0x3d, 0x58, 0xea, 0xaa, 0x1f, 0x56, 0x0c, 0x4e, 0x38, 0xc3, 0x19, 0x6d, 0xc2, 0x38, 0x35, + 0x1e, 0xd3, 0xaa, 0x86, 0x8f, 0x5c, 0x95, 0x72, 0xc5, 0x5d, 0xd3, 0x19, 0x61, 0x93, 0x2f, 0x15, + 0x26, 0x4d, 0x66, 0x6c, 0x8e, 0x30, 0x8d, 0x42, 0x09, 0x13, 0x6e, 0x65, 0x72, 0x1c, 0x95, 0x49, + 0x2c, 0x9e, 0xa3, 0x62, 0xca, 0xa4, 0x34, 0x6a, 0xc3, 0xfe, 0x1a, 0xdd, 0x1d, 0x69, 0x1f, 0x9e, + 0xc0, 0xd6, 0xf2, 0xaa, 0xb9, 0xb5, 0x9c, 0x2b, 0x1c, 0xcf, 0x82, 0x6d, 0xe5, 0x73, 0x30, 0xaa, + 0x0d, 0x37, 0x9a, 0x87, 0x4a, 0x53, 0x06, 0x1f, 0x08, 0xa9, 0xab, 0xd4, 0x17, 0x15, 0x95, 0x80, + 0x53, 0x1a, 0xda, 0x1b, 0x54, 0xd9, 0xcb, 0x06, 0x23, 0x51, 0x55, 0x10, 0x33, 0x8c, 0xfd, 0x1c, + 0xc0, 0xf2, 0x5d, 0xd2, 0x5c, 0xe0, 0xc6, 0x97, 0x76, 0xc6, 0x65, 0x15, 0x9f, 0x71, 0xd9, 0x7f, + 0x6c, 0xc1, 0xc4, 0xca, 0x92, 0xa1, 0x94, 0xcf, 0x01, 0x70, 0x2d, 0xf4, 0x8d, 0x37, 0x6e, 0x48, + 0xef, 0x30, 0x77, 0xf0, 0x29, 0x28, 0xd6, 0x28, 0xd0, 0x39, 0x28, 0xfb, 0xed, 0x40, 0x28, 0x87, + 0xc3, 0x07, 0xfb, 0xb3, 0xe5, 0x6b, 0xed, 0x00, 0x53, 0x98, 0x16, 0xff, 0x53, 0xee, 0x3b, 0xfe, + 0xa7, 0x67, 0xfc, 0x2b, 0x9a, 0x85, 0xc1, 0x3b, 0x77, 0x3c, 0x37, 0xae, 0x0e, 0xa6, 0x9e, 0xeb, + 0x37, 0xde, 0x58, 0xad, 0xc5, 0x98, 0xc3, 0xed, 0xff, 0xbf, 0x0c, 0x53, 0x2b, 0x3e, 0xb9, 0x6b, + 0x7c, 0xd6, 0x63, 0x30, 0xe4, 0x46, 0xde, 0x2e, 0x89, 0xb2, 0xbb, 0x78, 0x8d, 0x41, 0xb1, 0xc0, + 0xf6, 0x1d, 0xb3, 0x74, 0xab, 0x73, 0x3f, 0x3e, 0xee, 0x28, 0xad, 0xde, 0x5d, 0xf1, 0x36, 0x0c, + 0xf3, 0xa3, 0x52, 0xde, 0x19, 0xa3, 0x97, 0x9e, 0xcd, 0x6b, 0x42, 0xb6, 0x2f, 0xe6, 0x84, 0xf3, + 0x83, 0xc7, 0x8d, 0x28, 0x21, 0x26, 0xa0, 0x58, 0xb2, 0x9c, 0xf9, 0x14, 0x8c, 0xe9, 0x94, 0x47, + 0x0a, 0x20, 0xf9, 0x0b, 0x16, 0x9c, 0x5a, 0xf1, 0xc3, 0xe6, 0x76, 0x26, 0x80, 0xec, 0x05, 0x18, + 0xa5, 0xeb, 0x29, 0x36, 0x22, 0x29, 0x8d, 0x28, 0x53, 0x81, 0xc2, 0x3a, 0x9d, 0x56, 0xec, 0xd6, + 0xad, 0xd5, 0x5a, 0x5e, 0x70, 0xaa, 0x40, 0x61, 0x9d, 0xce, 0xfe, 0x03, 0x0b, 0x1e, 0xbe, 0xbc, + 0xb4, 0x5c, 0x27, 0x51, 0xec, 0xc5, 0x09, 0x09, 0x92, 0x8e, 0xf8, 0x58, 0xaa, 0xdc, 0xb9, 0x5a, + 0x53, 0x52, 0xe5, 0xae, 0xc6, 0x5a, 0x21, 0xb0, 0x1f, 0x95, 0xd8, 0xef, 0x5f, 0xb5, 0xe0, 0xd4, + 0x65, 0x2f, 0xc1, 0xa4, 0x15, 0x66, 0xe3, 0x53, 0x23, 0xd2, 0x0a, 0x63, 0x2f, 0x09, 0xa3, 0xbd, + 0x6c, 0x7c, 0x2a, 0x56, 0x18, 0xac, 0x51, 0xf1, 0x9a, 0x77, 0xbd, 0x98, 0xb6, 0xb4, 0x64, 0x5a, + 0x98, 0x58, 0xc0, 0xb1, 0xa2, 0xa0, 0x1f, 0xe6, 0x7a, 0x11, 0xd3, 0x10, 0xf6, 0xc4, 0x72, 0x56, + 0x1f, 0x56, 0x93, 0x08, 0x9c, 0xd2, 0xd8, 0x5f, 0xb5, 0xe0, 0xcc, 0x65, 0xbf, 0x1d, 0x27, 0x24, + 0xda, 0x88, 0x8d, 0xc6, 0x3e, 0x07, 0x15, 0x22, 0xb5, 0x70, 0xd1, 0x56, 0xb5, 0x6f, 0x28, 0xf5, + 0x9c, 0x07, 0xc7, 0x2a, 0xba, 0x3e, 0xa2, 0x31, 0x8f, 0x16, 0x45, 0xf8, 0xf5, 0x12, 0x8c, 0x5f, + 0x59, 0x5b, 0xab, 0x5f, 0x26, 0x89, 0x10, 0x99, 0xbd, 0xbd, 0x48, 0x58, 0x33, 0x84, 0xbb, 0xe9, + 0x3a, 0xed, 0xc4, 0xf3, 0xe7, 0xf8, 0xbd, 0x84, 0xb9, 0xd5, 0x20, 0xb9, 0x19, 0x35, 0x92, 0xc8, + 0x0b, 0x36, 0x73, 0x4d, 0x67, 0x29, 0xd8, 0xcb, 0x45, 0x82, 0x1d, 0x3d, 0x07, 0x43, 0xec, 0x62, + 0x84, 0xd4, 0x3a, 0x1e, 0x54, 0xaa, 0x02, 0x83, 0x1e, 0xee, 0xcf, 0x56, 0x6e, 0xe1, 0x55, 0xfe, + 0x07, 0x0b, 0x52, 0x74, 0x0b, 0x46, 0xb7, 0x92, 0xa4, 0x75, 0x85, 0x38, 0x2e, 0x89, 0xa4, 0x74, + 0x38, 0x9f, 0x27, 0x1d, 0x68, 0x27, 0x70, 0xb2, 0x74, 0x41, 0xa5, 0xb0, 0x18, 0xeb, 0x7c, 0xec, + 0x06, 0x40, 0x8a, 0x3b, 0x26, 0xb3, 0xc1, 0xfe, 0xbe, 0x05, 0xc3, 0x57, 0x9c, 0xc0, 0xf5, 0x49, + 0x84, 0x5e, 0x81, 0x01, 0x72, 0x97, 0x34, 0xc5, 0x0e, 0x9e, 0xdb, 0xe0, 0x74, 0x97, 0xe3, 0x8e, + 0x30, 0xfa, 0x1f, 0xb3, 0x52, 0xe8, 0x0a, 0x0c, 0xd3, 0xd6, 0x5e, 0x56, 0x61, 0xca, 0x8f, 0x14, + 0x7d, 0xb1, 0x1a, 0x76, 0xbe, 0x31, 0x0a, 0x10, 0x96, 0xc5, 0x99, 0x43, 0xa7, 0xd9, 0x6a, 0x50, + 0x01, 0x96, 0x74, 0x33, 0xb7, 0xd6, 0x96, 0xea, 0x9c, 0x48, 0x70, 0xe3, 0x0e, 0x1d, 0x09, 0xc4, + 0x29, 0x13, 0x7b, 0x0d, 0x2a, 0x74, 0x50, 0x17, 0x7c, 0xcf, 0xe9, 0xee, 0x4b, 0x7a, 0x0a, 0x2a, + 0xd2, 0xaf, 0x13, 0x8b, 0x48, 0x67, 0xc6, 0x55, 0xba, 0x7d, 0x62, 0x9c, 0xe2, 0xed, 0x0d, 0x38, + 0xcd, 0x0e, 0x4a, 0x9d, 0x64, 0xcb, 0x58, 0x63, 0xbd, 0x27, 0xf3, 0xd3, 0x42, 0xbf, 0xe2, 0x23, + 0x53, 0xd5, 0x62, 0x65, 0xc7, 0x24, 0x47, 0x4d, 0xd7, 0xfa, 0x0f, 0x03, 0x30, 0xbd, 0xda, 0x58, + 0x6a, 0x98, 0xce, 0xc5, 0x97, 0x60, 0x8c, 0x6b, 0x02, 0x74, 0x42, 0x3b, 0xbe, 0xa8, 0x4d, 0x1d, + 0x1e, 0xac, 0x69, 0x38, 0x6c, 0x50, 0xa2, 0x87, 0xa1, 0xec, 0xbd, 0x17, 0x64, 0xc3, 0xe1, 0x56, + 0x5f, 0xbf, 0x81, 0x29, 0x9c, 0xa2, 0xa9, 0x52, 0xc1, 0x05, 0xa8, 0x42, 0x2b, 0xc5, 0xe2, 0x55, + 0x98, 0xf0, 0xe2, 0x66, 0xec, 0xad, 0x06, 0x54, 0xba, 0x38, 0x4d, 0xb9, 0x34, 0x52, 0x8d, 0x9f, + 0x36, 0x55, 0x61, 0x71, 0x86, 0x5a, 0x93, 0xe6, 0x83, 0x7d, 0x2b, 0x26, 0x3d, 0x63, 0xa6, 0xa9, + 0xce, 0xd5, 0x62, 0x5f, 0x17, 0xb3, 0xd0, 0x1c, 0xa1, 0x73, 0xf1, 0x0f, 0x8e, 0xb1, 0xc4, 0xa1, + 0xcb, 0x30, 0xdd, 0xdc, 0x72, 0x5a, 0x0b, 0xed, 0x64, 0xab, 0xe6, 0xc5, 0xcd, 0x70, 0x97, 0x44, + 0x7b, 0x4c, 0x13, 0x1e, 0x49, 0x9d, 0x4c, 0x0a, 0xb1, 0x74, 0x65, 0xa1, 0x4e, 0x29, 0x71, 0x67, + 0x19, 0x53, 0x05, 0x81, 0x63, 0x53, 0x41, 0x16, 0x60, 0x52, 0xd6, 0xd5, 0x20, 0x31, 0xdb, 0x1e, + 0x46, 0x59, 0xeb, 0xd4, 0x7d, 0x14, 0x01, 0x56, 0x6d, 0xcb, 0xd2, 0xa3, 0x17, 0x61, 0xdc, 0x0b, + 0xbc, 0xc4, 0x73, 0x92, 0x30, 0x62, 0x9b, 0xeb, 0x18, 0xdf, 0x30, 0xa8, 0x84, 0x5f, 0xd5, 0x11, + 0xd8, 0xa4, 0xb3, 0xdf, 0x85, 0x8a, 0x8a, 0x37, 0x93, 0x21, 0x93, 0x56, 0x41, 0xc8, 0x64, 0xef, + 0x1d, 0x41, 0x7a, 0xcd, 0xcb, 0xb9, 0x5e, 0xf3, 0xbf, 0x61, 0x41, 0x1a, 0x76, 0x83, 0xae, 0x40, + 0xa5, 0x15, 0xb2, 0x93, 0xb3, 0x48, 0x1e, 0x47, 0x3f, 0x98, 0x2b, 0x3c, 0xb8, 0xa0, 0xe2, 0xfd, + 0x57, 0x97, 0x25, 0x70, 0x5a, 0x18, 0x2d, 0xc2, 0x70, 0x2b, 0x22, 0x8d, 0x84, 0xdd, 0x53, 0xe8, + 0xc9, 0x87, 0xcf, 0x11, 0x4e, 0x8f, 0x65, 0x41, 0xfb, 0x37, 0x2d, 0x00, 0xee, 0x94, 0x76, 0x82, + 0x4d, 0x72, 0x02, 0x86, 0x76, 0x0d, 0x06, 0xe2, 0x16, 0x69, 0x76, 0x3b, 0xd3, 0x4c, 0xdb, 0xd3, + 0x68, 0x91, 0x66, 0xda, 0xe1, 0xf4, 0x1f, 0x66, 0xa5, 0xed, 0x9f, 0x05, 0x98, 0x48, 0xc9, 0xa8, + 0x01, 0x84, 0x9e, 0x31, 0xc2, 0xf2, 0xcf, 0x65, 0xc2, 0xf2, 0x2b, 0x8c, 0x5a, 0x8b, 0xc4, 0x7f, + 0x17, 0xca, 0x3b, 0xce, 0x5d, 0x61, 0x65, 0x3d, 0xd5, 0xbd, 0x19, 0x94, 0xff, 0xdc, 0x75, 0xe7, + 0x2e, 0xd7, 0x63, 0x9f, 0x92, 0x13, 0xe4, 0xba, 0x73, 0xf7, 0x90, 0x9f, 0x5c, 0x32, 0x21, 0x45, + 0x8d, 0xb9, 0x2f, 0xfc, 0x49, 0xfa, 0x9f, 0x4d, 0x3b, 0x5a, 0x09, 0xab, 0xcb, 0x0b, 0x84, 0x8b, + 0xb6, 0xaf, 0xba, 0xbc, 0x20, 0x5b, 0x97, 0x17, 0xf4, 0x51, 0x97, 0x17, 0xa0, 0xf7, 0x61, 0x58, + 0x1c, 0x89, 0xb0, 0x78, 0xc2, 0xd1, 0x4b, 0xf3, 0x7d, 0xd4, 0x27, 0x4e, 0x54, 0x78, 0x9d, 0xf3, + 0x52, 0x4f, 0x17, 0xd0, 0x9e, 0xf5, 0xca, 0x0a, 0xd1, 0x5f, 0xb3, 0x60, 0x42, 0xfc, 0xc6, 0xe4, + 0xbd, 0x36, 0x89, 0x13, 0xa1, 0x0f, 0x7c, 0xb2, 0xff, 0x36, 0x88, 0x82, 0xbc, 0x29, 0x9f, 0x94, + 0x62, 0xd6, 0x44, 0xf6, 0x6c, 0x51, 0xa6, 0x15, 0xe8, 0x1f, 0x5a, 0x70, 0x7a, 0xc7, 0xb9, 0xcb, + 0x6b, 0xe4, 0x30, 0xec, 0x24, 0x5e, 0x28, 0xe2, 0x23, 0x5f, 0xe9, 0x6f, 0xf8, 0x3b, 0x8a, 0xf3, + 0x46, 0xca, 0x50, 0xaa, 0xd3, 0x79, 0x24, 0x3d, 0x9b, 0x9a, 0xdb, 0xae, 0x99, 0x0d, 0x18, 0x91, + 0xf3, 0x2d, 0xc7, 0x1a, 0xaa, 0xe9, 0xca, 0xce, 0x91, 0x4f, 0xa4, 0x34, 0xeb, 0x89, 0xd5, 0x23, + 0xe6, 0xda, 0x7d, 0xad, 0xe7, 0x5d, 0x18, 0xd3, 0xe7, 0xd8, 0x7d, 0xad, 0xeb, 0x3d, 0x38, 0x95, + 0x33, 0x97, 0xee, 0x6b, 0x95, 0x77, 0xe0, 0x5c, 0xe1, 0xfc, 0xb8, 0x9f, 0x15, 0xdb, 0x5f, 0xb7, + 0x74, 0x39, 0x78, 0x02, 0xee, 0xa9, 0x25, 0xd3, 0x3d, 0x75, 0xbe, 0xfb, 0xca, 0x29, 0xf0, 0x51, + 0xbd, 0xad, 0x37, 0x9a, 0x4a, 0x75, 0xf4, 0x1a, 0x0c, 0xf9, 0x14, 0x22, 0xcf, 0xe1, 0xec, 0xde, + 0x2b, 0x32, 0xd5, 0xa5, 0x18, 0x3c, 0xc6, 0x82, 0x83, 0xfd, 0x3b, 0x16, 0x0c, 0x9c, 0x40, 0x4f, + 0x60, 0xb3, 0x27, 0x9e, 0x29, 0x64, 0x2d, 0x2e, 0x9d, 0xcf, 0x61, 0xe7, 0xce, 0xf2, 0xdd, 0x84, + 0x04, 0x31, 0x53, 0xdf, 0x73, 0x3b, 0xe6, 0x7f, 0x97, 0x60, 0x94, 0x56, 0x25, 0x83, 0x46, 0x5e, + 0x86, 0x71, 0xdf, 0x59, 0x27, 0xbe, 0x74, 0x99, 0x67, 0x8d, 0xd8, 0x6b, 0x3a, 0x12, 0x9b, 0xb4, + 0xb4, 0xf0, 0x86, 0x7e, 0x7a, 0x20, 0xf4, 0x17, 0x55, 0xd8, 0x38, 0x5a, 0xc0, 0x26, 0x2d, 0xb5, + 0xa7, 0xee, 0x38, 0x49, 0x73, 0x4b, 0x18, 0xb8, 0xaa, 0xb9, 0x6f, 0x50, 0x20, 0xe6, 0x38, 0xaa, + 0xc0, 0xc9, 0xd9, 0x79, 0x9b, 0x44, 0x4c, 0x81, 0xe3, 0xea, 0xb1, 0x52, 0xe0, 0xb0, 0x89, 0xc6, + 0x59, 0x7a, 0xf4, 0x29, 0x98, 0xa0, 0x9d, 0x13, 0xb6, 0x13, 0x19, 0x12, 0x33, 0xc8, 0x42, 0x62, + 0x58, 0x04, 0xf4, 0x9a, 0x81, 0xc1, 0x19, 0x4a, 0x54, 0x87, 0xd3, 0x5e, 0xd0, 0xf4, 0xdb, 0x2e, + 0xb9, 0x15, 0x70, 0xed, 0xce, 0xf7, 0xde, 0x27, 0xae, 0x50, 0xa0, 0x55, 0xf4, 0xd2, 0x6a, 0x0e, + 0x0d, 0xce, 0x2d, 0x69, 0xff, 0x34, 0x9c, 0xba, 0x16, 0x3a, 0xee, 0xa2, 0xe3, 0x3b, 0x41, 0x93, + 0x44, 0xab, 0xc1, 0x66, 0xcf, 0x03, 0x79, 0xfd, 0xf8, 0xbc, 0xd4, 0xeb, 0xf8, 0xdc, 0xde, 0x02, + 0xa4, 0x57, 0x20, 0x42, 0xc1, 0x30, 0x0c, 0x7b, 0xbc, 0x2a, 0x31, 0xfd, 0x1f, 0xcf, 0xd7, 0xae, + 0x3b, 0x5a, 0xa6, 0x05, 0x39, 0x71, 0x00, 0x96, 0x8c, 0xec, 0x97, 0x20, 0xf7, 0x7e, 0x46, 0x6f, + 0x53, 0xda, 0x7e, 0x01, 0xa6, 0x59, 0xc9, 0xa3, 0x99, 0x79, 0xf6, 0x5f, 0xb6, 0x60, 0xf2, 0x46, + 0xe6, 0x0e, 0xec, 0x63, 0x30, 0x14, 0x93, 0x28, 0xc7, 0x17, 0xda, 0x60, 0x50, 0x2c, 0xb0, 0xc7, + 0xee, 0x73, 0xf9, 0x81, 0x05, 0x15, 0x16, 0x63, 0xdc, 0xa2, 0x46, 0xd8, 0xfd, 0x57, 0x6a, 0x97, + 0x0c, 0xa5, 0x36, 0xd7, 0x17, 0xa0, 0x9a, 0x53, 0xa4, 0xd3, 0xa2, 0xab, 0xea, 0x6e, 0x68, 0x17, + 0x37, 0x40, 0xca, 0x86, 0xdf, 0x24, 0x9c, 0x30, 0x2f, 0x90, 0xca, 0xdb, 0xa2, 0xec, 0x44, 0x5c, + 0xd1, 0x7e, 0x44, 0x4e, 0xc4, 0x55, 0x7b, 0x0a, 0xa4, 0x5f, 0x5d, 0x6b, 0x32, 0xdb, 0x15, 0x7e, + 0x82, 0x45, 0x8e, 0xb2, 0xb5, 0xa9, 0x2e, 0x51, 0xcf, 0x8a, 0x48, 0x50, 0x01, 0x3d, 0x64, 0x82, + 0x4c, 0xfc, 0xe3, 0x37, 0xe3, 0xd3, 0x22, 0xf6, 0x15, 0x98, 0xcc, 0x74, 0x18, 0x7a, 0x01, 0x06, + 0x5b, 0x5b, 0x4e, 0x4c, 0x32, 0x91, 0x40, 0x83, 0x75, 0x0a, 0x3c, 0xdc, 0x9f, 0x9d, 0x50, 0x05, + 0x18, 0x04, 0x73, 0x6a, 0xfb, 0xbf, 0x59, 0x30, 0x70, 0x23, 0x74, 0x4f, 0x62, 0x32, 0xbd, 0x6a, + 0x4c, 0xa6, 0x87, 0x8a, 0x32, 0x6c, 0x14, 0xce, 0xa3, 0x95, 0xcc, 0x3c, 0x3a, 0x5f, 0xc8, 0xa1, + 0xfb, 0x14, 0xda, 0x81, 0x51, 0x96, 0xb7, 0x43, 0x44, 0x25, 0x3d, 0x67, 0xd8, 0x57, 0xb3, 0x19, + 0xfb, 0x6a, 0x52, 0x23, 0xd5, 0xac, 0xac, 0x27, 0x60, 0x58, 0x44, 0xc6, 0x64, 0x63, 0x64, 0x05, + 0x2d, 0x96, 0x78, 0xfb, 0x97, 0xcb, 0x60, 0xe4, 0x09, 0x41, 0xbf, 0x67, 0xc1, 0x5c, 0xc4, 0x6f, + 0x05, 0xb9, 0xb5, 0x76, 0xe4, 0x05, 0x9b, 0x8d, 0xe6, 0x16, 0x71, 0xdb, 0xbe, 0x17, 0x6c, 0xae, + 0x6e, 0x06, 0xa1, 0x02, 0x2f, 0xdf, 0x25, 0xcd, 0x36, 0xf3, 0x83, 0xf7, 0x48, 0x4a, 0xa2, 0x4e, + 0x9e, 0x2f, 0x1d, 0xec, 0xcf, 0xce, 0xe1, 0x23, 0xf1, 0xc6, 0x47, 0x6c, 0x0b, 0xfa, 0x03, 0x0b, + 0xe6, 0x79, 0xfa, 0x8c, 0xfe, 0xdb, 0xdf, 0xc5, 0x1a, 0xad, 0x4b, 0x56, 0x29, 0x93, 0x35, 0x12, + 0xed, 0x2c, 0xbe, 0x28, 0x3a, 0x74, 0xbe, 0x7e, 0xb4, 0xba, 0xf0, 0x51, 0x1b, 0x67, 0xff, 0xf3, + 0x32, 0x8c, 0xd3, 0x5e, 0x4c, 0x6f, 0xc2, 0xbf, 0x60, 0x4c, 0x89, 0x47, 0x32, 0x53, 0x62, 0xda, + 0x20, 0x3e, 0x9e, 0x4b, 0xf0, 0x31, 0x4c, 0xfb, 0x4e, 0x9c, 0x5c, 0x21, 0x4e, 0x94, 0xac, 0x13, + 0x87, 0x1d, 0xf5, 0x8a, 0x69, 0x7e, 0x94, 0xd3, 0x63, 0xe5, 0xfe, 0xba, 0x96, 0x65, 0x86, 0x3b, + 0xf9, 0xa3, 0x5d, 0x40, 0xec, 0x58, 0x39, 0x72, 0x82, 0x98, 0x7f, 0x8b, 0x27, 0x7c, 0xe4, 0x47, + 0xab, 0x75, 0x46, 0xd4, 0x8a, 0xae, 0x75, 0x70, 0xc3, 0x39, 0x35, 0x68, 0xe1, 0x02, 0x83, 0xfd, + 0x86, 0x0b, 0x0c, 0xf5, 0x08, 0x44, 0xdf, 0x81, 0x29, 0x31, 0x2a, 0x1b, 0xde, 0xa6, 0xd8, 0xa4, + 0xdf, 0xcc, 0x84, 0x13, 0x59, 0xfd, 0x07, 0x3e, 0xf4, 0x88, 0x25, 0xb2, 0x7f, 0x06, 0x4e, 0xd1, + 0xea, 0xcc, 0xb0, 0xe9, 0x18, 0x11, 0x98, 0xdc, 0x6e, 0xaf, 0x13, 0x9f, 0x24, 0x12, 0x26, 0x2a, + 0xcd, 0x55, 0xfb, 0xcd, 0xd2, 0xa9, 0x6e, 0x79, 0xd5, 0x64, 0x81, 0xb3, 0x3c, 0xed, 0x5f, 0xb1, + 0x80, 0x05, 0x26, 0x9e, 0xc0, 0xf6, 0xf7, 0x69, 0x73, 0xfb, 0xab, 0x16, 0x49, 0xa0, 0x82, 0x9d, + 0xef, 0x79, 0x3e, 0x2c, 0xf5, 0x28, 0xbc, 0xbb, 0x27, 0x75, 0xff, 0xde, 0x1a, 0xd7, 0xff, 0xb2, + 0xf8, 0x82, 0x54, 0x97, 0x24, 0xd1, 0xe7, 0x61, 0xa4, 0xe9, 0xb4, 0x9c, 0x26, 0x4f, 0xd0, 0x54, + 0xe8, 0xfd, 0x31, 0x0a, 0xcd, 0x2d, 0x89, 0x12, 0xdc, 0x9b, 0xf1, 0x63, 0xf2, 0x2b, 0x25, 0xb8, + 0xa7, 0x07, 0x43, 0x55, 0x39, 0xb3, 0x0d, 0xe3, 0x06, 0xb3, 0xfb, 0x6a, 0xfa, 0x7e, 0x9e, 0x6f, + 0x17, 0xca, 0x62, 0xd9, 0x81, 0xe9, 0x40, 0xfb, 0x4f, 0x85, 0xa3, 0x54, 0xa7, 0x3f, 0xde, 0x6b, + 0x43, 0x60, 0x92, 0x54, 0x0b, 0xbc, 0xcc, 0xb0, 0xc1, 0x9d, 0x9c, 0xed, 0xbf, 0x65, 0xc1, 0x03, + 0x3a, 0xa1, 0x76, 0x7f, 0xb5, 0x97, 0x3f, 0xb9, 0x06, 0x23, 0x61, 0x8b, 0x44, 0x4e, 0x6a, 0x93, + 0x5d, 0x94, 0x9d, 0x7e, 0x53, 0xc0, 0x0f, 0xf7, 0x67, 0x4f, 0xeb, 0xdc, 0x25, 0x1c, 0xab, 0x92, + 0xc8, 0x86, 0x21, 0xd6, 0x19, 0xb1, 0xb8, 0x5b, 0xcc, 0x92, 0x18, 0xb1, 0xe3, 0xae, 0x18, 0x0b, + 0x8c, 0xfd, 0xb3, 0x16, 0x9f, 0x58, 0x7a, 0xd3, 0xd1, 0x7b, 0x30, 0xb5, 0x43, 0xcd, 0xb7, 0xe5, + 0xbb, 0xad, 0x88, 0xbb, 0xd1, 0x65, 0x3f, 0x3d, 0xd5, 0xab, 0x9f, 0xb4, 0x8f, 0x5c, 0xac, 0x8a, + 0x36, 0x4f, 0x5d, 0xcf, 0x30, 0xc3, 0x1d, 0xec, 0xed, 0x3f, 0x2b, 0xf1, 0x95, 0xc8, 0xb4, 0xba, + 0x27, 0x60, 0xb8, 0x15, 0xba, 0x4b, 0xab, 0x35, 0x2c, 0x7a, 0x48, 0x89, 0xab, 0x3a, 0x07, 0x63, + 0x89, 0x47, 0x97, 0x00, 0xc8, 0xdd, 0x84, 0x44, 0x81, 0xe3, 0xab, 0xc3, 0x78, 0xa5, 0x3c, 0x2d, + 0x2b, 0x0c, 0xd6, 0xa8, 0x68, 0x99, 0x56, 0x14, 0xee, 0x7a, 0x2e, 0xbb, 0xdc, 0x51, 0x36, 0xcb, + 0xd4, 0x15, 0x06, 0x6b, 0x54, 0xd4, 0x54, 0x6e, 0x07, 0x31, 0xdf, 0x00, 0x9d, 0x75, 0x91, 0x40, + 0x67, 0x24, 0x35, 0x95, 0x6f, 0xe9, 0x48, 0x6c, 0xd2, 0xa2, 0x05, 0x18, 0x4a, 0x1c, 0x76, 0xc4, + 0x3c, 0x58, 0x1c, 0xb2, 0xb3, 0x46, 0x29, 0xf4, 0x3c, 0x45, 0xb4, 0x00, 0x16, 0x05, 0xd1, 0x5b, + 0x52, 0x04, 0x73, 0x91, 0x2c, 0x42, 0xaf, 0x0a, 0xa7, 0xad, 0x2e, 0xbe, 0x75, 0x19, 0x2c, 0x42, + 0xba, 0x0c, 0x5e, 0xf6, 0x17, 0x2b, 0x00, 0xa9, 0xb6, 0x87, 0xde, 0xef, 0x10, 0x11, 0x4f, 0x77, + 0xd7, 0x0f, 0x8f, 0x4f, 0x3e, 0xa0, 0x2f, 0x59, 0x30, 0xea, 0xf8, 0x7e, 0xd8, 0x74, 0x12, 0xd6, + 0xcb, 0xa5, 0xee, 0x22, 0x4a, 0xd4, 0xbf, 0x90, 0x96, 0xe0, 0x4d, 0x78, 0x4e, 0x9e, 0x1e, 0x6b, + 0x98, 0x9e, 0xad, 0xd0, 0x2b, 0x46, 0x3f, 0x26, 0x8d, 0x00, 0x3e, 0x3d, 0x66, 0xb2, 0x46, 0x40, + 0x85, 0x49, 0x63, 0x4d, 0xff, 0x47, 0xb7, 0x8c, 0xbc, 0x35, 0x03, 0xc5, 0x57, 0x74, 0x0d, 0xa5, + 0xa7, 0x57, 0xca, 0x1a, 0x54, 0xd7, 0x43, 0xd0, 0x07, 0x8b, 0xef, 0xb1, 0x6b, 0xda, 0x75, 0x8f, + 0xf0, 0xf3, 0x77, 0x61, 0xd2, 0x35, 0xb7, 0x5b, 0x31, 0x9b, 0x1e, 0x2f, 0xe2, 0x9b, 0xd9, 0x9d, + 0xd3, 0x0d, 0x36, 0x83, 0xc0, 0x59, 0xc6, 0xa8, 0xce, 0x2f, 0x03, 0xac, 0x06, 0x1b, 0xa1, 0x08, + 0xe1, 0xb3, 0x0b, 0xc7, 0x72, 0x2f, 0x4e, 0xc8, 0x0e, 0xa5, 0x4c, 0xf7, 0xd1, 0x1b, 0xa2, 0x2c, + 0x56, 0x5c, 0xd0, 0x6b, 0x30, 0xc4, 0x6e, 0x69, 0xc5, 0xd5, 0x91, 0x62, 0x3f, 0xa0, 0x79, 0xc1, + 0x38, 0x5d, 0x54, 0xec, 0x6f, 0x8c, 0x05, 0x07, 0x74, 0x45, 0xa6, 0x09, 0x88, 0x57, 0x83, 0x5b, + 0x31, 0x61, 0x69, 0x02, 0x2a, 0x8b, 0x1f, 0x4f, 0x33, 0x00, 0x70, 0x78, 0x6e, 0x6e, 0x3e, 0xa3, + 0x24, 0xd5, 0x57, 0xc4, 0x7f, 0x99, 0xf2, 0xaf, 0x0a, 0xc5, 0xcd, 0x33, 0xd3, 0x02, 0xa6, 0xdd, + 0x79, 0xdb, 0x64, 0x81, 0xb3, 0x3c, 0x4f, 0x74, 0xfb, 0x9c, 0x09, 0x60, 0x2a, 0xbb, 0xb0, 0xee, + 0xeb, 0x76, 0xfd, 0xfd, 0x01, 0x98, 0x30, 0x27, 0x02, 0x9a, 0x87, 0x8a, 0x60, 0xa2, 0x92, 0x7c, + 0xa9, 0xb9, 0x7d, 0x5d, 0x22, 0x70, 0x4a, 0xc3, 0x92, 0x9c, 0xb1, 0xe2, 0x5a, 0x6c, 0x56, 0x9a, + 0xe4, 0x4c, 0x61, 0xb0, 0x46, 0x45, 0x95, 0xe8, 0xf5, 0x30, 0x4c, 0xd4, 0x56, 0xa0, 0x66, 0xcb, + 0x22, 0x83, 0x62, 0x81, 0xa5, 0x5b, 0xc0, 0x36, 0x89, 0x02, 0xe2, 0x9b, 0x9e, 0x4c, 0xb5, 0x05, + 0x5c, 0xd5, 0x91, 0xd8, 0xa4, 0xa5, 0x5b, 0x5a, 0x18, 0xb3, 0xe9, 0x27, 0x54, 0xf5, 0x34, 0xd6, + 0xad, 0xc1, 0x6f, 0x29, 0x4a, 0x3c, 0x7a, 0x13, 0x1e, 0x50, 0x97, 0x0a, 0x31, 0xf7, 0x0c, 0xcb, + 0x1a, 0x87, 0x0c, 0xcb, 0xfa, 0x81, 0xa5, 0x7c, 0x32, 0x5c, 0x54, 0x1e, 0xbd, 0x0a, 0x13, 0x42, + 0x05, 0x96, 0x1c, 0x87, 0xcd, 0x60, 0x85, 0xab, 0x06, 0x16, 0x67, 0xa8, 0x51, 0x0d, 0xa6, 0x28, + 0x84, 0x69, 0xa1, 0x92, 0x03, 0xbf, 0x1c, 0xa9, 0xf6, 0xfa, 0xab, 0x19, 0x3c, 0xee, 0x28, 0x81, + 0x16, 0x60, 0x92, 0xeb, 0x28, 0xd4, 0xa6, 0x64, 0xe3, 0x20, 0x22, 0x6b, 0xd5, 0x42, 0xb8, 0x69, + 0xa2, 0x71, 0x96, 0x1e, 0xbd, 0x04, 0x63, 0x4e, 0xd4, 0xdc, 0xf2, 0x12, 0xd2, 0x4c, 0xda, 0x11, + 0x4f, 0xc2, 0xa1, 0x45, 0x7b, 0x2c, 0x68, 0x38, 0x6c, 0x50, 0xda, 0xef, 0xc3, 0xa9, 0x9c, 0xa0, + 0x7c, 0x3a, 0x71, 0x9c, 0x96, 0x27, 0xbf, 0x29, 0x13, 0xb5, 0xb6, 0x50, 0x5f, 0x95, 0x5f, 0xa3, + 0x51, 0xd1, 0xd9, 0xc9, 0x5c, 0xe2, 0x5a, 0x5e, 0x4e, 0x35, 0x3b, 0x57, 0x24, 0x02, 0xa7, 0x34, + 0xf6, 0xb7, 0x01, 0x34, 0x87, 0x4e, 0x1f, 0x31, 0x4b, 0x2f, 0xc1, 0x98, 0x4c, 0x26, 0xab, 0xa5, + 0x6e, 0x54, 0x9f, 0x79, 0x59, 0xc3, 0x61, 0x83, 0x92, 0xb6, 0x2d, 0x90, 0x6e, 0xaa, 0x6c, 0x8c, + 0x9c, 0xf2, 0x5f, 0xe1, 0x94, 0x06, 0x3d, 0x0d, 0x23, 0x31, 0xf1, 0x37, 0xae, 0x79, 0xc1, 0xb6, + 0x98, 0xd8, 0x4a, 0x0a, 0x37, 0x04, 0x1c, 0x2b, 0x0a, 0xb4, 0x08, 0xe5, 0xb6, 0xe7, 0x8a, 0xa9, + 0x2c, 0x37, 0xfc, 0xf2, 0xad, 0xd5, 0xda, 0xe1, 0xfe, 0xec, 0x23, 0x45, 0x39, 0x72, 0xa9, 0x69, + 0x1f, 0xcf, 0xd1, 0xe5, 0x47, 0x0b, 0xe7, 0x9d, 0x0d, 0x0c, 0x1d, 0xf1, 0x6c, 0xe0, 0x12, 0x80, + 0xf8, 0x6a, 0x39, 0x97, 0xcb, 0xe9, 0xa8, 0x5d, 0x56, 0x18, 0xac, 0x51, 0xa1, 0x18, 0xa6, 0x9b, + 0x11, 0x71, 0xa4, 0x0d, 0xcd, 0xc3, 0xcb, 0x47, 0xee, 0xdd, 0x41, 0xb0, 0x94, 0x65, 0x86, 0x3b, + 0xf9, 0xa3, 0x10, 0xa6, 0x5d, 0x71, 0x87, 0x35, 0xad, 0xb4, 0x72, 0xf4, 0x98, 0x76, 0x16, 0x90, + 0x93, 0x65, 0x84, 0x3b, 0x79, 0xa3, 0x77, 0x60, 0x46, 0x02, 0x3b, 0xaf, 0x0d, 0xb3, 0xe5, 0x52, + 0x5e, 0x3c, 0x7f, 0xb0, 0x3f, 0x3b, 0x53, 0x2b, 0xa4, 0xc2, 0x5d, 0x38, 0x20, 0x0c, 0x43, 0xec, + 0x2c, 0x29, 0xae, 0x8e, 0xb2, 0x7d, 0xee, 0xc9, 0x62, 0x67, 0x00, 0x9d, 0xeb, 0x73, 0xec, 0x1c, + 0x4a, 0x84, 0xf9, 0xa6, 0xc7, 0x72, 0x0c, 0x88, 0x05, 0x27, 0xb4, 0x01, 0xa3, 0x4e, 0x10, 0x84, + 0x89, 0xc3, 0x55, 0xa8, 0xb1, 0x62, 0xdd, 0x4f, 0x63, 0xbc, 0x90, 0x96, 0xe0, 0xdc, 0x55, 0xe4, + 0xa0, 0x86, 0xc1, 0x3a, 0x63, 0x74, 0x07, 0x26, 0xc3, 0x3b, 0x54, 0x38, 0x4a, 0x2f, 0x45, 0x5c, + 0x1d, 0x67, 0x75, 0x3d, 0xdf, 0xa7, 0x9f, 0xd6, 0x28, 0xac, 0x49, 0x2d, 0x93, 0x29, 0xce, 0xd6, + 0x82, 0xe6, 0x0c, 0x6f, 0xf5, 0x44, 0x1a, 0xcf, 0x9e, 0x7a, 0xab, 0x75, 0xe7, 0x34, 0xbb, 0x86, + 0xce, 0xc3, 0x56, 0xd9, 0xea, 0x9f, 0xcc, 0x5c, 0x43, 0x4f, 0x51, 0x58, 0xa7, 0x43, 0x5b, 0x30, + 0x96, 0x1e, 0x59, 0x45, 0x31, 0xcb, 0x52, 0x33, 0x7a, 0xe9, 0x52, 0x7f, 0x1f, 0xb7, 0xaa, 0x95, + 0xe4, 0x96, 0x83, 0x0e, 0xc1, 0x06, 0xe7, 0x99, 0x1f, 0x87, 0x51, 0x6d, 0x60, 0x8f, 0x12, 0x95, + 0x3d, 0xf3, 0x2a, 0x4c, 0x65, 0x87, 0xee, 0x48, 0x51, 0xdd, 0xff, 0xa3, 0x04, 0x93, 0x39, 0x27, + 0x57, 0x2c, 0xcf, 0x6e, 0x46, 0xa0, 0xa6, 0x69, 0x75, 0x4d, 0xb1, 0x58, 0xea, 0x43, 0x2c, 0x4a, + 0x19, 0x5d, 0x2e, 0x94, 0xd1, 0x42, 0x14, 0x0e, 0x7c, 0x10, 0x51, 0x68, 0xee, 0x3e, 0x83, 0x7d, + 0xed, 0x3e, 0xc7, 0x20, 0x3e, 0x8d, 0x0d, 0x6c, 0xb8, 0x8f, 0x0d, 0xec, 0x17, 0x4a, 0x30, 0x95, + 0x46, 0xb0, 0x8b, 0xac, 0xd6, 0xf7, 0xff, 0xbc, 0xe3, 0x35, 0xe3, 0xbc, 0x23, 0x3f, 0x6b, 0x75, + 0xa6, 0x55, 0x85, 0x67, 0x1f, 0x38, 0x73, 0xf6, 0xf1, 0x64, 0x5f, 0xdc, 0xba, 0x9f, 0x83, 0xfc, + 0xed, 0x12, 0x9c, 0xc9, 0x16, 0x59, 0xf2, 0x1d, 0x6f, 0xe7, 0x04, 0xfa, 0xe6, 0xa6, 0xd1, 0x37, + 0xcf, 0xf4, 0xf3, 0x35, 0xac, 0x69, 0x85, 0x1d, 0xf4, 0x46, 0xa6, 0x83, 0xe6, 0xfb, 0x67, 0xd9, + 0xbd, 0x97, 0xbe, 0x6d, 0xc1, 0xb9, 0xdc, 0x72, 0x27, 0xe0, 0x7d, 0xbd, 0x61, 0x7a, 0x5f, 0x9f, + 0xe8, 0xfb, 0x9b, 0x0a, 0xdc, 0xb1, 0x5f, 0x2d, 0x17, 0x7c, 0x0b, 0xf3, 0x5f, 0xdd, 0x84, 0x51, + 0xa7, 0xd9, 0x24, 0x71, 0x7c, 0x3d, 0x74, 0x55, 0x5a, 0xab, 0x67, 0xd8, 0x9e, 0x94, 0x82, 0x0f, + 0xf7, 0x67, 0x67, 0xb2, 0x2c, 0x52, 0x34, 0xd6, 0x39, 0x98, 0xa9, 0xf2, 0x4a, 0xc7, 0x9a, 0x2a, + 0xef, 0x12, 0xc0, 0xae, 0xb2, 0x6a, 0xb3, 0xce, 0x30, 0xcd, 0xde, 0xd5, 0xa8, 0xd0, 0x4f, 0x31, + 0x5d, 0x91, 0x87, 0x8c, 0xf0, 0x43, 0x8e, 0xe7, 0xfa, 0x1c, 0x2b, 0x3d, 0xfc, 0x84, 0x5f, 0x84, + 0x55, 0x8e, 0x43, 0xc5, 0x12, 0x7d, 0x06, 0xa6, 0x62, 0x9e, 0x6b, 0x61, 0xc9, 0x77, 0x62, 0x76, + 0xfd, 0x42, 0xc8, 0x44, 0x76, 0xbb, 0xb5, 0x91, 0xc1, 0xe1, 0x0e, 0x6a, 0xfb, 0xef, 0x97, 0xe1, + 0xc1, 0x2e, 0x53, 0x14, 0x2d, 0x98, 0x47, 0xbc, 0x4f, 0x65, 0xbd, 0x3b, 0x33, 0xb9, 0x85, 0x0d, + 0x77, 0x4f, 0x66, 0x8c, 0x4b, 0x1f, 0x78, 0x8c, 0xbf, 0x6c, 0x69, 0x7e, 0x37, 0x1e, 0x08, 0xfa, + 0xe9, 0x23, 0x2e, 0xbd, 0x1f, 0x56, 0x47, 0xfd, 0x17, 0x2c, 0x78, 0x24, 0xf7, 0xb3, 0x8c, 0x50, + 0x91, 0x79, 0xa8, 0x34, 0x29, 0x50, 0xbb, 0x22, 0x95, 0x5e, 0x54, 0x94, 0x08, 0x9c, 0xd2, 0x18, + 0x11, 0x21, 0xa5, 0x9e, 0x11, 0x21, 0xff, 0xd4, 0x82, 0xd3, 0xd9, 0x46, 0x9c, 0x80, 0x64, 0x5a, + 0x35, 0x25, 0xd3, 0xc7, 0xfb, 0x19, 0xf2, 0x02, 0xa1, 0xf4, 0x6f, 0x27, 0xe0, 0x6c, 0xc7, 0xce, + 0xc5, 0xfb, 0x6e, 0x17, 0xa6, 0x37, 0x99, 0x0a, 0xaf, 0x5d, 0x3e, 0x13, 0x1f, 0x93, 0x7b, 0x4f, + 0xaf, 0xeb, 0x4d, 0x35, 0x6e, 0x86, 0x74, 0x90, 0xe0, 0xce, 0x2a, 0xd0, 0x17, 0x2c, 0x38, 0xed, + 0xdc, 0x89, 0x3b, 0x9e, 0x3e, 0x11, 0x73, 0xe6, 0xf9, 0x5c, 0xef, 0x58, 0x8f, 0xa7, 0x52, 0xd8, + 0x05, 0x91, 0xd3, 0x79, 0x54, 0x38, 0xb7, 0x2e, 0x84, 0x45, 0x66, 0x3f, 0xaa, 0xe5, 0x74, 0xb9, + 0x1e, 0x99, 0x77, 0x79, 0x85, 0xcb, 0x28, 0x89, 0xc1, 0x8a, 0x0f, 0xba, 0x0d, 0x95, 0x4d, 0x79, + 0xa3, 0x4c, 0xc8, 0xc0, 0xdc, 0x4d, 0x25, 0xf7, 0xda, 0x19, 0x8f, 0xd8, 0x57, 0x28, 0x9c, 0xb2, + 0x42, 0xaf, 0x42, 0x39, 0xd8, 0x88, 0xc5, 0x55, 0xed, 0xfc, 0xf8, 0x1e, 0x33, 0x82, 0x8a, 0xdf, + 0x73, 0xbd, 0xb1, 0xd2, 0xc0, 0xb4, 0x20, 0x2d, 0x1f, 0xad, 0xbb, 0xc2, 0xa1, 0x9b, 0x5b, 0x1e, + 0x2f, 0xd6, 0x3a, 0xcb, 0xe3, 0xc5, 0x1a, 0xa6, 0x05, 0xd1, 0x0a, 0x0c, 0xb2, 0x0b, 0x2a, 0xc2, + 0x5b, 0x9b, 0x7b, 0x4f, 0xbf, 0xe3, 0xf2, 0x0d, 0xbf, 0xf8, 0xca, 0xc0, 0x98, 0x17, 0x47, 0xaf, + 0xc1, 0x50, 0x93, 0xe5, 0xec, 0x17, 0xa6, 0x75, 0x7e, 0xee, 0x89, 0x8e, 0xac, 0xfe, 0xfc, 0x8c, + 0x8a, 0xc3, 0xb1, 0xe0, 0xc0, 0x78, 0x91, 0xd6, 0xd6, 0x46, 0x2c, 0x2c, 0xe6, 0x7c, 0x5e, 0x1d, + 0xef, 0x2b, 0x08, 0x5e, 0x0c, 0x8e, 0x05, 0x07, 0xf4, 0x29, 0x28, 0x6d, 0x34, 0xc5, 0x0d, 0x95, + 0x5c, 0xdf, 0xac, 0x79, 0x05, 0x79, 0x71, 0xe8, 0x60, 0x7f, 0xb6, 0xb4, 0xb2, 0x84, 0x4b, 0x1b, + 0x4d, 0x74, 0x03, 0x86, 0x37, 0xf8, 0x3d, 0x52, 0x91, 0x9f, 0xf5, 0xf1, 0xfc, 0x2b, 0xae, 0x1d, + 0x57, 0x4d, 0xf9, 0xcd, 0x0a, 0x81, 0xc0, 0x92, 0x09, 0x5a, 0x03, 0xd8, 0x50, 0xf7, 0x61, 0x45, + 0x82, 0xd6, 0x8f, 0xf7, 0x73, 0x6b, 0x56, 0x18, 0x8d, 0x0a, 0x8a, 0x35, 0x3e, 0x74, 0x66, 0x3a, + 0xf2, 0xe1, 0x10, 0x96, 0x9c, 0xb5, 0x60, 0x66, 0xe6, 0xbe, 0x2e, 0xc2, 0x67, 0xa6, 0x42, 0xe1, + 0x94, 0x15, 0xda, 0x86, 0xf1, 0xdd, 0xb8, 0xb5, 0x45, 0xe4, 0x62, 0x64, 0x79, 0x5a, 0x4d, 0xb3, + 0x32, 0x4d, 0xaa, 0x2b, 0x08, 0xbd, 0x28, 0x69, 0x3b, 0x7e, 0x87, 0xfc, 0x60, 0x97, 0x6f, 0x6e, + 0xeb, 0xcc, 0xb0, 0xc9, 0x9b, 0x76, 0xf5, 0x7b, 0xed, 0x70, 0x7d, 0x2f, 0x21, 0x22, 0x7b, 0x6b, + 0x6e, 0x57, 0xbf, 0xce, 0x49, 0x3a, 0xbb, 0x5a, 0x20, 0xb0, 0x64, 0xa2, 0x3a, 0x85, 0xc9, 0xbd, + 0xa9, 0x1e, 0x9d, 0xd2, 0xd1, 0xde, 0xb4, 0x53, 0x98, 0x9c, 0x4b, 0x59, 0x31, 0xf9, 0xd6, 0xda, + 0x0a, 0x93, 0x30, 0xc8, 0xc8, 0xd6, 0xe9, 0x62, 0xf9, 0x56, 0xcf, 0xa1, 0xef, 0x94, 0x6f, 0x79, + 0x54, 0x38, 0xb7, 0x2e, 0xe4, 0xc2, 0x44, 0x2b, 0x8c, 0x92, 0x3b, 0x61, 0x24, 0xe7, 0x12, 0xea, + 0x62, 0x28, 0x19, 0x94, 0xa2, 0x46, 0x16, 0x4b, 0x6b, 0x62, 0x70, 0x86, 0x27, 0x1d, 0x92, 0xb8, + 0xe9, 0xf8, 0x64, 0xf5, 0x66, 0xf5, 0x54, 0xf1, 0x90, 0x34, 0x38, 0x49, 0xe7, 0x90, 0x08, 0x04, + 0x96, 0x4c, 0xa8, 0xa4, 0x61, 0x89, 0xc0, 0x59, 0xba, 0xd9, 0x02, 0x49, 0xd3, 0x11, 0x65, 0xca, + 0x25, 0x0d, 0x03, 0x63, 0x5e, 0x1c, 0x7d, 0x0e, 0x2a, 0x42, 0xff, 0x0b, 0xe3, 0xea, 0x99, 0x0e, + 0x6d, 0x34, 0x6d, 0x19, 0x27, 0xba, 0xd9, 0xc8, 0xdf, 0x22, 0xc5, 0x2d, 0x34, 0x49, 0x84, 0x53, + 0xa6, 0xf6, 0x17, 0x87, 0x3a, 0x35, 0x03, 0xa6, 0xe7, 0x7f, 0xd1, 0xea, 0x38, 0x2a, 0xfd, 0x64, + 0xbf, 0xc6, 0xe9, 0x31, 0x1e, 0x9a, 0x7e, 0xc1, 0x82, 0xb3, 0xad, 0xdc, 0x8f, 0x12, 0xdb, 0x6c, + 0x7f, 0x36, 0x2e, 0xef, 0x06, 0x95, 0xc8, 0x39, 0x1f, 0x8f, 0x0b, 0x6a, 0xca, 0xea, 0xc3, 0xe5, + 0x0f, 0xac, 0x0f, 0x5f, 0x87, 0x11, 0xa6, 0xca, 0xa5, 0x49, 0x63, 0xfa, 0x0a, 0x38, 0x62, 0x1b, + 0xf6, 0x92, 0x28, 0x88, 0x15, 0x0b, 0xf4, 0x73, 0x16, 0x3c, 0x9c, 0x6d, 0x3a, 0x26, 0x0c, 0x2d, + 0x92, 0x10, 0x72, 0x13, 0x63, 0x45, 0x7c, 0xff, 0xc3, 0xf5, 0x6e, 0xc4, 0x87, 0xbd, 0x08, 0x70, + 0xf7, 0xca, 0x50, 0x2d, 0xc7, 0xc6, 0x19, 0x32, 0x4f, 0x52, 0x7a, 0xdb, 0x39, 0x27, 0xab, 0xa5, + 0x7f, 0xcd, 0xca, 0x51, 0x2f, 0xb9, 0x3d, 0xf5, 0x8a, 0x69, 0x4f, 0x3d, 0x96, 0xb5, 0xa7, 0x3a, + 0xbc, 0x23, 0x86, 0x29, 0xd5, 0x7f, 0x9a, 0xd4, 0x7e, 0xf3, 0xe3, 0xd8, 0x3e, 0x5c, 0xe8, 0x25, + 0x66, 0x59, 0xf8, 0x94, 0xab, 0xce, 0x15, 0xd3, 0xf0, 0x29, 0x77, 0xb5, 0x86, 0x19, 0xa6, 0xdf, + 0x4c, 0x0b, 0xf6, 0x7f, 0xb1, 0xa0, 0x5c, 0x0f, 0xdd, 0x13, 0xf0, 0xf6, 0x7c, 0xda, 0xf0, 0xf6, + 0x3c, 0x58, 0xf0, 0x58, 0x5d, 0xa1, 0x6f, 0x67, 0x39, 0xe3, 0xdb, 0x79, 0xb8, 0x88, 0x41, 0x77, + 0x4f, 0xce, 0xdf, 0x29, 0x83, 0xfe, 0xb4, 0x1e, 0xfa, 0x17, 0xf7, 0x12, 0x87, 0x5b, 0xee, 0xf6, + 0xda, 0x9e, 0xe0, 0xcc, 0xa2, 0xae, 0xe4, 0x15, 0xbf, 0x1f, 0xb2, 0x70, 0xdc, 0x37, 0x88, 0xb7, + 0xb9, 0x95, 0x10, 0x37, 0xfb, 0x39, 0x27, 0x17, 0x8e, 0xfb, 0x1f, 0x2d, 0x98, 0xcc, 0xd4, 0x8e, + 0xfc, 0xbc, 0xfb, 0x42, 0xf7, 0xe8, 0xbf, 0x99, 0xee, 0x79, 0xc1, 0x68, 0x0e, 0x40, 0xb9, 0xd2, + 0xa5, 0x8f, 0x84, 0xe9, 0xae, 0xca, 0xd7, 0x1e, 0x63, 0x8d, 0x02, 0xbd, 0x00, 0xa3, 0x49, 0xd8, + 0x0a, 0xfd, 0x70, 0x73, 0xef, 0x2a, 0x91, 0xb9, 0x3d, 0xd4, 0x81, 0xc7, 0x5a, 0x8a, 0xc2, 0x3a, + 0x9d, 0xfd, 0xab, 0x65, 0xc8, 0x3e, 0xc7, 0xf8, 0xff, 0xe6, 0xe4, 0x47, 0x73, 0x4e, 0x7e, 0xc7, + 0x82, 0x29, 0x5a, 0x3b, 0x8b, 0x68, 0x91, 0x81, 0xac, 0xea, 0x3d, 0x05, 0xab, 0xcb, 0x7b, 0x0a, + 0x8f, 0x51, 0xd9, 0xe5, 0x86, 0xed, 0x44, 0xf8, 0x72, 0x34, 0xe1, 0x44, 0xa1, 0x58, 0x60, 0x05, + 0x1d, 0x89, 0x22, 0x71, 0x0b, 0x48, 0xa7, 0x23, 0x51, 0x84, 0x05, 0x56, 0x3e, 0xb7, 0x30, 0x50, + 0xf0, 0xdc, 0x02, 0x4b, 0x8b, 0x25, 0xa2, 0x28, 0x84, 0x6a, 0xa0, 0xa5, 0xc5, 0x92, 0xe1, 0x15, + 0x29, 0x8d, 0xfd, 0xf5, 0x32, 0x8c, 0xd5, 0x43, 0x37, 0x8d, 0x7d, 0x7f, 0xde, 0x88, 0x7d, 0xbf, + 0x90, 0x89, 0x7d, 0x9f, 0xd2, 0x69, 0x8f, 0x27, 0xf4, 0x5d, 0x24, 0x4d, 0x63, 0x8f, 0x7f, 0xdc, + 0x63, 0xd8, 0xbb, 0x91, 0x34, 0x4d, 0x31, 0xc2, 0x26, 0xdf, 0x1f, 0xa5, 0x70, 0xf7, 0x3f, 0xb7, + 0x60, 0xa2, 0x1e, 0xba, 0x74, 0x82, 0xfe, 0x28, 0xcd, 0x46, 0x3d, 0xe9, 0xda, 0x50, 0x97, 0xa4, + 0x6b, 0x7f, 0xd7, 0x82, 0xe1, 0x7a, 0xe8, 0x9e, 0x80, 0x9f, 0xf3, 0x15, 0xd3, 0xcf, 0xf9, 0x40, + 0x81, 0x94, 0x2d, 0x70, 0x6d, 0xfe, 0x56, 0x19, 0xc6, 0x69, 0x3b, 0xc3, 0x4d, 0x39, 0x4a, 0x46, + 0x8f, 0x58, 0x7d, 0xf4, 0x08, 0x55, 0xe6, 0x42, 0xdf, 0x0f, 0xef, 0x64, 0x47, 0x6c, 0x85, 0x41, + 0xb1, 0xc0, 0xa2, 0xa7, 0x61, 0xa4, 0x15, 0x91, 0x5d, 0x2f, 0x6c, 0xc7, 0xd9, 0x7b, 0x84, 0x75, + 0x01, 0xc7, 0x8a, 0x02, 0x3d, 0x0f, 0x63, 0xb1, 0x17, 0x34, 0x89, 0x8c, 0xac, 0x18, 0x60, 0x91, + 0x15, 0x3c, 0x6f, 0xa5, 0x06, 0xc7, 0x06, 0x15, 0x7a, 0x03, 0x2a, 0xec, 0x3f, 0x5b, 0x37, 0x47, + 0x7f, 0x4d, 0x81, 0x9b, 0xaa, 0x92, 0x01, 0x4e, 0x79, 0xa1, 0x4b, 0x00, 0x89, 0x8c, 0x01, 0x89, + 0xc5, 0x35, 0x57, 0xa5, 0x51, 0xaa, 0xe8, 0x90, 0x18, 0x6b, 0x54, 0xe8, 0x29, 0xa8, 0x24, 0x8e, + 0xe7, 0x5f, 0xf3, 0x02, 0x12, 0x8b, 0x18, 0x1a, 0x91, 0x0b, 0x5a, 0x00, 0x71, 0x8a, 0xa7, 0x3b, + 0x3a, 0xbb, 0x44, 0xcd, 0xdf, 0x62, 0x19, 0x61, 0xd4, 0x6c, 0x47, 0xbf, 0xa6, 0xa0, 0x58, 0xa3, + 0xb0, 0x5f, 0x82, 0x33, 0xf5, 0xd0, 0xad, 0x87, 0x51, 0xb2, 0x12, 0x46, 0x77, 0x9c, 0xc8, 0x95, + 0xe3, 0x37, 0x2b, 0xd3, 0x12, 0xd3, 0x5d, 0x77, 0x90, 0xdb, 0xf5, 0x46, 0xc2, 0xe1, 0xe7, 0xd8, + 0x9e, 0x7e, 0xc4, 0x0b, 0x0f, 0xff, 0xba, 0x04, 0xa8, 0xce, 0xa2, 0x54, 0x8c, 0x07, 0x7b, 0xde, + 0x81, 0x89, 0x98, 0x5c, 0xf3, 0x82, 0xf6, 0x5d, 0xc1, 0xaa, 0xdb, 0x6d, 0x92, 0xc6, 0xb2, 0x4e, + 0xc9, 0x7d, 0x23, 0x26, 0x0c, 0x67, 0xb8, 0xd1, 0x2e, 0x8c, 0xda, 0xc1, 0x42, 0x7c, 0x2b, 0x26, + 0x91, 0x78, 0xa0, 0x86, 0x75, 0x21, 0x96, 0x40, 0x9c, 0xe2, 0xe9, 0x94, 0x61, 0x7f, 0x6e, 0x84, + 0x01, 0x0e, 0xc3, 0x44, 0x4e, 0x32, 0xf6, 0xc4, 0x81, 0x06, 0xc7, 0x06, 0x15, 0x5a, 0x01, 0x14, + 0xb7, 0x5b, 0x2d, 0x9f, 0x1d, 0xea, 0x39, 0xfe, 0xe5, 0x28, 0x6c, 0xb7, 0x78, 0x98, 0xb1, 0x78, + 0x1d, 0xa0, 0xd1, 0x81, 0xc5, 0x39, 0x25, 0xa8, 0x60, 0xd8, 0x88, 0xd9, 0x6f, 0x71, 0x8f, 0x9a, + 0xfb, 0x26, 0x1b, 0x0c, 0x84, 0x25, 0xce, 0xfe, 0x3c, 0xdb, 0xcc, 0xd8, 0xbb, 0x22, 0x49, 0x3b, + 0x22, 0x68, 0x07, 0xc6, 0x5b, 0x6c, 0xc3, 0x4a, 0xa2, 0xd0, 0xf7, 0x89, 0xd4, 0x1b, 0xef, 0x2d, + 0x62, 0x86, 0xbf, 0x33, 0xa0, 0xb3, 0xc3, 0x26, 0x77, 0xfb, 0x8b, 0x93, 0x4c, 0x2e, 0x35, 0xb8, + 0xd1, 0x32, 0x2c, 0xe2, 0x60, 0x85, 0x86, 0x36, 0x53, 0xfc, 0x8e, 0x57, 0x2a, 0xe9, 0x45, 0x2c, + 0x2d, 0x96, 0x65, 0xd1, 0xeb, 0x2c, 0x3e, 0x9b, 0x0b, 0x83, 0x5e, 0x2f, 0x08, 0x72, 0x2a, 0x23, + 0x36, 0x5b, 0x14, 0xc4, 0x1a, 0x13, 0x74, 0x0d, 0xc6, 0xc5, 0x33, 0x14, 0xc2, 0x85, 0x50, 0x36, + 0xcc, 0xdf, 0x71, 0xac, 0x23, 0x0f, 0xb3, 0x00, 0x6c, 0x16, 0x46, 0x9b, 0xf0, 0xb0, 0xf6, 0x68, + 0x52, 0x4e, 0xd4, 0x16, 0x97, 0x2d, 0x8f, 0x1c, 0xec, 0xcf, 0x3e, 0xbc, 0xd6, 0x8d, 0x10, 0x77, + 0xe7, 0x83, 0x6e, 0xc2, 0x19, 0xa7, 0x99, 0x78, 0xbb, 0xa4, 0x46, 0x1c, 0xd7, 0xf7, 0x02, 0x62, + 0x5e, 0xac, 0x3f, 0x77, 0xb0, 0x3f, 0x7b, 0x66, 0x21, 0x8f, 0x00, 0xe7, 0x97, 0x43, 0xaf, 0x40, + 0xc5, 0x0d, 0x62, 0xd1, 0x07, 0x43, 0xc6, 0x7b, 0x60, 0x95, 0xda, 0x8d, 0x86, 0xfa, 0xfe, 0xf4, + 0x0f, 0x4e, 0x0b, 0xa0, 0x4d, 0xfe, 0x6e, 0xbc, 0xb2, 0x48, 0x86, 0x3b, 0xb2, 0x25, 0x64, 0x6d, + 0x5b, 0xe3, 0xc6, 0x09, 0xf7, 0x9f, 0xa9, 0x98, 0x48, 0xe3, 0x32, 0x8a, 0xc1, 0x18, 0xbd, 0x06, + 0x28, 0x26, 0xd1, 0xae, 0xd7, 0x24, 0x0b, 0x4d, 0x96, 0xd8, 0x95, 0x79, 0x5d, 0x46, 0x8c, 0x00, + 0x7f, 0xd4, 0xe8, 0xa0, 0xc0, 0x39, 0xa5, 0xd0, 0x15, 0x2a, 0x51, 0x74, 0xa8, 0x08, 0x61, 0x95, + 0x6a, 0x5e, 0xb5, 0x46, 0x5a, 0x11, 0x69, 0x3a, 0x09, 0x71, 0x4d, 0x8e, 0x38, 0x53, 0x8e, 0xee, + 0x37, 0x2a, 0x5f, 0x3e, 0x98, 0x81, 0x97, 0x9d, 0x39, 0xf3, 0xa9, 0x85, 0xb4, 0x15, 0xc6, 0xc9, + 0x0d, 0x92, 0xdc, 0x09, 0xa3, 0x6d, 0x91, 0x0d, 0x2b, 0x4d, 0x96, 0x97, 0xa2, 0xb0, 0x4e, 0x47, + 0x35, 0x22, 0x76, 0x74, 0xb5, 0x5a, 0x63, 0xe7, 0x0c, 0x23, 0xe9, 0x3a, 0xb9, 0xc2, 0xc1, 0x58, + 0xe2, 0x25, 0xe9, 0x6a, 0x7d, 0x89, 0x9d, 0x1e, 0x64, 0x48, 0x57, 0xeb, 0x4b, 0x58, 0xe2, 0x11, + 0xe9, 0x7c, 0x6b, 0x6d, 0xa2, 0xf8, 0x84, 0xa6, 0x53, 0x2e, 0xf7, 0xf9, 0xdc, 0x5a, 0x00, 0x53, + 0xea, 0x95, 0x37, 0x9e, 0x26, 0x2c, 0xae, 0x4e, 0x16, 0x3f, 0x60, 0x9f, 0x9b, 0x63, 0x4c, 0x79, + 0xd5, 0x56, 0x33, 0x9c, 0x70, 0x07, 0x6f, 0x23, 0x61, 0xc3, 0x54, 0xcf, 0xf7, 0x0e, 0xe6, 0xa1, + 0x12, 0xb7, 0xd7, 0xdd, 0x70, 0xc7, 0xf1, 0x02, 0xe6, 0xf6, 0xd7, 0xdf, 0x56, 0x97, 0x08, 0x9c, + 0xd2, 0xa0, 0x15, 0x18, 0x71, 0x84, 0xf1, 0x25, 0x1c, 0xf5, 0xb9, 0x37, 0xb8, 0xa5, 0x81, 0xc6, + 0x3d, 0x9a, 0xf2, 0x1f, 0x56, 0x65, 0xd1, 0xcb, 0x30, 0x2e, 0x2e, 0x19, 0x89, 0xf8, 0xc0, 0x53, + 0x66, 0x3c, 0x7a, 0x43, 0x47, 0x62, 0x93, 0x16, 0xfd, 0x14, 0x4c, 0x50, 0x2e, 0xa9, 0x60, 0xab, + 0x9e, 0xee, 0x47, 0x22, 0x6a, 0x79, 0xac, 0xf5, 0xc2, 0x38, 0xc3, 0x0c, 0xb9, 0xf0, 0x90, 0xd3, + 0x4e, 0xc2, 0x1d, 0x3a, 0xc3, 0xcd, 0xf9, 0xbf, 0x16, 0x6e, 0x93, 0x80, 0xf9, 0xe9, 0x47, 0x16, + 0x2f, 0x1c, 0xec, 0xcf, 0x3e, 0xb4, 0xd0, 0x85, 0x0e, 0x77, 0xe5, 0x82, 0x6e, 0xc1, 0x68, 0x12, + 0xfa, 0x22, 0xb0, 0x37, 0xae, 0x9e, 0x2d, 0x4e, 0x38, 0xb3, 0xa6, 0xc8, 0x74, 0x77, 0x82, 0x2a, + 0x8a, 0x75, 0x3e, 0x68, 0x8d, 0xaf, 0x31, 0x96, 0x1e, 0x91, 0xc4, 0xd5, 0x07, 0x8a, 0x3b, 0x46, + 0x65, 0x51, 0x34, 0x97, 0xa0, 0x28, 0x89, 0x75, 0x36, 0xe8, 0x32, 0x4c, 0xb7, 0x22, 0x2f, 0x64, + 0x13, 0x5b, 0xb9, 0x7c, 0xab, 0x46, 0x2a, 0xb2, 0xe9, 0x7a, 0x96, 0x00, 0x77, 0x96, 0x41, 0x17, + 0xa9, 0x82, 0xca, 0x81, 0xd5, 0x73, 0xfc, 0x1d, 0x0c, 0xae, 0x9c, 0x72, 0x18, 0x56, 0xd8, 0x99, + 0x9f, 0x80, 0xe9, 0x0e, 0x49, 0x79, 0xa4, 0x20, 0xcb, 0x5f, 0x1f, 0x84, 0x8a, 0x72, 0x07, 0xa2, + 0x79, 0xd3, 0xcb, 0x7b, 0x2e, 0xeb, 0xe5, 0x1d, 0xa1, 0xfa, 0x9a, 0xee, 0xd8, 0x5d, 0xcb, 0x79, + 0xca, 0xfb, 0x42, 0x81, 0x68, 0xe8, 0xff, 0x46, 0xd4, 0x11, 0x9e, 0x39, 0x4f, 0x0d, 0xc6, 0x81, + 0xae, 0x06, 0x63, 0x9f, 0xcf, 0xea, 0x51, 0xd3, 0xb0, 0x15, 0xba, 0xab, 0xf5, 0xec, 0x3b, 0x53, + 0x75, 0x0a, 0xc4, 0x1c, 0xc7, 0x94, 0x7b, 0xba, 0xad, 0x33, 0xe5, 0x7e, 0xf8, 0x1e, 0x95, 0x7b, + 0xc9, 0x00, 0xa7, 0xbc, 0x90, 0x0f, 0xd3, 0x4d, 0xf3, 0x89, 0x30, 0x75, 0x0b, 0xea, 0xd1, 0x9e, + 0x8f, 0x75, 0xb5, 0xb5, 0x77, 0x43, 0x96, 0xb2, 0x5c, 0x70, 0x27, 0x63, 0xf4, 0x32, 0x8c, 0xbc, + 0x17, 0xc6, 0x6c, 0xda, 0x89, 0xbd, 0x4d, 0xde, 0x3b, 0x19, 0x79, 0xfd, 0x66, 0x83, 0xc1, 0x0f, + 0xf7, 0x67, 0x47, 0xeb, 0xa1, 0x2b, 0xff, 0x62, 0x55, 0x00, 0xdd, 0x85, 0x33, 0x86, 0x44, 0x50, + 0xcd, 0x85, 0xfe, 0x9b, 0xfb, 0xb0, 0xa8, 0xee, 0xcc, 0x6a, 0x1e, 0x27, 0x9c, 0x5f, 0x81, 0xfd, + 0x0d, 0xee, 0xf4, 0x14, 0xae, 0x11, 0x12, 0xb7, 0xfd, 0x93, 0x78, 0x1c, 0x60, 0xd9, 0xf0, 0xda, + 0xdc, 0xb3, 0x63, 0xfd, 0xf7, 0x2d, 0xe6, 0x58, 0x5f, 0x23, 0x3b, 0x2d, 0xdf, 0x49, 0x4e, 0x22, + 0xb4, 0xf6, 0x75, 0x18, 0x49, 0x44, 0x6d, 0xdd, 0xde, 0x33, 0xd0, 0x1a, 0xc5, 0x0e, 0x17, 0xd4, + 0x86, 0x28, 0xa1, 0x58, 0xb1, 0xb1, 0xff, 0x31, 0x1f, 0x01, 0x89, 0x39, 0x01, 0xdf, 0x42, 0xcd, + 0xf4, 0x2d, 0xcc, 0xf6, 0xf8, 0x82, 0x02, 0x1f, 0xc3, 0x3f, 0x32, 0xdb, 0xcd, 0x6c, 0x8f, 0x8f, + 0xfa, 0x89, 0x8e, 0xfd, 0x4b, 0x16, 0x9c, 0xce, 0x3b, 0xd2, 0xa7, 0x4a, 0x0c, 0xb7, 0x7c, 0xd4, + 0x09, 0x97, 0xea, 0xc1, 0xdb, 0x02, 0x8e, 0x15, 0x45, 0xdf, 0x39, 0xc5, 0x8f, 0x96, 0x64, 0xe9, + 0x26, 0x98, 0xaf, 0xc9, 0xa1, 0x57, 0x79, 0xac, 0xbc, 0xa5, 0x9e, 0x7b, 0x3b, 0x5a, 0x9c, 0xbc, + 0xfd, 0x6b, 0x25, 0x38, 0xcd, 0x5d, 0xd4, 0x0b, 0xbb, 0xa1, 0xe7, 0xd6, 0x43, 0x57, 0xdc, 0x1c, + 0x78, 0x0b, 0xc6, 0x5a, 0x9a, 0xb9, 0xda, 0x2d, 0xcd, 0x8b, 0x6e, 0xd6, 0xa6, 0x66, 0x83, 0x0e, + 0xc5, 0x06, 0x2f, 0xe4, 0xc2, 0x18, 0xd9, 0xf5, 0x9a, 0xca, 0xcf, 0x59, 0x3a, 0xb2, 0x48, 0x57, + 0xb5, 0x2c, 0x6b, 0x7c, 0xb0, 0xc1, 0xf5, 0x3e, 0xbc, 0xfc, 0x61, 0x7f, 0xc5, 0x82, 0x07, 0x0a, + 0x92, 0xc2, 0xd0, 0xea, 0xee, 0xb0, 0xc3, 0x00, 0xf1, 0x34, 0xa1, 0xaa, 0x8e, 0x1f, 0x11, 0x60, + 0x81, 0x45, 0x3f, 0x09, 0xc0, 0x5d, 0xfc, 0xec, 0x21, 0xf8, 0x52, 0xf7, 0x5b, 0xe7, 0x46, 0xb2, + 0x04, 0xed, 0x46, 0xbd, 0x7a, 0xfa, 0x5d, 0xe3, 0x65, 0xff, 0x4a, 0x19, 0x06, 0xf9, 0x3b, 0xd5, + 0x2b, 0x30, 0xbc, 0xc5, 0x53, 0xd0, 0xf6, 0x93, 0xed, 0x36, 0x35, 0x47, 0x38, 0x00, 0xcb, 0xc2, + 0xe8, 0x3a, 0x9c, 0x12, 0xb7, 0x53, 0x6a, 0xc4, 0x77, 0xf6, 0xa4, 0x55, 0xcb, 0x9f, 0x83, 0x90, + 0xa9, 0xca, 0x4f, 0xad, 0x76, 0x92, 0xe0, 0xbc, 0x72, 0xe8, 0xd5, 0x8e, 0xc4, 0x73, 0x3c, 0x79, + 0xaf, 0xd2, 0x81, 0x7b, 0x24, 0x9f, 0x7b, 0x19, 0xc6, 0x5b, 0x1d, 0xf6, 0xbb, 0xf6, 0x44, 0xb0, + 0x69, 0xb3, 0x9b, 0xb4, 0x2c, 0x3e, 0xa0, 0xcd, 0xa2, 0x21, 0xd6, 0xb6, 0x22, 0x12, 0x6f, 0x85, + 0xbe, 0x2b, 0xde, 0xc3, 0x4c, 0xe3, 0x03, 0x32, 0x78, 0xdc, 0x51, 0x82, 0x72, 0xd9, 0x70, 0x3c, + 0xbf, 0x1d, 0x91, 0x94, 0xcb, 0x90, 0xc9, 0x65, 0x25, 0x83, 0xc7, 0x1d, 0x25, 0xe8, 0x3c, 0x3a, + 0x23, 0x1e, 0x53, 0x94, 0x77, 0x96, 0x55, 0xd0, 0xc7, 0xb0, 0x8c, 0x4a, 0xef, 0x92, 0x47, 0x43, + 0x1c, 0xf9, 0xab, 0xe7, 0x18, 0xb5, 0x67, 0xba, 0x44, 0x3c, 0xba, 0xe4, 0x72, 0x2f, 0x4f, 0xfa, + 0xfd, 0xa9, 0x05, 0xa7, 0x72, 0x02, 0xc1, 0xb8, 0xa8, 0xda, 0xf4, 0xe2, 0x44, 0xbd, 0x42, 0xa0, + 0x89, 0x2a, 0x0e, 0xc7, 0x8a, 0x82, 0xae, 0x07, 0x2e, 0x0c, 0xb3, 0x02, 0x50, 0x04, 0x6f, 0x08, + 0xec, 0xd1, 0x04, 0x20, 0xba, 0x00, 0x03, 0xed, 0x98, 0x44, 0xf2, 0x1d, 0x3c, 0x29, 0xbf, 0x99, + 0x47, 0x90, 0x61, 0xa8, 0x46, 0xb9, 0xa9, 0x9c, 0x71, 0x9a, 0x46, 0xc9, 0xdd, 0x71, 0x1c, 0x67, + 0x7f, 0xb9, 0x0c, 0x93, 0x99, 0xb0, 0x4d, 0xda, 0x90, 0x9d, 0x30, 0xf0, 0x92, 0x50, 0xe5, 0x3d, + 0xe3, 0x69, 0x1e, 0x48, 0x6b, 0xeb, 0xba, 0x80, 0x63, 0x45, 0x81, 0x1e, 0x93, 0x0f, 0xa4, 0x66, + 0x5f, 0x57, 0x58, 0xac, 0x19, 0x6f, 0xa4, 0xf6, 0xfb, 0x4c, 0xca, 0xa3, 0x30, 0xd0, 0x0a, 0xd5, + 0xeb, 0xd5, 0x6a, 0x3c, 0xf1, 0x62, 0xad, 0x1e, 0x86, 0x3e, 0x66, 0x48, 0xf4, 0x09, 0xf1, 0xf5, + 0x99, 0xf3, 0x0a, 0xec, 0xb8, 0x61, 0xac, 0x75, 0xc1, 0x13, 0x30, 0xbc, 0x4d, 0xf6, 0x22, 0x2f, + 0xd8, 0xcc, 0x9e, 0xd6, 0x5c, 0xe5, 0x60, 0x2c, 0xf1, 0x66, 0x9a, 0xf1, 0xe1, 0xfb, 0xf2, 0xd2, + 0xc9, 0x48, 0xcf, 0x5d, 0xed, 0xb7, 0x2c, 0x98, 0x64, 0x39, 0x46, 0xc5, 0xed, 0x78, 0x2f, 0x0c, + 0x4e, 0x40, 0x4f, 0x78, 0x14, 0x06, 0x23, 0x5a, 0x69, 0xf6, 0xf9, 0x02, 0xd6, 0x12, 0xcc, 0x71, + 0xe8, 0x21, 0x18, 0x60, 0x4d, 0xa0, 0x83, 0x37, 0xc6, 0xb3, 0x8c, 0xd7, 0x9c, 0xc4, 0xc1, 0x0c, + 0xca, 0xae, 0x29, 0x61, 0xd2, 0xf2, 0x3d, 0xde, 0xe8, 0xd4, 0xdd, 0xfa, 0xd1, 0xb8, 0xa6, 0x94, + 0xdb, 0xb4, 0x0f, 0x76, 0x4d, 0x29, 0x9f, 0x65, 0x77, 0x1d, 0xfc, 0xbf, 0x96, 0xe0, 0x7c, 0x6e, + 0xb9, 0xf4, 0x64, 0x77, 0xc5, 0x38, 0xd9, 0xbd, 0x94, 0x39, 0xd9, 0xb5, 0xbb, 0x97, 0x3e, 0x9e, + 0xb3, 0xde, 0xfc, 0x23, 0xd8, 0xf2, 0x09, 0x1e, 0xc1, 0x0e, 0xf4, 0xab, 0xa6, 0x0c, 0xf6, 0x50, + 0x53, 0xbe, 0x6d, 0xc1, 0xb9, 0xdc, 0x2e, 0xfb, 0x88, 0xdc, 0x0b, 0xcb, 0x6d, 0x5b, 0x81, 0x0d, + 0xf1, 0x83, 0x52, 0xc1, 0xb7, 0x30, 0x6b, 0xe2, 0x22, 0x95, 0x33, 0x0c, 0x19, 0x0b, 0xb5, 0x6b, + 0x8c, 0xcb, 0x18, 0x0e, 0xc3, 0x0a, 0x8b, 0x3c, 0xed, 0x86, 0x15, 0x6f, 0xda, 0xcb, 0x47, 0x5a, + 0x32, 0x73, 0xa6, 0x77, 0x5c, 0xbf, 0xca, 0x9f, 0xbd, 0x6d, 0x75, 0x5d, 0xb3, 0x00, 0xcb, 0xfd, + 0x5b, 0x80, 0x63, 0xf9, 0xd6, 0x1f, 0x5a, 0x80, 0xc9, 0x1d, 0x2f, 0x60, 0x6f, 0x90, 0x9a, 0x7a, + 0x8f, 0xba, 0x96, 0x7a, 0xdd, 0x44, 0xe3, 0x2c, 0xfd, 0xcc, 0xcb, 0x30, 0x7e, 0xef, 0x2e, 0xab, + 0xef, 0x94, 0xe1, 0xc1, 0x2e, 0xcb, 0x9e, 0xcb, 0x7a, 0x63, 0x0c, 0x34, 0x59, 0xdf, 0x31, 0x0e, + 0x75, 0x38, 0xbd, 0xd1, 0xf6, 0xfd, 0x3d, 0x16, 0xe5, 0x44, 0x5c, 0x49, 0x21, 0x14, 0x13, 0x95, + 0x40, 0x78, 0x25, 0x87, 0x06, 0xe7, 0x96, 0x44, 0xaf, 0x01, 0x0a, 0xd7, 0x59, 0x52, 0x5b, 0x37, + 0x4d, 0x50, 0xc0, 0x3a, 0xbe, 0x9c, 0x2e, 0xc6, 0x9b, 0x1d, 0x14, 0x38, 0xa7, 0x14, 0xd5, 0x30, + 0xd9, 0xcb, 0xe9, 0xaa, 0x59, 0x19, 0x0d, 0x13, 0xeb, 0x48, 0x6c, 0xd2, 0xa2, 0xcb, 0x30, 0xed, + 0xec, 0x3a, 0x1e, 0x4f, 0x58, 0x25, 0x19, 0x70, 0x15, 0x53, 0x39, 0x8a, 0x16, 0xb2, 0x04, 0xb8, + 0xb3, 0x0c, 0xda, 0x30, 0xbc, 0x7c, 0x3c, 0x5f, 0xfe, 0xa5, 0xbe, 0x67, 0x6b, 0xdf, 0x7e, 0x3f, + 0xfb, 0xdf, 0x5b, 0x74, 0xfb, 0xca, 0x79, 0xf4, 0x92, 0xf6, 0x83, 0xf2, 0x5f, 0x69, 0xb7, 0xc3, + 0x54, 0x3f, 0x2c, 0xe9, 0x48, 0x6c, 0xd2, 0xf2, 0x09, 0x11, 0xa7, 0xe1, 0xd2, 0x86, 0x9e, 0x28, + 0xae, 0x53, 0x2a, 0x0a, 0xf4, 0x26, 0x0c, 0xbb, 0xde, 0xae, 0x17, 0x87, 0x91, 0x58, 0x2c, 0x47, + 0x7d, 0xec, 0x59, 0xc9, 0xc1, 0x1a, 0x67, 0x83, 0x25, 0x3f, 0xfb, 0xcb, 0x25, 0x18, 0x97, 0x35, + 0xbe, 0xde, 0x0e, 0x13, 0xe7, 0x04, 0xb6, 0xe5, 0xcb, 0xc6, 0xb6, 0xfc, 0x89, 0x6e, 0x77, 0x4a, + 0x59, 0x93, 0x0a, 0xb7, 0xe3, 0x9b, 0x99, 0xed, 0xf8, 0xf1, 0xde, 0xac, 0xba, 0x6f, 0xc3, 0xbf, + 0x6b, 0xc1, 0xb4, 0x41, 0x7f, 0x02, 0xbb, 0xc1, 0x8a, 0xb9, 0x1b, 0x3c, 0xd2, 0xf3, 0x1b, 0x0a, + 0x76, 0x81, 0xaf, 0x95, 0x32, 0x6d, 0x67, 0xd2, 0xff, 0x3d, 0x18, 0xd8, 0x72, 0x22, 0xb7, 0x5b, + 0xda, 0xc5, 0x8e, 0x42, 0x73, 0x57, 0x9c, 0xc8, 0xe5, 0x32, 0xfc, 0x69, 0xf5, 0x1e, 0x97, 0x13, + 0xb9, 0x3d, 0x6f, 0x07, 0xb0, 0xaa, 0xd0, 0x4b, 0x30, 0x14, 0x37, 0xc3, 0x96, 0x8a, 0xbd, 0xbc, + 0xc0, 0xdf, 0xea, 0xa2, 0x90, 0xc3, 0xfd, 0x59, 0x64, 0x56, 0x47, 0xc1, 0x58, 0xd0, 0xcf, 0x6c, + 0x42, 0x45, 0x55, 0x7d, 0x5f, 0xa3, 0xca, 0xff, 0xa8, 0x0c, 0xa7, 0x72, 0xe6, 0x05, 0x8a, 0x8d, + 0xde, 0x7a, 0xb6, 0xcf, 0xe9, 0xf4, 0x01, 0xfb, 0x2b, 0x66, 0x16, 0x8b, 0x2b, 0xc6, 0xbf, 0xef, + 0x4a, 0x6f, 0xc5, 0x24, 0x5b, 0x29, 0x05, 0xf5, 0xae, 0x94, 0x56, 0x76, 0x62, 0x5d, 0x4d, 0x2b, + 0x52, 0x2d, 0xbd, 0xaf, 0x63, 0xfa, 0x3f, 0xcb, 0x70, 0x3a, 0xef, 0x2a, 0x3a, 0xfa, 0x99, 0xcc, + 0x23, 0x0e, 0xcf, 0xf7, 0x7b, 0x89, 0x9d, 0xbf, 0xec, 0x20, 0x32, 0xbc, 0xcc, 0x99, 0xcf, 0x3a, + 0xf4, 0xec, 0x66, 0x51, 0x27, 0xbb, 0xae, 0x13, 0xf1, 0xc7, 0x37, 0xe4, 0x12, 0xff, 0x64, 0xdf, + 0x0d, 0x10, 0xaf, 0x76, 0xc4, 0x99, 0xeb, 0x3a, 0x12, 0xdc, 0xfb, 0xba, 0x8e, 0xac, 0x79, 0xc6, + 0x83, 0x51, 0xed, 0x6b, 0xee, 0xeb, 0x88, 0x6f, 0xd3, 0x1d, 0x45, 0x6b, 0xf7, 0x7d, 0x1d, 0xf5, + 0xaf, 0x58, 0x90, 0x89, 0x93, 0x52, 0xfe, 0x0f, 0xab, 0xd0, 0xff, 0x71, 0x01, 0x06, 0xa2, 0xd0, + 0x27, 0xd9, 0xbc, 0xfe, 0x38, 0xf4, 0x09, 0x66, 0x18, 0xf5, 0xf8, 0x6e, 0xb9, 0xe8, 0xf1, 0x5d, + 0x6a, 0x1a, 0xfb, 0x64, 0x97, 0x48, 0x6f, 0x84, 0x92, 0xc9, 0xd7, 0x28, 0x10, 0x73, 0x9c, 0xfd, + 0x1b, 0x03, 0x70, 0x2a, 0xe7, 0x72, 0x1a, 0x35, 0x54, 0x36, 0x9d, 0x84, 0xdc, 0x71, 0xf6, 0xb2, + 0xb9, 0x46, 0x2f, 0x73, 0x30, 0x96, 0x78, 0x16, 0xcb, 0xc9, 0xd3, 0x95, 0x65, 0x7c, 0x44, 0x22, + 0x4b, 0x99, 0xc0, 0xde, 0xaf, 0xf7, 0x58, 0x2f, 0x01, 0xc4, 0xb1, 0xbf, 0x1c, 0x50, 0xe5, 0xcb, + 0x15, 0x91, 0xa2, 0x69, 0x6e, 0xbb, 0xc6, 0x35, 0x81, 0xc1, 0x1a, 0x15, 0xaa, 0xc1, 0x54, 0x2b, + 0x0a, 0x13, 0xee, 0x77, 0xab, 0xf1, 0x18, 0x85, 0x41, 0xf3, 0x9a, 0x51, 0x3d, 0x83, 0xc7, 0x1d, + 0x25, 0xd0, 0x0b, 0x30, 0x2a, 0xae, 0x1e, 0xd5, 0xc3, 0xd0, 0x17, 0x5e, 0x1a, 0x75, 0xe2, 0xdd, + 0x48, 0x51, 0x58, 0xa7, 0xd3, 0x8a, 0x31, 0x67, 0xde, 0x70, 0x6e, 0x31, 0xee, 0xd0, 0xd3, 0xe8, + 0x32, 0x19, 0x29, 0x46, 0xfa, 0xca, 0x48, 0x91, 0xfa, 0xad, 0x2a, 0x7d, 0x9f, 0x5f, 0x40, 0x4f, + 0x4f, 0xcf, 0x37, 0xca, 0x30, 0xc4, 0x87, 0xe2, 0x04, 0x54, 0xb1, 0x15, 0xe1, 0xbb, 0xe9, 0x92, + 0x07, 0x80, 0xb7, 0x65, 0xae, 0xe6, 0x24, 0x0e, 0x17, 0x43, 0x6a, 0x35, 0xa4, 0x5e, 0x1e, 0x34, + 0x67, 0xac, 0x97, 0x99, 0x8c, 0x73, 0x02, 0x38, 0x0f, 0x6d, 0xf5, 0xbc, 0x03, 0x10, 0xb3, 0x37, + 0x41, 0x29, 0x0f, 0x91, 0xb7, 0xf4, 0xc9, 0x2e, 0xb5, 0x37, 0x14, 0x31, 0x6f, 0x43, 0x3a, 0x05, + 0x15, 0x02, 0x6b, 0x1c, 0x67, 0x5e, 0x84, 0x8a, 0x22, 0xee, 0x65, 0xc9, 0x8d, 0xe9, 0xc2, 0xeb, + 0xd3, 0x30, 0x99, 0xa9, 0xeb, 0x48, 0x86, 0xe0, 0x6f, 0x5b, 0x30, 0xc9, 0x9b, 0xbc, 0x1c, 0xec, + 0x8a, 0xc5, 0xfe, 0x3e, 0x9c, 0xf6, 0x73, 0x16, 0x9d, 0x18, 0xd1, 0xfe, 0x17, 0xa9, 0x32, 0xfc, + 0xf2, 0xb0, 0x38, 0xb7, 0x0e, 0x6a, 0xfc, 0xf3, 0xd7, 0x8c, 0x1d, 0x5f, 0x44, 0x20, 0x8f, 0xf1, + 0x7c, 0xce, 0x1c, 0x86, 0x15, 0xd6, 0xfe, 0xae, 0x05, 0xd3, 0x1d, 0x6f, 0xe1, 0x7f, 0xa8, 0x6d, + 0x17, 0xe9, 0xaa, 0x4b, 0x05, 0xe9, 0xaa, 0xf5, 0x4f, 0x2b, 0x77, 0xfd, 0xb4, 0x5f, 0xb3, 0x40, + 0xcc, 0xc0, 0x13, 0x50, 0xe7, 0x7f, 0xc2, 0x54, 0xe7, 0x67, 0x8a, 0x27, 0x75, 0x81, 0x1e, 0xff, + 0xe7, 0x16, 0x4c, 0x71, 0x82, 0xf4, 0xf0, 0xe2, 0x43, 0x1d, 0x87, 0x7e, 0xde, 0x50, 0x51, 0x8f, + 0x56, 0xe6, 0x7f, 0x94, 0x31, 0x58, 0x03, 0x5d, 0x07, 0xeb, 0x3f, 0x5b, 0x80, 0xf8, 0xe7, 0x67, + 0x1f, 0x78, 0xe6, 0x9b, 0x92, 0x66, 0x6a, 0xa7, 0x42, 0x40, 0x61, 0xb0, 0x46, 0x75, 0x2c, 0x0d, + 0xcf, 0x9c, 0x0d, 0x95, 0x7b, 0x9f, 0x0d, 0x1d, 0xe1, 0x5b, 0xff, 0xca, 0x00, 0x64, 0x03, 0x11, + 0xd1, 0x6d, 0x18, 0x6b, 0x3a, 0x2d, 0x67, 0xdd, 0xf3, 0xbd, 0xc4, 0x23, 0x71, 0xb7, 0x43, 0xe5, + 0x25, 0x8d, 0x4e, 0x1c, 0xc4, 0x68, 0x10, 0x6c, 0xf0, 0x41, 0x73, 0x00, 0xad, 0xc8, 0xdb, 0xf5, + 0x7c, 0xb2, 0xc9, 0x6c, 0x0d, 0x76, 0x1b, 0x81, 0x9f, 0x94, 0x4a, 0x28, 0xd6, 0x28, 0x72, 0xa2, + 0xd7, 0xcb, 0xf7, 0x2f, 0x7a, 0x7d, 0xe0, 0x88, 0xd1, 0xeb, 0x83, 0x7d, 0x45, 0xaf, 0x63, 0x38, + 0x2b, 0x77, 0x55, 0xfa, 0x7f, 0xc5, 0xf3, 0x89, 0x50, 0xa5, 0xf8, 0x1d, 0x85, 0x99, 0x83, 0xfd, + 0xd9, 0xb3, 0x38, 0x97, 0x02, 0x17, 0x94, 0x44, 0x3f, 0x09, 0x55, 0xc7, 0xf7, 0xc3, 0x3b, 0xaa, + 0xd7, 0x96, 0xe3, 0xa6, 0xe3, 0xa7, 0xa9, 0x40, 0x47, 0x16, 0x1f, 0x3a, 0xd8, 0x9f, 0xad, 0x2e, + 0x14, 0xd0, 0xe0, 0xc2, 0xd2, 0xf6, 0x36, 0x9c, 0x6a, 0x90, 0x48, 0x3e, 0x04, 0xa6, 0x56, 0xdf, + 0x1a, 0x54, 0xa2, 0xcc, 0x72, 0xef, 0xeb, 0x4a, 0xba, 0x96, 0x80, 0x4b, 0x2e, 0xef, 0x94, 0x91, + 0xfd, 0x67, 0x16, 0x0c, 0x8b, 0xe0, 0xc6, 0x13, 0xd0, 0x32, 0x16, 0x0c, 0x87, 0xcf, 0x6c, 0xbe, + 0x48, 0x64, 0x8d, 0x29, 0x74, 0xf5, 0xac, 0x66, 0x5c, 0x3d, 0x8f, 0x74, 0x63, 0xd2, 0xdd, 0xc9, + 0xf3, 0x8b, 0x65, 0x98, 0x30, 0x03, 0x3b, 0x4f, 0xa0, 0x0b, 0x6e, 0xc0, 0x70, 0x2c, 0xa2, 0x88, + 0x4b, 0xc5, 0xd1, 0x68, 0xd9, 0x41, 0x4c, 0xcf, 0xac, 0x45, 0xdc, 0xb0, 0x64, 0x92, 0x1b, 0x9e, + 0x5c, 0xbe, 0x8f, 0xe1, 0xc9, 0xbd, 0x62, 0x6b, 0x07, 0x8e, 0x23, 0xb6, 0xd6, 0xfe, 0x26, 0x13, + 0xfe, 0x3a, 0xfc, 0x04, 0x76, 0xec, 0xcb, 0xe6, 0x36, 0x61, 0x77, 0x99, 0x59, 0xa2, 0x51, 0x05, + 0x3b, 0xf7, 0x3f, 0xb0, 0x60, 0x54, 0x10, 0x9e, 0x40, 0xb3, 0x3f, 0x63, 0x36, 0xfb, 0xc1, 0x2e, + 0xcd, 0x2e, 0x68, 0xef, 0xdf, 0x2c, 0xa9, 0xf6, 0xd6, 0xc5, 0x53, 0xfc, 0x3d, 0x53, 0x43, 0x8f, + 0x50, 0x3b, 0x2d, 0x6c, 0x86, 0xbe, 0xd0, 0xcb, 0x1e, 0x4a, 0xaf, 0xa9, 0x71, 0xf8, 0xa1, 0xf6, + 0x1b, 0x2b, 0x6a, 0x76, 0x8b, 0x2a, 0x8c, 0x12, 0xb1, 0x81, 0xa6, 0xb7, 0xa8, 0xc2, 0x28, 0xc1, + 0x0c, 0x83, 0x5c, 0x80, 0xf4, 0x85, 0x74, 0x71, 0xaf, 0xb3, 0x78, 0x15, 0xb6, 0x13, 0xcf, 0x9f, + 0xf3, 0x82, 0x24, 0x4e, 0xa2, 0xb9, 0xd5, 0x20, 0xb9, 0x19, 0x71, 0xad, 0x5d, 0xbb, 0x77, 0xa6, + 0x78, 0x61, 0x8d, 0xaf, 0xbc, 0xf8, 0xc0, 0xea, 0x18, 0x34, 0x4f, 0x62, 0x6e, 0x08, 0x38, 0x56, + 0x14, 0xf6, 0x8b, 0x4c, 0x26, 0xb3, 0x0e, 0x3a, 0xda, 0x95, 0xb0, 0x3f, 0x1e, 0x56, 0x5d, 0xcb, + 0xdc, 0xb0, 0x35, 0xfd, 0xe2, 0x59, 0x77, 0x11, 0x48, 0x2b, 0xd6, 0x83, 0x7c, 0xd3, 0xdb, 0x69, + 0xe8, 0xb3, 0x1d, 0x07, 0x74, 0xcf, 0xf4, 0x90, 0xa5, 0x47, 0x38, 0x92, 0x63, 0x99, 0xee, 0x58, + 0x46, 0xb0, 0xd5, 0x7a, 0x36, 0x79, 0xf7, 0x92, 0x44, 0xe0, 0x94, 0x06, 0xcd, 0x0b, 0x9b, 0x8f, + 0x3b, 0x40, 0x1e, 0xcc, 0xd8, 0x7c, 0xf2, 0xf3, 0x35, 0xa3, 0xef, 0x59, 0x18, 0x55, 0x0f, 0xa2, + 0xd4, 0xf9, 0xbb, 0x12, 0x15, 0xae, 0x4b, 0x2d, 0xa7, 0x60, 0xac, 0xd3, 0xa0, 0x35, 0x98, 0x8c, + 0xf9, 0x6b, 0x2d, 0xf2, 0x2e, 0x82, 0xb0, 0xe8, 0x9f, 0xcc, 0xbc, 0xc5, 0x2e, 0xd1, 0x87, 0x0c, + 0xc4, 0x17, 0xab, 0xbc, 0xbd, 0x90, 0x65, 0x81, 0x5e, 0x85, 0x09, 0x5f, 0x7f, 0xb5, 0xb2, 0x2e, + 0x0c, 0x7e, 0x15, 0x64, 0x65, 0xbc, 0x69, 0x59, 0xc7, 0x19, 0x6a, 0xaa, 0x04, 0xe8, 0x10, 0x91, + 0xa4, 0xc6, 0x09, 0x36, 0x49, 0x2c, 0x9e, 0x73, 0x60, 0x4a, 0xc0, 0xb5, 0x02, 0x1a, 0x5c, 0x58, + 0x1a, 0xbd, 0x04, 0x63, 0xf2, 0xf3, 0xb5, 0xbb, 0x39, 0x69, 0x28, 0x9f, 0x86, 0xc3, 0x06, 0x25, + 0xba, 0x03, 0x67, 0xe4, 0xff, 0xb5, 0xc8, 0xd9, 0xd8, 0xf0, 0x9a, 0xe2, 0x6a, 0xd4, 0x28, 0x63, + 0xb1, 0x20, 0xe3, 0x9a, 0x97, 0xf3, 0x88, 0x0e, 0xf7, 0x67, 0x2f, 0x88, 0x5e, 0xcb, 0xc5, 0xb3, + 0x41, 0xcc, 0xe7, 0x8f, 0xae, 0xc3, 0xa9, 0x2d, 0xe2, 0xf8, 0xc9, 0xd6, 0xd2, 0x16, 0x69, 0x6e, + 0xcb, 0x45, 0xc4, 0x6e, 0xfc, 0x68, 0x01, 0x70, 0x57, 0x3a, 0x49, 0x70, 0x5e, 0x39, 0xf4, 0x36, + 0x54, 0x5b, 0xed, 0x75, 0xdf, 0x8b, 0xb7, 0x6e, 0x84, 0x09, 0x3b, 0x4b, 0x54, 0xef, 0x89, 0x88, + 0xab, 0x41, 0xea, 0xb6, 0x53, 0xbd, 0x80, 0x0e, 0x17, 0x72, 0xf8, 0x60, 0xa7, 0xbc, 0xef, 0xd1, + 0xc2, 0x9a, 0x86, 0x81, 0x3e, 0x07, 0x63, 0xfa, 0x48, 0x0a, 0x21, 0xff, 0x58, 0xaf, 0x57, 0x52, + 0x85, 0x7e, 0xa2, 0x46, 0x55, 0xc7, 0x61, 0x83, 0xa3, 0xfd, 0xcf, 0x4a, 0x30, 0xdb, 0x23, 0x87, + 0x54, 0xc6, 0x75, 0x65, 0xf5, 0xe5, 0xba, 0x5a, 0x90, 0x4f, 0x87, 0xdc, 0xc8, 0x24, 0xa6, 0xce, + 0x3c, 0x0b, 0x92, 0xa6, 0xa7, 0xce, 0xd2, 0xf7, 0x1d, 0xb5, 0xa5, 0x7b, 0xbf, 0x06, 0x7a, 0x06, + 0xaf, 0xd5, 0x75, 0x37, 0xe6, 0x60, 0xff, 0xea, 0x6e, 0xa1, 0x07, 0xd3, 0xfe, 0x66, 0x09, 0xce, + 0xa8, 0x2e, 0xfc, 0xd1, 0xed, 0xb8, 0x5b, 0x9d, 0x1d, 0x77, 0x0c, 0xfe, 0x5f, 0xfb, 0x26, 0x0c, + 0x35, 0xf6, 0xe2, 0x66, 0xe2, 0xf7, 0xa1, 0x1d, 0x3c, 0x6a, 0xac, 0x9c, 0x74, 0x0f, 0x63, 0xaf, + 0x7f, 0x89, 0x85, 0x64, 0xff, 0x45, 0x0b, 0x26, 0xd7, 0x96, 0xea, 0x8d, 0xb0, 0xb9, 0x4d, 0x92, + 0x05, 0xee, 0xdd, 0xc0, 0x42, 0x39, 0xb0, 0xee, 0x71, 0xd3, 0xcf, 0x53, 0x27, 0x2e, 0xc0, 0xc0, + 0x56, 0x18, 0x27, 0x59, 0x1f, 0xff, 0x95, 0x30, 0x4e, 0x30, 0xc3, 0xd8, 0x7f, 0x62, 0xc1, 0x20, + 0x7b, 0xf0, 0xaa, 0xd7, 0xc3, 0x68, 0xfd, 0x7c, 0x17, 0x7a, 0x01, 0x86, 0xc8, 0xc6, 0x06, 0x69, + 0x26, 0x62, 0x54, 0xe5, 0x45, 0x92, 0xa1, 0x65, 0x06, 0xa5, 0x3b, 0x22, 0xab, 0x8c, 0xff, 0xc5, + 0x82, 0x18, 0x7d, 0x16, 0x2a, 0x89, 0xb7, 0x43, 0x16, 0x5c, 0x57, 0xb8, 0xd7, 0x8f, 0x16, 0x49, + 0xa5, 0x76, 0xe8, 0x35, 0xc9, 0x04, 0xa7, 0xfc, 0xec, 0x9f, 0x2f, 0x01, 0xa4, 0x17, 0xce, 0x7a, + 0x7d, 0xe6, 0x62, 0xc7, 0xfb, 0x6f, 0x8f, 0xe5, 0xbc, 0xff, 0x86, 0x52, 0x86, 0x39, 0xaf, 0xbf, + 0xa9, 0xae, 0x2a, 0xf7, 0xd5, 0x55, 0x03, 0x47, 0xe9, 0xaa, 0x25, 0x98, 0x4e, 0x2f, 0xcc, 0x99, + 0xb7, 0x87, 0x59, 0x6e, 0xd8, 0xb5, 0x2c, 0x12, 0x77, 0xd2, 0xdb, 0x5f, 0xb2, 0x40, 0x44, 0xd7, + 0xf6, 0x31, 0xa1, 0xdf, 0x92, 0x4f, 0x35, 0x19, 0x89, 0xed, 0x2e, 0x14, 0x87, 0x1b, 0x8b, 0x74, + 0x76, 0x4a, 0xb2, 0x1b, 0x49, 0xec, 0x0c, 0x5e, 0xf6, 0xef, 0x5a, 0x30, 0xca, 0xd1, 0xd7, 0x99, + 0x09, 0xda, 0xbb, 0x35, 0x47, 0xca, 0x2c, 0xcc, 0x5e, 0x31, 0xa2, 0x8c, 0x55, 0x02, 0x5a, 0xfd, + 0x15, 0x23, 0x89, 0xc0, 0x29, 0x0d, 0x7a, 0x02, 0x86, 0xe3, 0xf6, 0x3a, 0x23, 0xcf, 0x04, 0xd8, + 0x36, 0x38, 0x18, 0x4b, 0x3c, 0x9d, 0x57, 0x53, 0xd9, 0xf8, 0x6a, 0x74, 0x05, 0x86, 0xb8, 0xd8, + 0x10, 0xcb, 0xb8, 0xcb, 0x61, 0x82, 0x16, 0x95, 0x0d, 0xfc, 0xd9, 0x6d, 0x26, 0x6e, 0x44, 0x79, + 0xf4, 0x36, 0x8c, 0xba, 0xe1, 0x9d, 0xe0, 0x8e, 0x13, 0xb9, 0x0b, 0xf5, 0x55, 0xd1, 0xeb, 0xb9, + 0x51, 0x72, 0xb5, 0x94, 0x4c, 0x8f, 0xf4, 0x66, 0xee, 0xb9, 0x14, 0x85, 0x75, 0x76, 0x68, 0x8d, + 0xe5, 0xf0, 0xe0, 0x8f, 0x81, 0x76, 0x8b, 0x1b, 0x51, 0xef, 0x87, 0x6a, 0x9c, 0xc7, 0x45, 0xa2, + 0x0f, 0xf1, 0x94, 0x68, 0xca, 0xc8, 0xfe, 0xc2, 0x29, 0x30, 0x46, 0xdb, 0xc8, 0xff, 0x6b, 0x1d, + 0x53, 0xfe, 0x5f, 0x0c, 0x23, 0x64, 0xa7, 0x95, 0xec, 0xd5, 0xbc, 0xa8, 0x5b, 0x42, 0xf6, 0x65, + 0x41, 0xd3, 0xc9, 0x53, 0x62, 0xb0, 0xe2, 0x93, 0x9f, 0xa4, 0xb9, 0xfc, 0x21, 0x26, 0x69, 0x1e, + 0x38, 0xc1, 0x24, 0xcd, 0x37, 0x60, 0x78, 0xd3, 0x4b, 0x30, 0x69, 0x85, 0x62, 0xcb, 0xcc, 0x9d, + 0x09, 0x97, 0x39, 0x49, 0x67, 0x7a, 0x51, 0x81, 0xc0, 0x92, 0x09, 0x7a, 0x4d, 0xad, 0x81, 0xa1, + 0x62, 0x55, 0xb0, 0xd3, 0xbb, 0x9d, 0xbb, 0x0a, 0x44, 0x52, 0xe6, 0xe1, 0x7b, 0x4d, 0xca, 0xac, + 0x92, 0x2a, 0x8f, 0x7c, 0xb0, 0xa4, 0xca, 0x46, 0xd2, 0xe9, 0xca, 0xf1, 0x25, 0x9d, 0xfe, 0x92, + 0x05, 0x67, 0x5a, 0x79, 0xf9, 0xd7, 0x45, 0xa2, 0xe4, 0x17, 0xfa, 0xce, 0x43, 0x6f, 0x54, 0xc8, + 0x12, 0x49, 0xe4, 0x92, 0xe1, 0xfc, 0xea, 0x64, 0xf6, 0xea, 0xd1, 0x7b, 0xcd, 0x5e, 0x7d, 0x7f, + 0x32, 0x2a, 0xa7, 0xb9, 0xac, 0xc7, 0x8f, 0x31, 0x97, 0xf5, 0xc4, 0x07, 0xce, 0x65, 0xad, 0xe5, + 0xa3, 0x9e, 0x3c, 0x8e, 0x7c, 0xd4, 0xef, 0x98, 0xc2, 0x9e, 0xa7, 0x49, 0x7e, 0xaa, 0x87, 0xb0, + 0x37, 0xf8, 0x76, 0x17, 0xf7, 0x3c, 0xf7, 0xf6, 0xf4, 0x3d, 0xe5, 0xde, 0x36, 0xb2, 0x5a, 0xa3, + 0xe3, 0xcb, 0x6a, 0x7d, 0x5b, 0xdf, 0x82, 0x4e, 0x15, 0xf3, 0x55, 0x3b, 0x4d, 0x27, 0xdf, 0xbc, + 0x4d, 0xa8, 0x33, 0x5b, 0xf6, 0xe9, 0x93, 0xc9, 0x96, 0x7d, 0xe6, 0xd8, 0xb3, 0x65, 0x9f, 0x3d, + 0x81, 0x6c, 0xd9, 0x0f, 0x7c, 0xa8, 0xd9, 0xb2, 0xab, 0xf7, 0x37, 0x5b, 0xf6, 0xb9, 0xe3, 0xc8, + 0x96, 0x7d, 0x1b, 0x2a, 0x2d, 0x79, 0x05, 0xaf, 0x3a, 0x53, 0x3c, 0x24, 0xb9, 0xf7, 0xf4, 0xf8, + 0x90, 0x28, 0x14, 0x4e, 0x59, 0x51, 0xbe, 0x69, 0xf6, 0xec, 0x07, 0x8b, 0xf9, 0xe6, 0x9a, 0xed, + 0x5d, 0x72, 0x66, 0xff, 0xa5, 0x12, 0x9c, 0xef, 0x3e, 0xaf, 0x53, 0x9b, 0xbf, 0x9e, 0x3a, 0x70, + 0x33, 0x36, 0x3f, 0x53, 0xba, 0x34, 0xaa, 0xbe, 0xef, 0x29, 0x5f, 0x86, 0x69, 0x15, 0x89, 0xe4, + 0x7b, 0xcd, 0x3d, 0xed, 0x71, 0x1b, 0x15, 0xdc, 0xde, 0xc8, 0x12, 0xe0, 0xce, 0x32, 0x68, 0x01, + 0x26, 0x0d, 0xe0, 0x6a, 0x4d, 0xa8, 0xe4, 0xca, 0xc9, 0xd0, 0x30, 0xd1, 0x38, 0x4b, 0x6f, 0x7f, + 0xcd, 0x82, 0x07, 0x0a, 0x12, 0x6f, 0xf6, 0x7d, 0x0d, 0x77, 0x03, 0x26, 0x5b, 0x66, 0xd1, 0x1e, + 0xb7, 0xf5, 0x8d, 0xf4, 0x9e, 0xaa, 0xad, 0x19, 0x04, 0xce, 0x32, 0x5d, 0xbc, 0xf8, 0xad, 0xef, + 0x9d, 0xff, 0xd8, 0x1f, 0x7e, 0xef, 0xfc, 0xc7, 0xbe, 0xfb, 0xbd, 0xf3, 0x1f, 0xfb, 0xff, 0x0e, + 0xce, 0x5b, 0xdf, 0x3a, 0x38, 0x6f, 0xfd, 0xe1, 0xc1, 0x79, 0xeb, 0xbb, 0x07, 0xe7, 0xad, 0x3f, + 0x3d, 0x38, 0x6f, 0xfd, 0xfc, 0xf7, 0xcf, 0x7f, 0xec, 0xad, 0xd2, 0xee, 0xb3, 0xff, 0x37, 0x00, + 0x00, 0xff, 0xff, 0xba, 0x62, 0xf2, 0xf7, 0x5f, 0xca, 0x00, 0x00, } diff --git a/staging/src/k8s.io/api/core/v1/generated.proto b/staging/src/k8s.io/api/core/v1/generated.proto index 22575fcd41e..504198647cf 100644 --- a/staging/src/k8s.io/api/core/v1/generated.proto +++ b/staging/src/k8s.io/api/core/v1/generated.proto @@ -1223,8 +1223,15 @@ message HostAlias { // Host path volumes do not support ownership management or SELinux relabeling. message HostPathVolumeSource { // Path of the directory on the host. + // If the path is a symlink, it will follow the link to the real path. // More info: https://kubernetes.io/docs/concepts/storage/volumes#hostpath optional string path = 1; + + // Type for HostPath Volume + // Defaults to "" + // More info: https://kubernetes.io/docs/concepts/storage/volumes#hostpath + // +optional + optional string type = 2; } // Represents an ISCSI disk. diff --git a/staging/src/k8s.io/api/core/v1/types.generated.go b/staging/src/k8s.io/api/core/v1/types.generated.go index beb627c3b3d..c7ea44dc9c7 100644 --- a/staging/src/k8s.io/api/core/v1/types.generated.go +++ b/staging/src/k8s.io/api/core/v1/types.generated.go @@ -11294,6 +11294,32 @@ func (x *PersistentVolumeClaimPhase) CodecDecodeSelf(d *codec1978.Decoder) { } } +func (x HostPathType) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + yym1 := z.EncBinary() + _ = yym1 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x)) + } +} + +func (x *HostPathType) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym1 := z.DecBinary() + _ = yym1 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + *((*string)(x)) = r.DecodeString() + } +} + func (x *HostPathVolumeSource) CodecEncodeSelf(e *codec1978.Encoder) { var h codecSelfer1234 z, r := codec1978.GenHelperEncoder(e) @@ -11308,12 +11334,13 @@ func (x *HostPathVolumeSource) CodecEncodeSelf(e *codec1978.Encoder) { } else { yysep2 := !z.EncBinary() yy2arr2 := z.EncBasicHandle().StructToArray - var yyq2 [1]bool + var yyq2 [2]bool _, _, _ = yysep2, yyq2, yy2arr2 const yyr2 bool = false + yyq2[1] = x.Type != nil var yynn2 int if yyr2 || yy2arr2 { - r.EncodeArrayStart(1) + r.EncodeArrayStart(2) } else { yynn2 = 1 for _, b := range yyq2 { @@ -11343,6 +11370,31 @@ func (x *HostPathVolumeSource) CodecEncodeSelf(e *codec1978.Encoder) { r.EncodeString(codecSelferC_UTF81234, string(x.Path)) } } + if yyr2 || yy2arr2 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq2[1] { + if x.Type == nil { + r.EncodeNil() + } else { + yy7 := *x.Type + yy7.CodecEncodeSelf(e) + } + } else { + r.EncodeNil() + } + } else { + if yyq2[1] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("type")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.Type == nil { + r.EncodeNil() + } else { + yy9 := *x.Type + yy9.CodecEncodeSelf(e) + } + } + } if yyr2 || yy2arr2 { z.EncSendContainerState(codecSelfer_containerArrayEnd1234) } else { @@ -11416,6 +11468,17 @@ func (x *HostPathVolumeSource) codecDecodeSelfFromMap(l int, d *codec1978.Decode *((*string)(yyv4)) = r.DecodeString() } } + case "type": + if r.TryDecodeAsNil() { + if x.Type != nil { + x.Type = nil + } + } else { + if x.Type == nil { + x.Type = new(HostPathType) + } + x.Type.CodecDecodeSelf(d) + } default: z.DecStructFieldNotFound(-1, yys3) } // end switch yys3 @@ -11427,16 +11490,16 @@ func (x *HostPathVolumeSource) codecDecodeSelfFromArray(l int, d *codec1978.Deco var h codecSelfer1234 z, r := codec1978.GenHelperDecoder(d) _, _, _ = h, z, r - var yyj6 int - var yyb6 bool - var yyhl6 bool = l >= 0 - yyj6++ - if yyhl6 { - yyb6 = yyj6 > l + var yyj7 int + var yyb7 bool + var yyhl7 bool = l >= 0 + yyj7++ + if yyhl7 { + yyb7 = yyj7 > l } else { - yyb6 = r.CheckBreak() + yyb7 = r.CheckBreak() } - if yyb6 { + if yyb7 { z.DecSendContainerState(codecSelfer_containerArrayEnd1234) return } @@ -11444,26 +11507,47 @@ func (x *HostPathVolumeSource) codecDecodeSelfFromArray(l int, d *codec1978.Deco if r.TryDecodeAsNil() { x.Path = "" } else { - yyv7 := &x.Path - yym8 := z.DecBinary() - _ = yym8 + yyv8 := &x.Path + yym9 := z.DecBinary() + _ = yym9 if false { } else { - *((*string)(yyv7)) = r.DecodeString() + *((*string)(yyv8)) = r.DecodeString() } } - for { - yyj6++ - if yyhl6 { - yyb6 = yyj6 > l - } else { - yyb6 = r.CheckBreak() + yyj7++ + if yyhl7 { + yyb7 = yyj7 > l + } else { + yyb7 = r.CheckBreak() + } + if yyb7 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + if x.Type != nil { + x.Type = nil } - if yyb6 { + } else { + if x.Type == nil { + x.Type = new(HostPathType) + } + x.Type.CodecDecodeSelf(d) + } + for { + yyj7++ + if yyhl7 { + yyb7 = yyj7 > l + } else { + yyb7 = r.CheckBreak() + } + if yyb7 { break } z.DecSendContainerState(codecSelfer_containerArrayElem1234) - z.DecStructFieldNotFound(yyj6-1, "") + z.DecStructFieldNotFound(yyj7-1, "") } z.DecSendContainerState(codecSelfer_containerArrayEnd1234) } diff --git a/staging/src/k8s.io/api/core/v1/types.go b/staging/src/k8s.io/api/core/v1/types.go index 819bd82c376..f92a1b3a412 100644 --- a/staging/src/k8s.io/api/core/v1/types.go +++ b/staging/src/k8s.io/api/core/v1/types.go @@ -681,12 +681,41 @@ const ( ClaimLost PersistentVolumeClaimPhase = "Lost" ) +type HostPathType string + +const ( + // For backwards compatible, leave it empty if unset + HostPathUnset HostPathType = "" + // If nothing exists at the given path, an empty directory will be created there + // as needed with file mode 0755, having the same group and ownership with Kubelet. + HostPathDirectoryOrCreate HostPathType = "DirectoryOrCreate" + // A directory must exist at the given path + HostPathDirectory HostPathType = "Directory" + // If nothing exists at the given path, an empty file will be created there + // as needed with file mode 0644, having the same group and ownership with Kubelet. + HostPathFileOrCreate HostPathType = "FileOrCreate" + // A file must exist at the given path + HostPathFile HostPathType = "File" + // A UNIX socket must exist at the given path + HostPathSocket HostPathType = "Socket" + // A character device must exist at the given path + HostPathCharDev HostPathType = "CharDevice" + // A block device must exist at the given path + HostPathBlockDev HostPathType = "BlockDevice" +) + // Represents a host path mapped into a pod. // Host path volumes do not support ownership management or SELinux relabeling. type HostPathVolumeSource struct { // Path of the directory on the host. + // If the path is a symlink, it will follow the link to the real path. // More info: https://kubernetes.io/docs/concepts/storage/volumes#hostpath Path string `json:"path" protobuf:"bytes,1,opt,name=path"` + // Type for HostPath Volume + // Defaults to "" + // More info: https://kubernetes.io/docs/concepts/storage/volumes#hostpath + // +optional + Type *HostPathType `json:"type,omitempty" protobuf:"bytes,2,opt,name=type"` } // Represents an empty directory for a pod. diff --git a/staging/src/k8s.io/api/core/v1/types_swagger_doc_generated.go b/staging/src/k8s.io/api/core/v1/types_swagger_doc_generated.go index 54f9deace80..eea093c8d74 100644 --- a/staging/src/k8s.io/api/core/v1/types_swagger_doc_generated.go +++ b/staging/src/k8s.io/api/core/v1/types_swagger_doc_generated.go @@ -655,7 +655,8 @@ func (HostAlias) SwaggerDoc() map[string]string { var map_HostPathVolumeSource = map[string]string{ "": "Represents a host path mapped into a pod. Host path volumes do not support ownership management or SELinux relabeling.", - "path": "Path of the directory on the host. More info: https://kubernetes.io/docs/concepts/storage/volumes#hostpath", + "path": "Path of the directory on the host. If the path is a symlink, it will follow the link to the real path. More info: https://kubernetes.io/docs/concepts/storage/volumes#hostpath", + "type": "Type for HostPath Volume Defaults to \"\" More info: https://kubernetes.io/docs/concepts/storage/volumes#hostpath", } func (HostPathVolumeSource) SwaggerDoc() map[string]string { diff --git a/staging/src/k8s.io/api/core/v1/zz_generated.deepcopy.go b/staging/src/k8s.io/api/core/v1/zz_generated.deepcopy.go index fea4ac0d699..9d4a5706375 100644 --- a/staging/src/k8s.io/api/core/v1/zz_generated.deepcopy.go +++ b/staging/src/k8s.io/api/core/v1/zz_generated.deepcopy.go @@ -2303,6 +2303,15 @@ func (in *HostAlias) DeepCopy() *HostAlias { // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *HostPathVolumeSource) DeepCopyInto(out *HostPathVolumeSource) { *out = *in + if in.Type != nil { + in, out := &in.Type, &out.Type + if *in == nil { + *out = nil + } else { + *out = new(HostPathType) + **out = **in + } + } return } @@ -3558,7 +3567,7 @@ func (in *PersistentVolumeSource) DeepCopyInto(out *PersistentVolumeSource) { *out = nil } else { *out = new(HostPathVolumeSource) - **out = **in + (*in).DeepCopyInto(*out) } } if in.Glusterfs != nil { @@ -5825,7 +5834,7 @@ func (in *VolumeSource) DeepCopyInto(out *VolumeSource) { *out = nil } else { *out = new(HostPathVolumeSource) - **out = **in + (*in).DeepCopyInto(*out) } } if in.EmptyDir != nil { diff --git a/test/e2e/common/kubelet_etc_hosts.go b/test/e2e/common/kubelet_etc_hosts.go index 52b93997079..1a69d691e58 100644 --- a/test/e2e/common/kubelet_etc_hosts.go +++ b/test/e2e/common/kubelet_etc_hosts.go @@ -130,6 +130,8 @@ func (config *KubeletManagedHostConfig) getEtcHostsContent(podName, containerNam } func (config *KubeletManagedHostConfig) createPodSpec(podName string) *v1.Pod { + hostPathType := new(v1.HostPathType) + *hostPathType = v1.HostPathType(string(v1.HostPathFileOrCreate)) pod := &v1.Pod{ ObjectMeta: metav1.ObjectMeta{ Name: podName, @@ -176,6 +178,7 @@ func (config *KubeletManagedHostConfig) createPodSpec(podName string) *v1.Pod { VolumeSource: v1.VolumeSource{ HostPath: &v1.HostPathVolumeSource{ Path: "/etc/hosts", + Type: hostPathType, }, }, }, diff --git a/test/e2e_node/log_path_test.go b/test/e2e_node/log_path_test.go index 4974943366b..b4d64aa52a8 100644 --- a/test/e2e_node/log_path_test.go +++ b/test/e2e_node/log_path_test.go @@ -74,6 +74,9 @@ var _ = framework.KubeDescribe("ContainerLogPath", func() { expectedlogFile := logDir + "/" + logPodName + "_" + ns + "_" + logContName + "-" + logConID.ID + ".log" + hostPathType := new(v1.HostPathType) + *hostPathType = v1.HostPathType(string(v1.HostPathFileOrCreate)) + checkPod := &v1.Pod{ ObjectMeta: metav1.ObjectMeta{ Name: checkPodName, @@ -104,6 +107,7 @@ var _ = framework.KubeDescribe("ContainerLogPath", func() { VolumeSource: v1.VolumeSource{ HostPath: &v1.HostPathVolumeSource{ Path: expectedlogFile, + Type: hostPathType, }, }, }, diff --git a/test/e2e_node/node_problem_detector_linux.go b/test/e2e_node/node_problem_detector_linux.go index e35236d6f10..dea4b7fe4b1 100644 --- a/test/e2e_node/node_problem_detector_linux.go +++ b/test/e2e_node/node_problem_detector_linux.go @@ -161,6 +161,8 @@ var _ = framework.KubeDescribe("NodeProblemDetector", func() { }) Expect(err).NotTo(HaveOccurred()) By("Create the node problem detector") + hostPathType := new(v1.HostPathType) + *hostPathType = v1.HostPathType(string(v1.HostPathFileOrCreate)) f.PodClient().CreateSync(&v1.Pod{ ObjectMeta: metav1.ObjectMeta{ Name: name, @@ -186,7 +188,10 @@ var _ = framework.KubeDescribe("NodeProblemDetector", func() { { Name: localtimeVolume, VolumeSource: v1.VolumeSource{ - HostPath: &v1.HostPathVolumeSource{Path: etcLocaltime}, + HostPath: &v1.HostPathVolumeSource{ + Path: etcLocaltime, + Type: hostPathType, + }, }, }, }, diff --git a/test/fixtures/doc-yaml/admin/high-availability/kube-apiserver.yaml b/test/fixtures/doc-yaml/admin/high-availability/kube-apiserver.yaml index 6150aa737b6..a41a2c666dc 100644 --- a/test/fixtures/doc-yaml/admin/high-availability/kube-apiserver.yaml +++ b/test/fixtures/doc-yaml/admin/high-availability/kube-apiserver.yaml @@ -63,6 +63,7 @@ spec: name: srvkube - hostPath: path: /var/log/kube-apiserver.log + type: FileOrCreate name: logfile - hostPath: path: /etc/ssl diff --git a/test/fixtures/doc-yaml/admin/high-availability/kube-controller-manager.yaml b/test/fixtures/doc-yaml/admin/high-availability/kube-controller-manager.yaml index f9956ed7940..a7cfbd5785b 100644 --- a/test/fixtures/doc-yaml/admin/high-availability/kube-controller-manager.yaml +++ b/test/fixtures/doc-yaml/admin/high-availability/kube-controller-manager.yaml @@ -55,6 +55,7 @@ spec: name: srvkube - hostPath: path: /var/log/kube-controller-manager.log + type: FileOrCreate name: logfile - hostPath: path: /etc/ssl diff --git a/test/fixtures/doc-yaml/admin/high-availability/kube-scheduler.yaml b/test/fixtures/doc-yaml/admin/high-availability/kube-scheduler.yaml index 6b05d245f22..eeef9bb6286 100644 --- a/test/fixtures/doc-yaml/admin/high-availability/kube-scheduler.yaml +++ b/test/fixtures/doc-yaml/admin/high-availability/kube-scheduler.yaml @@ -27,4 +27,5 @@ spec: volumes: - hostPath: path: /var/log/kube-scheduler.log + type: FileOrCreate name: logfile diff --git a/test/kubemark/resources/manifests/etcd-events.yaml b/test/kubemark/resources/manifests/etcd-events.yaml index 59fb70dc4aa..ea83b1b604b 100644 --- a/test/kubemark/resources/manifests/etcd-events.yaml +++ b/test/kubemark/resources/manifests/etcd-events.yaml @@ -48,3 +48,4 @@ spec: - name: varlogetcd hostPath: path: /var/log/etcd-events.log + type: FileOrCreate diff --git a/test/kubemark/resources/manifests/etcd.yaml b/test/kubemark/resources/manifests/etcd.yaml index 6c1ab1dfca9..2f7d88a633f 100644 --- a/test/kubemark/resources/manifests/etcd.yaml +++ b/test/kubemark/resources/manifests/etcd.yaml @@ -47,3 +47,4 @@ spec: - name: varlogetcd hostPath: path: /var/log/etcd.log + type: FileOrCreate diff --git a/test/kubemark/resources/manifests/kube-addon-manager.yaml b/test/kubemark/resources/manifests/kube-addon-manager.yaml index a24309d6525..2c40c884bb6 100644 --- a/test/kubemark/resources/manifests/kube-addon-manager.yaml +++ b/test/kubemark/resources/manifests/kube-addon-manager.yaml @@ -31,3 +31,4 @@ spec: - name: varlog hostPath: path: /var/log/kube-addon-manager.log + type: FileOrCreate diff --git a/test/kubemark/resources/manifests/kube-apiserver.yaml b/test/kubemark/resources/manifests/kube-apiserver.yaml index f1475e23cd1..af4d1cd357e 100644 --- a/test/kubemark/resources/manifests/kube-apiserver.yaml +++ b/test/kubemark/resources/manifests/kube-apiserver.yaml @@ -56,6 +56,7 @@ spec: - name: logfile hostPath: path: /var/log/kube-apiserver.log + type: FileOrCreate - name: etcssl hostPath: path: /etc/ssl diff --git a/test/kubemark/resources/manifests/kube-controller-manager.yaml b/test/kubemark/resources/manifests/kube-controller-manager.yaml index a3f1b491c07..c465b9ecc9f 100644 --- a/test/kubemark/resources/manifests/kube-controller-manager.yaml +++ b/test/kubemark/resources/manifests/kube-controller-manager.yaml @@ -45,6 +45,7 @@ spec: - name: logfile hostPath: path: /var/log/kube-controller-manager.log + type: FileOrCreate - name: etcssl hostPath: path: /etc/ssl diff --git a/test/kubemark/resources/manifests/kube-scheduler.yaml b/test/kubemark/resources/manifests/kube-scheduler.yaml index ac5a67293e9..daf1728295a 100644 --- a/test/kubemark/resources/manifests/kube-scheduler.yaml +++ b/test/kubemark/resources/manifests/kube-scheduler.yaml @@ -40,3 +40,4 @@ spec: - name: logfile hostPath: path: /var/log/kube-scheduler.log + type: FileOrCreate