diff --git a/api/openapi-spec/swagger.json b/api/openapi-spec/swagger.json index 77ecc0cf6d4d..5b4f0ff675c5 100644 --- a/api/openapi-spec/swagger.json +++ b/api/openapi-spec/swagger.json @@ -3769,10 +3769,6 @@ "description": "Resource template subtype which can run k8s resources", "$ref": "#/definitions/io.argoproj.workflow.v1alpha1.ResourceTemplate" }, - "resubmitPendingPods": { - "description": "ResubmitPendingPods is a flag to enable resubmitting pods that remain Pending after initial submission", - "type": "boolean" - }, "retryStrategy": { "description": "RetryStrategy describes how to retry a template when it fails", "$ref": "#/definitions/io.argoproj.workflow.v1alpha1.RetryStrategy" @@ -4412,6 +4408,10 @@ "type": "integer", "format": "int32" }, + "retryStrategy": { + "description": "RetryStrategy for all templates in the io.argoproj.workflow.v1alpha1.", + "$ref": "#/definitions/io.argoproj.workflow.v1alpha1.RetryStrategy" + }, "schedulerName": { "description": "Set scheduler name for all pods. Will be overridden if container/script template's scheduler name is set. Default scheduler will be used if neither specified.", "type": "string" @@ -4867,6 +4867,10 @@ "type": "integer", "format": "int32" }, + "retryStrategy": { + "description": "RetryStrategy for all templates in the io.argoproj.workflow.v1alpha1.", + "$ref": "#/definitions/io.argoproj.workflow.v1alpha1.RetryStrategy" + }, "schedulerName": { "description": "Set scheduler name for all pods. Will be overridden if container/script template's scheduler name is set. Default scheduler will be used if neither specified.", "type": "string" diff --git a/docs/fields.md b/docs/fields.md index 71e16076d437..f3cea2713214 100644 --- a/docs/fields.md +++ b/docs/fields.md @@ -635,6 +635,7 @@ WorkflowSpec is the specification of a Workflow. |`podPriorityClassName`|`string`|PriorityClassName to apply to workflow pods.| |`podSpecPatch`|`string`|PodSpecPatch holds strategic merge patch to apply against the pod spec. Allows parameterization of container fields which are not strings (e.g. resource limits).| |`priority`|`int32`|Priority is used if controller is configured to process limited number of workflows in parallel. Workflows with higher priority are processed first.| +|`retryStrategy`|[`RetryStrategy`](#retrystrategy)|RetryStrategy for all templates in the io.argoproj.workflow.v1alpha1.| |`schedulerName`|`string`|Set scheduler name for all pods. Will be overridden if container/script template's scheduler name is set. Default scheduler will be used if neither specified.| |`securityContext`|[`PodSecurityContext`](#podsecuritycontext)|SecurityContext holds pod-level security attributes and common container settings. Optional: Defaults to empty. See type description for default values of each field.| |`serviceAccountName`|`string`|ServiceAccountName is the name of the ServiceAccount to run all pods of the workflow as.| @@ -1287,6 +1288,7 @@ WorkflowTemplateSpec is a spec of WorkflowTemplate. |`podPriorityClassName`|`string`|PriorityClassName to apply to workflow pods.| |`podSpecPatch`|`string`|PodSpecPatch holds strategic merge patch to apply against the pod spec. Allows parameterization of container fields which are not strings (e.g. resource limits).| |`priority`|`int32`|Priority is used if controller is configured to process limited number of workflows in parallel. Workflows with higher priority are processed first.| +|`retryStrategy`|[`RetryStrategy`](#retrystrategy)|RetryStrategy for all templates in the io.argoproj.workflow.v1alpha1.| |`schedulerName`|`string`|Set scheduler name for all pods. Will be overridden if container/script template's scheduler name is set. Default scheduler will be used if neither specified.| |`securityContext`|[`PodSecurityContext`](#podsecuritycontext)|SecurityContext holds pod-level security attributes and common container settings. Optional: Defaults to empty. See type description for default values of each field.| |`serviceAccountName`|`string`|ServiceAccountName is the name of the ServiceAccount to run all pods of the workflow as.| @@ -1522,6 +1524,40 @@ PodGC describes how to delete completed pods as they complete |:----------:|:----------:|---------------| |`strategy`|`string`|Strategy is the strategy to use. One of "OnPodCompletion", "OnPodSuccess", "OnWorkflowCompletion", "OnWorkflowSuccess"| +## RetryStrategy + +RetryStrategy provides controls on how to retry a workflow step + +
+Examples with this field (click to open) +
+ +- [`clustertemplates.yaml`](https://github.com/argoproj/argo/blob/master/examples/cluster-workflow-template/clustertemplates.yaml) + +- [`dag-disable-failFast.yaml`](https://github.com/argoproj/argo/blob/master/examples/dag-disable-failFast.yaml) + +- [`retry-backoff.yaml`](https://github.com/argoproj/argo/blob/master/examples/retry-backoff.yaml) + +- [`retry-container-to-completion.yaml`](https://github.com/argoproj/argo/blob/master/examples/retry-container-to-completion.yaml) + +- [`retry-container.yaml`](https://github.com/argoproj/argo/blob/master/examples/retry-container.yaml) + +- [`retry-on-error.yaml`](https://github.com/argoproj/argo/blob/master/examples/retry-on-error.yaml) + +- [`retry-script.yaml`](https://github.com/argoproj/argo/blob/master/examples/retry-script.yaml) + +- [`retry-with-steps.yaml`](https://github.com/argoproj/argo/blob/master/examples/retry-with-steps.yaml) + +- [`templates.yaml`](https://github.com/argoproj/argo/blob/master/examples/workflow-template/templates.yaml) +
+ +### Fields +| Field Name | Field Type | Description | +|:----------:|:----------:|---------------| +|`backoff`|[`Backoff`](#backoff)|Backoff is a backoff strategy| +|`limit`|[`IntOrString`](#intorstring)|Limit is the maximum number of attempts when retrying a container| +|`retryPolicy`|`string`|RetryPolicy is a policy of NodePhase statuses that will be retried| + ## Synchronization Synchronization holds synchronization lock configuration @@ -1844,7 +1880,6 @@ Template is a reusable and composable unit of execution in a workflow |`priority`|`int32`|Priority to apply to workflow pods.| |`priorityClassName`|`string`|PriorityClassName to apply to workflow pods.| |`resource`|[`ResourceTemplate`](#resourcetemplate)|Resource template subtype which can run k8s resources| -|`resubmitPendingPods`|`boolean`|ResubmitPendingPods is a flag to enable resubmitting pods that remain Pending after initial submission| |`retryStrategy`|[`RetryStrategy`](#retrystrategy)|RetryStrategy describes how to retry a template when it fails| |`schedulerName`|`string`|If specified, the pod will be dispatched by specified scheduler. Or it will be dispatched by workflow scope scheduler if specified. If neither specified, the pod will be dispatched by default scheduler.| |`script`|[`ScriptTemplate`](#scripttemplate)|Script runs a portion of code against an interpreter| @@ -2305,6 +2340,24 @@ Prometheus is a prometheus metric to be emitted |`name`|`string`|Name is the name of the metric| |`when`|`string`|When is a conditional statement that decides when to emit the metric| +## Backoff + +Backoff is a backoff strategy to use within retryStrategy + +
+Examples with this field (click to open) +
+ +- [`retry-backoff.yaml`](https://github.com/argoproj/argo/blob/master/examples/retry-backoff.yaml) +
+ +### Fields +| Field Name | Field Type | Description | +|:----------:|:----------:|---------------| +|`duration`|`string`|Duration is the amount to back off. Default unit is seconds, but could also be a duration (e.g. "2m", "1h")| +|`factor`|[`IntOrString`](#intorstring)|Factor is a factor to multiply the base duration after each failed retry| +|`maxDuration`|`string`|MaxDuration is the maximum amount of time allowed for the backoff strategy| + ## Mutex Mutex holds Mutex configuration @@ -2956,40 +3009,6 @@ ResourceTemplate is a template subtype to manipulate kubernetes resources |`setOwnerReference`|`boolean`|SetOwnerReference sets the reference to the workflow on the OwnerReference of generated resource.| |`successCondition`|`string`|SuccessCondition is a label selector expression which describes the conditions of the k8s resource in which it is acceptable to proceed to the following step| -## RetryStrategy - -RetryStrategy provides controls on how to retry a workflow step - -
-Examples with this field (click to open) -
- -- [`clustertemplates.yaml`](https://github.com/argoproj/argo/blob/master/examples/cluster-workflow-template/clustertemplates.yaml) - -- [`dag-disable-failFast.yaml`](https://github.com/argoproj/argo/blob/master/examples/dag-disable-failFast.yaml) - -- [`retry-backoff.yaml`](https://github.com/argoproj/argo/blob/master/examples/retry-backoff.yaml) - -- [`retry-container-to-completion.yaml`](https://github.com/argoproj/argo/blob/master/examples/retry-container-to-completion.yaml) - -- [`retry-container.yaml`](https://github.com/argoproj/argo/blob/master/examples/retry-container.yaml) - -- [`retry-on-error.yaml`](https://github.com/argoproj/argo/blob/master/examples/retry-on-error.yaml) - -- [`retry-script.yaml`](https://github.com/argoproj/argo/blob/master/examples/retry-script.yaml) - -- [`retry-with-steps.yaml`](https://github.com/argoproj/argo/blob/master/examples/retry-with-steps.yaml) - -- [`templates.yaml`](https://github.com/argoproj/argo/blob/master/examples/workflow-template/templates.yaml) -
- -### Fields -| Field Name | Field Type | Description | -|:----------:|:----------:|---------------| -|`backoff`|[`Backoff`](#backoff)|Backoff is a backoff strategy| -|`limit`|[`IntOrString`](#intorstring)|Limit is the maximum number of attempts when retrying a container| -|`retryPolicy`|`string`|RetryPolicy is a policy of NodePhase statuses that will be retried| - ## ScriptTemplate ScriptTemplate is a template subtype to enable scripting through code steps @@ -3739,24 +3758,6 @@ _No description available_ |:----------:|:----------:|---------------| |`configMap`|[`ConfigMapKeySelector`](#configmapkeyselector)|_No description available_| -## Backoff - -Backoff is a backoff strategy to use within retryStrategy - -
-Examples with this field (click to open) -
- -- [`retry-backoff.yaml`](https://github.com/argoproj/argo/blob/master/examples/retry-backoff.yaml) -
- -### Fields -| Field Name | Field Type | Description | -|:----------:|:----------:|---------------| -|`duration`|`string`|Duration is the amount to back off. Default unit is seconds, but could also be a duration (e.g. "2m", "1h")| -|`factor`|[`IntOrString`](#intorstring)|Factor is a factor to multiply the base duration after each failed retry| -|`maxDuration`|`string`|MaxDuration is the maximum amount of time allowed for the backoff strategy| - ## ContinueOn ContinueOn defines if a workflow should continue even if a task or step fails/errors. It can be specified if the workflow should continue when the pod errors, fails or both. @@ -4447,9 +4448,21 @@ IntOrString is a type that can hold an int32 or a string. When used in JSON or Examples with this field (click to open)
-- [`timeouts-step.yaml`](https://github.com/argoproj/argo/blob/master/examples/timeouts-step.yaml) +- [`clustertemplates.yaml`](https://github.com/argoproj/argo/blob/master/examples/cluster-workflow-template/clustertemplates.yaml) -- [`timeouts-workflow.yaml`](https://github.com/argoproj/argo/blob/master/examples/timeouts-workflow.yaml) +- [`dag-disable-failFast.yaml`](https://github.com/argoproj/argo/blob/master/examples/dag-disable-failFast.yaml) + +- [`retry-backoff.yaml`](https://github.com/argoproj/argo/blob/master/examples/retry-backoff.yaml) + +- [`retry-container.yaml`](https://github.com/argoproj/argo/blob/master/examples/retry-container.yaml) + +- [`retry-on-error.yaml`](https://github.com/argoproj/argo/blob/master/examples/retry-on-error.yaml) + +- [`retry-script.yaml`](https://github.com/argoproj/argo/blob/master/examples/retry-script.yaml) + +- [`retry-with-steps.yaml`](https://github.com/argoproj/argo/blob/master/examples/retry-with-steps.yaml) + +- [`templates.yaml`](https://github.com/argoproj/argo/blob/master/examples/workflow-template/templates.yaml) ## Container diff --git a/docs/swagger.md b/docs/swagger.md index cba2ff96a532..4c7423a29be1 100644 --- a/docs/swagger.md +++ b/docs/swagger.md @@ -1541,7 +1541,6 @@ Template is a reusable and composable unit of execution in a workflow | priority | integer | Priority to apply to workflow pods. | No | | priorityClassName | string | PriorityClassName to apply to workflow pods. | No | | resource | [io.argoproj.workflow.v1alpha1.ResourceTemplate](#io.argoproj.workflow.v1alpha1.resourcetemplate) | Resource template subtype which can run k8s resources | No | -| resubmitPendingPods | boolean | ResubmitPendingPods is a flag to enable resubmitting pods that remain Pending after initial submission | No | | retryStrategy | [io.argoproj.workflow.v1alpha1.RetryStrategy](#io.argoproj.workflow.v1alpha1.retrystrategy) | RetryStrategy describes how to retry a template when it fails | No | | schedulerName | string | If specified, the pod will be dispatched by specified scheduler. Or it will be dispatched by workflow scope scheduler if specified. If neither specified, the pod will be dispatched by default scheduler. | No | | script | [io.argoproj.workflow.v1alpha1.ScriptTemplate](#io.argoproj.workflow.v1alpha1.scripttemplate) | Script runs a portion of code against an interpreter | No | @@ -1769,6 +1768,7 @@ WorkflowSpec is the specification of a Workflow. | podPriorityClassName | string | PriorityClassName to apply to workflow pods. | No | | podSpecPatch | string | PodSpecPatch holds strategic merge patch to apply against the pod spec. Allows parameterization of container fields which are not strings (e.g. resource limits). | No | | priority | integer | Priority is used if controller is configured to process limited number of workflows in parallel. Workflows with higher priority are processed first. | No | +| retryStrategy | [io.argoproj.workflow.v1alpha1.RetryStrategy](#io.argoproj.workflow.v1alpha1.retrystrategy) | RetryStrategy for all templates in the io.argoproj.workflow.v1alpha1. | No | | schedulerName | string | Set scheduler name for all pods. Will be overridden if container/script template's scheduler name is set. Default scheduler will be used if neither specified. | No | | securityContext | [io.k8s.api.core.v1.PodSecurityContext](#io.k8s.api.core.v1.podsecuritycontext) | SecurityContext holds pod-level security attributes and common container settings. Optional: Defaults to empty. See type description for default values of each field. | No | | serviceAccountName | string | ServiceAccountName is the name of the ServiceAccount to run all pods of the workflow as. | No | @@ -1928,6 +1928,7 @@ WorkflowTemplateSpec is a spec of WorkflowTemplate. | podPriorityClassName | string | PriorityClassName to apply to workflow pods. | No | | podSpecPatch | string | PodSpecPatch holds strategic merge patch to apply against the pod spec. Allows parameterization of container fields which are not strings (e.g. resource limits). | No | | priority | integer | Priority is used if controller is configured to process limited number of workflows in parallel. Workflows with higher priority are processed first. | No | +| retryStrategy | [io.argoproj.workflow.v1alpha1.RetryStrategy](#io.argoproj.workflow.v1alpha1.retrystrategy) | RetryStrategy for all templates in the io.argoproj.workflow.v1alpha1. | No | | schedulerName | string | Set scheduler name for all pods. Will be overridden if container/script template's scheduler name is set. Default scheduler will be used if neither specified. | No | | securityContext | [io.k8s.api.core.v1.PodSecurityContext](#io.k8s.api.core.v1.podsecuritycontext) | SecurityContext holds pod-level security attributes and common container settings. Optional: Defaults to empty. See type description for default values of each field. | No | | serviceAccountName | string | ServiceAccountName is the name of the ServiceAccount to run all pods of the workflow as. | No | diff --git a/docs/tolerating-pod-deletion.md b/docs/tolerating-pod-deletion.md new file mode 100644 index 000000000000..037bab1f6d52 --- /dev/null +++ b/docs/tolerating-pod-deletion.md @@ -0,0 +1,38 @@ +# Tolerating Pod Deletion + +> v2.12 and after + +In Kubernetes, pods are cattle and can be deleted at any time. Deletion could be manually via `kubectl delete pod`, during a node drain, or for other reasons. + +This can be very inconvenient, your workflow will error, but for reasons outside of your control. + +A [pod disruption budget](examples/default-pdb-support.yaml) can reduce the likelihood of this happening. But, it cannot entirely prevent it. + +To retry pods that were deleted, set `retryStrategy.retryPolicy: OnError`. + +This can be set at a workflow-level, template-level, or globally (using [workflow defaults](default-workflow-specs.md)) + +## Example + +Run the following workflow (which will sleep for 30s): + +```yaml +apiVersion: argoproj.io/v1alpha1 +kind: Workflow +metadata: + name: example +spec: + retryStrategy: + retryPolicy: OnError + limit: 1 + entrypoint: main + templates: + - name: main + container: + image: docker/whalesay:latest + command: + - sleep + - 30s +``` + +Then execute `kubectl delete pod example`. You'll see that the errored node is automatically retried. \ No newline at end of file diff --git a/manifests/base/crds/full/argoproj.io_clusterworkflowtemplates.yaml b/manifests/base/crds/full/argoproj.io_clusterworkflowtemplates.yaml index acb8a0c5d185..31daca0bc2f9 100644 --- a/manifests/base/crds/full/argoproj.io_clusterworkflowtemplates.yaml +++ b/manifests/base/crds/full/argoproj.io_clusterworkflowtemplates.yaml @@ -792,6 +792,28 @@ spec: priority: format: int32 type: integer + retryStrategy: + properties: + backoff: + properties: + duration: + type: string + factor: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + maxDuration: + type: string + type: object + limit: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + retryPolicy: + type: string + type: object schedulerName: type: string securityContext: @@ -3999,8 +4021,6 @@ spec: required: - action type: object - resubmitPendingPods: - type: boolean retryStrategy: properties: backoff: diff --git a/manifests/base/crds/full/argoproj.io_cronworkflows.yaml b/manifests/base/crds/full/argoproj.io_cronworkflows.yaml index d23dc3e3ba44..619185b6a180 100644 --- a/manifests/base/crds/full/argoproj.io_cronworkflows.yaml +++ b/manifests/base/crds/full/argoproj.io_cronworkflows.yaml @@ -813,6 +813,28 @@ spec: priority: format: int32 type: integer + retryStrategy: + properties: + backoff: + properties: + duration: + type: string + factor: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + maxDuration: + type: string + type: object + limit: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + retryPolicy: + type: string + type: object schedulerName: type: string securityContext: @@ -4020,8 +4042,6 @@ spec: required: - action type: object - resubmitPendingPods: - type: boolean retryStrategy: properties: backoff: diff --git a/manifests/base/crds/full/argoproj.io_workflows.yaml b/manifests/base/crds/full/argoproj.io_workflows.yaml index 75346efe14ec..3c83dfa4d071 100644 --- a/manifests/base/crds/full/argoproj.io_workflows.yaml +++ b/manifests/base/crds/full/argoproj.io_workflows.yaml @@ -802,6 +802,28 @@ spec: priority: format: int32 type: integer + retryStrategy: + properties: + backoff: + properties: + duration: + type: string + factor: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + maxDuration: + type: string + type: object + limit: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + retryPolicy: + type: string + type: object schedulerName: type: string securityContext: @@ -4009,8 +4031,6 @@ spec: required: - action type: object - resubmitPendingPods: - type: boolean retryStrategy: properties: backoff: @@ -11387,8 +11407,6 @@ spec: required: - action type: object - resubmitPendingPods: - type: boolean retryStrategy: properties: backoff: @@ -13969,6 +13987,28 @@ spec: priority: format: int32 type: integer + retryStrategy: + properties: + backoff: + properties: + duration: + type: string + factor: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + maxDuration: + type: string + type: object + limit: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + retryPolicy: + type: string + type: object schedulerName: type: string securityContext: @@ -17176,8 +17216,6 @@ spec: required: - action type: object - resubmitPendingPods: - type: boolean retryStrategy: properties: backoff: diff --git a/manifests/base/crds/full/argoproj.io_workflowtemplates.yaml b/manifests/base/crds/full/argoproj.io_workflowtemplates.yaml index b39b3f6708be..887d4618c1f9 100644 --- a/manifests/base/crds/full/argoproj.io_workflowtemplates.yaml +++ b/manifests/base/crds/full/argoproj.io_workflowtemplates.yaml @@ -791,6 +791,28 @@ spec: priority: format: int32 type: integer + retryStrategy: + properties: + backoff: + properties: + duration: + type: string + factor: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + maxDuration: + type: string + type: object + limit: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + retryPolicy: + type: string + type: object schedulerName: type: string securityContext: @@ -3998,8 +4020,6 @@ spec: required: - action type: object - resubmitPendingPods: - type: boolean retryStrategy: properties: backoff: diff --git a/mkdocs.yml b/mkdocs.yml index f80048d72368..6d18944d737b 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -43,6 +43,7 @@ nav: - synchronization.md - workflow-of-workflows.md - memoization.md + - tolerating-pod-deletion.md # all other topics, including API access - Advanced: - workflow-requirements.md diff --git a/pkg/apis/workflow/v1alpha1/generated.pb.go b/pkg/apis/workflow/v1alpha1/generated.pb.go index ff6d110380b9..de86c3e7f1ae 100644 --- a/pkg/apis/workflow/v1alpha1/generated.pb.go +++ b/pkg/apis/workflow/v1alpha1/generated.pb.go @@ -2604,455 +2604,454 @@ func init() { } var fileDescriptor_c23edafa7e7ea072 = []byte{ - // 7162 bytes of a gzipped FileDescriptorProto + // 7145 bytes of a gzipped FileDescriptorProto 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0x7d, 0x5d, 0x6c, 0x1c, 0xd7, 0x75, 0xb0, 0x87, 0xe4, 0x92, 0xbb, 0x67, 0x49, 0x91, 0xba, 0xfa, 0x5b, 0xd3, 0xb2, 0xa8, 0x8c, 0x63, 0x43, 0xfa, 0xbe, 0x84, 0x8c, 0xe5, 0xb8, 0x75, 0xe2, 0xf8, 0x87, 0xcb, 0x3f, 0xd1, 0x12, 0x45, 0xfa, 0x2c, 0x25, 0x35, 0x91, 0x61, 0x77, 0xb8, 0x7b, 0x77, 0x77, 0xc4, 0xdd, 0x99, 0xf5, - 0xcc, 0x2c, 0x69, 0xc6, 0x2d, 0xea, 0x18, 0x0d, 0xd2, 0x34, 0x0d, 0xda, 0x22, 0x40, 0xea, 0x22, - 0x28, 0xd0, 0x97, 0xa2, 0x2f, 0x7d, 0x6d, 0x5f, 0x0a, 0xe4, 0xa1, 0x68, 0x8b, 0x34, 0x40, 0xd1, - 0xf4, 0xa9, 0x79, 0x08, 0x98, 0x98, 0x7d, 0x71, 0xd0, 0xa6, 0x79, 0x0a, 0x5a, 0x08, 0x05, 0x5a, - 0xdc, 0xdf, 0xf9, 0xd9, 0x59, 0x89, 0x9c, 0xa5, 0x84, 0xa0, 0xc9, 0xdb, 0xce, 0x39, 0xe7, 0x9e, - 0x73, 0xff, 0xef, 0xf9, 0xbb, 0x77, 0x61, 0xa1, 0x61, 0x07, 0xcd, 0xee, 0xd6, 0x6c, 0xd5, 0x6d, - 0xcf, 0x59, 0x5e, 0xc3, 0xed, 0x78, 0xee, 0x5d, 0xfe, 0x63, 0xae, 0xb3, 0xdd, 0x98, 0xb3, 0x3a, - 0xb6, 0x3f, 0xb7, 0xeb, 0x7a, 0xdb, 0xf5, 0x96, 0xbb, 0x3b, 0xb7, 0xf3, 0xac, 0xd5, 0xea, 0x34, - 0xad, 0x67, 0xe7, 0x1a, 0xd4, 0xa1, 0x9e, 0x15, 0xd0, 0xda, 0x6c, 0xc7, 0x73, 0x03, 0x97, 0x3c, - 0x17, 0x32, 0x99, 0x55, 0x4c, 0xf8, 0x8f, 0xd9, 0xce, 0x76, 0x63, 0x96, 0x31, 0x99, 0x55, 0x4c, - 0x66, 0x15, 0x93, 0xe9, 0x4f, 0x46, 0x24, 0x37, 0x5c, 0x26, 0x90, 0xf1, 0xda, 0xea, 0xd6, 0xf9, - 0x17, 0xff, 0xe0, 0xbf, 0x84, 0x8c, 0x69, 0x73, 0xfb, 0x05, 0x7f, 0xd6, 0x76, 0x59, 0x95, 0xe6, - 0xaa, 0xae, 0x47, 0xe7, 0x76, 0x7a, 0xea, 0x31, 0x7d, 0x39, 0x42, 0xd3, 0x71, 0x5b, 0x76, 0x75, - 0x6f, 0x6e, 0xe7, 0xd9, 0x2d, 0x1a, 0xf4, 0x56, 0x79, 0xfa, 0xd3, 0x21, 0x69, 0xdb, 0xaa, 0x36, - 0x6d, 0x87, 0x7a, 0x7b, 0x61, 0x93, 0xdb, 0x34, 0xb0, 0xd2, 0x04, 0xcc, 0xf5, 0x2b, 0xe5, 0x75, - 0x9d, 0xc0, 0x6e, 0xd3, 0x9e, 0x02, 0xbf, 0xf2, 0xa0, 0x02, 0x7e, 0xb5, 0x49, 0xdb, 0x56, 0x4f, - 0xb9, 0xe7, 0xfa, 0x95, 0xeb, 0x06, 0x76, 0x6b, 0xce, 0x76, 0x02, 0x3f, 0xf0, 0x92, 0x85, 0xcc, - 0x25, 0x18, 0x9d, 0x6f, 0xbb, 0x5d, 0x27, 0x20, 0x2f, 0x42, 0x6e, 0xc7, 0x6a, 0x75, 0x69, 0xc9, - 0xb8, 0x68, 0x5c, 0x2a, 0x94, 0x9f, 0xfe, 0xce, 0xfe, 0xcc, 0x63, 0x07, 0xfb, 0x33, 0xb9, 0x5b, - 0x0c, 0x78, 0x6f, 0x7f, 0xe6, 0x34, 0x75, 0xaa, 0x6e, 0xcd, 0x76, 0x1a, 0x73, 0x77, 0x7d, 0xd7, - 0x99, 0xbd, 0xd1, 0x6d, 0x6f, 0x51, 0x0f, 0x45, 0x19, 0xf3, 0x9f, 0x0c, 0x98, 0x9c, 0xf7, 0xaa, - 0x4d, 0x7b, 0x87, 0x56, 0x02, 0xc6, 0xbf, 0xb1, 0x47, 0xee, 0xc0, 0x70, 0x60, 0x79, 0x9c, 0x5d, - 0xf1, 0xca, 0xab, 0xb3, 0x19, 0xc6, 0x7b, 0x76, 0xd3, 0xf2, 0x14, 0xbb, 0xf2, 0xd8, 0xc1, 0xfe, - 0xcc, 0xf0, 0xa6, 0xe5, 0x21, 0xe3, 0x4a, 0xde, 0x82, 0x11, 0xc7, 0x75, 0x68, 0x69, 0x88, 0x73, - 0x9f, 0xcf, 0xc4, 0xfd, 0x86, 0xeb, 0xe8, 0xda, 0x96, 0xf3, 0x07, 0xfb, 0x33, 0x23, 0x0c, 0x82, - 0x9c, 0xb1, 0xf9, 0x53, 0x03, 0x0a, 0xf3, 0x5e, 0xa3, 0xdb, 0xa6, 0x4e, 0xe0, 0x13, 0x0f, 0xa0, - 0x63, 0x79, 0x56, 0x9b, 0x06, 0xd4, 0xf3, 0x4b, 0xc6, 0xc5, 0xe1, 0x4b, 0xc5, 0x2b, 0x2f, 0x67, - 0x12, 0xba, 0xa1, 0xd8, 0x94, 0x89, 0xec, 0x61, 0xd0, 0x20, 0x1f, 0x23, 0x52, 0x88, 0x03, 0x05, - 0xcb, 0x0b, 0xec, 0xba, 0x55, 0x0d, 0xfc, 0xd2, 0x10, 0x17, 0xf9, 0x52, 0x26, 0x91, 0xf3, 0x92, - 0x4b, 0xf9, 0xa4, 0x94, 0x58, 0x50, 0x10, 0x1f, 0x43, 0x11, 0xe6, 0x3f, 0x8e, 0x40, 0x5e, 0x21, - 0xc8, 0x45, 0x18, 0x71, 0xac, 0xb6, 0x9a, 0x0c, 0xe3, 0xb2, 0xe0, 0xc8, 0x0d, 0xab, 0xcd, 0x3a, - 0xc8, 0x6a, 0x53, 0x46, 0xd1, 0xb1, 0x82, 0x26, 0x1f, 0x81, 0x08, 0xc5, 0x86, 0x15, 0x34, 0x91, - 0x63, 0xc8, 0x79, 0x18, 0x69, 0xbb, 0x35, 0x5a, 0x1a, 0xbe, 0x68, 0x5c, 0xca, 0x89, 0x0e, 0x5e, - 0x73, 0x6b, 0x14, 0x39, 0x94, 0x95, 0xaf, 0x7b, 0x6e, 0xbb, 0x34, 0x12, 0x2f, 0xbf, 0xec, 0xb9, - 0x6d, 0xe4, 0x18, 0xf2, 0x35, 0x03, 0xa6, 0x54, 0xf5, 0xae, 0xbb, 0x55, 0x2b, 0xb0, 0x5d, 0xa7, - 0x94, 0xe3, 0x03, 0xbe, 0x34, 0x50, 0x47, 0x28, 0x66, 0xe5, 0x92, 0x94, 0x3a, 0x95, 0xc4, 0x60, - 0x8f, 0x60, 0x72, 0x05, 0xa0, 0xd1, 0x72, 0xb7, 0xac, 0x16, 0xeb, 0x83, 0xd2, 0x28, 0xaf, 0xb5, - 0x1e, 0xc2, 0x15, 0x8d, 0xc1, 0x08, 0x15, 0xd9, 0x86, 0x31, 0x4b, 0xac, 0x8a, 0xd2, 0x18, 0xaf, - 0xf7, 0x62, 0xc6, 0x7a, 0xc7, 0x56, 0x56, 0xb9, 0x78, 0xb0, 0x3f, 0x33, 0x26, 0x81, 0xa8, 0x24, - 0x90, 0x4f, 0x40, 0xde, 0xed, 0xb0, 0xaa, 0x5a, 0xad, 0x52, 0xfe, 0xa2, 0x71, 0x29, 0x5f, 0x9e, - 0x92, 0xd5, 0xcb, 0xaf, 0x4b, 0x38, 0x6a, 0x0a, 0x72, 0x19, 0xc6, 0xfc, 0xee, 0x16, 0x1b, 0xad, - 0x52, 0x81, 0xb7, 0x65, 0x52, 0x12, 0x8f, 0x55, 0x04, 0x18, 0x15, 0x9e, 0x3c, 0x0f, 0x45, 0x8f, - 0x56, 0xbb, 0x9e, 0x4f, 0xd9, 0xf0, 0x95, 0x80, 0xf3, 0x3e, 0x25, 0xc9, 0x8b, 0x18, 0xa2, 0x30, - 0x4a, 0x67, 0xfe, 0xf3, 0x28, 0xf4, 0xf4, 0x2b, 0x79, 0x16, 0x8a, 0xb2, 0xbe, 0xd7, 0xdd, 0x86, - 0xcf, 0xa7, 0x57, 0xbe, 0x3c, 0xc9, 0xf8, 0xcc, 0x87, 0x60, 0x8c, 0xd2, 0x90, 0xdb, 0x30, 0xe4, - 0x3f, 0x27, 0x17, 0xfa, 0x2b, 0x99, 0xfa, 0xaf, 0xf2, 0x9c, 0x5e, 0x02, 0xa3, 0x07, 0xfb, 0x33, - 0x43, 0x95, 0xe7, 0x70, 0xc8, 0x7f, 0x8e, 0x6d, 0x50, 0x0d, 0x3b, 0xe0, 0xd3, 0x33, 0xeb, 0x06, - 0xb5, 0x62, 0x07, 0x9a, 0x35, 0xdf, 0xa0, 0x56, 0xec, 0x00, 0x19, 0x57, 0xb6, 0x41, 0x35, 0x83, - 0xa0, 0xc3, 0xa7, 0x77, 0xd6, 0x0d, 0xea, 0xea, 0xe6, 0xe6, 0x86, 0x66, 0xcf, 0xd7, 0x0f, 0x83, - 0x20, 0x67, 0x4c, 0xde, 0x65, 0x3d, 0x29, 0x70, 0xae, 0xb7, 0x27, 0xd7, 0xc5, 0xd5, 0x81, 0xd6, - 0x85, 0xeb, 0xed, 0x69, 0x71, 0x72, 0x4c, 0x34, 0x02, 0xa3, 0xd2, 0x78, 0xeb, 0x6a, 0x75, 0x9f, - 0x2f, 0x83, 0xcc, 0xad, 0x5b, 0x5c, 0xae, 0x24, 0x5a, 0xb7, 0xb8, 0x5c, 0x41, 0xce, 0x98, 0x8d, - 0x8d, 0x67, 0xed, 0xca, 0x55, 0x93, 0x6d, 0x6c, 0xd0, 0xda, 0x8d, 0x8f, 0x0d, 0x5a, 0xbb, 0xc8, - 0xb8, 0x32, 0xe6, 0xae, 0xef, 0xf3, 0x45, 0x92, 0x95, 0xf9, 0x7a, 0xa5, 0x12, 0x67, 0xbe, 0x5e, - 0xa9, 0x20, 0xe3, 0xca, 0x67, 0x55, 0xd5, 0xe7, 0x8b, 0x2a, 0xf3, 0xac, 0x5a, 0x48, 0x30, 0x5f, - 0x59, 0xa8, 0x20, 0xe3, 0x6a, 0x36, 0xe0, 0x8c, 0xc2, 0x20, 0xed, 0xb8, 0xbe, 0xcd, 0x87, 0x86, - 0xd6, 0xc9, 0x1c, 0x14, 0xaa, 0xae, 0x53, 0xb7, 0x1b, 0x6b, 0x56, 0x47, 0x6e, 0xda, 0x7a, 0xb7, - 0x5f, 0x50, 0x08, 0x0c, 0x69, 0xc8, 0x93, 0x30, 0xbc, 0x4d, 0xf7, 0xe4, 0xee, 0x5d, 0x94, 0xa4, - 0xc3, 0xd7, 0xe8, 0x1e, 0x32, 0xb8, 0xf9, 0x6d, 0x03, 0x4e, 0xa5, 0x4c, 0x0b, 0x56, 0xac, 0xeb, - 0xb5, 0xa4, 0x04, 0x5d, 0xec, 0x26, 0x5e, 0x47, 0x06, 0x27, 0x5f, 0x31, 0x60, 0x32, 0x32, 0x4f, - 0xe6, 0xbb, 0xf2, 0x80, 0xc8, 0xbe, 0xf3, 0xc5, 0x78, 0x95, 0xcf, 0x49, 0x89, 0x93, 0x09, 0x04, - 0x26, 0xa5, 0x9a, 0xff, 0xc2, 0x35, 0x92, 0x18, 0x8c, 0x58, 0x70, 0xa2, 0xeb, 0x53, 0x8f, 0x1d, - 0x5f, 0x15, 0x5a, 0xf5, 0x68, 0x20, 0x95, 0x93, 0xa7, 0x67, 0x85, 0xea, 0xc4, 0x6a, 0x31, 0xcb, - 0x14, 0xc5, 0xd9, 0x9d, 0x67, 0x67, 0x05, 0xc5, 0x35, 0xba, 0x57, 0xa1, 0x2d, 0xca, 0x78, 0x94, - 0xc9, 0xc1, 0xfe, 0xcc, 0x89, 0x9b, 0x31, 0x06, 0x98, 0x60, 0xc8, 0x44, 0x74, 0x2c, 0xdf, 0xdf, - 0x75, 0xbd, 0x9a, 0x14, 0x31, 0x74, 0x64, 0x11, 0x1b, 0x31, 0x06, 0x98, 0x60, 0x68, 0xfe, 0xad, - 0x01, 0x63, 0x65, 0xab, 0xba, 0xed, 0xd6, 0xeb, 0x6c, 0xcf, 0xaf, 0x75, 0x3d, 0x71, 0x32, 0x8a, - 0x31, 0xd1, 0x7b, 0xfe, 0xa2, 0x84, 0xa3, 0xa6, 0x20, 0x9b, 0x30, 0x2a, 0xba, 0x43, 0x56, 0xea, - 0x53, 0x91, 0x4a, 0x69, 0x95, 0x91, 0x0f, 0x07, 0x53, 0x19, 0x67, 0x85, 0xca, 0x38, 0xbb, 0xea, - 0x04, 0xeb, 0x4c, 0x0d, 0xb3, 0x9d, 0x46, 0x19, 0x0e, 0xf6, 0x67, 0x46, 0x97, 0x39, 0x0f, 0x94, - 0xbc, 0xd8, 0xf1, 0xd0, 0xb6, 0xde, 0x51, 0xe2, 0xf8, 0x76, 0x5a, 0x08, 0x8f, 0x87, 0xb5, 0x10, - 0x85, 0x51, 0x3a, 0xf3, 0x4d, 0xc8, 0x2d, 0x58, 0xd5, 0x26, 0x25, 0x37, 0x93, 0x53, 0xb7, 0x78, - 0xe5, 0x52, 0x5a, 0x6f, 0xe9, 0x69, 0x1c, 0xed, 0xb0, 0x89, 0x7e, 0x13, 0xdc, 0xfc, 0xc8, 0x80, - 0x73, 0x0b, 0xad, 0xae, 0x1f, 0x50, 0xef, 0xb6, 0x9c, 0x57, 0x9b, 0xb4, 0xdd, 0x69, 0x59, 0x01, - 0x25, 0xbf, 0x0e, 0x79, 0xa6, 0xae, 0xd7, 0xac, 0xc0, 0x92, 0x12, 0xfb, 0x77, 0x05, 0x9f, 0x99, - 0x8c, 0x9a, 0xd5, 0x61, 0x7d, 0xeb, 0x2e, 0xad, 0x06, 0x6b, 0x34, 0xb0, 0xc2, 0xb3, 0x3f, 0x84, - 0xa1, 0xe6, 0x4a, 0xb6, 0x61, 0xc4, 0xef, 0xd0, 0xaa, 0xec, 0xe8, 0xd5, 0x4c, 0x93, 0x3f, 0x59, - 0xed, 0x4a, 0x87, 0x56, 0x43, 0x45, 0x89, 0x7d, 0x21, 0x17, 0x62, 0xfe, 0x87, 0x01, 0x4f, 0xf4, - 0x69, 0xea, 0x75, 0xdb, 0x0f, 0xc8, 0x1b, 0x3d, 0xcd, 0x9d, 0x3d, 0x5c, 0x73, 0x59, 0x69, 0xde, - 0x58, 0x3d, 0xab, 0x14, 0x24, 0xd2, 0xd4, 0xb7, 0x21, 0x67, 0x07, 0xb4, 0xad, 0x74, 0xd4, 0xeb, - 0x99, 0xda, 0xda, 0xa7, 0xfa, 0xe5, 0x09, 0x65, 0x86, 0xac, 0x32, 0x11, 0x28, 0x24, 0x99, 0xff, - 0x60, 0x00, 0x1b, 0xf4, 0x9a, 0x2d, 0x75, 0x8a, 0x91, 0x60, 0xaf, 0xa3, 0x74, 0xd5, 0x27, 0x55, - 0x07, 0x6d, 0xee, 0x75, 0x98, 0xdd, 0x32, 0xa1, 0x09, 0x19, 0x00, 0x39, 0x29, 0x79, 0x13, 0x46, - 0xfd, 0xc0, 0x0a, 0xba, 0xbe, 0xdc, 0x00, 0x97, 0x65, 0xa1, 0xd1, 0x0a, 0x87, 0xde, 0xdb, 0x9f, - 0x39, 0x94, 0xb1, 0x37, 0xab, 0x79, 0x8b, 0x72, 0x28, 0xb9, 0x32, 0xed, 0xaa, 0x4d, 0x7d, 0xdf, - 0x6a, 0x50, 0xb9, 0x1e, 0xb4, 0x76, 0xb5, 0x26, 0xc0, 0xa8, 0xf0, 0xe6, 0xe7, 0x01, 0x16, 0x5c, - 0x27, 0xb0, 0x9d, 0x2e, 0x5d, 0x77, 0xc8, 0x53, 0x90, 0xa3, 0x9e, 0xe7, 0x7a, 0x52, 0x33, 0xd2, - 0xcd, 0x5f, 0x62, 0x40, 0x14, 0x38, 0xf2, 0x0c, 0x5b, 0xc7, 0x76, 0x8b, 0xd6, 0x78, 0xed, 0xf3, - 0xe5, 0x13, 0xaa, 0xf6, 0xcb, 0x1c, 0x8a, 0x12, 0x6b, 0xce, 0xc2, 0xd8, 0x02, 0xb3, 0xed, 0xa8, - 0xc7, 0xf8, 0x46, 0xad, 0xbb, 0x89, 0x98, 0x75, 0xa7, 0xac, 0xb8, 0xef, 0x0e, 0xc1, 0xf8, 0x82, - 0xe7, 0x3a, 0x6a, 0x14, 0x1e, 0xc1, 0x3a, 0x69, 0xc4, 0xd6, 0x49, 0x36, 0xb5, 0x3e, 0x5a, 0xe5, - 0x7e, 0x6b, 0x84, 0xb8, 0x7a, 0xc4, 0x85, 0xbe, 0xb7, 0x32, 0xb8, 0x28, 0xce, 0x2e, 0xec, 0xfc, - 0xf8, 0x14, 0x30, 0xbf, 0x6f, 0xc0, 0x54, 0x94, 0xfc, 0x11, 0xac, 0xc4, 0x7a, 0x7c, 0x25, 0xce, - 0x0f, 0xdc, 0xc4, 0x3e, 0xcb, 0xef, 0xbf, 0x73, 0xf1, 0xa6, 0xb1, 0x6e, 0x66, 0xd6, 0xda, 0xf8, - 0x6e, 0x04, 0x20, 0xdb, 0x37, 0x3f, 0xd0, 0xd6, 0xc7, 0x87, 0xf3, 0xe3, 0xb2, 0x12, 0xe3, 0x51, - 0xe8, 0xbd, 0xc4, 0x37, 0xc6, 0x84, 0xb3, 0x83, 0xd1, 0xaf, 0x36, 0x69, 0xad, 0xdb, 0xa2, 0x72, - 0x89, 0xeb, 0x8e, 0xab, 0x48, 0x38, 0x6a, 0x0a, 0xf2, 0x06, 0x9c, 0xac, 0xba, 0x4e, 0xb5, 0xeb, - 0x79, 0xd4, 0xa9, 0xee, 0x6d, 0x70, 0x37, 0x90, 0x5c, 0xb8, 0xb3, 0xb2, 0xd8, 0xc9, 0x85, 0x24, - 0xc1, 0xbd, 0x34, 0x20, 0xf6, 0x32, 0x12, 0xa6, 0x96, 0xdf, 0xa1, 0x4e, 0x8d, 0x5b, 0x03, 0xf9, - 0xa8, 0xa9, 0xc5, 0xc1, 0xa8, 0xf0, 0xe4, 0x26, 0x9c, 0xf3, 0x03, 0xa6, 0xca, 0x38, 0x8d, 0x45, - 0x6a, 0xd5, 0x5a, 0xb6, 0xc3, 0x14, 0x0b, 0xd7, 0xa9, 0xf9, 0x5c, 0xc1, 0x1f, 0x2e, 0x3f, 0x71, - 0xb0, 0x3f, 0x73, 0xae, 0x92, 0x4e, 0x82, 0xfd, 0xca, 0x92, 0x37, 0x61, 0xda, 0xef, 0x56, 0xab, - 0xd4, 0xf7, 0xeb, 0xdd, 0xd6, 0x6b, 0xee, 0x96, 0x7f, 0xd5, 0xf6, 0x99, 0x56, 0x74, 0xdd, 0x6e, - 0xdb, 0x01, 0x57, 0xe2, 0x73, 0xe5, 0x0b, 0x07, 0xfb, 0x33, 0xd3, 0x95, 0xbe, 0x54, 0x78, 0x1f, - 0x0e, 0x04, 0xe1, 0xac, 0xd8, 0x72, 0x7a, 0x78, 0x8f, 0x71, 0xde, 0xd3, 0x07, 0xfb, 0x33, 0x67, - 0x97, 0x53, 0x29, 0xb0, 0x4f, 0x49, 0x36, 0x82, 0x81, 0xdd, 0xa6, 0x5f, 0x74, 0x1d, 0xca, 0x35, - 0xf5, 0xc8, 0x08, 0x6e, 0x4a, 0x38, 0x6a, 0x0a, 0x72, 0x37, 0x9c, 0x7c, 0x6c, 0x51, 0x48, 0xf5, - 0xfb, 0xe8, 0xbb, 0xd5, 0xe9, 0x83, 0xfd, 0x99, 0xa9, 0xdb, 0x11, 0x4e, 0x6c, 0x61, 0x61, 0x8c, - 0xb7, 0xf9, 0xf7, 0x43, 0x40, 0x7a, 0x37, 0x02, 0x72, 0x0d, 0x46, 0xad, 0x6a, 0xc0, 0x6c, 0x7d, - 0xe1, 0x1f, 0x7a, 0x2a, 0x4d, 0x89, 0x11, 0xa2, 0x90, 0xd6, 0x29, 0x9b, 0x21, 0x34, 0xdc, 0x3d, - 0xe6, 0x79, 0x51, 0x94, 0x2c, 0x88, 0x0b, 0x27, 0x5b, 0x96, 0x1f, 0xa8, 0xb9, 0x5a, 0x63, 0x4d, - 0x96, 0x9b, 0xe4, 0xff, 0x3b, 0x5c, 0xa3, 0x58, 0x89, 0xf2, 0x19, 0x36, 0x73, 0xaf, 0x27, 0x19, - 0x61, 0x2f, 0x6f, 0xe2, 0x01, 0x54, 0xd5, 0x61, 0xc6, 0xf6, 0xc8, 0xec, 0x1e, 0x2e, 0x7d, 0x26, - 0x86, 0x5b, 0xbf, 0x06, 0xf9, 0x18, 0x91, 0x62, 0xfe, 0x64, 0x14, 0xc6, 0x16, 0xe7, 0x57, 0x36, - 0x2d, 0x7f, 0xfb, 0x10, 0x0e, 0x27, 0x36, 0x21, 0xa4, 0x5a, 0x90, 0x5c, 0xd2, 0x4a, 0x5d, 0x40, - 0x4d, 0x41, 0x5c, 0x28, 0x58, 0xca, 0x7d, 0x27, 0xb7, 0xfc, 0x97, 0x33, 0x9a, 0x20, 0x92, 0x4b, - 0xd4, 0x7d, 0x26, 0x41, 0x18, 0xca, 0x20, 0x3e, 0x14, 0x95, 0x70, 0xa4, 0x75, 0x69, 0xf7, 0x67, - 0x74, 0x7b, 0x86, 0x7c, 0x84, 0x1d, 0x1e, 0x01, 0x60, 0x54, 0x0a, 0xf9, 0x34, 0x8c, 0xd7, 0x28, - 0xdb, 0x39, 0xa8, 0x53, 0xb5, 0x29, 0xdb, 0x24, 0x86, 0x59, 0xbf, 0xb0, 0xcd, 0x72, 0x31, 0x02, - 0xc7, 0x18, 0x15, 0xb9, 0x0b, 0x85, 0x5d, 0x3b, 0x68, 0xf2, 0x3d, 0xbd, 0x34, 0xca, 0x87, 0xfa, - 0x33, 0x99, 0x2a, 0xca, 0x38, 0x84, 0xdd, 0x72, 0x5b, 0xf1, 0xc4, 0x90, 0x3d, 0x33, 0x4c, 0xd9, - 0x07, 0xf7, 0x71, 0xf2, 0xdd, 0xa0, 0x10, 0x2f, 0xc0, 0x11, 0x18, 0xd2, 0x10, 0x1f, 0xc6, 0xd9, - 0x47, 0x85, 0xbe, 0xdd, 0x65, 0x2b, 0x44, 0x5a, 0xe9, 0xd9, 0x3c, 0x9f, 0x8a, 0x89, 0xe8, 0x91, - 0xdb, 0x11, 0xb6, 0x18, 0x13, 0xc2, 0x66, 0xdf, 0x6e, 0x93, 0x3a, 0xd2, 0x15, 0xa6, 0x67, 0xdf, - 0xed, 0x26, 0x75, 0x90, 0x63, 0x88, 0xcb, 0xd7, 0x87, 0x54, 0xd3, 0xb8, 0x0f, 0x2c, 0xab, 0x37, - 0x2a, 0xd4, 0xf6, 0xca, 0x27, 0xe4, 0xe2, 0x90, 0xdf, 0x18, 0x11, 0xc1, 0x94, 0x3c, 0xd7, 0x59, - 0x7a, 0xc7, 0x0e, 0x4a, 0x45, 0x5e, 0x29, 0xbd, 0x53, 0xac, 0x73, 0x28, 0x4a, 0x2c, 0x3b, 0x5d, - 0xc4, 0xe0, 0xfa, 0xa5, 0xf1, 0xb8, 0xaa, 0x29, 0x66, 0x80, 0x8f, 0x0a, 0x6f, 0xfe, 0x8d, 0x01, - 0x45, 0xb6, 0xde, 0xd4, 0x1a, 0x79, 0x06, 0x46, 0x03, 0xcb, 0x6b, 0x48, 0x3b, 0x38, 0x22, 0x62, - 0x93, 0x43, 0x51, 0x62, 0x89, 0x05, 0xb9, 0xc0, 0xf2, 0xb7, 0x95, 0x5e, 0xf1, 0xb9, 0x4c, 0xcd, - 0x96, 0x0b, 0x3d, 0x54, 0x29, 0xd8, 0x97, 0x8f, 0x82, 0x33, 0xb9, 0x04, 0x79, 0x76, 0x0e, 0x2c, - 0x5b, 0xbe, 0x70, 0xc8, 0xe5, 0xcb, 0xe3, 0x6c, 0x61, 0x2f, 0x4b, 0x18, 0x6a, 0xac, 0xf9, 0x3c, - 0xe4, 0x96, 0x76, 0xa8, 0xc3, 0x0f, 0x08, 0x5f, 0x9a, 0x81, 0x49, 0xdb, 0x57, 0x99, 0x87, 0xa8, - 0x29, 0xcc, 0x37, 0xe0, 0xc4, 0xd2, 0x3b, 0xb4, 0xda, 0x0d, 0x5c, 0x4f, 0x98, 0x8b, 0xe4, 0x35, - 0x20, 0x3e, 0xf5, 0x76, 0xec, 0x2a, 0x9d, 0xaf, 0x56, 0x99, 0x9a, 0x7c, 0x23, 0xdc, 0x7f, 0xa6, - 0x25, 0x27, 0x52, 0xe9, 0xa1, 0xc0, 0x94, 0x52, 0xe6, 0x9f, 0x18, 0x50, 0x8c, 0x78, 0x6d, 0xd8, - 0xee, 0xd3, 0x58, 0xa8, 0x94, 0xbb, 0xd5, 0x6d, 0xed, 0x64, 0x78, 0x39, 0xab, 0x2b, 0x48, 0x70, - 0x09, 0x57, 0x8d, 0x06, 0x61, 0x28, 0xe3, 0x41, 0xee, 0x9c, 0xbf, 0x32, 0x20, 0x2c, 0xc7, 0xc6, - 0x7d, 0x2b, 0xac, 0x5a, 0x64, 0xdc, 0x25, 0x5f, 0x89, 0x25, 0xef, 0x19, 0x70, 0x2e, 0xde, 0x58, - 0x6e, 0x7a, 0x1f, 0xdd, 0xad, 0x31, 0x23, 0x05, 0x9c, 0xab, 0xa4, 0x73, 0xc3, 0x7e, 0x62, 0xcc, - 0x5b, 0x90, 0x5b, 0xb1, 0xba, 0x0d, 0x7a, 0x28, 0x03, 0x86, 0xcd, 0x22, 0x8f, 0x5a, 0xad, 0x40, - 0x1d, 0x96, 0x72, 0x16, 0xa1, 0x84, 0xa1, 0xc6, 0x9a, 0x7f, 0x31, 0x02, 0xc5, 0x88, 0xf3, 0x96, - 0x6d, 0x00, 0x1e, 0xed, 0xb8, 0xc9, 0xe3, 0x07, 0x69, 0xc7, 0x45, 0x8e, 0x61, 0xd3, 0xcd, 0xa3, - 0x3b, 0xb6, 0x6f, 0xbb, 0x4e, 0xf2, 0xf8, 0x41, 0x09, 0x47, 0x4d, 0x41, 0x66, 0x20, 0x57, 0xa3, - 0x9d, 0xa0, 0xc9, 0x27, 0xf3, 0x48, 0xb9, 0xc0, 0xaa, 0xba, 0xc8, 0x00, 0x28, 0xe0, 0x8c, 0xa0, - 0x4e, 0x83, 0x6a, 0xb3, 0x34, 0xc2, 0xb7, 0x6c, 0x4e, 0xb0, 0xcc, 0x00, 0x28, 0xe0, 0x29, 0xce, - 0xaa, 0xdc, 0xc3, 0x77, 0x56, 0x8d, 0x1e, 0xb3, 0xb3, 0x8a, 0x74, 0xe0, 0x94, 0xef, 0x37, 0x37, - 0x3c, 0x7b, 0xc7, 0x0a, 0x68, 0x38, 0x7b, 0xc6, 0x8e, 0x22, 0xe7, 0xdc, 0xc1, 0xfe, 0xcc, 0xa9, - 0x4a, 0xe5, 0x6a, 0x92, 0x0b, 0xa6, 0xb1, 0x26, 0x15, 0x38, 0x63, 0x3b, 0x3e, 0xad, 0x76, 0x3d, - 0xba, 0xda, 0x70, 0x5c, 0x8f, 0x5e, 0x75, 0x7d, 0xc6, 0x4e, 0xc6, 0x44, 0x94, 0x7b, 0xe0, 0xcc, - 0x6a, 0x1a, 0x11, 0xa6, 0x97, 0x35, 0xbf, 0x6b, 0xc0, 0x78, 0xd4, 0x5f, 0x4d, 0x7c, 0x80, 0xe6, - 0xe2, 0x72, 0x45, 0x6c, 0x25, 0x72, 0x85, 0xbf, 0x92, 0xd9, 0x0d, 0x2e, 0xd8, 0x84, 0xfa, 0x52, - 0x08, 0xc3, 0x88, 0x98, 0x43, 0x84, 0xdc, 0x9e, 0x82, 0x5c, 0xdd, 0xf5, 0xaa, 0x54, 0xee, 0xa1, - 0x7a, 0x95, 0x2c, 0x33, 0x20, 0x0a, 0x9c, 0xf9, 0x91, 0x01, 0x11, 0x09, 0xe4, 0xb7, 0x60, 0x82, - 0xc9, 0xb8, 0xe6, 0x6d, 0xc5, 0x5a, 0x53, 0xce, 0xdc, 0x1a, 0xcd, 0xa9, 0x7c, 0x46, 0xca, 0x9f, - 0x88, 0x81, 0x31, 0x2e, 0x8f, 0xfc, 0x7f, 0x28, 0x58, 0xb5, 0x9a, 0x47, 0x7d, 0x9f, 0x8a, 0x23, - 0xa6, 0x20, 0xdc, 0x7a, 0xf3, 0x0a, 0x88, 0x21, 0x9e, 0x2d, 0xc3, 0x66, 0xad, 0xee, 0xb3, 0x99, - 0x2d, 0x2d, 0x34, 0xbd, 0x0c, 0x99, 0x10, 0x06, 0x47, 0x4d, 0x61, 0x7e, 0x7d, 0x04, 0xe2, 0xb2, - 0x49, 0x0d, 0x26, 0xb7, 0xbd, 0xad, 0x05, 0xee, 0x7a, 0xcc, 0xe2, 0x04, 0x3e, 0x75, 0xb0, 0x3f, - 0x33, 0x79, 0x2d, 0xce, 0x01, 0x93, 0x2c, 0xa5, 0x94, 0x6b, 0x74, 0x2f, 0xb0, 0xb6, 0xb2, 0x6c, - 0x98, 0x4a, 0x4a, 0x94, 0x03, 0x26, 0x59, 0x92, 0xe7, 0xa1, 0xb8, 0xed, 0x6d, 0xa9, 0x45, 0x9e, - 0xf4, 0xbc, 0x5e, 0x0b, 0x51, 0x18, 0xa5, 0x63, 0x5d, 0xb8, 0xed, 0x6d, 0xb1, 0x4d, 0x51, 0x45, - 0x5f, 0x75, 0x17, 0x5e, 0x93, 0x70, 0xd4, 0x14, 0xa4, 0x03, 0x64, 0x5b, 0xf5, 0x9e, 0x76, 0xb4, - 0xca, 0xbd, 0xe8, 0xf0, 0x7e, 0xda, 0xb3, 0xec, 0x30, 0xbd, 0xd6, 0xc3, 0x07, 0x53, 0x78, 0x93, - 0xcf, 0xc3, 0xb9, 0x6d, 0x6f, 0x4b, 0x1e, 0x15, 0x1b, 0x9e, 0xed, 0x54, 0xed, 0x4e, 0x2c, 0xec, - 0xaa, 0x8f, 0x93, 0x6b, 0xe9, 0x64, 0xd8, 0xaf, 0xbc, 0xf9, 0x49, 0x18, 0x8f, 0x06, 0xd5, 0x1e, - 0x10, 0xce, 0x30, 0x3f, 0x30, 0xa0, 0xc0, 0x8d, 0xd2, 0x06, 0xd3, 0x4c, 0xf5, 0x11, 0x34, 0x7c, - 0x9f, 0x23, 0xa8, 0x0e, 0x63, 0xe2, 0xf4, 0xf4, 0xf9, 0xce, 0x5e, 0xbc, 0xf2, 0x62, 0x36, 0xab, - 0x83, 0x27, 0x65, 0x84, 0xba, 0x9c, 0x38, 0x99, 0x7d, 0x54, 0xcc, 0xcd, 0x7f, 0x37, 0x60, 0x74, - 0xd5, 0xe9, 0x74, 0x7f, 0x41, 0x92, 0x13, 0xd6, 0x60, 0x84, 0xd9, 0x13, 0xf1, 0x2c, 0x95, 0xf1, - 0xf2, 0xd3, 0xd1, 0x0c, 0x95, 0x52, 0x3c, 0x43, 0x05, 0xad, 0x5d, 0xe5, 0x6c, 0x15, 0x65, 0x3e, - 0x9b, 0xff, 0xe0, 0x4f, 0x67, 0x1e, 0x7b, 0xef, 0x07, 0x17, 0x1f, 0x33, 0x5b, 0x30, 0x72, 0xdd, - 0x76, 0x0e, 0x63, 0x75, 0x3e, 0x05, 0x39, 0xbf, 0xea, 0x76, 0x94, 0xc9, 0xa9, 0x07, 0xbd, 0xc2, - 0x80, 0x28, 0x70, 0x6a, 0x1a, 0x0d, 0xf7, 0x99, 0x46, 0xef, 0x1b, 0x70, 0x72, 0x8d, 0xb6, 0x5d, - 0xfb, 0x8b, 0x56, 0xe8, 0x2b, 0x66, 0x85, 0x9a, 0x76, 0x20, 0x1d, 0xbd, 0xba, 0xd0, 0x55, 0x3b, - 0x40, 0x06, 0x7f, 0x80, 0x46, 0xc7, 0x03, 0x7e, 0x6c, 0xc3, 0xb9, 0x11, 0xae, 0xfc, 0x30, 0xe0, - 0xa7, 0x10, 0x18, 0xd2, 0x98, 0x5f, 0x36, 0x60, 0x4c, 0x54, 0x82, 0x2a, 0xde, 0x46, 0x1f, 0xde, - 0x77, 0x20, 0xc7, 0xcb, 0xc9, 0x3d, 0xeb, 0xb3, 0xd9, 0xcc, 0x1c, 0xc6, 0x41, 0xe8, 0x35, 0xfc, - 0x27, 0x0a, 0x9e, 0xe6, 0x7b, 0xc3, 0x90, 0x57, 0x8e, 0x15, 0xf2, 0x65, 0x03, 0x8a, 0x96, 0xe3, - 0xb8, 0x81, 0x25, 0xfc, 0x0e, 0x62, 0xf2, 0xde, 0xc8, 0x24, 0x50, 0x31, 0x9d, 0x9d, 0x0f, 0x19, - 0x2e, 0x39, 0x81, 0xb7, 0x17, 0x6e, 0x89, 0x11, 0x0c, 0x46, 0xe5, 0x92, 0xb7, 0x61, 0xb4, 0x65, - 0x6d, 0xd1, 0x96, 0x9a, 0xcb, 0xab, 0x83, 0xd5, 0xe0, 0x3a, 0xe7, 0x25, 0x84, 0x6b, 0xe5, 0x5a, - 0x00, 0x51, 0x0a, 0x9a, 0x7e, 0x19, 0xa6, 0x92, 0x15, 0x25, 0x53, 0x91, 0x71, 0x11, 0x43, 0x71, - 0x5a, 0xcd, 0x77, 0x3e, 0x0f, 0xd4, 0x44, 0x1e, 0x7a, 0xc1, 0x98, 0xfe, 0x0c, 0x14, 0x23, 0x62, - 0x8e, 0x52, 0xd4, 0x7c, 0x1d, 0x8a, 0x6b, 0x34, 0xf0, 0xec, 0x2a, 0x67, 0xf0, 0xa0, 0xd9, 0xf0, - 0x54, 0x8c, 0x4f, 0x9f, 0xd0, 0xc1, 0x17, 0xd9, 0xe4, 0x62, 0x2c, 0x7d, 0x66, 0x29, 0x77, 0x3c, - 0xb7, 0x4d, 0x83, 0x26, 0xed, 0xaa, 0x11, 0xcd, 0xa6, 0x1a, 0x6d, 0x68, 0x36, 0xc2, 0x52, 0x0e, - 0xbf, 0x31, 0x22, 0xc2, 0xbc, 0x0c, 0xb9, 0xb5, 0x6e, 0x40, 0xdf, 0x79, 0xf0, 0x6a, 0x36, 0xef, - 0xc0, 0x38, 0x27, 0xbd, 0xea, 0xb6, 0xd8, 0x46, 0xc1, 0xda, 0xd6, 0x66, 0xdf, 0x49, 0xab, 0x82, - 0x13, 0xa1, 0xc0, 0x31, 0x73, 0xa9, 0xe9, 0xb6, 0x6a, 0xd4, 0x93, 0x3d, 0xa0, 0x47, 0xf4, 0x2a, - 0x87, 0xa2, 0xc4, 0x9a, 0x3f, 0x36, 0xa0, 0xc8, 0x0b, 0xca, 0x05, 0xde, 0x82, 0xb1, 0xa6, 0x90, - 0x23, 0x7b, 0x21, 0x9b, 0x2f, 0x3c, 0x5a, 0xe1, 0xf0, 0x40, 0x90, 0x00, 0x54, 0x22, 0x98, 0xb4, - 0x5d, 0xcb, 0x0e, 0x98, 0xb4, 0xa1, 0x63, 0x97, 0x76, 0x5b, 0x70, 0x46, 0x25, 0xc2, 0xfc, 0xd9, - 0x04, 0xc0, 0x0d, 0xb7, 0x46, 0x65, 0x53, 0xa7, 0x61, 0xc8, 0xae, 0xc9, 0x4e, 0x04, 0x59, 0x68, - 0x68, 0x75, 0x11, 0x87, 0xec, 0x9a, 0x1e, 0x95, 0xa1, 0xbe, 0x7b, 0xec, 0xf3, 0x50, 0xac, 0xd9, - 0x7e, 0xa7, 0x65, 0xed, 0xdd, 0x48, 0xd1, 0x63, 0x16, 0x43, 0x14, 0x46, 0xe9, 0xc8, 0x27, 0x64, - 0xdc, 0x4f, 0xe8, 0x30, 0xa5, 0x44, 0xdc, 0x2f, 0xcf, 0xaa, 0x17, 0x09, 0xf9, 0xbd, 0x00, 0xe3, - 0xca, 0x73, 0xc6, 0xa5, 0xe4, 0x78, 0xa9, 0xd3, 0x2a, 0xb6, 0xb0, 0x19, 0xc1, 0x61, 0x8c, 0x32, - 0xe9, 0xd9, 0x1b, 0x7d, 0x24, 0x9e, 0xbd, 0x45, 0x98, 0xf2, 0x03, 0xd7, 0xa3, 0x35, 0x45, 0xb1, - 0xba, 0x58, 0x22, 0xb1, 0x86, 0x4e, 0x55, 0x12, 0x78, 0xec, 0x29, 0x41, 0x36, 0xe0, 0xf4, 0x6e, - 0x22, 0xa4, 0xca, 0x1b, 0x7f, 0x8a, 0x73, 0x3a, 0x2f, 0x39, 0x9d, 0xbe, 0x9d, 0x42, 0x83, 0xa9, - 0x25, 0xc9, 0x8b, 0x30, 0xa1, 0xaa, 0xc9, 0x8f, 0xc0, 0xd2, 0x69, 0xce, 0x4a, 0x6b, 0xfa, 0x9b, - 0x51, 0x24, 0xc6, 0x69, 0xc9, 0xa7, 0x20, 0xd7, 0x69, 0x5a, 0x3e, 0x95, 0x8e, 0x40, 0xe5, 0x65, - 0xc9, 0x6d, 0x30, 0xe0, 0xbd, 0xfd, 0x99, 0x02, 0x1b, 0x33, 0xfe, 0x81, 0x82, 0x90, 0x5c, 0x01, - 0xd8, 0x72, 0xbb, 0x4e, 0xcd, 0xf2, 0xf6, 0x56, 0x17, 0x65, 0x1c, 0x40, 0xeb, 0x26, 0x65, 0x8d, - 0xc1, 0x08, 0x55, 0x34, 0xf8, 0x5a, 0xb8, 0x7f, 0xf0, 0x95, 0xdc, 0x81, 0x02, 0x8f, 0x99, 0xd0, - 0xda, 0x7c, 0x20, 0x9d, 0x7a, 0x47, 0x71, 0xaf, 0xeb, 0x13, 0xb7, 0xa2, 0x98, 0x60, 0xc8, 0x8f, - 0xbc, 0x09, 0x50, 0xb7, 0x1d, 0xdb, 0x6f, 0x72, 0xee, 0xc5, 0x23, 0x73, 0xd7, 0xed, 0x5c, 0xd6, - 0x5c, 0x30, 0xc2, 0x91, 0xfc, 0x9b, 0x01, 0x27, 0x3d, 0xea, 0xbb, 0x5d, 0xaf, 0x4a, 0x7d, 0x9d, - 0x7f, 0x71, 0x86, 0x2f, 0xfe, 0x5b, 0x19, 0x33, 0x62, 0xd5, 0x8a, 0x9e, 0xc5, 0x24, 0x63, 0x71, - 0x9a, 0x51, 0x15, 0x0e, 0xeb, 0xc1, 0xdf, 0x4b, 0x03, 0xbe, 0xff, 0xc3, 0x99, 0x99, 0xde, 0x24, - 0x6c, 0xcd, 0x9c, 0xcd, 0xa8, 0xdf, 0xfd, 0xe1, 0xcc, 0x94, 0xfa, 0xd6, 0x99, 0x22, 0xbd, 0xed, - 0x62, 0x5b, 0x75, 0xc7, 0xad, 0xad, 0x6e, 0x48, 0x2f, 0xa7, 0xde, 0xaa, 0x37, 0x18, 0x10, 0x05, - 0x8e, 0x5c, 0x82, 0x7c, 0xcd, 0xa2, 0x6d, 0xd7, 0xa1, 0xb5, 0xd2, 0x44, 0xe8, 0x00, 0x5a, 0x94, - 0x30, 0xd4, 0x58, 0xf2, 0x16, 0x8c, 0xda, 0x5c, 0x7d, 0x2e, 0x9d, 0xe0, 0x03, 0x93, 0x4d, 0x4d, - 0x17, 0x1a, 0xb8, 0x48, 0x8b, 0x11, 0xbf, 0x51, 0xb2, 0x25, 0x55, 0x18, 0x73, 0xbb, 0x01, 0x97, - 0x30, 0xc9, 0x25, 0x64, 0x73, 0x9b, 0xae, 0x0b, 0x1e, 0x22, 0xe7, 0x53, 0x7e, 0xa0, 0xe2, 0xcc, - 0xda, 0x5b, 0x6d, 0xda, 0xad, 0x9a, 0x47, 0x9d, 0xd2, 0x14, 0xb7, 0x9c, 0x79, 0x7b, 0x17, 0x24, - 0x0c, 0x35, 0x96, 0xfc, 0x2a, 0x4c, 0xb8, 0xdd, 0x80, 0xaf, 0x12, 0x36, 0xca, 0x7e, 0xe9, 0x24, - 0x27, 0x3f, 0xc9, 0xd6, 0xec, 0x7a, 0x14, 0x81, 0x71, 0x3a, 0xb6, 0x6f, 0x36, 0x5d, 0x3f, 0x60, - 0x1f, 0x7c, 0xeb, 0x38, 0x1b, 0xdf, 0x37, 0xaf, 0x46, 0x70, 0x18, 0xa3, 0x24, 0x5f, 0x33, 0xe0, - 0x64, 0x3b, 0xa9, 0xf6, 0x96, 0xce, 0xf1, 0xce, 0x58, 0xce, 0xa8, 0x60, 0x25, 0xb8, 0x89, 0x00, - 0x57, 0x0f, 0x18, 0x7b, 0xe5, 0x4e, 0x2f, 0xc2, 0xd9, 0xf4, 0x39, 0xfd, 0x20, 0xd5, 0x69, 0x38, - 0xaa, 0x3a, 0x9d, 0x80, 0xf1, 0x68, 0xda, 0x38, 0x77, 0xfc, 0x46, 0x72, 0x01, 0x89, 0x0b, 0x05, - 0xb7, 0x72, 0x1c, 0x8e, 0xdf, 0xf5, 0x4a, 0x8f, 0xe3, 0x57, 0x83, 0x30, 0x94, 0xf1, 0x20, 0xc7, - 0xef, 0x5f, 0x0e, 0x41, 0x58, 0x8e, 0x59, 0xfe, 0xd4, 0xa9, 0x75, 0x5c, 0xdb, 0x09, 0x92, 0x2e, - 0xf3, 0x25, 0x09, 0x47, 0x4d, 0x11, 0x71, 0x13, 0x0f, 0xdd, 0xd7, 0x4d, 0xdc, 0x84, 0x49, 0x8b, - 0x87, 0x86, 0x43, 0xff, 0xde, 0xf0, 0x91, 0xfc, 0x7b, 0x3a, 0xa9, 0x2f, 0xce, 0x05, 0x93, 0x6c, - 0x99, 0x24, 0x3f, 0x2c, 0xce, 0x25, 0x8d, 0x64, 0x92, 0x54, 0x89, 0x73, 0xc1, 0x24, 0x5b, 0xf3, - 0xaf, 0x87, 0x40, 0xad, 0xb6, 0x5f, 0x04, 0xfb, 0x9a, 0x98, 0x30, 0xea, 0x51, 0xbf, 0xdb, 0x0a, - 0xa4, 0xf6, 0xc5, 0x77, 0x34, 0xe4, 0x10, 0x94, 0x18, 0xb6, 0xd9, 0xd0, 0x77, 0xec, 0x60, 0xc1, - 0xad, 0x29, 0x9d, 0x8b, 0x6f, 0x36, 0x4b, 0x12, 0x86, 0x1a, 0x6b, 0xee, 0xc2, 0x04, 0x6b, 0x57, - 0xab, 0x45, 0x5b, 0x95, 0x80, 0x76, 0x7c, 0x52, 0x87, 0x9c, 0xcf, 0x7e, 0x0c, 0xa4, 0x08, 0x87, - 0xf1, 0x76, 0xda, 0x89, 0x18, 0xe2, 0x8c, 0x2f, 0x0a, 0xf6, 0xe6, 0x37, 0x87, 0xa0, 0xa0, 0x7b, - 0xf4, 0x10, 0xd6, 0xfd, 0xd3, 0x30, 0x56, 0xa3, 0x75, 0x8b, 0xb5, 0x5b, 0xae, 0x20, 0x11, 0x38, - 0xe3, 0x20, 0x54, 0x38, 0x32, 0x13, 0xf7, 0xfc, 0x14, 0x7a, 0xbc, 0x3e, 0xdb, 0x50, 0xe0, 0x3f, - 0x96, 0xd5, 0x8d, 0x86, 0xac, 0x33, 0xe4, 0x96, 0xe2, 0x22, 0x5c, 0xa0, 0xfa, 0x13, 0x43, 0xfe, - 0x89, 0x9b, 0x08, 0xb9, 0xc3, 0xdc, 0x44, 0x30, 0x97, 0x81, 0x1d, 0x94, 0x2b, 0x0b, 0xe4, 0x25, - 0xc8, 0xfb, 0x72, 0xf3, 0x92, 0xfd, 0xf2, 0x31, 0x1d, 0x35, 0x93, 0xf0, 0x7b, 0xfb, 0x33, 0x13, - 0x9c, 0x58, 0x01, 0x50, 0x17, 0x31, 0xbf, 0x32, 0x02, 0x11, 0x33, 0xec, 0x10, 0x3d, 0x5c, 0x4b, - 0x58, 0xd6, 0xaf, 0x66, 0xb5, 0xac, 0x95, 0xb9, 0x2a, 0xa6, 0x66, 0xdc, 0x98, 0x66, 0xf5, 0x68, - 0xd2, 0x56, 0x47, 0x8e, 0x8f, 0xae, 0xc7, 0x55, 0xda, 0xea, 0x20, 0xc7, 0xe8, 0x08, 0xef, 0x48, - 0xdf, 0x08, 0xef, 0x1d, 0xc8, 0x35, 0xac, 0x6e, 0x83, 0x4a, 0xdf, 0x66, 0x36, 0xaf, 0x07, 0x0f, - 0x56, 0x89, 0x09, 0xc2, 0x7f, 0xa2, 0xe0, 0xc9, 0x26, 0x48, 0x53, 0x39, 0x12, 0xa5, 0x05, 0x91, - 0x6d, 0x82, 0x68, 0x77, 0xa4, 0x98, 0x20, 0xfa, 0x13, 0x43, 0xfe, 0x4c, 0xf5, 0xa8, 0x8a, 0xbc, - 0x3f, 0x19, 0x68, 0xf9, 0x5c, 0xc6, 0x40, 0x35, 0xe7, 0x21, 0xd6, 0x84, 0xfc, 0x40, 0xc5, 0xd9, - 0x9c, 0x83, 0x62, 0x24, 0xc3, 0x9e, 0xf5, 0xaf, 0xce, 0x6a, 0x8b, 0xf4, 0xef, 0xa2, 0x15, 0x58, - 0xc8, 0x31, 0xe6, 0xb7, 0x86, 0x41, 0x2b, 0x7a, 0xd1, 0x10, 0xb4, 0x55, 0x8d, 0xa4, 0x2f, 0xc7, - 0xf2, 0x61, 0x5c, 0x07, 0x25, 0x96, 0x99, 0x1d, 0x6d, 0xea, 0x35, 0xf4, 0xc1, 0x2b, 0x97, 0xab, - 0x36, 0x3b, 0xd6, 0xa2, 0x48, 0x8c, 0xd3, 0xb2, 0x63, 0xaf, 0x6d, 0x39, 0x76, 0x9d, 0xfa, 0x41, - 0x32, 0x66, 0xb0, 0x26, 0xe1, 0xa8, 0x29, 0xc8, 0x0a, 0x9c, 0xf4, 0x69, 0xb0, 0xbe, 0xeb, 0x50, - 0x4f, 0xe7, 0xe9, 0xc8, 0xc4, 0xad, 0xc7, 0x95, 0xf6, 0x5b, 0x49, 0x12, 0x60, 0x6f, 0x19, 0x6e, - 0xc2, 0x89, 0x9c, 0x29, 0x9d, 0xff, 0x22, 0x57, 0x6b, 0x68, 0xc2, 0x25, 0xf0, 0xd8, 0x53, 0x82, - 0x71, 0xa9, 0x5b, 0x76, 0xab, 0xeb, 0xd1, 0x90, 0xcb, 0x68, 0x9c, 0xcb, 0x72, 0x02, 0x8f, 0x3d, - 0x25, 0x78, 0xb8, 0xb1, 0x65, 0x35, 0xfc, 0xd2, 0x58, 0x24, 0xdc, 0xc8, 0x00, 0x28, 0xe0, 0xe6, - 0x07, 0x43, 0x30, 0x81, 0x34, 0xf0, 0xf6, 0x74, 0xaf, 0xbd, 0x0e, 0xb9, 0x16, 0xcf, 0xe1, 0x32, - 0x32, 0x26, 0x8b, 0x73, 0x21, 0x22, 0xc9, 0x4b, 0x70, 0x22, 0x8b, 0x50, 0xf4, 0x98, 0x0c, 0x99, - 0x61, 0x27, 0xc6, 0xd0, 0x0c, 0x6f, 0x12, 0x69, 0xd4, 0xbd, 0xf8, 0x27, 0x46, 0x8b, 0x11, 0x07, - 0xc6, 0xb6, 0x44, 0xfe, 0xbb, 0xd4, 0x33, 0xb2, 0x4d, 0x6f, 0x99, 0x43, 0xcf, 0x43, 0x13, 0x2a, - 0xa1, 0xfe, 0x5e, 0xf8, 0x13, 0x95, 0x10, 0xf3, 0x03, 0x03, 0x20, 0xbc, 0x42, 0x44, 0xb6, 0x21, - 0xef, 0x3f, 0x17, 0xd3, 0xf0, 0x32, 0x26, 0xa7, 0x48, 0x26, 0x91, 0xb4, 0x05, 0x09, 0x41, 0x2d, - 0xe0, 0x41, 0xea, 0xdd, 0x47, 0xc3, 0xa0, 0x4b, 0x3d, 0x24, 0xed, 0xee, 0x19, 0xa6, 0x19, 0x34, - 0xc2, 0xcc, 0x7e, 0x4d, 0x87, 0x1c, 0x8a, 0x12, 0xcb, 0xb4, 0x03, 0x15, 0x3b, 0x95, 0xab, 0x85, - 0x6b, 0x07, 0x2a, 0xcc, 0x8a, 0x1a, 0x9b, 0xa6, 0x2f, 0xe6, 0x1e, 0x99, 0xbe, 0x38, 0xfa, 0x50, - 0xf4, 0x45, 0x72, 0x19, 0xc6, 0x3c, 0xb7, 0x45, 0xe7, 0xf1, 0x86, 0xf4, 0x6d, 0x68, 0x9f, 0x03, - 0x0a, 0x30, 0x2a, 0x3c, 0x79, 0x1e, 0x8a, 0x5d, 0x9f, 0x56, 0x16, 0xaf, 0x2d, 0x78, 0xb4, 0xe6, - 0xcb, 0xb0, 0xb4, 0xf6, 0x76, 0xdd, 0x0c, 0x51, 0x18, 0xa5, 0x33, 0x7f, 0xc7, 0x80, 0x13, 0x95, - 0xaa, 0x67, 0x77, 0x02, 0xbd, 0x79, 0xde, 0xe0, 0x37, 0x27, 0x02, 0x8b, 0x2d, 0x45, 0x39, 0x15, - 0x9f, 0xec, 0x13, 0x91, 0x13, 0x44, 0xb1, 0x3b, 0x41, 0x02, 0x84, 0x21, 0x0b, 0x36, 0xd4, 0x62, - 0x7b, 0x4e, 0x4e, 0x89, 0x0a, 0x87, 0xa2, 0xc4, 0x9a, 0x77, 0x61, 0xaa, 0x42, 0xdb, 0x56, 0xa7, - 0xc9, 0x23, 0xe4, 0xc2, 0xfd, 0x38, 0x07, 0x05, 0x5f, 0xc1, 0x92, 0x17, 0x90, 0x34, 0x31, 0x86, - 0x34, 0x4c, 0xf5, 0x12, 0x7e, 0x53, 0x15, 0xf3, 0x2d, 0x2a, 0xb7, 0x26, 0xd3, 0x85, 0x15, 0xce, - 0xdc, 0x85, 0xf1, 0xb0, 0x38, 0xad, 0x93, 0x06, 0x4c, 0x56, 0x23, 0x01, 0x46, 0xa4, 0xf5, 0x23, - 0xdf, 0x19, 0xe1, 0xc1, 0xd5, 0x85, 0x38, 0x13, 0x4c, 0x72, 0x35, 0x7f, 0x66, 0xc0, 0xa4, 0x96, - 0x2c, 0xdd, 0x9c, 0x9d, 0xa4, 0x47, 0x77, 0x29, 0x63, 0x5a, 0x5a, 0xbc, 0xf3, 0xee, 0xe3, 0xd5, - 0xed, 0x24, 0xbd, 0xba, 0xc7, 0x2d, 0xb1, 0xc7, 0xb3, 0xfb, 0x67, 0x43, 0x90, 0xd7, 0x79, 0x71, - 0xaf, 0x43, 0x8e, 0x9f, 0xf7, 0x83, 0x9d, 0x01, 0x5c, 0x77, 0x40, 0xc1, 0x89, 0xb1, 0xe4, 0x2e, - 0xb2, 0xcc, 0x77, 0x90, 0x0a, 0x42, 0xeb, 0xb7, 0xbc, 0x00, 0x05, 0x27, 0x72, 0x0d, 0x86, 0xa9, - 0x53, 0x93, 0x87, 0xc1, 0xd1, 0x19, 0xf2, 0x2b, 0x76, 0x4b, 0x4e, 0x0d, 0x19, 0x17, 0x7e, 0xb9, - 0xc2, 0xf5, 0xda, 0x56, 0x20, 0x55, 0xc5, 0xf0, 0x72, 0x05, 0x87, 0xa2, 0xc4, 0x9a, 0xbf, 0x3f, - 0x04, 0xa3, 0x95, 0xee, 0x16, 0x3b, 0xd6, 0xfe, 0xc8, 0x80, 0x53, 0x49, 0x67, 0x69, 0x38, 0x31, - 0xaf, 0x1e, 0xcb, 0xe5, 0x1f, 0xa4, 0xf5, 0xf2, 0x13, 0xb2, 0x2a, 0xa7, 0x52, 0x90, 0x98, 0x56, - 0x03, 0xa6, 0x76, 0x86, 0x59, 0xb0, 0x43, 0xc7, 0x92, 0x05, 0x3b, 0xd1, 0x2f, 0x03, 0xd6, 0xfc, - 0xbb, 0x11, 0x00, 0xd1, 0x23, 0xeb, 0x9d, 0xe0, 0x30, 0xb6, 0xc1, 0x0b, 0x30, 0xae, 0xde, 0x23, - 0xb8, 0x11, 0x46, 0x08, 0xb4, 0x6b, 0x69, 0x25, 0x82, 0xc3, 0x18, 0x25, 0x33, 0x81, 0xa8, 0x13, - 0x78, 0x7b, 0xe2, 0xb0, 0x1b, 0x89, 0x9b, 0x40, 0x4b, 0x1a, 0x83, 0x11, 0x2a, 0x32, 0x1b, 0x33, - 0xe3, 0x45, 0xa6, 0xec, 0x89, 0xfb, 0x98, 0xe0, 0x2f, 0xc2, 0x84, 0xfe, 0x5a, 0xb6, 0x5b, 0x2a, - 0xf9, 0x40, 0xab, 0x9c, 0x1b, 0x51, 0x24, 0xc6, 0x69, 0xc9, 0xcb, 0x70, 0x22, 0x9e, 0xd2, 0x26, - 0x8f, 0x85, 0xb3, 0xb2, 0xf4, 0x89, 0x78, 0x26, 0x1c, 0x26, 0xa8, 0xd9, 0x2c, 0xac, 0x79, 0x7b, - 0xd8, 0x75, 0xe4, 0xf9, 0xa0, 0x67, 0xe1, 0x22, 0x87, 0xa2, 0xc4, 0xb2, 0x2e, 0x64, 0x25, 0xa9, - 0x27, 0xe0, 0xdc, 0xe1, 0x9d, 0x0f, 0xbb, 0xb0, 0x12, 0xc1, 0x61, 0x8c, 0x92, 0x49, 0x90, 0x86, - 0x19, 0xc4, 0xe7, 0x79, 0xc2, 0xb4, 0xea, 0xc0, 0x09, 0x37, 0xae, 0x0b, 0x0b, 0x4f, 0xf6, 0xa7, - 0x0f, 0x99, 0x5b, 0x1f, 0x2b, 0x2b, 0x72, 0xc6, 0x12, 0xaa, 0x73, 0x82, 0xbf, 0x79, 0x0a, 0x4e, - 0x56, 0xba, 0x9d, 0x4e, 0xcb, 0xa6, 0x35, 0x6d, 0xff, 0x9a, 0xaf, 0xc0, 0xa4, 0xbc, 0x2d, 0xa1, - 0x8f, 0xbf, 0x23, 0x5d, 0x7e, 0x34, 0xf7, 0xd9, 0x7e, 0xbe, 0xe7, 0x54, 0x9b, 0x9e, 0xeb, 0x48, - 0xcf, 0x20, 0x71, 0x92, 0x87, 0x56, 0x56, 0xd7, 0x44, 0xf4, 0x88, 0x12, 0x2b, 0x24, 0xf5, 0xcc, - 0xbb, 0xa3, 0xc2, 0x8d, 0x83, 0x04, 0xd6, 0x79, 0x84, 0x4e, 0xec, 0x82, 0xd1, 0x30, 0xa5, 0xf9, - 0x13, 0x03, 0xce, 0x24, 0x1a, 0x28, 0x8f, 0xad, 0xb7, 0x7b, 0x9b, 0xb9, 0x38, 0x58, 0x33, 0xa5, - 0xf7, 0xb5, 0x7f, 0x4b, 0xad, 0x78, 0x4b, 0x5f, 0xcd, 0xde, 0x52, 0x29, 0xaa, 0xb7, 0xbd, 0xff, - 0x69, 0x40, 0x71, 0x73, 0xf3, 0xba, 0xb6, 0x57, 0x10, 0xce, 0xfa, 0xe2, 0xbe, 0xcb, 0x7c, 0x3d, - 0xa0, 0xde, 0x82, 0xdb, 0xee, 0xb4, 0xa8, 0x9e, 0x1c, 0xf2, 0x12, 0x4a, 0x25, 0x95, 0x02, 0xfb, - 0x94, 0x24, 0xab, 0x70, 0x2a, 0x8a, 0x91, 0xe6, 0x1a, 0x6f, 0x54, 0x4e, 0xe6, 0x25, 0xf6, 0xa2, - 0x31, 0xad, 0x4c, 0x92, 0x95, 0xb4, 0xd9, 0xe4, 0xe3, 0x18, 0x3d, 0xac, 0x24, 0x1a, 0xd3, 0xca, - 0x98, 0xeb, 0x50, 0x8c, 0xbc, 0x8c, 0x42, 0x5e, 0x85, 0xa9, 0xaa, 0xdb, 0xee, 0x78, 0xd4, 0xf7, - 0x6d, 0xd7, 0xb9, 0x4e, 0x77, 0x68, 0x4b, 0x36, 0x99, 0xdf, 0x66, 0x59, 0x48, 0xe0, 0xb0, 0x87, - 0xda, 0x7c, 0xff, 0x3c, 0xe8, 0x3b, 0x14, 0xbf, 0xbc, 0x89, 0x91, 0x29, 0x5e, 0x5b, 0xd5, 0xf1, - 0xa4, 0xdc, 0xe0, 0xf1, 0x24, 0xbd, 0x17, 0x27, 0x62, 0x4a, 0x8d, 0x30, 0xa6, 0x34, 0x7a, 0x0c, - 0x31, 0x25, 0xad, 0x04, 0xf6, 0xc4, 0x95, 0xbe, 0x6a, 0xc0, 0xb8, 0xe3, 0xd6, 0xa8, 0xd2, 0x99, - 0xb9, 0xdb, 0xa0, 0x78, 0x65, 0x7d, 0xa0, 0x4e, 0x14, 0xe1, 0x45, 0xc9, 0x51, 0x84, 0x13, 0xf5, - 0x41, 0x15, 0x45, 0x61, 0x4c, 0x34, 0x59, 0x86, 0xbc, 0x55, 0xaf, 0xdb, 0x8e, 0x1d, 0xec, 0xc9, - 0xcb, 0x20, 0xe7, 0xd3, 0x54, 0xfd, 0x79, 0x49, 0x23, 0xcc, 0x4e, 0xf5, 0x85, 0xba, 0x2c, 0xb3, - 0xdb, 0xf5, 0xdd, 0xcb, 0xc2, 0x00, 0x76, 0xbb, 0xca, 0xf2, 0x89, 0x38, 0x91, 0xd4, 0x3d, 0xb1, - 0xf0, 0x2a, 0xa6, 0x09, 0xa3, 0x22, 0xd4, 0x28, 0x9f, 0x4b, 0xe1, 0x4e, 0x4b, 0x11, 0x86, 0x44, - 0x89, 0x21, 0x0d, 0xe5, 0x14, 0x2f, 0xf2, 0xce, 0x2d, 0x67, 0x0e, 0x29, 0x68, 0x3f, 0x7b, 0xba, - 0x57, 0x9c, 0xbc, 0x16, 0xb5, 0x13, 0xc7, 0x0f, 0x63, 0x27, 0x4e, 0xf4, 0xb5, 0x11, 0x1b, 0x30, - 0xea, 0x73, 0x2b, 0x94, 0xc7, 0x57, 0x8b, 0x57, 0x16, 0xb2, 0x1d, 0x24, 0x31, 0x43, 0x56, 0xf4, - 0x8e, 0x80, 0xa1, 0x64, 0x4f, 0x5c, 0xc8, 0xab, 0x20, 0xb0, 0x0c, 0xd1, 0x66, 0x33, 0x7d, 0x92, - 0x2e, 0x47, 0x75, 0x25, 0x40, 0x40, 0x51, 0x0b, 0x21, 0x77, 0x60, 0xb8, 0x66, 0x35, 0x64, 0xb0, - 0xf6, 0xd5, 0xcc, 0x77, 0x5c, 0x94, 0x18, 0x6e, 0x55, 0x2c, 0xce, 0xaf, 0x20, 0xe3, 0x4a, 0xb6, - 0xc3, 0x3b, 0xa0, 0x53, 0x83, 0x1c, 0xc0, 0x71, 0x15, 0x48, 0xd8, 0xcc, 0x3d, 0xb7, 0x48, 0x97, - 0x60, 0x6c, 0xc7, 0x6d, 0x75, 0xdb, 0x32, 0xca, 0x5b, 0xbc, 0x32, 0x9d, 0x36, 0xda, 0xb7, 0x38, - 0x49, 0xb8, 0x09, 0x88, 0x6f, 0x1f, 0x55, 0x59, 0xf2, 0xbe, 0x01, 0x27, 0xd8, 0xd2, 0xd1, 0xf3, - 0xc0, 0x2f, 0x91, 0x01, 0x66, 0xea, 0x4d, 0x9f, 0x1d, 0xad, 0x6a, 0x86, 0x69, 0x45, 0x78, 0x35, - 0x26, 0x01, 0x13, 0x12, 0x49, 0x07, 0xf2, 0xbe, 0x5d, 0xa3, 0x55, 0xcb, 0xf3, 0x4b, 0xa7, 0x8e, - 0x4d, 0x7a, 0xe8, 0x72, 0x93, 0xbc, 0x51, 0x4b, 0x21, 0xbf, 0xcd, 0xdf, 0x30, 0x91, 0xef, 0x0f, - 0xc9, 0x57, 0xa7, 0x4e, 0x1f, 0xe7, 0xab, 0x53, 0xa7, 0xc4, 0x03, 0x26, 0x31, 0x09, 0x98, 0x14, - 0x49, 0xbe, 0x64, 0xc0, 0x19, 0x71, 0x19, 0x34, 0x79, 0x13, 0xf8, 0x4c, 0x46, 0x3b, 0xf7, 0xf1, - 0x83, 0xfd, 0x99, 0x33, 0xf3, 0x69, 0x2c, 0x31, 0x5d, 0x12, 0x79, 0x17, 0x26, 0xbc, 0xa8, 0x4f, - 0x98, 0x07, 0xff, 0xb3, 0x8e, 0x40, 0xcc, 0xbb, 0x2c, 0x12, 0x0f, 0x62, 0x20, 0x8c, 0xcb, 0x22, - 0xcf, 0x42, 0xb1, 0x23, 0x37, 0x37, 0xdb, 0x6f, 0xf3, 0xbc, 0x81, 0x61, 0x71, 0x08, 0x6f, 0x84, - 0x60, 0x8c, 0xd2, 0x90, 0x9b, 0x50, 0x0c, 0xdc, 0x16, 0xf5, 0x64, 0x36, 0x69, 0x89, 0xcf, 0x97, - 0x0b, 0x69, 0x93, 0x7f, 0x53, 0x93, 0x85, 0xae, 0xb7, 0x10, 0xe6, 0x63, 0x94, 0x0f, 0xb3, 0x04, - 0xd5, 0x55, 0x71, 0x8f, 0x1b, 0xaa, 0x8f, 0xc7, 0x2d, 0xc1, 0x4a, 0x14, 0x89, 0x71, 0x5a, 0xb2, - 0x02, 0x27, 0x3b, 0x9e, 0xed, 0x7a, 0x76, 0xb0, 0xb7, 0xd0, 0xb2, 0x7c, 0x9f, 0x33, 0x98, 0xe6, - 0x0c, 0x74, 0x38, 0x61, 0x23, 0x49, 0x80, 0xbd, 0x65, 0xc8, 0x25, 0xc8, 0x2b, 0x60, 0xe9, 0x09, - 0xae, 0xde, 0xf1, 0x9d, 0x4c, 0x95, 0x45, 0x8d, 0xed, 0x73, 0xb3, 0xed, 0x7c, 0x96, 0x9b, 0x6d, - 0xa4, 0x06, 0xe7, 0xad, 0x6e, 0xe0, 0xf2, 0x74, 0xf4, 0x78, 0x91, 0x4d, 0x77, 0x9b, 0x3a, 0xa5, - 0x8b, 0xfc, 0x78, 0xbb, 0x78, 0xb0, 0x3f, 0x73, 0x7e, 0xfe, 0x3e, 0x74, 0x78, 0x5f, 0x2e, 0xa4, - 0x0d, 0x79, 0x2a, 0x6f, 0xe7, 0x95, 0x3e, 0x36, 0xc0, 0xb9, 0x12, 0xbf, 0xe2, 0xa7, 0xe2, 0xd3, - 0x02, 0x86, 0x5a, 0x04, 0xd9, 0x84, 0x62, 0xd3, 0xf5, 0x83, 0xf9, 0x96, 0x6d, 0xf9, 0xd4, 0x2f, - 0x3d, 0xc9, 0xe7, 0x49, 0xea, 0x91, 0x78, 0x55, 0x91, 0x85, 0xd3, 0xe4, 0x6a, 0x58, 0x12, 0xa3, - 0x6c, 0x08, 0xe5, 0xde, 0xe6, 0x2e, 0x1f, 0x35, 0xd7, 0x09, 0xe8, 0x3b, 0x41, 0xe9, 0x02, 0x6f, - 0xcb, 0x33, 0x69, 0x9c, 0x37, 0xdc, 0x5a, 0x25, 0x4e, 0x2d, 0x36, 0x86, 0x04, 0x10, 0x93, 0x3c, - 0x99, 0xc9, 0xdf, 0x71, 0x6b, 0x95, 0x0e, 0xad, 0x6e, 0x58, 0x41, 0xb5, 0x59, 0x9a, 0x89, 0x7b, - 0x4d, 0x36, 0x22, 0x38, 0x8c, 0x51, 0x92, 0x35, 0x38, 0xe5, 0x51, 0x9f, 0x7b, 0x68, 0x36, 0xa8, - 0x53, 0xb3, 0x9d, 0xc6, 0x86, 0x5b, 0xf3, 0x4b, 0x26, 0x1f, 0x42, 0xed, 0x5c, 0xc2, 0x5e, 0x12, - 0x4c, 0x2b, 0x47, 0xaa, 0x30, 0xd6, 0x16, 0x39, 0xbf, 0xa5, 0xa7, 0x06, 0xd0, 0x46, 0x65, 0xde, - 0xb0, 0x38, 0xcb, 0xe4, 0x07, 0x2a, 0xce, 0xe4, 0x9b, 0x06, 0x4c, 0xfa, 0x71, 0xab, 0xb6, 0xf4, - 0xf1, 0x41, 0x4e, 0xd0, 0x38, 0xaf, 0xf2, 0x33, 0xbc, 0xcf, 0xe3, 0xc0, 0x7b, 0xbd, 0x20, 0x4c, - 0x56, 0x42, 0xb4, 0x9e, 0xa7, 0xd3, 0x97, 0x9e, 0x1e, 0xa8, 0xf5, 0x9c, 0x87, 0x6a, 0x3d, 0xff, - 0x40, 0xc5, 0x99, 0x5c, 0x86, 0xb1, 0xc0, 0x6e, 0x53, 0xb7, 0x1b, 0x94, 0x9e, 0x89, 0x87, 0x15, - 0x36, 0x05, 0x18, 0x15, 0x7e, 0xfa, 0x15, 0x38, 0xd9, 0xa3, 0x5f, 0x1f, 0x29, 0x2b, 0xfc, 0x47, - 0xcc, 0x9e, 0x8e, 0x58, 0x34, 0xc7, 0x6d, 0x07, 0xae, 0xc0, 0x49, 0xf9, 0x82, 0x29, 0x53, 0xbe, - 0x5a, 0x5d, 0xfd, 0x5a, 0x54, 0x24, 0xae, 0x8a, 0x49, 0x02, 0xec, 0x2d, 0xc3, 0x16, 0x40, 0x55, - 0x3c, 0x17, 0x24, 0x32, 0x50, 0x47, 0xe2, 0x3e, 0xaf, 0x85, 0x08, 0x0e, 0x63, 0x94, 0xe6, 0x9f, - 0x1b, 0x30, 0x11, 0x53, 0x04, 0x8e, 0x3d, 0x84, 0xb2, 0x0c, 0xa4, 0x6d, 0x7b, 0x9e, 0xeb, 0x09, - 0x6d, 0x6a, 0x8d, 0x6d, 0x71, 0xbe, 0xbc, 0x8b, 0xca, 0xef, 0x40, 0xad, 0xf5, 0x60, 0x31, 0xa5, - 0x84, 0xf9, 0x5f, 0x43, 0x10, 0x26, 0x7f, 0xe8, 0x8b, 0x7f, 0x46, 0xdf, 0x8b, 0x7f, 0x9f, 0x80, - 0xfc, 0x5d, 0xdf, 0x75, 0x36, 0xc2, 0xeb, 0x81, 0x7a, 0x28, 0x5e, 0xab, 0xac, 0xdf, 0xe0, 0x94, - 0x9a, 0x82, 0x53, 0xbf, 0xbd, 0x6c, 0xb7, 0x82, 0xde, 0x4b, 0x74, 0xaf, 0xbd, 0x2e, 0xe0, 0xa8, - 0x29, 0xf8, 0x9b, 0x44, 0x3b, 0x54, 0xbb, 0x30, 0xc3, 0x37, 0x89, 0x18, 0x10, 0x05, 0x8e, 0xcc, - 0x41, 0x41, 0x7b, 0x40, 0xa5, 0x43, 0x56, 0xf7, 0x94, 0xf6, 0x94, 0x62, 0x48, 0xc3, 0x15, 0x3b, - 0xe9, 0xe5, 0x93, 0xc6, 0xec, 0x72, 0x46, 0x95, 0x38, 0xe1, 0x2a, 0x14, 0xbb, 0xbe, 0x02, 0xa3, - 0x96, 0x12, 0x4d, 0xf6, 0xc9, 0xf5, 0x4f, 0xf6, 0x31, 0xbf, 0x3c, 0x0c, 0x63, 0xb7, 0xa8, 0xc7, - 0xaf, 0xf1, 0x5e, 0x86, 0xb1, 0x1d, 0xf1, 0x53, 0xf6, 0x7d, 0xa8, 0x2d, 0x0b, 0x30, 0x2a, 0x3c, - 0xeb, 0x80, 0xad, 0xae, 0xdd, 0xaa, 0x2d, 0x86, 0xab, 0x41, 0x77, 0x40, 0x59, 0x21, 0x30, 0xa4, - 0x61, 0x05, 0x1a, 0x4c, 0xd5, 0x6d, 0xb7, 0xed, 0x20, 0x79, 0x83, 0x67, 0x45, 0x21, 0x30, 0xa4, - 0x21, 0xcf, 0xc0, 0x68, 0xc3, 0x0e, 0x36, 0xad, 0x46, 0x32, 0x32, 0xb1, 0xc2, 0xa1, 0x28, 0xb1, - 0xdc, 0xad, 0x6e, 0x07, 0x9b, 0x1e, 0xe5, 0x6e, 0xba, 0x9e, 0x4c, 0xf7, 0x95, 0x08, 0x0e, 0x63, - 0x94, 0xbc, 0x4a, 0xae, 0x6c, 0x99, 0x74, 0x77, 0x87, 0x55, 0x52, 0x08, 0x0c, 0x69, 0xd8, 0x44, - 0xaa, 0xba, 0xed, 0x8e, 0xdd, 0x92, 0xa9, 0x26, 0x91, 0x89, 0xb4, 0x20, 0xe1, 0xa8, 0x29, 0x18, - 0x35, 0xdb, 0x0a, 0xea, 0xae, 0xd7, 0x4e, 0x3e, 0xe9, 0xb2, 0x21, 0xe1, 0xa8, 0x29, 0xcc, 0x5b, - 0x30, 0x21, 0x96, 0xc4, 0x42, 0xcb, 0xb2, 0xdb, 0x2b, 0x0b, 0x64, 0xa9, 0x27, 0x75, 0xe9, 0x72, - 0x4a, 0xea, 0xd2, 0x99, 0x58, 0xa1, 0x94, 0x14, 0xa6, 0x6f, 0x0f, 0x41, 0xfe, 0x11, 0xbe, 0x70, - 0x55, 0x8d, 0xbd, 0x70, 0x75, 0x0c, 0xcf, 0x21, 0xa5, 0xbd, 0x6e, 0xb5, 0x9d, 0x78, 0xdd, 0x6a, - 0x61, 0xc0, 0x04, 0xbb, 0xfb, 0xbe, 0x6c, 0xf5, 0x63, 0x03, 0xf4, 0x8d, 0x01, 0xbe, 0x07, 0x94, - 0x6d, 0xae, 0x14, 0x3c, 0x82, 0xce, 0x74, 0x63, 0x9d, 0xb9, 0x36, 0x50, 0x2b, 0xa3, 0x55, 0xef, - 0xfb, 0xb4, 0xde, 0x47, 0x06, 0x94, 0xd2, 0x0a, 0x3c, 0x82, 0xd7, 0xbc, 0x9c, 0xf8, 0x6b, 0x5e, - 0xab, 0xc7, 0xd6, 0xd8, 0x3e, 0xaf, 0x7a, 0xfd, 0xa0, 0x4f, 0x53, 0xf9, 0x7b, 0x5a, 0x6f, 0xa9, - 0x33, 0xc0, 0x18, 0x20, 0x72, 0x21, 0xb8, 0xa6, 0x9f, 0x1f, 0x6f, 0xc1, 0xa8, 0xd0, 0x30, 0xe5, - 0xd8, 0xbe, 0x98, 0xf1, 0x30, 0x60, 0x2c, 0xa4, 0x3f, 0x89, 0xff, 0x46, 0xc9, 0xd6, 0xfc, 0x9e, - 0x01, 0xe3, 0x8f, 0xf0, 0x2d, 0xb6, 0xad, 0xf8, 0xe8, 0xbd, 0x34, 0xd0, 0xe8, 0xf5, 0x19, 0xb1, - 0x0f, 0xa6, 0x21, 0xf6, 0x06, 0x1a, 0x71, 0xa0, 0xa0, 0xd4, 0x2d, 0x95, 0x6a, 0xfb, 0xd2, 0x40, - 0x2e, 0xdb, 0x70, 0xfb, 0x57, 0x10, 0x1f, 0x43, 0x11, 0x89, 0x30, 0xec, 0xd0, 0xa1, 0xc2, 0xb0, - 0x8f, 0x3c, 0x1c, 0x90, 0x6e, 0x0d, 0x8f, 0x3c, 0x14, 0x6b, 0xf8, 0xfc, 0xb1, 0x5b, 0xc3, 0x4f, - 0x3e, 0x7c, 0x6b, 0x38, 0xe2, 0x2e, 0xcc, 0x0d, 0xe0, 0x2e, 0x7c, 0x17, 0x4e, 0xef, 0x84, 0x47, - 0xaf, 0x9e, 0x2f, 0xf2, 0x81, 0xa9, 0xcb, 0xa9, 0x36, 0x30, 0x53, 0x23, 0xfc, 0x80, 0x3a, 0x41, - 0xe4, 0xd0, 0x0e, 0xaf, 0xa5, 0xdd, 0x4a, 0x61, 0x87, 0xa9, 0x42, 0x92, 0xce, 0xa2, 0xb1, 0x43, - 0x38, 0x8b, 0xbe, 0x65, 0xc0, 0x19, 0x2b, 0xed, 0x31, 0x65, 0x19, 0x65, 0x78, 0x6d, 0x20, 0x6f, - 0x5f, 0x8c, 0xa3, 0x74, 0xbd, 0xa5, 0xa1, 0x30, 0xbd, 0x0e, 0x4c, 0x59, 0x55, 0x0e, 0x63, 0x11, - 0xd3, 0x4f, 0x77, 0xf5, 0x7e, 0x3d, 0x19, 0xa8, 0x01, 0xde, 0xdb, 0x95, 0x81, 0xd5, 0x8c, 0x63, - 0x08, 0xd6, 0x14, 0x07, 0x08, 0xd6, 0x24, 0x3c, 0x79, 0xe3, 0xc7, 0xe4, 0xc9, 0x73, 0x60, 0xca, - 0x6e, 0x5b, 0x0d, 0xba, 0xd1, 0x6d, 0xb5, 0x44, 0xe6, 0x9e, 0x5f, 0x9a, 0xe0, 0xbc, 0x53, 0xd3, - 0xc7, 0xae, 0xbb, 0x55, 0xab, 0x95, 0x7c, 0xb2, 0x4f, 0xa7, 0xdd, 0xae, 0x26, 0x38, 0x61, 0x0f, - 0x6f, 0x36, 0x2d, 0xf9, 0x95, 0x28, 0x1a, 0xb0, 0xde, 0xe6, 0x71, 0x0c, 0xf9, 0xdc, 0xfd, 0xd5, - 0x10, 0x8c, 0x51, 0x1a, 0x72, 0x0d, 0x0a, 0x35, 0xc7, 0x97, 0x19, 0xb2, 0x93, 0x7c, 0x97, 0xfa, - 0x24, 0xdb, 0xdb, 0x16, 0x6f, 0x54, 0x74, 0x6e, 0xec, 0xf9, 0x94, 0x3b, 0x75, 0x1a, 0x8f, 0x61, - 0x79, 0xb2, 0xc6, 0x99, 0xc9, 0x77, 0x5d, 0x44, 0xe0, 0xe1, 0x62, 0x1f, 0x67, 0xd4, 0xe2, 0x0d, - 0xf5, 0x0c, 0xcd, 0x84, 0x14, 0x27, 0x5f, 0x6b, 0x09, 0x39, 0x44, 0xde, 0x24, 0x3b, 0x79, 0xdf, - 0x37, 0xc9, 0x6e, 0xc2, 0xb9, 0x20, 0x68, 0xc5, 0xe2, 0xd9, 0xf2, 0xda, 0x22, 0xbf, 0xc3, 0x9a, - 0x13, 0xcf, 0x58, 0x6e, 0x6e, 0x5e, 0x4f, 0x23, 0xc1, 0x7e, 0x65, 0x79, 0x60, 0x37, 0x68, 0x69, - 0x67, 0xf4, 0x85, 0x41, 0x02, 0xbb, 0x61, 0xe2, 0x80, 0x0c, 0xec, 0x86, 0x00, 0x8c, 0x4a, 0x21, - 0xeb, 0xfd, 0xdc, 0xf0, 0xa7, 0xf8, 0x1e, 0x73, 0x74, 0xa7, 0x7a, 0xd4, 0x8f, 0x7b, 0xfa, 0xbe, - 0x7e, 0xdc, 0x1e, 0xbf, 0xf3, 0x99, 0x23, 0xf8, 0x9d, 0xef, 0xf0, 0xfb, 0x92, 0x2b, 0x0b, 0xd2, - 0x67, 0x9f, 0x4d, 0x63, 0xe3, 0xd7, 0x40, 0x44, 0xee, 0x05, 0xff, 0x89, 0x82, 0x27, 0xd9, 0x80, - 0xd3, 0x1d, 0xb7, 0xd6, 0xe3, 0xb6, 0xe6, 0x4e, 0xfa, 0xc8, 0xbd, 0xe2, 0x8d, 0x14, 0x1a, 0x4c, - 0x2d, 0xc9, 0x37, 0xf0, 0x10, 0x5e, 0x2a, 0xf1, 0x8e, 0x11, 0x1b, 0x78, 0x08, 0xc6, 0x28, 0x4d, - 0xd2, 0x8b, 0xfb, 0xf8, 0x43, 0xf3, 0xe2, 0x4e, 0x3f, 0x02, 0x2f, 0xee, 0x13, 0x87, 0xf6, 0xe2, - 0xfe, 0x26, 0x9c, 0xea, 0xb8, 0xb5, 0x45, 0xdb, 0xf7, 0xba, 0xfc, 0xcf, 0x3c, 0xca, 0xdd, 0x5a, - 0x83, 0x06, 0xdc, 0x0d, 0x5c, 0xbc, 0x72, 0x25, 0x5a, 0x49, 0xf1, 0x7f, 0x46, 0xb3, 0xf2, 0xff, - 0x8c, 0xf8, 0x22, 0x4f, 0x94, 0xe2, 0x76, 0x0f, 0x4f, 0x3e, 0x49, 0x41, 0x62, 0x9a, 0x9c, 0xa8, - 0xd7, 0xf7, 0xe2, 0x43, 0xf3, 0xfa, 0xbe, 0x0a, 0x79, 0xbf, 0xd9, 0x0d, 0x6a, 0xee, 0xae, 0xc3, - 0xe3, 0x01, 0x05, 0xfd, 0x08, 0x70, 0xbe, 0x22, 0xe1, 0xf7, 0xf6, 0x67, 0xa6, 0xd4, 0xef, 0x88, - 0x95, 0x2f, 0x21, 0xe4, 0x1b, 0x7d, 0x72, 0x32, 0xcd, 0x63, 0xce, 0xc9, 0x3c, 0x77, 0xa4, 0x7c, - 0xcc, 0x34, 0x6f, 0xf6, 0x53, 0x3f, 0x0f, 0xde, 0xec, 0xdf, 0x33, 0x60, 0x62, 0x27, 0xea, 0x38, - 0x91, 0x4e, 0xf6, 0x6c, 0xa1, 0xbe, 0x98, 0x0b, 0xa6, 0x6c, 0xb2, 0xbd, 0x2a, 0x06, 0xba, 0x97, - 0x04, 0x60, 0x5c, 0xf8, 0xe0, 0xce, 0xec, 0x6f, 0x4c, 0xc2, 0x89, 0xc4, 0xfb, 0xbc, 0xfa, 0xf1, - 0x01, 0xe3, 0xb0, 0x8f, 0x0f, 0xc4, 0x5e, 0x07, 0x18, 0x7a, 0xa8, 0xaf, 0x03, 0x0c, 0x1f, 0xfb, - 0xeb, 0x00, 0x91, 0x57, 0x10, 0x46, 0x1e, 0xf0, 0x0a, 0xc2, 0x3c, 0x4c, 0xaa, 0x94, 0x30, 0x2a, - 0x6f, 0x87, 0x0b, 0x9f, 0xa1, 0xbe, 0xff, 0xb0, 0x10, 0x47, 0x63, 0x92, 0x9e, 0xfc, 0x06, 0xe4, - 0x1c, 0x5e, 0x70, 0x74, 0x80, 0x17, 0x7c, 0xe2, 0x03, 0xc6, 0x35, 0x50, 0xf9, 0x88, 0x8e, 0xca, - 0x16, 0xc8, 0x71, 0xd8, 0x3d, 0xf5, 0x03, 0x85, 0x50, 0xf2, 0x06, 0x94, 0xdc, 0x7a, 0xbd, 0xe5, - 0x5a, 0xb5, 0xf0, 0x05, 0x03, 0xe5, 0xc6, 0x14, 0xd9, 0xad, 0x17, 0x25, 0x83, 0xd2, 0x7a, 0x1f, - 0x3a, 0xec, 0xcb, 0x81, 0x19, 0x0a, 0x93, 0xf1, 0x97, 0x35, 0xfc, 0x52, 0x81, 0x37, 0xf3, 0xd7, - 0x8e, 0xa3, 0x99, 0xf1, 0x67, 0x3c, 0x64, 0x83, 0xc3, 0x9b, 0x27, 0x71, 0x2c, 0x26, 0x6b, 0x42, - 0x3c, 0x38, 0xdb, 0x49, 0x33, 0xa3, 0x7c, 0x99, 0xb3, 0x75, 0x3f, 0x63, 0xee, 0x82, 0x94, 0x72, - 0x36, 0xd5, 0x10, 0xf3, 0xb1, 0x0f, 0xe7, 0xe8, 0xdb, 0x06, 0xf9, 0x87, 0xf6, 0xb6, 0x41, 0xfc, - 0x45, 0xea, 0x89, 0x47, 0xf1, 0x22, 0x35, 0xf9, 0x69, 0xea, 0x93, 0x1a, 0xc2, 0xfa, 0xf8, 0xc2, - 0x71, 0x0c, 0xf6, 0xcf, 0xdd, 0xb3, 0x1a, 0x7f, 0x6c, 0xc0, 0xb4, 0x98, 0x52, 0x69, 0x7f, 0x37, - 0x22, 0x33, 0xaf, 0x8e, 0xc1, 0x6b, 0xcd, 0x83, 0x5f, 0x95, 0x98, 0x20, 0xee, 0x66, 0xbd, 0x8f, - 0x70, 0xf2, 0xd5, 0x94, 0xd3, 0x72, 0x72, 0x00, 0xdb, 0x3c, 0x35, 0x3b, 0x5a, 0xea, 0x6b, 0x0f, - 0x38, 0x20, 0xa7, 0xf7, 0xc4, 0x7b, 0x47, 0x7d, 0x5f, 0xdb, 0xba, 0x19, 0x3d, 0x8a, 0xb2, 0x3e, - 0x78, 0x15, 0xee, 0x3d, 0xd1, 0x97, 0xbe, 0xbe, 0x64, 0xc0, 0xe9, 0xb4, 0x4d, 0x22, 0xa5, 0x16, - 0x95, 0x78, 0x2d, 0x06, 0x73, 0xfe, 0x45, 0xeb, 0x70, 0x3c, 0xaf, 0x67, 0xfc, 0xe1, 0x68, 0xc4, - 0x61, 0x19, 0xd0, 0xce, 0x2f, 0x73, 0x8d, 0x33, 0xe5, 0x1a, 0xc7, 0xde, 0x6f, 0xcf, 0x3d, 0xc2, - 0xf7, 0xdb, 0x47, 0x33, 0xbc, 0xdf, 0x3e, 0xf6, 0x28, 0xdf, 0x6f, 0xcf, 0x1f, 0xf2, 0xfd, 0xf6, - 0xc2, 0xcf, 0xcd, 0xfb, 0xed, 0xe6, 0x87, 0x06, 0x4c, 0xfd, 0x5f, 0xff, 0x83, 0xaa, 0x1f, 0x45, - 0x22, 0x86, 0x8f, 0xf0, 0x9f, 0xa9, 0xee, 0xc6, 0x63, 0x30, 0x4b, 0xc7, 0xd2, 0xc8, 0x3e, 0xb1, - 0x98, 0xb7, 0x21, 0xcd, 0x0a, 0x3c, 0xdc, 0x25, 0xb8, 0x58, 0x36, 0xcb, 0xd0, 0xa1, 0xb3, 0x59, - 0xfe, 0x27, 0xa5, 0x57, 0xf9, 0xb9, 0xf9, 0xee, 0xc3, 0xfa, 0x27, 0x9e, 0xd3, 0x69, 0xff, 0xc4, - 0x93, 0xf8, 0xe7, 0x9d, 0xe4, 0x3f, 0xb1, 0x0c, 0x3d, 0xbc, 0x7f, 0x62, 0x29, 0xcf, 0x7e, 0xe7, - 0xc3, 0x0b, 0x8f, 0x7d, 0xef, 0xc3, 0x0b, 0x8f, 0x7d, 0xff, 0xc3, 0x0b, 0x8f, 0xbd, 0x77, 0x70, - 0xc1, 0xf8, 0xce, 0xc1, 0x05, 0xe3, 0x7b, 0x07, 0x17, 0x8c, 0xef, 0x1f, 0x5c, 0x30, 0x7e, 0x74, - 0x70, 0xc1, 0xf8, 0x83, 0x7f, 0xbd, 0xf0, 0xd8, 0x17, 0xf2, 0xaa, 0x31, 0xff, 0x1b, 0x00, 0x00, - 0xff, 0xff, 0xd4, 0x6a, 0x43, 0xe6, 0xba, 0x7a, 0x00, 0x00, + 0xcc, 0x2c, 0x69, 0xc6, 0x2d, 0xea, 0x04, 0x0d, 0xd2, 0x34, 0x0d, 0xda, 0x22, 0x68, 0xea, 0x22, + 0x28, 0xd0, 0x97, 0xa2, 0x2f, 0x7d, 0x2b, 0xda, 0x97, 0x02, 0x79, 0x28, 0xda, 0x22, 0x0d, 0x50, + 0x34, 0x7d, 0x6a, 0x1e, 0x02, 0x26, 0x66, 0x5f, 0x1c, 0xb4, 0x69, 0x9e, 0x82, 0x16, 0x42, 0x81, + 0x16, 0xf7, 0x77, 0x7e, 0x76, 0x56, 0x22, 0x67, 0x29, 0x21, 0x68, 0xf2, 0xb6, 0x73, 0xce, 0xb9, + 0xe7, 0xdc, 0xff, 0x7b, 0xfe, 0xee, 0x5d, 0x58, 0x68, 0xd8, 0x41, 0xb3, 0xbb, 0x35, 0x5b, 0x75, + 0xdb, 0x73, 0x96, 0xd7, 0x70, 0x3b, 0x9e, 0x7b, 0x97, 0xff, 0x98, 0xeb, 0x6c, 0x37, 0xe6, 0xac, + 0x8e, 0xed, 0xcf, 0xed, 0xba, 0xde, 0x76, 0xbd, 0xe5, 0xee, 0xce, 0xed, 0x3c, 0x6b, 0xb5, 0x3a, + 0x4d, 0xeb, 0xd9, 0xb9, 0x06, 0x75, 0xa8, 0x67, 0x05, 0xb4, 0x36, 0xdb, 0xf1, 0xdc, 0xc0, 0x25, + 0xcf, 0x85, 0x4c, 0x66, 0x15, 0x13, 0xfe, 0x63, 0xb6, 0xb3, 0xdd, 0x98, 0x65, 0x4c, 0x66, 0x15, + 0x93, 0x59, 0xc5, 0x64, 0xfa, 0xe3, 0x11, 0xc9, 0x0d, 0x97, 0x09, 0x64, 0xbc, 0xb6, 0xba, 0x75, + 0xfe, 0xc5, 0x3f, 0xf8, 0x2f, 0x21, 0x63, 0xda, 0xdc, 0x7e, 0xc1, 0x9f, 0xb5, 0x5d, 0x56, 0xa5, + 0xb9, 0xaa, 0xeb, 0xd1, 0xb9, 0x9d, 0x9e, 0x7a, 0x4c, 0x5f, 0x8e, 0xd0, 0x74, 0xdc, 0x96, 0x5d, + 0xdd, 0x9b, 0xdb, 0x79, 0x76, 0x8b, 0x06, 0xbd, 0x55, 0x9e, 0xfe, 0x64, 0x48, 0xda, 0xb6, 0xaa, + 0x4d, 0xdb, 0xa1, 0xde, 0x5e, 0xd8, 0xe4, 0x36, 0x0d, 0xac, 0x34, 0x01, 0x73, 0xfd, 0x4a, 0x79, + 0x5d, 0x27, 0xb0, 0xdb, 0xb4, 0xa7, 0xc0, 0x2f, 0x3d, 0xa8, 0x80, 0x5f, 0x6d, 0xd2, 0xb6, 0xd5, + 0x53, 0xee, 0xb9, 0x7e, 0xe5, 0xba, 0x81, 0xdd, 0x9a, 0xb3, 0x9d, 0xc0, 0x0f, 0xbc, 0x64, 0x21, + 0x73, 0x09, 0x46, 0xe7, 0xdb, 0x6e, 0xd7, 0x09, 0xc8, 0x8b, 0x90, 0xdb, 0xb1, 0x5a, 0x5d, 0x5a, + 0x32, 0x2e, 0x1a, 0x97, 0x0a, 0xe5, 0xa7, 0xbf, 0xbd, 0x3f, 0xf3, 0xd8, 0xc1, 0xfe, 0x4c, 0xee, + 0x16, 0x03, 0xde, 0xdb, 0x9f, 0x39, 0x4d, 0x9d, 0xaa, 0x5b, 0xb3, 0x9d, 0xc6, 0xdc, 0x5d, 0xdf, + 0x75, 0x66, 0x6f, 0x74, 0xdb, 0x5b, 0xd4, 0x43, 0x51, 0xc6, 0xfc, 0x27, 0x03, 0x26, 0xe7, 0xbd, + 0x6a, 0xd3, 0xde, 0xa1, 0x95, 0x80, 0xf1, 0x6f, 0xec, 0x91, 0x3b, 0x30, 0x1c, 0x58, 0x1e, 0x67, + 0x57, 0xbc, 0xf2, 0xea, 0x6c, 0x86, 0xf1, 0x9e, 0xdd, 0xb4, 0x3c, 0xc5, 0xae, 0x3c, 0x76, 0xb0, + 0x3f, 0x33, 0xbc, 0x69, 0x79, 0xc8, 0xb8, 0x92, 0xb7, 0x60, 0xc4, 0x71, 0x1d, 0x5a, 0x1a, 0xe2, + 0xdc, 0xe7, 0x33, 0x71, 0xbf, 0xe1, 0x3a, 0xba, 0xb6, 0xe5, 0xfc, 0xc1, 0xfe, 0xcc, 0x08, 0x83, + 0x20, 0x67, 0x6c, 0xfe, 0xc4, 0x80, 0xc2, 0xbc, 0xd7, 0xe8, 0xb6, 0xa9, 0x13, 0xf8, 0xc4, 0x03, + 0xe8, 0x58, 0x9e, 0xd5, 0xa6, 0x01, 0xf5, 0xfc, 0x92, 0x71, 0x71, 0xf8, 0x52, 0xf1, 0xca, 0xcb, + 0x99, 0x84, 0x6e, 0x28, 0x36, 0x65, 0x22, 0x7b, 0x18, 0x34, 0xc8, 0xc7, 0x88, 0x14, 0xe2, 0x40, + 0xc1, 0xf2, 0x02, 0xbb, 0x6e, 0x55, 0x03, 0xbf, 0x34, 0xc4, 0x45, 0xbe, 0x94, 0x49, 0xe4, 0xbc, + 0xe4, 0x52, 0x3e, 0x29, 0x25, 0x16, 0x14, 0xc4, 0xc7, 0x50, 0x84, 0xf9, 0x8f, 0x23, 0x90, 0x57, + 0x08, 0x72, 0x11, 0x46, 0x1c, 0xab, 0xad, 0x26, 0xc3, 0xb8, 0x2c, 0x38, 0x72, 0xc3, 0x6a, 0xb3, + 0x0e, 0xb2, 0xda, 0x94, 0x51, 0x74, 0xac, 0xa0, 0xc9, 0x47, 0x20, 0x42, 0xb1, 0x61, 0x05, 0x4d, + 0xe4, 0x18, 0x72, 0x1e, 0x46, 0xda, 0x6e, 0x8d, 0x96, 0x86, 0x2f, 0x1a, 0x97, 0x72, 0xa2, 0x83, + 0xd7, 0xdc, 0x1a, 0x45, 0x0e, 0x65, 0xe5, 0xeb, 0x9e, 0xdb, 0x2e, 0x8d, 0xc4, 0xcb, 0x2f, 0x7b, + 0x6e, 0x1b, 0x39, 0x86, 0x7c, 0xd5, 0x80, 0x29, 0x55, 0xbd, 0xeb, 0x6e, 0xd5, 0x0a, 0x6c, 0xd7, + 0x29, 0xe5, 0xf8, 0x80, 0x2f, 0x0d, 0xd4, 0x11, 0x8a, 0x59, 0xb9, 0x24, 0xa5, 0x4e, 0x25, 0x31, + 0xd8, 0x23, 0x98, 0x5c, 0x01, 0x68, 0xb4, 0xdc, 0x2d, 0xab, 0xc5, 0xfa, 0xa0, 0x34, 0xca, 0x6b, + 0xad, 0x87, 0x70, 0x45, 0x63, 0x30, 0x42, 0x45, 0xb6, 0x61, 0xcc, 0x12, 0xab, 0xa2, 0x34, 0xc6, + 0xeb, 0xbd, 0x98, 0xb1, 0xde, 0xb1, 0x95, 0x55, 0x2e, 0x1e, 0xec, 0xcf, 0x8c, 0x49, 0x20, 0x2a, + 0x09, 0xe4, 0x63, 0x90, 0x77, 0x3b, 0xac, 0xaa, 0x56, 0xab, 0x94, 0xbf, 0x68, 0x5c, 0xca, 0x97, + 0xa7, 0x64, 0xf5, 0xf2, 0xeb, 0x12, 0x8e, 0x9a, 0x82, 0x5c, 0x86, 0x31, 0xbf, 0xbb, 0xc5, 0x46, + 0xab, 0x54, 0xe0, 0x6d, 0x99, 0x94, 0xc4, 0x63, 0x15, 0x01, 0x46, 0x85, 0x27, 0xcf, 0x43, 0xd1, + 0xa3, 0xd5, 0xae, 0xe7, 0x53, 0x36, 0x7c, 0x25, 0xe0, 0xbc, 0x4f, 0x49, 0xf2, 0x22, 0x86, 0x28, + 0x8c, 0xd2, 0x99, 0xff, 0x3c, 0x0a, 0x3d, 0xfd, 0x4a, 0x9e, 0x85, 0xa2, 0xac, 0xef, 0x75, 0xb7, + 0xe1, 0xf3, 0xe9, 0x95, 0x2f, 0x4f, 0x32, 0x3e, 0xf3, 0x21, 0x18, 0xa3, 0x34, 0xe4, 0x36, 0x0c, + 0xf9, 0xcf, 0xc9, 0x85, 0xfe, 0x4a, 0xa6, 0xfe, 0xab, 0x3c, 0xa7, 0x97, 0xc0, 0xe8, 0xc1, 0xfe, + 0xcc, 0x50, 0xe5, 0x39, 0x1c, 0xf2, 0x9f, 0x63, 0x1b, 0x54, 0xc3, 0x0e, 0xf8, 0xf4, 0xcc, 0xba, + 0x41, 0xad, 0xd8, 0x81, 0x66, 0xcd, 0x37, 0xa8, 0x15, 0x3b, 0x40, 0xc6, 0x95, 0x6d, 0x50, 0xcd, + 0x20, 0xe8, 0xf0, 0xe9, 0x9d, 0x75, 0x83, 0xba, 0xba, 0xb9, 0xb9, 0xa1, 0xd9, 0xf3, 0xf5, 0xc3, + 0x20, 0xc8, 0x19, 0x93, 0x77, 0x59, 0x4f, 0x0a, 0x9c, 0xeb, 0xed, 0xc9, 0x75, 0x71, 0x75, 0xa0, + 0x75, 0xe1, 0x7a, 0x7b, 0x5a, 0x9c, 0x1c, 0x13, 0x8d, 0xc0, 0xa8, 0x34, 0xde, 0xba, 0x5a, 0xdd, + 0xe7, 0xcb, 0x20, 0x73, 0xeb, 0x16, 0x97, 0x2b, 0x89, 0xd6, 0x2d, 0x2e, 0x57, 0x90, 0x33, 0x66, + 0x63, 0xe3, 0x59, 0xbb, 0x72, 0xd5, 0x64, 0x1b, 0x1b, 0xb4, 0x76, 0xe3, 0x63, 0x83, 0xd6, 0x2e, + 0x32, 0xae, 0x8c, 0xb9, 0xeb, 0xfb, 0x7c, 0x91, 0x64, 0x65, 0xbe, 0x5e, 0xa9, 0xc4, 0x99, 0xaf, + 0x57, 0x2a, 0xc8, 0xb8, 0xf2, 0x59, 0x55, 0xf5, 0xf9, 0xa2, 0xca, 0x3c, 0xab, 0x16, 0x12, 0xcc, + 0x57, 0x16, 0x2a, 0xc8, 0xb8, 0x9a, 0x0d, 0x38, 0xa3, 0x30, 0x48, 0x3b, 0xae, 0x6f, 0xf3, 0xa1, + 0xa1, 0x75, 0x32, 0x07, 0x85, 0xaa, 0xeb, 0xd4, 0xed, 0xc6, 0x9a, 0xd5, 0x91, 0x9b, 0xb6, 0xde, + 0xed, 0x17, 0x14, 0x02, 0x43, 0x1a, 0xf2, 0x24, 0x0c, 0x6f, 0xd3, 0x3d, 0xb9, 0x7b, 0x17, 0x25, + 0xe9, 0xf0, 0x35, 0xba, 0x87, 0x0c, 0x6e, 0x7e, 0xcb, 0x80, 0x53, 0x29, 0xd3, 0x82, 0x15, 0xeb, + 0x7a, 0x2d, 0x29, 0x41, 0x17, 0xbb, 0x89, 0xd7, 0x91, 0xc1, 0xc9, 0x97, 0x0d, 0x98, 0x8c, 0xcc, + 0x93, 0xf9, 0xae, 0x3c, 0x20, 0xb2, 0xef, 0x7c, 0x31, 0x5e, 0xe5, 0x73, 0x52, 0xe2, 0x64, 0x02, + 0x81, 0x49, 0xa9, 0xe6, 0xbf, 0x70, 0x8d, 0x24, 0x06, 0x23, 0x16, 0x9c, 0xe8, 0xfa, 0xd4, 0x63, + 0xc7, 0x57, 0x85, 0x56, 0x3d, 0x1a, 0x48, 0xe5, 0xe4, 0xe9, 0x59, 0xa1, 0x3a, 0xb1, 0x5a, 0xcc, + 0x32, 0x45, 0x71, 0x76, 0xe7, 0xd9, 0x59, 0x41, 0x71, 0x8d, 0xee, 0x55, 0x68, 0x8b, 0x32, 0x1e, + 0x65, 0x72, 0xb0, 0x3f, 0x73, 0xe2, 0x66, 0x8c, 0x01, 0x26, 0x18, 0x32, 0x11, 0x1d, 0xcb, 0xf7, + 0x77, 0x5d, 0xaf, 0x26, 0x45, 0x0c, 0x1d, 0x59, 0xc4, 0x46, 0x8c, 0x01, 0x26, 0x18, 0x9a, 0x7f, + 0x6b, 0xc0, 0x58, 0xd9, 0xaa, 0x6e, 0xbb, 0xf5, 0x3a, 0xdb, 0xf3, 0x6b, 0x5d, 0x4f, 0x9c, 0x8c, + 0x62, 0x4c, 0xf4, 0x9e, 0xbf, 0x28, 0xe1, 0xa8, 0x29, 0xc8, 0x26, 0x8c, 0x8a, 0xee, 0x90, 0x95, + 0xfa, 0x44, 0xa4, 0x52, 0x5a, 0x65, 0xe4, 0xc3, 0xc1, 0x54, 0xc6, 0x59, 0xa1, 0x32, 0xce, 0xae, + 0x3a, 0xc1, 0x3a, 0x53, 0xc3, 0x6c, 0xa7, 0x51, 0x86, 0x83, 0xfd, 0x99, 0xd1, 0x65, 0xce, 0x03, + 0x25, 0x2f, 0x76, 0x3c, 0xb4, 0xad, 0x77, 0x94, 0x38, 0xbe, 0x9d, 0x16, 0xc2, 0xe3, 0x61, 0x2d, + 0x44, 0x61, 0x94, 0xce, 0x7c, 0x13, 0x72, 0x0b, 0x56, 0xb5, 0x49, 0xc9, 0xcd, 0xe4, 0xd4, 0x2d, + 0x5e, 0xb9, 0x94, 0xd6, 0x5b, 0x7a, 0x1a, 0x47, 0x3b, 0x6c, 0xa2, 0xdf, 0x04, 0x37, 0x3f, 0x34, + 0xe0, 0xdc, 0x42, 0xab, 0xeb, 0x07, 0xd4, 0xbb, 0x2d, 0xe7, 0xd5, 0x26, 0x6d, 0x77, 0x5a, 0x56, + 0x40, 0xc9, 0xaf, 0x42, 0x9e, 0xa9, 0xeb, 0x35, 0x2b, 0xb0, 0xa4, 0xc4, 0xfe, 0x5d, 0xc1, 0x67, + 0x26, 0xa3, 0x66, 0x75, 0x58, 0xdf, 0xba, 0x4b, 0xab, 0xc1, 0x1a, 0x0d, 0xac, 0xf0, 0xec, 0x0f, + 0x61, 0xa8, 0xb9, 0x92, 0x6d, 0x18, 0xf1, 0x3b, 0xb4, 0x2a, 0x3b, 0x7a, 0x35, 0xd3, 0xe4, 0x4f, + 0x56, 0xbb, 0xd2, 0xa1, 0xd5, 0x50, 0x51, 0x62, 0x5f, 0xc8, 0x85, 0x98, 0xff, 0x61, 0xc0, 0x13, + 0x7d, 0x9a, 0x7a, 0xdd, 0xf6, 0x03, 0xf2, 0x46, 0x4f, 0x73, 0x67, 0x0f, 0xd7, 0x5c, 0x56, 0x9a, + 0x37, 0x56, 0xcf, 0x2a, 0x05, 0x89, 0x34, 0xf5, 0x6d, 0xc8, 0xd9, 0x01, 0x6d, 0x2b, 0x1d, 0xf5, + 0x7a, 0xa6, 0xb6, 0xf6, 0xa9, 0x7e, 0x79, 0x42, 0x99, 0x21, 0xab, 0x4c, 0x04, 0x0a, 0x49, 0xe6, + 0x3f, 0x18, 0xc0, 0x06, 0xbd, 0x66, 0x4b, 0x9d, 0x62, 0x24, 0xd8, 0xeb, 0x28, 0x5d, 0xf5, 0x49, + 0xd5, 0x41, 0x9b, 0x7b, 0x1d, 0x66, 0xb7, 0x4c, 0x68, 0x42, 0x06, 0x40, 0x4e, 0x4a, 0xde, 0x84, + 0x51, 0x3f, 0xb0, 0x82, 0xae, 0x2f, 0x37, 0xc0, 0x65, 0x59, 0x68, 0xb4, 0xc2, 0xa1, 0xf7, 0xf6, + 0x67, 0x0e, 0x65, 0xec, 0xcd, 0x6a, 0xde, 0xa2, 0x1c, 0x4a, 0xae, 0x4c, 0xbb, 0x6a, 0x53, 0xdf, + 0xb7, 0x1a, 0x54, 0xae, 0x07, 0xad, 0x5d, 0xad, 0x09, 0x30, 0x2a, 0xbc, 0xf9, 0x59, 0x80, 0x05, + 0xd7, 0x09, 0x6c, 0xa7, 0x4b, 0xd7, 0x1d, 0xf2, 0x14, 0xe4, 0xa8, 0xe7, 0xb9, 0x9e, 0xd4, 0x8c, + 0x74, 0xf3, 0x97, 0x18, 0x10, 0x05, 0x8e, 0x3c, 0xc3, 0xd6, 0xb1, 0xdd, 0xa2, 0x35, 0x5e, 0xfb, + 0x7c, 0xf9, 0x84, 0xaa, 0xfd, 0x32, 0x87, 0xa2, 0xc4, 0x9a, 0xb3, 0x30, 0xb6, 0xc0, 0x6c, 0x3b, + 0xea, 0x31, 0xbe, 0x51, 0xeb, 0x6e, 0x22, 0x66, 0xdd, 0x29, 0x2b, 0xee, 0x3b, 0x43, 0x30, 0xbe, + 0xe0, 0xb9, 0x8e, 0x1a, 0x85, 0x47, 0xb0, 0x4e, 0x1a, 0xb1, 0x75, 0x92, 0x4d, 0xad, 0x8f, 0x56, + 0xb9, 0xdf, 0x1a, 0x21, 0xae, 0x1e, 0x71, 0xa1, 0xef, 0xad, 0x0c, 0x2e, 0x8a, 0xb3, 0x0b, 0x3b, + 0x3f, 0x3e, 0x05, 0xcc, 0xef, 0x19, 0x30, 0x15, 0x25, 0x7f, 0x04, 0x2b, 0xb1, 0x1e, 0x5f, 0x89, + 0xf3, 0x03, 0x37, 0xb1, 0xcf, 0xf2, 0xfb, 0xef, 0x5c, 0xbc, 0x69, 0xac, 0x9b, 0x99, 0xb5, 0x36, + 0xbe, 0x1b, 0x01, 0xc8, 0xf6, 0xcd, 0x0f, 0xb4, 0xf5, 0xf1, 0xe1, 0xfc, 0xa8, 0xac, 0xc4, 0x78, + 0x14, 0x7a, 0x2f, 0xf1, 0x8d, 0x31, 0xe1, 0xec, 0x60, 0xf4, 0xab, 0x4d, 0x5a, 0xeb, 0xb6, 0xa8, + 0x5c, 0xe2, 0xba, 0xe3, 0x2a, 0x12, 0x8e, 0x9a, 0x82, 0xbc, 0x01, 0x27, 0xab, 0xae, 0x53, 0xed, + 0x7a, 0x1e, 0x75, 0xaa, 0x7b, 0x1b, 0xdc, 0x0d, 0x24, 0x17, 0xee, 0xac, 0x2c, 0x76, 0x72, 0x21, + 0x49, 0x70, 0x2f, 0x0d, 0x88, 0xbd, 0x8c, 0x84, 0xa9, 0xe5, 0x77, 0xa8, 0x53, 0xe3, 0xd6, 0x40, + 0x3e, 0x6a, 0x6a, 0x71, 0x30, 0x2a, 0x3c, 0xb9, 0x09, 0xe7, 0xfc, 0x80, 0xa9, 0x32, 0x4e, 0x63, + 0x91, 0x5a, 0xb5, 0x96, 0xed, 0x30, 0xc5, 0xc2, 0x75, 0x6a, 0x3e, 0x57, 0xf0, 0x87, 0xcb, 0x4f, + 0x1c, 0xec, 0xcf, 0x9c, 0xab, 0xa4, 0x93, 0x60, 0xbf, 0xb2, 0xe4, 0x4d, 0x98, 0xf6, 0xbb, 0xd5, + 0x2a, 0xf5, 0xfd, 0x7a, 0xb7, 0xf5, 0x9a, 0xbb, 0xe5, 0x5f, 0xb5, 0x7d, 0xa6, 0x15, 0x5d, 0xb7, + 0xdb, 0x76, 0xc0, 0x95, 0xf8, 0x5c, 0xf9, 0xc2, 0xc1, 0xfe, 0xcc, 0x74, 0xa5, 0x2f, 0x15, 0xde, + 0x87, 0x03, 0x41, 0x38, 0x2b, 0xb6, 0x9c, 0x1e, 0xde, 0x63, 0x9c, 0xf7, 0xf4, 0xc1, 0xfe, 0xcc, + 0xd9, 0xe5, 0x54, 0x0a, 0xec, 0x53, 0x92, 0x8d, 0x60, 0x60, 0xb7, 0xe9, 0xe7, 0x5d, 0x87, 0x72, + 0x4d, 0x3d, 0x32, 0x82, 0x9b, 0x12, 0x8e, 0x9a, 0x82, 0xdc, 0x0d, 0x27, 0x1f, 0x5b, 0x14, 0x52, + 0xfd, 0x3e, 0xfa, 0x6e, 0x75, 0xfa, 0x60, 0x7f, 0x66, 0xea, 0x76, 0x84, 0x13, 0x5b, 0x58, 0x18, + 0xe3, 0x6d, 0xfe, 0xfd, 0x10, 0x90, 0xde, 0x8d, 0x80, 0x5c, 0x83, 0x51, 0xab, 0x1a, 0x30, 0x5b, + 0x5f, 0xf8, 0x87, 0x9e, 0x4a, 0x53, 0x62, 0x84, 0x28, 0xa4, 0x75, 0xca, 0x66, 0x08, 0x0d, 0x77, + 0x8f, 0x79, 0x5e, 0x14, 0x25, 0x0b, 0xe2, 0xc2, 0xc9, 0x96, 0xe5, 0x07, 0x6a, 0xae, 0xd6, 0x58, + 0x93, 0xe5, 0x26, 0xf9, 0xff, 0x0e, 0xd7, 0x28, 0x56, 0xa2, 0x7c, 0x86, 0xcd, 0xdc, 0xeb, 0x49, + 0x46, 0xd8, 0xcb, 0x9b, 0x78, 0x00, 0x55, 0x75, 0x98, 0xb1, 0x3d, 0x32, 0xbb, 0x87, 0x4b, 0x9f, + 0x89, 0xe1, 0xd6, 0xaf, 0x41, 0x3e, 0x46, 0xa4, 0x98, 0x3f, 0x1e, 0x85, 0xb1, 0xc5, 0xf9, 0x95, + 0x4d, 0xcb, 0xdf, 0x3e, 0x84, 0xc3, 0x89, 0x4d, 0x08, 0xa9, 0x16, 0x24, 0x97, 0xb4, 0x52, 0x17, + 0x50, 0x53, 0x10, 0x17, 0x0a, 0x96, 0x72, 0xdf, 0xc9, 0x2d, 0xff, 0xe5, 0x8c, 0x26, 0x88, 0xe4, + 0x12, 0x75, 0x9f, 0x49, 0x10, 0x86, 0x32, 0x88, 0x0f, 0x45, 0x25, 0x1c, 0x69, 0x5d, 0xda, 0xfd, + 0x19, 0xdd, 0x9e, 0x21, 0x1f, 0x61, 0x87, 0x47, 0x00, 0x18, 0x95, 0x42, 0x3e, 0x09, 0xe3, 0x35, + 0xca, 0x76, 0x0e, 0xea, 0x54, 0x6d, 0xca, 0x36, 0x89, 0x61, 0xd6, 0x2f, 0x6c, 0xb3, 0x5c, 0x8c, + 0xc0, 0x31, 0x46, 0x45, 0xee, 0x42, 0x61, 0xd7, 0x0e, 0x9a, 0x7c, 0x4f, 0x2f, 0x8d, 0xf2, 0xa1, + 0xfe, 0x54, 0xa6, 0x8a, 0x32, 0x0e, 0x61, 0xb7, 0xdc, 0x56, 0x3c, 0x31, 0x64, 0xcf, 0x0c, 0x53, + 0xf6, 0xc1, 0x7d, 0x9c, 0x7c, 0x37, 0x28, 0xc4, 0x0b, 0x70, 0x04, 0x86, 0x34, 0xc4, 0x87, 0x71, + 0xf6, 0x51, 0xa1, 0x6f, 0x77, 0xd9, 0x0a, 0x91, 0x56, 0x7a, 0x36, 0xcf, 0xa7, 0x62, 0x22, 0x7a, + 0xe4, 0x76, 0x84, 0x2d, 0xc6, 0x84, 0xb0, 0xd9, 0xb7, 0xdb, 0xa4, 0x8e, 0x74, 0x85, 0xe9, 0xd9, + 0x77, 0xbb, 0x49, 0x1d, 0xe4, 0x18, 0xe2, 0xf2, 0xf5, 0x21, 0xd5, 0x34, 0xee, 0x03, 0xcb, 0xea, + 0x8d, 0x0a, 0xb5, 0xbd, 0xf2, 0x09, 0xb9, 0x38, 0xe4, 0x37, 0x46, 0x44, 0x30, 0x25, 0xcf, 0x75, + 0x96, 0xde, 0xb1, 0x83, 0x52, 0x91, 0x57, 0x4a, 0xef, 0x14, 0xeb, 0x1c, 0x8a, 0x12, 0xcb, 0x4e, + 0x17, 0x31, 0xb8, 0x7e, 0x69, 0x3c, 0xae, 0x6a, 0x8a, 0x19, 0xe0, 0xa3, 0xc2, 0x9b, 0x7f, 0x63, + 0x40, 0x91, 0xad, 0x37, 0xb5, 0x46, 0x9e, 0x81, 0xd1, 0xc0, 0xf2, 0x1a, 0xd2, 0x0e, 0x8e, 0x88, + 0xd8, 0xe4, 0x50, 0x94, 0x58, 0x62, 0x41, 0x2e, 0xb0, 0xfc, 0x6d, 0xa5, 0x57, 0x7c, 0x26, 0x53, + 0xb3, 0xe5, 0x42, 0x0f, 0x55, 0x0a, 0xf6, 0xe5, 0xa3, 0xe0, 0x4c, 0x2e, 0x41, 0x9e, 0x9d, 0x03, + 0xcb, 0x96, 0x2f, 0x1c, 0x72, 0xf9, 0xf2, 0x38, 0x5b, 0xd8, 0xcb, 0x12, 0x86, 0x1a, 0x6b, 0x3e, + 0x0f, 0xb9, 0xa5, 0x1d, 0xea, 0xf0, 0x03, 0xc2, 0x97, 0x66, 0x60, 0xd2, 0xf6, 0x55, 0xe6, 0x21, + 0x6a, 0x0a, 0xf3, 0x0d, 0x38, 0xb1, 0xf4, 0x0e, 0xad, 0x76, 0x03, 0xd7, 0x13, 0xe6, 0x22, 0x79, + 0x0d, 0x88, 0x4f, 0xbd, 0x1d, 0xbb, 0x4a, 0xe7, 0xab, 0x55, 0xa6, 0x26, 0xdf, 0x08, 0xf7, 0x9f, + 0x69, 0xc9, 0x89, 0x54, 0x7a, 0x28, 0x30, 0xa5, 0x94, 0xf9, 0xc7, 0x06, 0x14, 0x23, 0x5e, 0x1b, + 0xb6, 0xfb, 0x34, 0x16, 0x2a, 0xe5, 0x6e, 0x75, 0x5b, 0x3b, 0x19, 0x5e, 0xce, 0xea, 0x0a, 0x12, + 0x5c, 0xc2, 0x55, 0xa3, 0x41, 0x18, 0xca, 0x78, 0x90, 0x3b, 0xe7, 0xaf, 0x0c, 0x08, 0xcb, 0xb1, + 0x71, 0xdf, 0x0a, 0xab, 0x16, 0x19, 0x77, 0xc9, 0x57, 0x62, 0xc9, 0x7b, 0x06, 0x9c, 0x8b, 0x37, + 0x96, 0x9b, 0xde, 0x47, 0x77, 0x6b, 0xcc, 0x48, 0x01, 0xe7, 0x2a, 0xe9, 0xdc, 0xb0, 0x9f, 0x18, + 0xf3, 0x16, 0xe4, 0x56, 0xac, 0x6e, 0x83, 0x1e, 0xca, 0x80, 0x61, 0xb3, 0xc8, 0xa3, 0x56, 0x2b, + 0x50, 0x87, 0xa5, 0x9c, 0x45, 0x28, 0x61, 0xa8, 0xb1, 0xe6, 0x9f, 0x8f, 0x40, 0x31, 0xe2, 0xbc, + 0x65, 0x1b, 0x80, 0x47, 0x3b, 0x6e, 0xf2, 0xf8, 0x41, 0xda, 0x71, 0x91, 0x63, 0xd8, 0x74, 0xf3, + 0xe8, 0x8e, 0xed, 0xdb, 0xae, 0x93, 0x3c, 0x7e, 0x50, 0xc2, 0x51, 0x53, 0x90, 0x19, 0xc8, 0xd5, + 0x68, 0x27, 0x68, 0xf2, 0xc9, 0x3c, 0x52, 0x2e, 0xb0, 0xaa, 0x2e, 0x32, 0x00, 0x0a, 0x38, 0x23, + 0xa8, 0xd3, 0xa0, 0xda, 0x2c, 0x8d, 0xf0, 0x2d, 0x9b, 0x13, 0x2c, 0x33, 0x00, 0x0a, 0x78, 0x8a, + 0xb3, 0x2a, 0xf7, 0xf0, 0x9d, 0x55, 0xa3, 0xc7, 0xec, 0xac, 0x22, 0x1d, 0x38, 0xe5, 0xfb, 0xcd, + 0x0d, 0xcf, 0xde, 0xb1, 0x02, 0x1a, 0xce, 0x9e, 0xb1, 0xa3, 0xc8, 0x39, 0x77, 0xb0, 0x3f, 0x73, + 0xaa, 0x52, 0xb9, 0x9a, 0xe4, 0x82, 0x69, 0xac, 0x49, 0x05, 0xce, 0xd8, 0x8e, 0x4f, 0xab, 0x5d, + 0x8f, 0xae, 0x36, 0x1c, 0xd7, 0xa3, 0x57, 0x5d, 0x9f, 0xb1, 0x93, 0x31, 0x11, 0xe5, 0x1e, 0x38, + 0xb3, 0x9a, 0x46, 0x84, 0xe9, 0x65, 0xcd, 0xef, 0x18, 0x30, 0x1e, 0xf5, 0x57, 0x13, 0x1f, 0xa0, + 0xb9, 0xb8, 0x5c, 0x11, 0x5b, 0x89, 0x5c, 0xe1, 0xaf, 0x64, 0x76, 0x83, 0x0b, 0x36, 0xa1, 0xbe, + 0x14, 0xc2, 0x30, 0x22, 0xe6, 0x10, 0x21, 0xb7, 0xa7, 0x20, 0x57, 0x77, 0xbd, 0x2a, 0x95, 0x7b, + 0xa8, 0x5e, 0x25, 0xcb, 0x0c, 0x88, 0x02, 0x67, 0x7e, 0x68, 0x40, 0x44, 0x02, 0xf9, 0x0d, 0x98, + 0x60, 0x32, 0xae, 0x79, 0x5b, 0xb1, 0xd6, 0x94, 0x33, 0xb7, 0x46, 0x73, 0x2a, 0x9f, 0x91, 0xf2, + 0x27, 0x62, 0x60, 0x8c, 0xcb, 0x23, 0xff, 0x1f, 0x0a, 0x56, 0xad, 0xe6, 0x51, 0xdf, 0xa7, 0xe2, + 0x88, 0x29, 0x08, 0xb7, 0xde, 0xbc, 0x02, 0x62, 0x88, 0x67, 0xcb, 0xb0, 0x59, 0xab, 0xfb, 0x6c, + 0x66, 0x4b, 0x0b, 0x4d, 0x2f, 0x43, 0x26, 0x84, 0xc1, 0x51, 0x53, 0x98, 0x5f, 0x1b, 0x81, 0xb8, + 0x6c, 0x52, 0x83, 0xc9, 0x6d, 0x6f, 0x6b, 0x81, 0xbb, 0x1e, 0xb3, 0x38, 0x81, 0x4f, 0x1d, 0xec, + 0xcf, 0x4c, 0x5e, 0x8b, 0x73, 0xc0, 0x24, 0x4b, 0x29, 0xe5, 0x1a, 0xdd, 0x0b, 0xac, 0xad, 0x2c, + 0x1b, 0xa6, 0x92, 0x12, 0xe5, 0x80, 0x49, 0x96, 0xe4, 0x79, 0x28, 0x6e, 0x7b, 0x5b, 0x6a, 0x91, + 0x27, 0x3d, 0xaf, 0xd7, 0x42, 0x14, 0x46, 0xe9, 0x58, 0x17, 0x6e, 0x7b, 0x5b, 0x6c, 0x53, 0x54, + 0xd1, 0x57, 0xdd, 0x85, 0xd7, 0x24, 0x1c, 0x35, 0x05, 0xe9, 0x00, 0xd9, 0x56, 0xbd, 0xa7, 0x1d, + 0xad, 0x72, 0x2f, 0x3a, 0xbc, 0x9f, 0xf6, 0x2c, 0x3b, 0x4c, 0xaf, 0xf5, 0xf0, 0xc1, 0x14, 0xde, + 0xe4, 0xb3, 0x70, 0x6e, 0xdb, 0xdb, 0x92, 0x47, 0xc5, 0x86, 0x67, 0x3b, 0x55, 0xbb, 0x13, 0x0b, + 0xbb, 0xea, 0xe3, 0xe4, 0x5a, 0x3a, 0x19, 0xf6, 0x2b, 0x6f, 0x7e, 0x1c, 0xc6, 0xa3, 0x41, 0xb5, + 0x07, 0x84, 0x33, 0xcc, 0xf7, 0x0d, 0x28, 0x70, 0xa3, 0xb4, 0xc1, 0x34, 0x53, 0x7d, 0x04, 0x0d, + 0xdf, 0xe7, 0x08, 0xaa, 0xc3, 0x98, 0x38, 0x3d, 0x7d, 0xbe, 0xb3, 0x17, 0xaf, 0xbc, 0x98, 0xcd, + 0xea, 0xe0, 0x49, 0x19, 0xa1, 0x2e, 0x27, 0x4e, 0x66, 0x1f, 0x15, 0x73, 0xf3, 0xdf, 0x0d, 0x18, + 0x5d, 0x75, 0x3a, 0xdd, 0x9f, 0x93, 0xe4, 0x84, 0x35, 0x18, 0x61, 0xf6, 0x44, 0x3c, 0x4b, 0x65, + 0xbc, 0xfc, 0x74, 0x34, 0x43, 0xa5, 0x14, 0xcf, 0x50, 0x41, 0x6b, 0x57, 0x39, 0x5b, 0x45, 0x99, + 0x4f, 0xe7, 0xdf, 0xff, 0x93, 0x99, 0xc7, 0xde, 0xfb, 0xfe, 0xc5, 0xc7, 0xcc, 0x16, 0x8c, 0x5c, + 0xb7, 0x9d, 0xc3, 0x58, 0x9d, 0x4f, 0x41, 0xce, 0xaf, 0xba, 0x1d, 0x65, 0x72, 0xea, 0x41, 0xaf, + 0x30, 0x20, 0x0a, 0x9c, 0x9a, 0x46, 0xc3, 0x7d, 0xa6, 0xd1, 0x17, 0x0d, 0x38, 0xb9, 0x46, 0xdb, + 0xae, 0xfd, 0x79, 0x2b, 0xf4, 0x15, 0xb3, 0x42, 0x4d, 0x3b, 0x90, 0x8e, 0x5e, 0x5d, 0xe8, 0xaa, + 0x1d, 0x20, 0x83, 0x3f, 0x40, 0xa3, 0xe3, 0x01, 0x3f, 0xb6, 0xe1, 0xdc, 0x08, 0x57, 0x7e, 0x18, + 0xf0, 0x53, 0x08, 0x0c, 0x69, 0xcc, 0x2f, 0x19, 0x30, 0x26, 0x2a, 0x41, 0x15, 0x6f, 0xa3, 0x0f, + 0xef, 0x3b, 0x90, 0xe3, 0xe5, 0xe4, 0x9e, 0xf5, 0xe9, 0x6c, 0x66, 0x0e, 0xe3, 0x20, 0xf4, 0x1a, + 0xfe, 0x13, 0x05, 0x4f, 0xf3, 0xbd, 0x61, 0xc8, 0x2b, 0xc7, 0x0a, 0xf9, 0x92, 0x01, 0x45, 0xcb, + 0x71, 0xdc, 0xc0, 0x12, 0x7e, 0x07, 0x31, 0x79, 0x6f, 0x64, 0x12, 0xa8, 0x98, 0xce, 0xce, 0x87, + 0x0c, 0x97, 0x9c, 0xc0, 0xdb, 0x0b, 0xb7, 0xc4, 0x08, 0x06, 0xa3, 0x72, 0xc9, 0xdb, 0x30, 0xda, + 0xb2, 0xb6, 0x68, 0x4b, 0xcd, 0xe5, 0xd5, 0xc1, 0x6a, 0x70, 0x9d, 0xf3, 0x12, 0xc2, 0xb5, 0x72, + 0x2d, 0x80, 0x28, 0x05, 0x4d, 0xbf, 0x0c, 0x53, 0xc9, 0x8a, 0x92, 0xa9, 0xc8, 0xb8, 0x88, 0xa1, + 0x38, 0xad, 0xe6, 0x3b, 0x9f, 0x07, 0x6a, 0x22, 0x0f, 0xbd, 0x60, 0x4c, 0x7f, 0x0a, 0x8a, 0x11, + 0x31, 0x47, 0x29, 0x6a, 0xbe, 0x0e, 0xc5, 0x35, 0x1a, 0x78, 0x76, 0x95, 0x33, 0x78, 0xd0, 0x6c, + 0x78, 0x2a, 0xc6, 0xa7, 0x4f, 0xe8, 0xe0, 0xf3, 0x6c, 0x72, 0x31, 0x96, 0x3e, 0xb3, 0x94, 0x3b, + 0x9e, 0xdb, 0xa6, 0x41, 0x93, 0x76, 0xd5, 0x88, 0x66, 0x53, 0x8d, 0x36, 0x34, 0x1b, 0x61, 0x29, + 0x87, 0xdf, 0x18, 0x11, 0x61, 0x5e, 0x86, 0xdc, 0x5a, 0x37, 0xa0, 0xef, 0x3c, 0x78, 0x35, 0x9b, + 0x77, 0x60, 0x9c, 0x93, 0x5e, 0x75, 0x5b, 0x6c, 0xa3, 0x60, 0x6d, 0x6b, 0xb3, 0xef, 0xa4, 0x55, + 0xc1, 0x89, 0x50, 0xe0, 0x98, 0xb9, 0xd4, 0x74, 0x5b, 0x35, 0xea, 0xc9, 0x1e, 0xd0, 0x23, 0x7a, + 0x95, 0x43, 0x51, 0x62, 0xcd, 0x1f, 0x19, 0x50, 0xe4, 0x05, 0xe5, 0x02, 0x6f, 0xc1, 0x58, 0x53, + 0xc8, 0x91, 0xbd, 0x90, 0xcd, 0x17, 0x1e, 0xad, 0x70, 0x78, 0x20, 0x48, 0x00, 0x2a, 0x11, 0x4c, + 0xda, 0xae, 0x65, 0x07, 0x4c, 0xda, 0xd0, 0xb1, 0x4b, 0xbb, 0x2d, 0x38, 0xa3, 0x12, 0x61, 0xfe, + 0x74, 0x02, 0xe0, 0x86, 0x5b, 0xa3, 0xb2, 0xa9, 0xd3, 0x30, 0x64, 0xd7, 0x64, 0x27, 0x82, 0x2c, + 0x34, 0xb4, 0xba, 0x88, 0x43, 0x76, 0x4d, 0x8f, 0xca, 0x50, 0xdf, 0x3d, 0xf6, 0x79, 0x28, 0xd6, + 0x6c, 0xbf, 0xd3, 0xb2, 0xf6, 0x6e, 0xa4, 0xe8, 0x31, 0x8b, 0x21, 0x0a, 0xa3, 0x74, 0xe4, 0x63, + 0x32, 0xee, 0x27, 0x74, 0x98, 0x52, 0x22, 0xee, 0x97, 0x67, 0xd5, 0x8b, 0x84, 0xfc, 0x5e, 0x80, + 0x71, 0xe5, 0x39, 0xe3, 0x52, 0x72, 0xbc, 0xd4, 0x69, 0x15, 0x5b, 0xd8, 0x8c, 0xe0, 0x30, 0x46, + 0x99, 0xf4, 0xec, 0x8d, 0x3e, 0x12, 0xcf, 0xde, 0x22, 0x4c, 0xf9, 0x81, 0xeb, 0xd1, 0x9a, 0xa2, + 0x58, 0x5d, 0x2c, 0x91, 0x58, 0x43, 0xa7, 0x2a, 0x09, 0x3c, 0xf6, 0x94, 0x20, 0x1b, 0x70, 0x7a, + 0x37, 0x11, 0x52, 0xe5, 0x8d, 0x3f, 0xc5, 0x39, 0x9d, 0x97, 0x9c, 0x4e, 0xdf, 0x4e, 0xa1, 0xc1, + 0xd4, 0x92, 0xe4, 0x45, 0x98, 0x50, 0xd5, 0xe4, 0x47, 0x60, 0xe9, 0x34, 0x67, 0xa5, 0x35, 0xfd, + 0xcd, 0x28, 0x12, 0xe3, 0xb4, 0xe4, 0x13, 0x90, 0xeb, 0x34, 0x2d, 0x9f, 0x4a, 0x47, 0xa0, 0xf2, + 0xb2, 0xe4, 0x36, 0x18, 0xf0, 0xde, 0xfe, 0x4c, 0x81, 0x8d, 0x19, 0xff, 0x40, 0x41, 0x48, 0xae, + 0x00, 0x6c, 0xb9, 0x5d, 0xa7, 0x66, 0x79, 0x7b, 0xab, 0x8b, 0x32, 0x0e, 0xa0, 0x75, 0x93, 0xb2, + 0xc6, 0x60, 0x84, 0x2a, 0x1a, 0x7c, 0x2d, 0xdc, 0x3f, 0xf8, 0x4a, 0xee, 0x40, 0x81, 0xc7, 0x4c, + 0x68, 0x6d, 0x3e, 0x90, 0x4e, 0xbd, 0xa3, 0xb8, 0xd7, 0xf5, 0x89, 0x5b, 0x51, 0x4c, 0x30, 0xe4, + 0x47, 0xde, 0x04, 0xa8, 0xdb, 0x8e, 0xed, 0x37, 0x39, 0xf7, 0xe2, 0x91, 0xb9, 0xeb, 0x76, 0x2e, + 0x6b, 0x2e, 0x18, 0xe1, 0x48, 0xfe, 0xcd, 0x80, 0x93, 0x1e, 0xf5, 0xdd, 0xae, 0x57, 0xa5, 0xbe, + 0xce, 0xbf, 0x38, 0xc3, 0x17, 0xff, 0xad, 0x8c, 0x19, 0xb1, 0x6a, 0x45, 0xcf, 0x62, 0x92, 0xb1, + 0x38, 0xcd, 0xa8, 0x0a, 0x87, 0xf5, 0xe0, 0xef, 0xa5, 0x01, 0xbf, 0xf8, 0x83, 0x99, 0x99, 0xde, + 0x24, 0x6c, 0xcd, 0x9c, 0xcd, 0xa8, 0xdf, 0xfe, 0xc1, 0xcc, 0x94, 0xfa, 0xd6, 0x99, 0x22, 0xbd, + 0xed, 0x62, 0x5b, 0x75, 0xc7, 0xad, 0xad, 0x6e, 0x48, 0x2f, 0xa7, 0xde, 0xaa, 0x37, 0x18, 0x10, + 0x05, 0x8e, 0x5c, 0x82, 0x7c, 0xcd, 0xa2, 0x6d, 0xd7, 0xa1, 0xb5, 0xd2, 0x44, 0xe8, 0x00, 0x5a, + 0x94, 0x30, 0xd4, 0x58, 0xf2, 0x16, 0x8c, 0xda, 0x5c, 0x7d, 0x2e, 0x9d, 0xe0, 0x03, 0x93, 0x4d, + 0x4d, 0x17, 0x1a, 0xb8, 0x48, 0x8b, 0x11, 0xbf, 0x51, 0xb2, 0x25, 0x55, 0x18, 0x73, 0xbb, 0x01, + 0x97, 0x30, 0xc9, 0x25, 0x64, 0x73, 0x9b, 0xae, 0x0b, 0x1e, 0x22, 0xe7, 0x53, 0x7e, 0xa0, 0xe2, + 0xcc, 0xda, 0x5b, 0x6d, 0xda, 0xad, 0x9a, 0x47, 0x9d, 0xd2, 0x14, 0xb7, 0x9c, 0x79, 0x7b, 0x17, + 0x24, 0x0c, 0x35, 0x96, 0xfc, 0x32, 0x4c, 0xb8, 0xdd, 0x80, 0xaf, 0x12, 0x36, 0xca, 0x7e, 0xe9, + 0x24, 0x27, 0x3f, 0xc9, 0xd6, 0xec, 0x7a, 0x14, 0x81, 0x71, 0x3a, 0xb6, 0x6f, 0x36, 0x5d, 0x3f, + 0x60, 0x1f, 0x7c, 0xeb, 0x38, 0x1b, 0xdf, 0x37, 0xaf, 0x46, 0x70, 0x18, 0xa3, 0x24, 0x5f, 0x35, + 0xe0, 0x64, 0x3b, 0xa9, 0xf6, 0x96, 0xce, 0xf1, 0xce, 0x58, 0xce, 0xa8, 0x60, 0x25, 0xb8, 0x89, + 0x00, 0x57, 0x0f, 0x18, 0x7b, 0xe5, 0x4e, 0x2f, 0xc2, 0xd9, 0xf4, 0x39, 0xfd, 0x20, 0xd5, 0x69, + 0x38, 0xaa, 0x3a, 0x9d, 0x80, 0xf1, 0x68, 0xda, 0x38, 0x77, 0xfc, 0x46, 0x72, 0x01, 0x89, 0x0b, + 0x05, 0xb7, 0x72, 0x1c, 0x8e, 0xdf, 0xf5, 0x4a, 0x8f, 0xe3, 0x57, 0x83, 0x30, 0x94, 0xf1, 0x20, + 0xc7, 0xef, 0x5f, 0x0e, 0x41, 0x58, 0x8e, 0x59, 0xfe, 0xd4, 0xa9, 0x75, 0x5c, 0xdb, 0x09, 0x92, + 0x2e, 0xf3, 0x25, 0x09, 0x47, 0x4d, 0x11, 0x71, 0x13, 0x0f, 0xdd, 0xd7, 0x4d, 0xdc, 0x84, 0x49, + 0x8b, 0x87, 0x86, 0x43, 0xff, 0xde, 0xf0, 0x91, 0xfc, 0x7b, 0x3a, 0xa9, 0x2f, 0xce, 0x05, 0x93, + 0x6c, 0x99, 0x24, 0x3f, 0x2c, 0xce, 0x25, 0x8d, 0x64, 0x92, 0x54, 0x89, 0x73, 0xc1, 0x24, 0x5b, + 0xf3, 0xaf, 0x87, 0x40, 0xad, 0xb6, 0x9f, 0x07, 0xfb, 0x9a, 0x98, 0x30, 0xea, 0x51, 0xbf, 0xdb, + 0x0a, 0xa4, 0xf6, 0xc5, 0x77, 0x34, 0xe4, 0x10, 0x94, 0x18, 0xb6, 0xd9, 0xd0, 0x77, 0xec, 0x60, + 0xc1, 0xad, 0x29, 0x9d, 0x8b, 0x6f, 0x36, 0x4b, 0x12, 0x86, 0x1a, 0x6b, 0xee, 0xc2, 0x04, 0x6b, + 0x57, 0xab, 0x45, 0x5b, 0x95, 0x80, 0x76, 0x7c, 0x52, 0x87, 0x9c, 0xcf, 0x7e, 0x0c, 0xa4, 0x08, + 0x87, 0xf1, 0x76, 0xda, 0x89, 0x18, 0xe2, 0x8c, 0x2f, 0x0a, 0xf6, 0xe6, 0x37, 0x86, 0xa0, 0xa0, + 0x7b, 0xf4, 0x10, 0xd6, 0xfd, 0xd3, 0x30, 0x56, 0xa3, 0x75, 0x8b, 0xb5, 0x5b, 0xae, 0x20, 0x11, + 0x38, 0xe3, 0x20, 0x54, 0x38, 0x32, 0x13, 0xf7, 0xfc, 0x14, 0x7a, 0xbc, 0x3e, 0xdb, 0x50, 0xe0, + 0x3f, 0x96, 0xd5, 0x8d, 0x86, 0xac, 0x33, 0xe4, 0x96, 0xe2, 0x22, 0x5c, 0xa0, 0xfa, 0x13, 0x43, + 0xfe, 0x89, 0x9b, 0x08, 0xb9, 0xc3, 0xdc, 0x44, 0x30, 0x97, 0x81, 0x1d, 0x94, 0x2b, 0x0b, 0xe4, + 0x25, 0xc8, 0xfb, 0x72, 0xf3, 0x92, 0xfd, 0xf2, 0x11, 0x1d, 0x35, 0x93, 0xf0, 0x7b, 0xfb, 0x33, + 0x13, 0x9c, 0x58, 0x01, 0x50, 0x17, 0x31, 0xbf, 0x3c, 0x02, 0x11, 0x33, 0xec, 0x10, 0x3d, 0x5c, + 0x4b, 0x58, 0xd6, 0xaf, 0x66, 0xb5, 0xac, 0x95, 0xb9, 0x2a, 0xa6, 0x66, 0xdc, 0x98, 0x66, 0xf5, + 0x68, 0xd2, 0x56, 0x47, 0x8e, 0x8f, 0xae, 0xc7, 0x55, 0xda, 0xea, 0x20, 0xc7, 0xe8, 0x08, 0xef, + 0x48, 0xdf, 0x08, 0xef, 0x1d, 0xc8, 0x35, 0xac, 0x6e, 0x83, 0x4a, 0xdf, 0x66, 0x36, 0xaf, 0x07, + 0x0f, 0x56, 0x89, 0x09, 0xc2, 0x7f, 0xa2, 0xe0, 0xc9, 0x26, 0x48, 0x53, 0x39, 0x12, 0xa5, 0x05, + 0x91, 0x6d, 0x82, 0x68, 0x77, 0xa4, 0x98, 0x20, 0xfa, 0x13, 0x43, 0xfe, 0x4c, 0xf5, 0xa8, 0x8a, + 0xbc, 0x3f, 0x19, 0x68, 0xf9, 0x4c, 0xc6, 0x40, 0x35, 0xe7, 0x21, 0xd6, 0x84, 0xfc, 0x40, 0xc5, + 0xd9, 0x9c, 0x83, 0x62, 0x24, 0xc3, 0x9e, 0xf5, 0xaf, 0xce, 0x6a, 0x8b, 0xf4, 0xef, 0xa2, 0x15, + 0x58, 0xc8, 0x31, 0xe6, 0x37, 0x87, 0x41, 0x2b, 0x7a, 0xd1, 0x10, 0xb4, 0x55, 0x8d, 0xa4, 0x2f, + 0xc7, 0xf2, 0x61, 0x5c, 0x07, 0x25, 0x96, 0x99, 0x1d, 0x6d, 0xea, 0x35, 0xf4, 0xc1, 0x2b, 0x97, + 0xab, 0x36, 0x3b, 0xd6, 0xa2, 0x48, 0x8c, 0xd3, 0xb2, 0x63, 0xaf, 0x6d, 0x39, 0x76, 0x9d, 0xfa, + 0x41, 0x32, 0x66, 0xb0, 0x26, 0xe1, 0xa8, 0x29, 0xc8, 0x0a, 0x9c, 0xf4, 0x69, 0xb0, 0xbe, 0xeb, + 0x50, 0x4f, 0xe7, 0xe9, 0xc8, 0xc4, 0xad, 0xc7, 0x95, 0xf6, 0x5b, 0x49, 0x12, 0x60, 0x6f, 0x19, + 0x6e, 0xc2, 0x89, 0x9c, 0x29, 0x9d, 0xff, 0x22, 0x57, 0x6b, 0x68, 0xc2, 0x25, 0xf0, 0xd8, 0x53, + 0x82, 0x71, 0xa9, 0x5b, 0x76, 0xab, 0xeb, 0xd1, 0x90, 0xcb, 0x68, 0x9c, 0xcb, 0x72, 0x02, 0x8f, + 0x3d, 0x25, 0x78, 0xb8, 0xb1, 0x65, 0x35, 0xfc, 0xd2, 0x58, 0x24, 0xdc, 0xc8, 0x00, 0x28, 0xe0, + 0xe6, 0xfb, 0x43, 0x30, 0x81, 0x34, 0xf0, 0xf6, 0x74, 0xaf, 0xbd, 0x0e, 0xb9, 0x16, 0xcf, 0xe1, + 0x32, 0x32, 0x26, 0x8b, 0x73, 0x21, 0x22, 0xc9, 0x4b, 0x70, 0x22, 0x8b, 0x50, 0xf4, 0x98, 0x0c, + 0x99, 0x61, 0x27, 0xc6, 0xd0, 0x0c, 0x6f, 0x12, 0x69, 0xd4, 0xbd, 0xf8, 0x27, 0x46, 0x8b, 0x11, + 0x07, 0xc6, 0xb6, 0x44, 0xfe, 0xbb, 0xd4, 0x33, 0xb2, 0x4d, 0x6f, 0x99, 0x43, 0xcf, 0x43, 0x13, + 0x2a, 0xa1, 0xfe, 0x5e, 0xf8, 0x13, 0x95, 0x10, 0xf3, 0x7d, 0x03, 0x20, 0xbc, 0x42, 0x44, 0xb6, + 0x21, 0xef, 0x3f, 0x17, 0xd3, 0xf0, 0x32, 0x26, 0xa7, 0x48, 0x26, 0x91, 0xb4, 0x05, 0x09, 0x41, + 0x2d, 0xe0, 0x41, 0xea, 0xdd, 0x87, 0xc3, 0xa0, 0x4b, 0x3d, 0x24, 0xed, 0xee, 0x19, 0xa6, 0x19, + 0x34, 0xc2, 0xcc, 0x7e, 0x4d, 0x87, 0x1c, 0x8a, 0x12, 0xcb, 0xb4, 0x03, 0x15, 0x3b, 0x95, 0xab, + 0x85, 0x6b, 0x07, 0x2a, 0xcc, 0x8a, 0x1a, 0x9b, 0xa6, 0x2f, 0xe6, 0x1e, 0x99, 0xbe, 0x38, 0xfa, + 0x50, 0xf4, 0x45, 0x72, 0x19, 0xc6, 0x3c, 0xb7, 0x45, 0xe7, 0xf1, 0x86, 0xf4, 0x6d, 0x68, 0x9f, + 0x03, 0x0a, 0x30, 0x2a, 0x3c, 0x79, 0x1e, 0x8a, 0x5d, 0x9f, 0x56, 0x16, 0xaf, 0x2d, 0x78, 0xb4, + 0xe6, 0xcb, 0xb0, 0xb4, 0xf6, 0x76, 0xdd, 0x0c, 0x51, 0x18, 0xa5, 0x33, 0x7f, 0xcb, 0x80, 0x13, + 0x95, 0xaa, 0x67, 0x77, 0x02, 0xbd, 0x79, 0xde, 0xe0, 0x37, 0x27, 0x02, 0x8b, 0x2d, 0x45, 0x39, + 0x15, 0x9f, 0xec, 0x13, 0x91, 0x13, 0x44, 0xb1, 0x3b, 0x41, 0x02, 0x84, 0x21, 0x0b, 0x36, 0xd4, + 0x62, 0x7b, 0x4e, 0x4e, 0x89, 0x0a, 0x87, 0xa2, 0xc4, 0x9a, 0x77, 0x61, 0xaa, 0x42, 0xdb, 0x56, + 0xa7, 0xc9, 0x23, 0xe4, 0xc2, 0xfd, 0x38, 0x07, 0x05, 0x5f, 0xc1, 0x92, 0x17, 0x90, 0x34, 0x31, + 0x86, 0x34, 0x4c, 0xf5, 0x12, 0x7e, 0x53, 0x15, 0xf3, 0x2d, 0x2a, 0xb7, 0x26, 0xd3, 0x85, 0x15, + 0xce, 0xdc, 0x85, 0xf1, 0xb0, 0x38, 0xad, 0x93, 0x06, 0x4c, 0x56, 0x23, 0x01, 0x46, 0xa4, 0xf5, + 0x23, 0xdf, 0x19, 0xe1, 0xc1, 0xd5, 0x85, 0x38, 0x13, 0x4c, 0x72, 0x35, 0x7f, 0x6a, 0xc0, 0xa4, + 0x96, 0x2c, 0xdd, 0x9c, 0x9d, 0xa4, 0x47, 0x77, 0x29, 0x63, 0x5a, 0x5a, 0xbc, 0xf3, 0xee, 0xe3, + 0xd5, 0xed, 0x24, 0xbd, 0xba, 0xc7, 0x2d, 0xb1, 0xc7, 0xb3, 0xfb, 0xa7, 0x43, 0x90, 0xd7, 0x79, + 0x71, 0xaf, 0x43, 0x8e, 0x9f, 0xf7, 0x83, 0x9d, 0x01, 0x5c, 0x77, 0x40, 0xc1, 0x89, 0xb1, 0xe4, + 0x2e, 0xb2, 0xcc, 0x77, 0x90, 0x0a, 0x42, 0xeb, 0xb7, 0xbc, 0x00, 0x05, 0x27, 0x72, 0x0d, 0x86, + 0xa9, 0x53, 0x93, 0x87, 0xc1, 0xd1, 0x19, 0xf2, 0x2b, 0x76, 0x4b, 0x4e, 0x0d, 0x19, 0x17, 0x7e, + 0xb9, 0xc2, 0xf5, 0xda, 0x56, 0x20, 0x55, 0xc5, 0xf0, 0x72, 0x05, 0x87, 0xa2, 0xc4, 0x9a, 0xbf, + 0x3b, 0x04, 0xa3, 0x95, 0xee, 0x16, 0x3b, 0xd6, 0xfe, 0xd0, 0x80, 0x53, 0x49, 0x67, 0x69, 0x38, + 0x31, 0xaf, 0x1e, 0xcb, 0xe5, 0x1f, 0xa4, 0xf5, 0xf2, 0x13, 0xb2, 0x2a, 0xa7, 0x52, 0x90, 0x98, + 0x56, 0x03, 0xa6, 0x76, 0x86, 0x59, 0xb0, 0x43, 0xc7, 0x92, 0x05, 0x3b, 0xd1, 0x2f, 0x03, 0xd6, + 0xfc, 0xbb, 0x11, 0x00, 0xd1, 0x23, 0xeb, 0x9d, 0xe0, 0x30, 0xb6, 0xc1, 0x0b, 0x30, 0xae, 0xde, + 0x23, 0xb8, 0x11, 0x46, 0x08, 0xb4, 0x6b, 0x69, 0x25, 0x82, 0xc3, 0x18, 0x25, 0x33, 0x81, 0xa8, + 0x13, 0x78, 0x7b, 0xe2, 0xb0, 0x1b, 0x89, 0x9b, 0x40, 0x4b, 0x1a, 0x83, 0x11, 0x2a, 0x32, 0x1b, + 0x33, 0xe3, 0x45, 0xa6, 0xec, 0x89, 0xfb, 0x98, 0xe0, 0x2f, 0xc2, 0x84, 0xfe, 0x5a, 0xb6, 0x5b, + 0x2a, 0xf9, 0x40, 0xab, 0x9c, 0x1b, 0x51, 0x24, 0xc6, 0x69, 0xc9, 0xcb, 0x70, 0x22, 0x9e, 0xd2, + 0x26, 0x8f, 0x85, 0xb3, 0xb2, 0xf4, 0x89, 0x78, 0x26, 0x1c, 0x26, 0xa8, 0xd9, 0x2c, 0xac, 0x79, + 0x7b, 0xd8, 0x75, 0xe4, 0xf9, 0xa0, 0x67, 0xe1, 0x22, 0x87, 0xa2, 0xc4, 0xb2, 0x2e, 0x64, 0x25, + 0xa9, 0x27, 0xe0, 0xdc, 0xe1, 0x9d, 0x0f, 0xbb, 0xb0, 0x12, 0xc1, 0x61, 0x8c, 0x92, 0x49, 0x90, + 0x86, 0x19, 0xc4, 0xe7, 0x79, 0xc2, 0xb4, 0xea, 0xc0, 0x09, 0x37, 0xae, 0x0b, 0x0b, 0x4f, 0xf6, + 0x27, 0x0f, 0x99, 0x5b, 0x1f, 0x2b, 0x2b, 0x72, 0xc6, 0x12, 0xaa, 0x73, 0x82, 0xbf, 0x79, 0x0a, + 0x4e, 0x56, 0xba, 0x9d, 0x4e, 0xcb, 0xa6, 0x35, 0x6d, 0xff, 0x9a, 0xaf, 0xc0, 0xa4, 0xbc, 0x2d, + 0xa1, 0x8f, 0xbf, 0x23, 0x5d, 0x7e, 0x34, 0xf7, 0xd9, 0x7e, 0xbe, 0xe7, 0x54, 0x9b, 0x9e, 0xeb, + 0x48, 0xcf, 0x20, 0x71, 0x92, 0x87, 0x56, 0x56, 0xd7, 0x44, 0xf4, 0x88, 0x12, 0x2b, 0x24, 0xf5, + 0xcc, 0xbb, 0xa3, 0xc2, 0x8d, 0x83, 0x04, 0xd6, 0x79, 0x84, 0x4e, 0xec, 0x82, 0xd1, 0x30, 0xa5, + 0xf9, 0x63, 0x03, 0xce, 0x24, 0x1a, 0x28, 0x8f, 0xad, 0xb7, 0x7b, 0x9b, 0xb9, 0x38, 0x58, 0x33, + 0xa5, 0xf7, 0xb5, 0x7f, 0x4b, 0xad, 0x78, 0x4b, 0x5f, 0xcd, 0xde, 0x52, 0x29, 0xaa, 0xb7, 0xbd, + 0xff, 0x69, 0x40, 0x71, 0x73, 0xf3, 0xba, 0xb6, 0x57, 0x10, 0xce, 0xfa, 0xe2, 0xbe, 0xcb, 0x7c, + 0x3d, 0xa0, 0xde, 0x82, 0xdb, 0xee, 0xb4, 0xa8, 0x9e, 0x1c, 0xf2, 0x12, 0x4a, 0x25, 0x95, 0x02, + 0xfb, 0x94, 0x24, 0xab, 0x70, 0x2a, 0x8a, 0x91, 0xe6, 0x1a, 0x6f, 0x54, 0x4e, 0xe6, 0x25, 0xf6, + 0xa2, 0x31, 0xad, 0x4c, 0x92, 0x95, 0xb4, 0xd9, 0xe4, 0xe3, 0x18, 0x3d, 0xac, 0x24, 0x1a, 0xd3, + 0xca, 0x98, 0xeb, 0x50, 0x8c, 0xbc, 0x8c, 0x42, 0x5e, 0x85, 0xa9, 0xaa, 0xdb, 0xee, 0x78, 0xd4, + 0xf7, 0x6d, 0xd7, 0xb9, 0x4e, 0x77, 0x68, 0x4b, 0x36, 0x99, 0xdf, 0x66, 0x59, 0x48, 0xe0, 0xb0, + 0x87, 0xda, 0xfc, 0x8b, 0x27, 0x40, 0xdf, 0xa1, 0xf8, 0xc5, 0x4d, 0x8c, 0x4c, 0xf1, 0xda, 0xaa, + 0x8e, 0x27, 0xe5, 0x06, 0x8f, 0x27, 0xe9, 0xbd, 0x38, 0x11, 0x53, 0x6a, 0x84, 0x31, 0xa5, 0xd1, + 0x63, 0x88, 0x29, 0x69, 0x25, 0xb0, 0x27, 0xae, 0xf4, 0x15, 0x03, 0xc6, 0x1d, 0xb7, 0x46, 0x95, + 0xce, 0xcc, 0xdd, 0x06, 0xc5, 0x2b, 0xeb, 0x03, 0x75, 0xa2, 0x08, 0x2f, 0x4a, 0x8e, 0x22, 0x9c, + 0xa8, 0x0f, 0xaa, 0x28, 0x0a, 0x63, 0xa2, 0xc9, 0x32, 0xe4, 0xad, 0x7a, 0xdd, 0x76, 0xec, 0x60, + 0x4f, 0x5e, 0x06, 0x39, 0x9f, 0xa6, 0xea, 0xcf, 0x4b, 0x1a, 0x61, 0x76, 0xaa, 0x2f, 0xd4, 0x65, + 0x99, 0xdd, 0xae, 0xef, 0x5e, 0x16, 0x06, 0xb0, 0xdb, 0x55, 0x96, 0x4f, 0xc4, 0x89, 0xa4, 0xee, + 0x89, 0x85, 0x57, 0x31, 0x4d, 0x18, 0x15, 0xa1, 0x46, 0xf9, 0x5c, 0x0a, 0x77, 0x5a, 0x8a, 0x30, + 0x24, 0x4a, 0x0c, 0x69, 0x28, 0xa7, 0x78, 0x91, 0x77, 0x6e, 0x39, 0x73, 0x48, 0x41, 0xfb, 0xd9, + 0xd3, 0xbd, 0xe2, 0xe4, 0xb5, 0xa8, 0x9d, 0x38, 0x7e, 0x18, 0x3b, 0x71, 0xa2, 0xaf, 0x8d, 0xd8, + 0x80, 0x51, 0x9f, 0x5b, 0xa1, 0x3c, 0xbe, 0x5a, 0xbc, 0xb2, 0x90, 0xed, 0x20, 0x89, 0x19, 0xb2, + 0xa2, 0x77, 0x04, 0x0c, 0x25, 0x7b, 0xe2, 0x42, 0x5e, 0x05, 0x81, 0x65, 0x88, 0x36, 0x9b, 0xe9, + 0x93, 0x74, 0x39, 0xaa, 0x2b, 0x01, 0x02, 0x8a, 0x5a, 0x08, 0xb9, 0x03, 0xc3, 0x35, 0xab, 0x21, + 0x83, 0xb5, 0xaf, 0x66, 0xbe, 0xe3, 0xa2, 0xc4, 0x70, 0xab, 0x62, 0x71, 0x7e, 0x05, 0x19, 0x57, + 0xb2, 0x1d, 0xde, 0x01, 0x9d, 0x1a, 0xe4, 0x00, 0x8e, 0xab, 0x40, 0xc2, 0x66, 0xee, 0xb9, 0x45, + 0xba, 0x04, 0x63, 0x3b, 0x6e, 0xab, 0xdb, 0x96, 0x51, 0xde, 0xe2, 0x95, 0xe9, 0xb4, 0xd1, 0xbe, + 0xc5, 0x49, 0xc2, 0x4d, 0x40, 0x7c, 0xfb, 0xa8, 0xca, 0x92, 0x2f, 0x1a, 0x70, 0x82, 0x2d, 0x1d, + 0x3d, 0x0f, 0xfc, 0x12, 0x19, 0x60, 0xa6, 0xde, 0xf4, 0xd9, 0xd1, 0xaa, 0x66, 0x98, 0x56, 0x84, + 0x57, 0x63, 0x12, 0x30, 0x21, 0x91, 0x74, 0x20, 0xef, 0xdb, 0x35, 0x5a, 0xb5, 0x3c, 0xbf, 0x74, + 0xea, 0xd8, 0xa4, 0x87, 0x2e, 0x37, 0xc9, 0x1b, 0xb5, 0x14, 0xf2, 0x9b, 0xfc, 0x0d, 0x13, 0xf9, + 0xfe, 0x90, 0x7c, 0x75, 0xea, 0xf4, 0x71, 0xbe, 0x3a, 0x75, 0x4a, 0x3c, 0x60, 0x12, 0x93, 0x80, + 0x49, 0x91, 0xe4, 0x0b, 0x06, 0x9c, 0x11, 0x97, 0x41, 0x93, 0x37, 0x81, 0xcf, 0x64, 0xb4, 0x73, + 0x1f, 0x3f, 0xd8, 0x9f, 0x39, 0x33, 0x9f, 0xc6, 0x12, 0xd3, 0x25, 0x91, 0x77, 0x61, 0xc2, 0x8b, + 0xfa, 0x84, 0x79, 0xf0, 0x3f, 0xeb, 0x08, 0xc4, 0xbc, 0xcb, 0x22, 0xf1, 0x20, 0x06, 0xc2, 0xb8, + 0x2c, 0xf2, 0x2c, 0x14, 0x3b, 0x72, 0x73, 0xb3, 0xfd, 0x36, 0xcf, 0x1b, 0x18, 0x16, 0x87, 0xf0, + 0x46, 0x08, 0xc6, 0x28, 0x0d, 0xb9, 0x09, 0xc5, 0xc0, 0x6d, 0x51, 0x4f, 0x66, 0x93, 0x96, 0xf8, + 0x7c, 0xb9, 0x90, 0x36, 0xf9, 0x37, 0x35, 0x59, 0xe8, 0x7a, 0x0b, 0x61, 0x3e, 0x46, 0xf9, 0x30, + 0x4b, 0x50, 0x5d, 0x15, 0xf7, 0xb8, 0xa1, 0xfa, 0x78, 0xdc, 0x12, 0xac, 0x44, 0x91, 0x18, 0xa7, + 0x25, 0x2b, 0x70, 0xb2, 0xe3, 0xd9, 0xae, 0x67, 0x07, 0x7b, 0x0b, 0x2d, 0xcb, 0xf7, 0x39, 0x83, + 0x69, 0xce, 0x40, 0x87, 0x13, 0x36, 0x92, 0x04, 0xd8, 0x5b, 0x86, 0x5c, 0x82, 0xbc, 0x02, 0x96, + 0x9e, 0xe0, 0xea, 0x1d, 0xdf, 0xc9, 0x54, 0x59, 0xd4, 0xd8, 0x3e, 0x37, 0xdb, 0xce, 0x67, 0xb9, + 0xd9, 0x46, 0x6a, 0x70, 0xde, 0xea, 0x06, 0x2e, 0x4f, 0x47, 0x8f, 0x17, 0xd9, 0x74, 0xb7, 0xa9, + 0x53, 0xba, 0xc8, 0x8f, 0xb7, 0x8b, 0x07, 0xfb, 0x33, 0xe7, 0xe7, 0xef, 0x43, 0x87, 0xf7, 0xe5, + 0x42, 0xda, 0x90, 0xa7, 0xf2, 0x76, 0x5e, 0xe9, 0x23, 0x03, 0x9c, 0x2b, 0xf1, 0x2b, 0x7e, 0x2a, + 0x3e, 0x2d, 0x60, 0xa8, 0x45, 0x90, 0x4d, 0x28, 0x36, 0x5d, 0x3f, 0x98, 0x6f, 0xd9, 0x96, 0x4f, + 0xfd, 0xd2, 0x93, 0x7c, 0x9e, 0xa4, 0x1e, 0x89, 0x57, 0x15, 0x59, 0x38, 0x4d, 0xae, 0x86, 0x25, + 0x31, 0xca, 0x86, 0x50, 0xee, 0x6d, 0xee, 0xf2, 0x51, 0x73, 0x9d, 0x80, 0xbe, 0x13, 0x94, 0x2e, + 0xf0, 0xb6, 0x3c, 0x93, 0xc6, 0x79, 0xc3, 0xad, 0x55, 0xe2, 0xd4, 0x62, 0x63, 0x48, 0x00, 0x31, + 0xc9, 0x93, 0x99, 0xfc, 0x1d, 0xb7, 0x56, 0xe9, 0xd0, 0xea, 0x86, 0x15, 0x54, 0x9b, 0xa5, 0x99, + 0xb8, 0xd7, 0x64, 0x23, 0x82, 0xc3, 0x18, 0x25, 0xa9, 0xc2, 0x58, 0x5b, 0x24, 0xe9, 0x96, 0x9e, + 0x1a, 0x40, 0x7d, 0x94, 0x89, 0xbe, 0xe2, 0xf0, 0x91, 0x1f, 0xa8, 0x38, 0x93, 0x6f, 0x18, 0x30, + 0xe9, 0xc7, 0xcd, 0xd0, 0xd2, 0x47, 0x07, 0x39, 0xf2, 0xe2, 0xbc, 0xca, 0xcf, 0xf0, 0x4e, 0x8a, + 0x03, 0xef, 0xf5, 0x82, 0x30, 0x59, 0x09, 0xd1, 0x7a, 0x9e, 0xff, 0x5e, 0x7a, 0x7a, 0xa0, 0xd6, + 0x73, 0x1e, 0xaa, 0xf5, 0xfc, 0x03, 0x15, 0x67, 0x72, 0x19, 0xc6, 0x02, 0xbb, 0x4d, 0xdd, 0x6e, + 0x50, 0x7a, 0x26, 0x1e, 0x07, 0xd8, 0x14, 0x60, 0x54, 0xf8, 0xe9, 0x57, 0xe0, 0x64, 0x8f, 0x42, + 0x7c, 0xa4, 0x34, 0xee, 0x1f, 0x32, 0x03, 0x38, 0x62, 0x82, 0x1c, 0xb7, 0xe1, 0xb6, 0x02, 0x27, + 0xe5, 0x93, 0xa3, 0x4c, 0x5b, 0x6a, 0x75, 0xf5, 0xf3, 0x4e, 0x91, 0x40, 0x28, 0x26, 0x09, 0xb0, + 0xb7, 0x0c, 0x9b, 0xb1, 0x55, 0xf1, 0xbe, 0x8f, 0x48, 0x19, 0x1d, 0x89, 0x3b, 0xa9, 0x16, 0x22, + 0x38, 0x8c, 0x51, 0x9a, 0x7f, 0x66, 0xc0, 0x44, 0xec, 0xe4, 0x3e, 0xf6, 0x98, 0xc7, 0x32, 0x90, + 0xb6, 0xed, 0x79, 0xae, 0x27, 0xd4, 0x9f, 0x35, 0xb6, 0x27, 0xf9, 0xf2, 0xf2, 0x28, 0xbf, 0xb4, + 0xb4, 0xd6, 0x83, 0xc5, 0x94, 0x12, 0xe6, 0x7f, 0x0d, 0x41, 0x98, 0xad, 0xa1, 0x6f, 0xea, 0x19, + 0x7d, 0x6f, 0xea, 0x7d, 0x0c, 0xf2, 0x77, 0x7d, 0xd7, 0xd9, 0x08, 0xef, 0xf3, 0xe9, 0xa1, 0x78, + 0xad, 0xb2, 0x7e, 0x83, 0x53, 0x6a, 0x0a, 0x4e, 0xfd, 0xf6, 0xb2, 0xdd, 0x0a, 0x7a, 0x6f, 0xbd, + 0xbd, 0xf6, 0xba, 0x80, 0xa3, 0xa6, 0xe0, 0x8f, 0x08, 0xed, 0x50, 0xed, 0x73, 0x0c, 0x1f, 0x11, + 0x62, 0x40, 0x14, 0x38, 0x32, 0x07, 0x05, 0xed, 0xb2, 0x94, 0x1e, 0x54, 0xdd, 0x53, 0xda, 0xb5, + 0x89, 0x21, 0x0d, 0xd7, 0xc4, 0xa4, 0x5b, 0x4e, 0x5a, 0x9f, 0xcb, 0x19, 0x75, 0xd8, 0x84, 0x6f, + 0x4f, 0x6c, 0xd3, 0x0a, 0x8c, 0x5a, 0x4a, 0x34, 0x3b, 0x27, 0xd7, 0x3f, 0x3b, 0xc7, 0xfc, 0xd2, + 0x30, 0x8c, 0xdd, 0xa2, 0x1e, 0xbf, 0x77, 0x7b, 0x19, 0xc6, 0x76, 0xc4, 0x4f, 0xd9, 0xf7, 0xa1, + 0x7a, 0x2b, 0xc0, 0xa8, 0xf0, 0xac, 0x03, 0xb6, 0xba, 0x76, 0xab, 0xb6, 0x18, 0xae, 0x06, 0xdd, + 0x01, 0x65, 0x85, 0xc0, 0x90, 0x86, 0x15, 0x68, 0x30, 0xdd, 0xb4, 0xdd, 0xb6, 0x83, 0xe4, 0x95, + 0x9b, 0x15, 0x85, 0xc0, 0x90, 0x86, 0x3c, 0x03, 0xa3, 0x0d, 0x3b, 0xd8, 0xb4, 0x1a, 0xc9, 0x50, + 0xc2, 0x0a, 0x87, 0xa2, 0xc4, 0x72, 0x3f, 0xb8, 0x1d, 0x6c, 0x7a, 0x94, 0xfb, 0xd5, 0x7a, 0x52, + 0xd3, 0x57, 0x22, 0x38, 0x8c, 0x51, 0xf2, 0x2a, 0xb9, 0xb2, 0x65, 0xd2, 0x3f, 0x1d, 0x56, 0x49, + 0x21, 0x30, 0xa4, 0x61, 0x13, 0xa9, 0xea, 0xb6, 0x3b, 0x76, 0x4b, 0xe6, 0x86, 0x44, 0x26, 0xd2, + 0x82, 0x84, 0xa3, 0xa6, 0x60, 0xd4, 0x6c, 0x2b, 0xa8, 0xbb, 0x5e, 0x3b, 0xf9, 0x06, 0xcb, 0x86, + 0x84, 0xa3, 0xa6, 0x30, 0x6f, 0xc1, 0x84, 0x58, 0x12, 0x0b, 0x2d, 0xcb, 0x6e, 0xaf, 0x2c, 0x90, + 0xa5, 0x9e, 0x5c, 0xa3, 0xcb, 0x29, 0xb9, 0x46, 0x67, 0x62, 0x85, 0x52, 0x72, 0x8e, 0xbe, 0x35, + 0x04, 0xf9, 0x47, 0xf8, 0x24, 0x55, 0x35, 0xf6, 0x24, 0xd5, 0x31, 0xbc, 0x5f, 0x94, 0xf6, 0x1c, + 0xd5, 0x76, 0xe2, 0x39, 0xaa, 0x85, 0x01, 0x33, 0xe2, 0xee, 0xfb, 0x14, 0xd5, 0x8f, 0x0c, 0xd0, + 0x29, 0xfe, 0x7c, 0x0f, 0x28, 0xdb, 0x0e, 0x8f, 0x2e, 0x3e, 0xfc, 0xce, 0x74, 0x63, 0x9d, 0xb9, + 0x36, 0x50, 0x2b, 0xa3, 0x55, 0xef, 0xfb, 0x16, 0xde, 0x87, 0x06, 0x94, 0xd2, 0x0a, 0x3c, 0x82, + 0xe7, 0xb7, 0x9c, 0xf8, 0xf3, 0x5b, 0xab, 0xc7, 0xd6, 0xd8, 0x3e, 0xcf, 0x70, 0x7d, 0xbf, 0x4f, + 0x53, 0xf9, 0x03, 0x58, 0x6f, 0xa9, 0x33, 0xc0, 0x18, 0x20, 0xd4, 0x20, 0xb8, 0xa6, 0x9f, 0x1f, + 0x6f, 0xc1, 0xa8, 0xcf, 0x83, 0x7d, 0x72, 0x6c, 0x5f, 0xcc, 0x78, 0x18, 0x30, 0x16, 0xd2, 0x01, + 0xc4, 0x7f, 0xa3, 0x64, 0x6b, 0x7e, 0xd7, 0x80, 0xf1, 0x47, 0xf8, 0x78, 0xda, 0x56, 0x7c, 0xf4, + 0x5e, 0x1a, 0x68, 0xf4, 0xfa, 0x8c, 0xd8, 0x1f, 0x3c, 0x01, 0xb1, 0x47, 0xcb, 0x88, 0x03, 0x05, + 0xa5, 0x6e, 0xa9, 0xdc, 0xd8, 0x97, 0x06, 0xf2, 0xb1, 0x86, 0xdb, 0xbf, 0x82, 0xf8, 0x18, 0x8a, + 0x48, 0xc4, 0x4d, 0x87, 0x0e, 0x15, 0x37, 0x7d, 0xe4, 0xfe, 0xfb, 0x74, 0xf3, 0x75, 0xe4, 0xa1, + 0x98, 0xaf, 0xe7, 0x8f, 0xdd, 0x7c, 0x7d, 0xf2, 0xe1, 0x9b, 0xaf, 0x11, 0xff, 0x5e, 0x6e, 0x00, + 0xff, 0xde, 0xbb, 0x70, 0x7a, 0x27, 0x3c, 0x7a, 0xf5, 0x7c, 0x91, 0x2f, 0x42, 0x5d, 0x4e, 0x35, + 0x5a, 0x99, 0x1a, 0xe1, 0x07, 0xd4, 0x09, 0x22, 0x87, 0x76, 0x78, 0x8f, 0xec, 0x56, 0x0a, 0x3b, + 0x4c, 0x15, 0x92, 0xf4, 0xee, 0x8c, 0x1d, 0xc2, 0xbb, 0xf3, 0x4d, 0x03, 0xce, 0x58, 0x69, 0xaf, + 0x1f, 0xcb, 0xb0, 0xc0, 0x6b, 0x03, 0xb9, 0xe7, 0x62, 0x1c, 0xa5, 0xaf, 0x2c, 0x0d, 0x85, 0xe9, + 0x75, 0x60, 0xca, 0xaa, 0xf2, 0xf0, 0x8a, 0x20, 0x7c, 0xba, 0x6f, 0xf6, 0x6b, 0xc9, 0xc8, 0x0a, + 0xf0, 0xde, 0xae, 0x0c, 0xac, 0x66, 0x1c, 0x43, 0x74, 0xa5, 0x38, 0x40, 0x74, 0x25, 0xe1, 0x7a, + 0x1b, 0x3f, 0x26, 0xd7, 0x9b, 0x03, 0x53, 0x76, 0xdb, 0x6a, 0xd0, 0x8d, 0x6e, 0xab, 0x25, 0x52, + 0xed, 0xfc, 0xd2, 0x04, 0xe7, 0x9d, 0x9a, 0xef, 0x75, 0xdd, 0xad, 0x5a, 0xad, 0xe4, 0x1b, 0x7b, + 0x3a, 0x4f, 0x76, 0x35, 0xc1, 0x09, 0x7b, 0x78, 0xb3, 0x69, 0xc9, 0xef, 0x30, 0xd1, 0x80, 0xf5, + 0x36, 0x0f, 0x3c, 0xc8, 0xf7, 0xe9, 0xaf, 0x86, 0x60, 0x8c, 0xd2, 0x90, 0x6b, 0x50, 0xa8, 0x39, + 0xbe, 0x4c, 0x69, 0x9d, 0xe4, 0xbb, 0xd4, 0xc7, 0xd9, 0xde, 0xb6, 0x78, 0xa3, 0xa2, 0x93, 0x59, + 0xcf, 0xa7, 0x5c, 0x82, 0xd3, 0x78, 0x0c, 0xcb, 0x93, 0x35, 0xce, 0x4c, 0x3e, 0xc4, 0x22, 0x22, + 0x05, 0x17, 0xfb, 0x78, 0x8f, 0x16, 0x6f, 0xa8, 0x77, 0x63, 0x26, 0xa4, 0x38, 0xf9, 0xbc, 0x4a, + 0xc8, 0x21, 0xf2, 0x88, 0xd8, 0xc9, 0xfb, 0x3e, 0x22, 0x76, 0x13, 0xce, 0x05, 0x41, 0x2b, 0x16, + 0x80, 0x96, 0xf7, 0x0c, 0xf9, 0xa5, 0xd3, 0x9c, 0x78, 0x77, 0x72, 0x73, 0xf3, 0x7a, 0x1a, 0x09, + 0xf6, 0x2b, 0xcb, 0x23, 0xb1, 0x41, 0x4b, 0x7b, 0x8f, 0x2f, 0x0c, 0x12, 0x89, 0x0d, 0x23, 0xfd, + 0x32, 0x12, 0x1b, 0x02, 0x30, 0x2a, 0x85, 0xac, 0xf7, 0xf3, 0x9b, 0x9f, 0xe2, 0x7b, 0xcc, 0xd1, + 0xbd, 0xe0, 0x51, 0xc7, 0xeb, 0xe9, 0xfb, 0x3a, 0x5e, 0x7b, 0x1c, 0xc5, 0x67, 0x8e, 0xe0, 0x28, + 0xbe, 0xc3, 0x2f, 0x38, 0xae, 0x2c, 0x48, 0x27, 0x7b, 0x36, 0x8d, 0x8d, 0xdf, 0xdb, 0x10, 0xc9, + 0x12, 0xfc, 0x27, 0x0a, 0x9e, 0x64, 0x03, 0x4e, 0x77, 0xdc, 0x5a, 0x8f, 0x9f, 0x99, 0x7b, 0xd5, + 0x23, 0x17, 0x81, 0x37, 0x52, 0x68, 0x30, 0xb5, 0x24, 0xdf, 0xc0, 0x43, 0x78, 0xa9, 0xc4, 0x3b, + 0x46, 0x6c, 0xe0, 0x21, 0x18, 0xa3, 0x34, 0x49, 0xb7, 0xeb, 0xe3, 0x0f, 0xcd, 0xed, 0x3a, 0xfd, + 0x08, 0xdc, 0xae, 0x4f, 0x1c, 0xda, 0xed, 0xfa, 0xeb, 0x70, 0xaa, 0xe3, 0xd6, 0x16, 0x6d, 0xdf, + 0xeb, 0xf2, 0x7f, 0xdf, 0x28, 0x77, 0x6b, 0x0d, 0x1a, 0x70, 0xbf, 0x6d, 0xf1, 0xca, 0x95, 0x68, + 0x25, 0xc5, 0x1f, 0x10, 0xcd, 0xca, 0x3f, 0x20, 0xe2, 0x8b, 0x3c, 0x51, 0x8a, 0xdb, 0x3d, 0x3c, + 0x5b, 0x24, 0x05, 0x89, 0x69, 0x72, 0xa2, 0x5e, 0xdf, 0x8b, 0x0f, 0xcd, 0xeb, 0xfb, 0x2a, 0xe4, + 0xfd, 0x66, 0x37, 0xa8, 0xb9, 0xbb, 0x0e, 0x77, 0xe0, 0x17, 0xf4, 0xab, 0xbd, 0xf9, 0x8a, 0x84, + 0xdf, 0xdb, 0x9f, 0x99, 0x52, 0xbf, 0x23, 0x56, 0xbe, 0x84, 0x90, 0xaf, 0xf7, 0x49, 0xa2, 0x34, + 0x8f, 0x39, 0x89, 0xf2, 0xdc, 0x91, 0x12, 0x28, 0xd3, 0xbc, 0xd9, 0x4f, 0xfd, 0x2c, 0x78, 0xb3, + 0x7f, 0xc7, 0x80, 0x89, 0x9d, 0xa8, 0xe3, 0x44, 0x3a, 0xd9, 0xb3, 0xc5, 0xe6, 0x62, 0x2e, 0x98, + 0xb2, 0xc9, 0xf6, 0xaa, 0x18, 0xe8, 0x5e, 0x12, 0x80, 0x71, 0xe1, 0xbd, 0x91, 0xc2, 0xa7, 0x1f, + 0x5d, 0xa4, 0x70, 0x70, 0x4f, 0xfa, 0xd7, 0x27, 0xe1, 0x44, 0xe2, 0x35, 0x5f, 0xfd, 0x54, 0x81, + 0x71, 0xd8, 0xa7, 0x0a, 0x62, 0x6f, 0x09, 0x0c, 0x3d, 0xd4, 0xb7, 0x04, 0x86, 0x8f, 0xfd, 0x2d, + 0x81, 0xc8, 0x9b, 0x09, 0x23, 0x0f, 0x78, 0x33, 0x61, 0x1e, 0x26, 0x55, 0x02, 0x19, 0x95, 0x77, + 0xc9, 0x85, 0xc3, 0x52, 0xdf, 0x96, 0x58, 0x88, 0xa3, 0x31, 0x49, 0x4f, 0x7e, 0x0d, 0x72, 0x0e, + 0x2f, 0x38, 0x3a, 0xc0, 0x7b, 0x3f, 0xf1, 0x01, 0xe3, 0xea, 0xaf, 0x7c, 0x72, 0x47, 0xe5, 0x16, + 0xe4, 0x38, 0xec, 0x9e, 0xfa, 0x81, 0x42, 0x28, 0x79, 0x03, 0x4a, 0x6e, 0xbd, 0xde, 0x72, 0xad, + 0x5a, 0xf8, 0xde, 0x81, 0xf2, 0xa1, 0x8a, 0x5c, 0xd8, 0x8b, 0x92, 0x41, 0x69, 0xbd, 0x0f, 0x1d, + 0xf6, 0xe5, 0xc0, 0xac, 0x94, 0xc9, 0xf8, 0x3b, 0x1c, 0x7e, 0xa9, 0xc0, 0x9b, 0xf9, 0x2b, 0xc7, + 0xd1, 0xcc, 0xf8, 0xa3, 0x1f, 0xb2, 0xc1, 0xe1, 0x3d, 0x95, 0x38, 0x16, 0x93, 0x35, 0x21, 0x1e, + 0x9c, 0xed, 0xa4, 0xd9, 0x70, 0xbe, 0xcc, 0xf0, 0xba, 0x9f, 0x25, 0x79, 0x41, 0x4a, 0x39, 0x9b, + 0x6a, 0x05, 0xfa, 0xd8, 0x87, 0x73, 0xf4, 0x25, 0x84, 0xfc, 0x43, 0x7b, 0x09, 0x21, 0xfe, 0x7e, + 0xf5, 0xc4, 0xa3, 0x78, 0xbf, 0x9a, 0xfc, 0x24, 0xf5, 0x01, 0x0e, 0x61, 0xfa, 0x7c, 0xee, 0x38, + 0x06, 0xfb, 0x67, 0xee, 0x11, 0x8e, 0x3f, 0x32, 0x60, 0x5a, 0x4c, 0xa9, 0xb4, 0x3f, 0x27, 0x91, + 0x79, 0x5a, 0xc7, 0xe0, 0x32, 0xe7, 0x91, 0xb7, 0x4a, 0x4c, 0x10, 0xf7, 0xf1, 0xde, 0x47, 0x38, + 0xf9, 0x4a, 0xca, 0x51, 0x3d, 0x39, 0x80, 0x63, 0x20, 0x35, 0x97, 0x5a, 0x2a, 0x8b, 0x0f, 0x38, + 0x9d, 0xa7, 0xf7, 0xc4, 0xeb, 0x48, 0x7d, 0xdf, 0xe6, 0xba, 0x19, 0x3d, 0x8a, 0xb2, 0x3e, 0x8f, + 0x15, 0xee, 0x3d, 0xd1, 0x77, 0xc1, 0xbe, 0x60, 0xc0, 0xe9, 0xb4, 0x4d, 0x22, 0xa5, 0x16, 0x95, + 0x78, 0x2d, 0x06, 0xf3, 0x3c, 0x46, 0xeb, 0x70, 0x3c, 0x6f, 0x6d, 0xfc, 0xfe, 0x68, 0xc4, 0x5b, + 0x1a, 0xd0, 0xce, 0x2f, 0x32, 0x93, 0x33, 0x65, 0x26, 0xc7, 0x5e, 0x7b, 0xcf, 0x3d, 0xc2, 0xd7, + 0xde, 0x47, 0x33, 0xbc, 0xf6, 0x3e, 0xf6, 0x28, 0x5f, 0x7b, 0xcf, 0x1f, 0xf2, 0xb5, 0xf7, 0xc2, + 0xcf, 0xcc, 0x6b, 0xef, 0xe6, 0x07, 0x06, 0x4c, 0xfd, 0x5f, 0xff, 0x3b, 0xab, 0x1f, 0x46, 0xc2, + 0x95, 0x8f, 0xf0, 0x7f, 0xac, 0xee, 0xc6, 0x03, 0x40, 0x4b, 0xc7, 0xd2, 0xc8, 0x3e, 0x81, 0xa0, + 0xb7, 0x21, 0xcd, 0x04, 0x3d, 0xdc, 0x95, 0xb9, 0x58, 0x2a, 0xcd, 0xd0, 0xa1, 0x53, 0x69, 0xfe, + 0x27, 0xa5, 0x57, 0xf9, 0xb9, 0xf9, 0xee, 0xc3, 0xfa, 0xdf, 0x9e, 0xd3, 0x69, 0xff, 0xdb, 0x93, + 0xf8, 0x9f, 0x9e, 0xe4, 0xff, 0xb6, 0x0c, 0x3d, 0xbc, 0xff, 0x6d, 0x29, 0xcf, 0x7e, 0xfb, 0x83, + 0x0b, 0x8f, 0x7d, 0xf7, 0x83, 0x0b, 0x8f, 0x7d, 0xef, 0x83, 0x0b, 0x8f, 0xbd, 0x77, 0x70, 0xc1, + 0xf8, 0xf6, 0xc1, 0x05, 0xe3, 0xbb, 0x07, 0x17, 0x8c, 0xef, 0x1d, 0x5c, 0x30, 0x7e, 0x78, 0x70, + 0xc1, 0xf8, 0xbd, 0x7f, 0xbd, 0xf0, 0xd8, 0xe7, 0xf2, 0xaa, 0x31, 0xff, 0x1b, 0x00, 0x00, 0xff, + 0xff, 0x1d, 0x13, 0x79, 0x00, 0xe8, 0x7a, 0x00, 0x00, } func (m *Amount) Marshal() (dAtA []byte, err error) { @@ -6682,16 +6681,6 @@ func (m *Template) MarshalToSizedBuffer(dAtA []byte) (int, error) { i-- dAtA[i] = 0x9a } - i-- - if m.ResubmitPendingPods { - dAtA[i] = 1 - } else { - dAtA[i] = 0 - } - i-- - dAtA[i] = 0x2 - i-- - dAtA[i] = 0x90 if m.Executor != nil { { size, err := m.Executor.MarshalToSizedBuffer(dAtA[:i]) @@ -7588,6 +7577,20 @@ func (m *WorkflowSpec) MarshalToSizedBuffer(dAtA []byte) (int, error) { _ = i var l int _ = l + if m.RetryStrategy != nil { + { + size, err := m.RetryStrategy.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x2 + i-- + dAtA[i] = 0xaa + } if m.VolumeClaimGC != nil { { size, err := m.VolumeClaimGC.MarshalToSizedBuffer(dAtA[:i]) @@ -9941,7 +9944,6 @@ func (m *Template) Size() (n int) { l = m.Executor.Size() n += 2 + l + sovGenerated(uint64(l)) } - n += 3 if m.Metrics != nil { l = m.Metrics.Size() n += 2 + l + sovGenerated(uint64(l)) @@ -10270,6 +10272,10 @@ func (m *WorkflowSpec) Size() (n int) { l = m.VolumeClaimGC.Size() n += 2 + l + sovGenerated(uint64(l)) } + if m.RetryStrategy != nil { + l = m.RetryStrategy.Size() + n += 2 + l + sovGenerated(uint64(l)) + } return n } @@ -11502,7 +11508,6 @@ func (this *Template) String() string { `PodSpecPatch:` + fmt.Sprintf("%v", this.PodSpecPatch) + `,`, `AutomountServiceAccountToken:` + valueToStringGenerated(this.AutomountServiceAccountToken) + `,`, `Executor:` + strings.Replace(this.Executor.String(), "ExecutorConfig", "ExecutorConfig", 1) + `,`, - `ResubmitPendingPods:` + fmt.Sprintf("%v", this.ResubmitPendingPods) + `,`, `Metrics:` + strings.Replace(this.Metrics.String(), "Metrics", "Metrics", 1) + `,`, `Synchronization:` + strings.Replace(this.Synchronization.String(), "Synchronization", "Synchronization", 1) + `,`, `Memoize:` + strings.Replace(this.Memoize.String(), "Memoize", "Memoize", 1) + `,`, @@ -11725,6 +11730,7 @@ func (this *WorkflowSpec) String() string { `WorkflowTemplateRef:` + strings.Replace(this.WorkflowTemplateRef.String(), "WorkflowTemplateRef", "WorkflowTemplateRef", 1) + `,`, `Synchronization:` + strings.Replace(this.Synchronization.String(), "Synchronization", "Synchronization", 1) + `,`, `VolumeClaimGC:` + strings.Replace(this.VolumeClaimGC.String(), "VolumeClaimGC", "VolumeClaimGC", 1) + `,`, + `RetryStrategy:` + strings.Replace(this.RetryStrategy.String(), "RetryStrategy", "RetryStrategy", 1) + `,`, `}`, }, "") return s @@ -24300,26 +24306,6 @@ func (m *Template) Unmarshal(dAtA []byte) error { return err } iNdEx = postIndex - case 34: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field ResubmitPendingPods", wireType) - } - var v int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - v |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - m.ResubmitPendingPods = bool(v != 0) case 35: if wireType != 2 { return fmt.Errorf("proto: wrong wireType = %d for field Metrics", wireType) @@ -27302,6 +27288,42 @@ func (m *WorkflowSpec) Unmarshal(dAtA []byte) error { return err } iNdEx = postIndex + case 37: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field RetryStrategy", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.RetryStrategy == nil { + m.RetryStrategy = &RetryStrategy{} + } + if err := m.RetryStrategy.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipGenerated(dAtA[iNdEx:]) diff --git a/pkg/apis/workflow/v1alpha1/generated.proto b/pkg/apis/workflow/v1alpha1/generated.proto index c483185acf82..839cf30ba48a 100644 --- a/pkg/apis/workflow/v1alpha1/generated.proto +++ b/pkg/apis/workflow/v1alpha1/generated.proto @@ -1097,9 +1097,6 @@ message Template { // container fields which are not strings (e.g. resource limits). optional string podSpecPatch = 31; - // ResubmitPendingPods is a flag to enable resubmitting pods that remain Pending after initial submission - optional bool resubmitPendingPods = 34; - // Metrics are a list of metrics emitted from this template optional Metrics metrics = 35; @@ -1399,6 +1396,9 @@ message WorkflowSpec { // VolumeClaimGC describes the strategy to use when to deleting volumes from completed workflows optional VolumeClaimGC volumeClaimGC = 36; + + // RetryStrategy for all templates in the workflow. + optional RetryStrategy retryStrategy = 37; } // WorkflowStatus contains overall status information about a workflow diff --git a/pkg/apis/workflow/v1alpha1/openapi_generated.go b/pkg/apis/workflow/v1alpha1/openapi_generated.go index f22eacd0cf0a..21a4f5e52e02 100644 --- a/pkg/apis/workflow/v1alpha1/openapi_generated.go +++ b/pkg/apis/workflow/v1alpha1/openapi_generated.go @@ -3641,13 +3641,6 @@ func schema_pkg_apis_workflow_v1alpha1_Template(ref common.ReferenceCallback) co Format: "", }, }, - "resubmitPendingPods": { - SchemaProps: spec.SchemaProps{ - Description: "ResubmitPendingPods is a flag to enable resubmitting pods that remain Pending after initial submission", - Type: []string{"boolean"}, - Format: "", - }, - }, "metrics": { SchemaProps: spec.SchemaProps{ Description: "Metrics are a list of metrics emitted from this template", @@ -4642,11 +4635,17 @@ func schema_pkg_apis_workflow_v1alpha1_WorkflowSpec(ref common.ReferenceCallback Ref: ref("github.com/argoproj/argo/pkg/apis/workflow/v1alpha1.VolumeClaimGC"), }, }, + "retryStrategy": { + SchemaProps: spec.SchemaProps{ + Description: "RetryStrategy for all templates in the workflow.", + Ref: ref("github.com/argoproj/argo/pkg/apis/workflow/v1alpha1.RetryStrategy"), + }, + }, }, }, }, Dependencies: []string{ - "github.com/argoproj/argo/pkg/apis/workflow/v1alpha1.Arguments", "github.com/argoproj/argo/pkg/apis/workflow/v1alpha1.ArtifactRepositoryRef", "github.com/argoproj/argo/pkg/apis/workflow/v1alpha1.ExecutorConfig", "github.com/argoproj/argo/pkg/apis/workflow/v1alpha1.Metrics", "github.com/argoproj/argo/pkg/apis/workflow/v1alpha1.PodGC", "github.com/argoproj/argo/pkg/apis/workflow/v1alpha1.Synchronization", "github.com/argoproj/argo/pkg/apis/workflow/v1alpha1.TTLStrategy", "github.com/argoproj/argo/pkg/apis/workflow/v1alpha1.Template", "github.com/argoproj/argo/pkg/apis/workflow/v1alpha1.VolumeClaimGC", "github.com/argoproj/argo/pkg/apis/workflow/v1alpha1.WorkflowTemplateRef", "k8s.io/api/core/v1.Affinity", "k8s.io/api/core/v1.HostAlias", "k8s.io/api/core/v1.LocalObjectReference", "k8s.io/api/core/v1.PersistentVolumeClaim", "k8s.io/api/core/v1.PodDNSConfig", "k8s.io/api/core/v1.PodSecurityContext", "k8s.io/api/core/v1.Toleration", "k8s.io/api/core/v1.Volume", "k8s.io/api/policy/v1beta1.PodDisruptionBudgetSpec"}, + "github.com/argoproj/argo/pkg/apis/workflow/v1alpha1.Arguments", "github.com/argoproj/argo/pkg/apis/workflow/v1alpha1.ArtifactRepositoryRef", "github.com/argoproj/argo/pkg/apis/workflow/v1alpha1.ExecutorConfig", "github.com/argoproj/argo/pkg/apis/workflow/v1alpha1.Metrics", "github.com/argoproj/argo/pkg/apis/workflow/v1alpha1.PodGC", "github.com/argoproj/argo/pkg/apis/workflow/v1alpha1.RetryStrategy", "github.com/argoproj/argo/pkg/apis/workflow/v1alpha1.Synchronization", "github.com/argoproj/argo/pkg/apis/workflow/v1alpha1.TTLStrategy", "github.com/argoproj/argo/pkg/apis/workflow/v1alpha1.Template", "github.com/argoproj/argo/pkg/apis/workflow/v1alpha1.VolumeClaimGC", "github.com/argoproj/argo/pkg/apis/workflow/v1alpha1.WorkflowTemplateRef", "k8s.io/api/core/v1.Affinity", "k8s.io/api/core/v1.HostAlias", "k8s.io/api/core/v1.LocalObjectReference", "k8s.io/api/core/v1.PersistentVolumeClaim", "k8s.io/api/core/v1.PodDNSConfig", "k8s.io/api/core/v1.PodSecurityContext", "k8s.io/api/core/v1.Toleration", "k8s.io/api/core/v1.Volume", "k8s.io/api/policy/v1beta1.PodDisruptionBudgetSpec"}, } } @@ -5318,6 +5317,12 @@ func schema_pkg_apis_workflow_v1alpha1_WorkflowTemplateSpec(ref common.Reference Ref: ref("github.com/argoproj/argo/pkg/apis/workflow/v1alpha1.VolumeClaimGC"), }, }, + "retryStrategy": { + SchemaProps: spec.SchemaProps{ + Description: "RetryStrategy for all templates in the workflow.", + Ref: ref("github.com/argoproj/argo/pkg/apis/workflow/v1alpha1.RetryStrategy"), + }, + }, "workflowMetadata": { SchemaProps: spec.SchemaProps{ Description: "WorkflowMetadata contains some metadata of the workflow to be refer", @@ -5328,6 +5333,6 @@ func schema_pkg_apis_workflow_v1alpha1_WorkflowTemplateSpec(ref common.Reference }, }, Dependencies: []string{ - "github.com/argoproj/argo/pkg/apis/workflow/v1alpha1.Arguments", "github.com/argoproj/argo/pkg/apis/workflow/v1alpha1.ArtifactRepositoryRef", "github.com/argoproj/argo/pkg/apis/workflow/v1alpha1.ExecutorConfig", "github.com/argoproj/argo/pkg/apis/workflow/v1alpha1.Metrics", "github.com/argoproj/argo/pkg/apis/workflow/v1alpha1.PodGC", "github.com/argoproj/argo/pkg/apis/workflow/v1alpha1.Synchronization", "github.com/argoproj/argo/pkg/apis/workflow/v1alpha1.TTLStrategy", "github.com/argoproj/argo/pkg/apis/workflow/v1alpha1.Template", "github.com/argoproj/argo/pkg/apis/workflow/v1alpha1.VolumeClaimGC", "github.com/argoproj/argo/pkg/apis/workflow/v1alpha1.WorkflowTemplateRef", "k8s.io/api/core/v1.Affinity", "k8s.io/api/core/v1.HostAlias", "k8s.io/api/core/v1.LocalObjectReference", "k8s.io/api/core/v1.PersistentVolumeClaim", "k8s.io/api/core/v1.PodDNSConfig", "k8s.io/api/core/v1.PodSecurityContext", "k8s.io/api/core/v1.Toleration", "k8s.io/api/core/v1.Volume", "k8s.io/api/policy/v1beta1.PodDisruptionBudgetSpec", "k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"}, + "github.com/argoproj/argo/pkg/apis/workflow/v1alpha1.Arguments", "github.com/argoproj/argo/pkg/apis/workflow/v1alpha1.ArtifactRepositoryRef", "github.com/argoproj/argo/pkg/apis/workflow/v1alpha1.ExecutorConfig", "github.com/argoproj/argo/pkg/apis/workflow/v1alpha1.Metrics", "github.com/argoproj/argo/pkg/apis/workflow/v1alpha1.PodGC", "github.com/argoproj/argo/pkg/apis/workflow/v1alpha1.RetryStrategy", "github.com/argoproj/argo/pkg/apis/workflow/v1alpha1.Synchronization", "github.com/argoproj/argo/pkg/apis/workflow/v1alpha1.TTLStrategy", "github.com/argoproj/argo/pkg/apis/workflow/v1alpha1.Template", "github.com/argoproj/argo/pkg/apis/workflow/v1alpha1.VolumeClaimGC", "github.com/argoproj/argo/pkg/apis/workflow/v1alpha1.WorkflowTemplateRef", "k8s.io/api/core/v1.Affinity", "k8s.io/api/core/v1.HostAlias", "k8s.io/api/core/v1.LocalObjectReference", "k8s.io/api/core/v1.PersistentVolumeClaim", "k8s.io/api/core/v1.PodDNSConfig", "k8s.io/api/core/v1.PodSecurityContext", "k8s.io/api/core/v1.Toleration", "k8s.io/api/core/v1.Volume", "k8s.io/api/policy/v1beta1.PodDisruptionBudgetSpec", "k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"}, } } diff --git a/pkg/apis/workflow/v1alpha1/workflow_types.go b/pkg/apis/workflow/v1alpha1/workflow_types.go index 3f0c7e10988d..32cb973844dc 100644 --- a/pkg/apis/workflow/v1alpha1/workflow_types.go +++ b/pkg/apis/workflow/v1alpha1/workflow_types.go @@ -329,6 +329,9 @@ type WorkflowSpec struct { // VolumeClaimGC describes the strategy to use when to deleting volumes from completed workflows VolumeClaimGC *VolumeClaimGC `json:"volumeClaimGC,omitempty" protobuf:"bytes,36,opt,name=volumeClaimGC,casttype=VolumeClaimGC"` + + // RetryStrategy for all templates in the workflow. + RetryStrategy *RetryStrategy `json:"retryStrategy,omitempty" protobuf:"bytes,37,opt,name=retryStrategy"` } // GetVolumeClaimGC returns the VolumeClaimGC that was defined in the workflow spec. If none was provided, a default value is returned. @@ -547,9 +550,6 @@ type Template struct { // container fields which are not strings (e.g. resource limits). PodSpecPatch string `json:"podSpecPatch,omitempty" protobuf:"bytes,31,opt,name=podSpecPatch"` - // ResubmitPendingPods is a flag to enable resubmitting pods that remain Pending after initial submission - ResubmitPendingPods bool `json:"resubmitPendingPods,omitempty" protobuf:"varint,34,opt,name=resubmitPendingPods"` - // Metrics are a list of metrics emitted from this template Metrics *Metrics `json:"metrics,omitempty" protobuf:"bytes,35,opt,name=metrics"` @@ -1843,10 +1843,6 @@ func (tmpl *Template) IsLeaf() bool { return false } -func (tmpl *Template) IsResubmitPendingPods() bool { - return tmpl != nil && tmpl.ResubmitPendingPods -} - // DAGTemplate is a template subtype for directed acyclic graph templates type DAGTemplate struct { // Target are one or more names of targets to execute in a DAG diff --git a/pkg/apis/workflow/v1alpha1/workflow_types_test.go b/pkg/apis/workflow/v1alpha1/workflow_types_test.go index 2f7bc4f2adda..0748447065c6 100644 --- a/pkg/apis/workflow/v1alpha1/workflow_types_test.go +++ b/pkg/apis/workflow/v1alpha1/workflow_types_test.go @@ -103,11 +103,6 @@ func TestArtifact_GetArchive(t *testing.T) { assert.Equal(t, &ArchiveStrategy{None: &NoneStrategy{}}, (&Artifact{Archive: &ArchiveStrategy{None: &NoneStrategy{}}}).GetArchive()) } -func TestTemplate_IsResubmitAllowed(t *testing.T) { - assert.False(t, (&Template{}).IsResubmitPendingPods()) - assert.True(t, (&Template{ResubmitPendingPods: true}).IsResubmitPendingPods()) -} - func TestNodes_FindByDisplayName(t *testing.T) { assert.Nil(t, Nodes{}.FindByDisplayName("")) assert.NotNil(t, Nodes{"": NodeStatus{DisplayName: "foo"}}.FindByDisplayName("foo")) diff --git a/pkg/apis/workflow/v1alpha1/zz_generated.deepcopy.go b/pkg/apis/workflow/v1alpha1/zz_generated.deepcopy.go index 702ad84ecbcb..0e88127e8bd1 100644 --- a/pkg/apis/workflow/v1alpha1/zz_generated.deepcopy.go +++ b/pkg/apis/workflow/v1alpha1/zz_generated.deepcopy.go @@ -2377,6 +2377,11 @@ func (in *WorkflowSpec) DeepCopyInto(out *WorkflowSpec) { *out = new(VolumeClaimGC) **out = **in } + if in.RetryStrategy != nil { + in, out := &in.RetryStrategy, &out.RetryStrategy + *out = new(RetryStrategy) + (*in).DeepCopyInto(*out) + } return } diff --git a/test/e2e/fixtures/given.go b/test/e2e/fixtures/given.go index 5efff91f7453..7bc35465c5b4 100644 --- a/test/e2e/fixtures/given.go +++ b/test/e2e/fixtures/given.go @@ -137,11 +137,13 @@ func (g *Given) CronWorkflow(text string) *Given { } var NoError = func(t *testing.T, output string, err error) { + t.Helper() assert.NoError(t, err, output) } var OutputContains = func(contains string) func(t *testing.T, output string, err error) { return func(t *testing.T, output string, err error) { + t.Helper() if assert.NoError(t, err, output) { assert.Contains(t, output, contains) } diff --git a/test/e2e/fixtures/when.go b/test/e2e/fixtures/when.go index d513815f8cd7..c963e68531c0 100644 --- a/test/e2e/fixtures/when.go +++ b/test/e2e/fixtures/when.go @@ -118,6 +118,11 @@ type Condition func(wf *wfv1.Workflow) bool var ToBeCompleted Condition = func(wf *wfv1.Workflow) bool { return wf.Labels[common.LabelKeyCompleted] == "true" } var ToStart Condition = func(wf *wfv1.Workflow) bool { return !wf.Status.StartedAt.IsZero() } +var ToBeRunning Condition = func(wf *wfv1.Workflow) bool { + return wf.Status.Nodes.Any(func(node wfv1.NodeStatus) bool { + return node.Phase == wfv1.NodeRunning + }) +} // `ToBeDone` replaces `ToFinish` which also makes sure the workflow is both complete not pending archiving. // This additional check is not needed for most use case, however in `AfterTest` we delete the workflow and this diff --git a/test/e2e/functional_test.go b/test/e2e/functional_test.go index 8afdc302513b..85c5922897ad 100644 --- a/test/e2e/functional_test.go +++ b/test/e2e/functional_test.go @@ -34,7 +34,9 @@ func (s *FunctionalSuite) TestArchiveStrategies() { }) } -func (s *FunctionalSuite) TestDeletingWorkflowPod() { +// when you delete a pending pod, +// then the pod is re- created automatically +func (s *FunctionalSuite) TestDeletingPendingPod() { s.Given(). Workflow("@testdata/sleepy-workflow.yaml"). When(). @@ -43,9 +45,46 @@ func (s *FunctionalSuite) TestDeletingWorkflowPod() { Exec("kubectl", []string{"-n", "argo", "delete", "pod", "-l", "workflows.argoproj.io/workflow"}, fixtures.OutputContains(`pod "sleepy" deleted`)). WaitForWorkflow(). Then(). + ExpectWorkflow(func(t *testing.T, metadata *metav1.ObjectMeta, status *wfv1.WorkflowStatus) { + assert.Equal(t, wfv1.NodeSucceeded, status.Phase) + assert.Len(t, status.Nodes, 1) + }) +} + +// where you delete a running pod, +// then the workflow is errored +func (s *FunctionalSuite) TestDeletingRunningPod() { + s.Given(). + Workflow("@testdata/sleepy-workflow.yaml"). + When(). + SubmitWorkflow(). + WaitForWorkflow(fixtures.ToBeRunning, "to be running"). + Exec("kubectl", []string{"-n", "argo", "delete", "pod", "-l", "workflows.argoproj.io/workflow"}, fixtures.NoError). + WaitForWorkflow(). + Then(). ExpectWorkflow(func(t *testing.T, metadata *metav1.ObjectMeta, status *wfv1.WorkflowStatus) { assert.Equal(t, wfv1.NodeError, status.Phase) - assert.Contains(t, status.Message, "pod deleted") + assert.Len(t, status.Nodes, 1) + if assert.Contains(t, status.Nodes, "sleepy") { + assert.Equal(t, "pod deleted during operation", status.Nodes["sleepy"].Message) + } + }) +} + +// where you delete a running pod, and you have retry on error, +// then the node is retried +func (s *FunctionalSuite) TestDeletingRunningPodWithOrErrorRetryPolicy() { + s.Given(). + Workflow("@testdata/sleepy-retry-on-error-workflow.yaml"). + When(). + SubmitWorkflow(). + WaitForWorkflow(fixtures.ToBeRunning, "to be running"). + Exec("kubectl", []string{"-n", "argo", "delete", "pod", "-l", "workflows.argoproj.io/workflow"}, fixtures.NoError). + WaitForWorkflow(). + Then(). + ExpectWorkflow(func(t *testing.T, metadata *metav1.ObjectMeta, status *wfv1.WorkflowStatus) { + assert.Equal(t, wfv1.NodeSucceeded, status.Phase) + assert.Len(t, status.Nodes, 2) }) } @@ -345,7 +384,6 @@ spec: entrypoint: dag templates: - name: cowsay - resubmitPendingPods: true container: image: argoproj/argosay:v2 args: ["echo", "a"] @@ -391,7 +429,6 @@ spec: entrypoint: dag templates: - name: cowsay - resubmitPendingPods: true retryStrategy: limit: 1 container: @@ -854,7 +891,6 @@ spec: parameters: [{name: message, value: "15s"}] - name: whalesay - resubmitPendingPods: true resources: limits: memory: 145M diff --git a/test/e2e/testdata/sleepy-retry-on-error-workflow.yaml b/test/e2e/testdata/sleepy-retry-on-error-workflow.yaml new file mode 100644 index 000000000000..326bcf6d89b7 --- /dev/null +++ b/test/e2e/testdata/sleepy-retry-on-error-workflow.yaml @@ -0,0 +1,18 @@ +kind: Workflow +apiVersion: argoproj.io/v1alpha1 +metadata: + name: sleepy-retry-on-error + labels: + argo-e2e: "true" +spec: + retryStrategy: + retryPolicy: OnError + limit: 1 + entrypoint: main + templates: + - name: main + container: + image: argoproj/argosay:v2 + args: + - sleep + - 10s \ No newline at end of file diff --git a/workflow/controller/controller_test.go b/workflow/controller/controller_test.go index e0e43f40d6d8..8fff93331db9 100644 --- a/workflow/controller/controller_test.go +++ b/workflow/controller/controller_test.go @@ -258,6 +258,20 @@ func makePodsPhase(woc *wfOperationCtx, phase apiv1.PodPhase, with ...with) { } } +func deletePods(woc *wfOperationCtx) { + for _, obj := range woc.controller.podInformer.GetStore().List() { + pod := obj.(*apiv1.Pod) + err := woc.controller.kubeclientset.CoreV1().Pods(pod.Namespace).Delete(pod.Name, nil) + if err != nil { + panic(err) + } + err = woc.controller.podInformer.GetStore().Delete(obj) + if err != nil { + panic(err) + } + } +} + func TestAddingWorkflowDefaultValueIfValueNotExist(t *testing.T) { ans := true t.Run("WithoutDefaults", func(t *testing.T) { diff --git a/workflow/controller/operator.go b/workflow/controller/operator.go index 86a13f99a9e3..54f50764aaea 100644 --- a/workflow/controller/operator.go +++ b/workflow/controller/operator.go @@ -876,8 +876,8 @@ func (woc *wfOperationCtx) podReconciliation() error { // Now check for deleted pods. Iterate our nodes. If any one of our nodes does not show up in // the seen list it implies that the pod was deleted without the controller seeing the event. - // It is now impossible to infer pod status. The only thing we can do at this point is to mark - // the node with Error. + // It is now impossible to infer pod status. We can do at this point is to mark the node with Error, or + // we can re-submit it. for nodeID, node := range woc.wf.Status.Nodes { if node.Type != wfv1.NodeTypePod || node.Fulfilled() || node.StartedAt.IsZero() { // node is not a pod, it is already complete, or it can be re-run. @@ -888,25 +888,7 @@ func (woc *wfOperationCtx) podReconciliation() error { // If the node is pending and the pod does not exist, it could be the case that we want to try to submit it // again instead of marking it as an error. Check if that's the case. if node.Pending() { - tmplCtx, err := woc.createTemplateContext(node.GetTemplateScope()) - if err != nil { - return err - } - _, tmpl, _, err := tmplCtx.ResolveTemplate(&node) - if err != nil { - return err - } - - // The pod may have been intentionally deleted (e.g. `kubectl delete pod`). - // If the user has specified re-submit allowed, so we do not mark the node as error (yet). - if tmpl.IsResubmitPendingPods() { - // We want to resubmit. Continue and do not mark as error. - continue - } - if tmpl.Synchronization != nil { - // Wait to acquire the lock - continue - } + continue } node.Message = "pod deleted" @@ -1487,7 +1469,7 @@ func (woc *wfOperationCtx) executeTemplate(nodeName string, orgTmpl wfv1.Templat localParams := make(map[string]string) // Inject the pod name. If the pod has a retry strategy, the pod name will be changed and will be injected when it // is determined - if resolvedTmpl.IsPodType() && resolvedTmpl.RetryStrategy == nil { + if resolvedTmpl.IsPodType() && woc.retryStrategy(resolvedTmpl) == nil { localParams[common.LocalVarPodName] = woc.wf.NodeID(nodeName) } @@ -1599,14 +1581,14 @@ func (woc *wfOperationCtx) executeTemplate(nodeName string, orgTmpl wfv1.Templat // the container. The status of this node should be "Success" if any // of the retries succeed. Otherwise, it is "Failed". retryNodeName := "" - if processedTmpl.RetryStrategy != nil { + if woc.retryStrategy(processedTmpl) != nil { retryNodeName = nodeName retryParentNode := node if retryParentNode == nil { woc.log.Debugf("Inject a retry node for node %s", retryNodeName) retryParentNode = woc.initializeExecutableNode(retryNodeName, wfv1.NodeTypeRetry, templateScope, processedTmpl, orgTmpl, opts.boundaryID, wfv1.NodeRunning) } - processedRetryParentNode, continueExecution, err := woc.processNodeRetries(retryParentNode, *processedTmpl.RetryStrategy, opts) + processedRetryParentNode, continueExecution, err := woc.processNodeRetries(retryParentNode, *woc.retryStrategy(processedTmpl), opts) if err != nil { return woc.markNodeError(retryNodeName, err), err } else if !continueExecution { @@ -1680,9 +1662,10 @@ func (woc *wfOperationCtx) executeTemplate(nodeName string, orgTmpl wfv1.Templat // If retry policy is not set, or if it is not set to Always or OnError, we won't attempt to retry an errored container // and we return instead. - if processedTmpl.RetryStrategy == nil || - (processedTmpl.RetryStrategy.RetryPolicy != wfv1.RetryPolicyAlways && - processedTmpl.RetryStrategy.RetryPolicy != wfv1.RetryPolicyOnError) { + retryStrategy := woc.retryStrategy(processedTmpl) + if retryStrategy == nil || + (retryStrategy.RetryPolicy != wfv1.RetryPolicyAlways && + retryStrategy.RetryPolicy != wfv1.RetryPolicyOnError) { return node, err } } @@ -2071,11 +2054,6 @@ func (woc *wfOperationCtx) executeContainer(nodeName string, templateScope strin node := woc.wf.GetNodeByName(nodeName) if node == nil { node = woc.initializeExecutableNode(nodeName, wfv1.NodeTypePod, templateScope, tmpl, orgTmpl, opts.boundaryID, wfv1.NodePending) - } else if !tmpl.IsResubmitPendingPods() && !node.Pending() { - // This is not our first time executing this node. - // We will retry to resubmit the pod if it is allowed and if the node is pending. If either of these two are - // false, return. - return node, nil } // Check if the output of this container is referenced elsewhere in the Workflow. If so, make sure to include it during @@ -3074,3 +3052,10 @@ func (woc *wfOperationCtx) loadExecutionSpec() (wfv1.TemplateReferenceHolder, wf return tmplRef, executionParameters, nil } + +func (woc *wfOperationCtx) retryStrategy(tmpl *wfv1.Template) *wfv1.RetryStrategy { + if tmpl != nil && tmpl.RetryStrategy != nil { + return tmpl.RetryStrategy + } + return woc.execWf.Spec.RetryStrategy +} diff --git a/workflow/controller/operator_metrics_test.go b/workflow/controller/operator_metrics_test.go index c2ee651af652..652e8bb61dfd 100644 --- a/workflow/controller/operator_metrics_test.go +++ b/workflow/controller/operator_metrics_test.go @@ -453,7 +453,6 @@ spec: value: "{{workflow.duration}}" templates: - name: whalesay - resubmitPendingPods: true container: image: docker/whalesay command: [ cowsay ] diff --git a/workflow/controller/operator_test.go b/workflow/controller/operator_test.go index a9d0aad643ce..902eef3a425c 100644 --- a/workflow/controller/operator_test.go +++ b/workflow/controller/operator_test.go @@ -4280,7 +4280,6 @@ spec: metadata: {} name: resubmit-pending outputs: {} - resubmitPendingPods: true script: command: - bash @@ -4601,7 +4600,6 @@ spec: requests: memory: 1Gi name: whalesay - resubmitPendingPods: true status: finishedAt: null nodes: @@ -4996,6 +4994,50 @@ func TestPodFailureWithContainerWaitingState(t *testing.T) { assert.Contains(t, msg, "Pod failed before") } +func TestResubmitPendingPods(t *testing.T) { + wf := unmarshalWF(` +apiVersion: argoproj.io/v1alpha1 +kind: Workflow +metadata: + name: my-wf + namespace: my-ns +spec: + entrypoint: main + templates: + - name: main + container: + image: my-image +`) + wftmpl := unmarshalWFTmpl(wftmplGlobalVarsOnExit) + cancel, controller := newController(wf, wftmpl) + defer cancel() + + woc := newWorkflowOperationCtx(wf, controller) + woc.operate() + + assert.Equal(t, wfv1.NodeRunning, woc.wf.Status.Phase) + assert.True(t, woc.wf.Status.Nodes.Any(func(node wfv1.NodeStatus) bool { + return node.Phase == wfv1.NodePending + })) + + deletePods(woc) + + woc = newWorkflowOperationCtx(woc.wf, controller) + woc.operate() + + assert.Equal(t, wfv1.NodeRunning, woc.wf.Status.Phase) + assert.True(t, woc.wf.Status.Nodes.Any(func(node wfv1.NodeStatus) bool { + return node.Phase == wfv1.NodePending + })) + + makePodsPhase(woc, apiv1.PodSucceeded) + + woc = newWorkflowOperationCtx(woc.wf, controller) + woc.operate() + + assert.Equal(t, wfv1.NodeSucceeded, woc.wf.Status.Phase) +} + var wfRetryWithParam = ` apiVersion: argoproj.io/v1alpha1 kind: Workflow diff --git a/workflow/validate/validate_test.go b/workflow/validate/validate_test.go index 809ad2af8415..93f98ef92d82 100644 --- a/workflow/validate/validate_test.go +++ b/workflow/validate/validate_test.go @@ -2627,7 +2627,6 @@ spec: entrypoint: whalesay templates: - name: whalesay - resubmitPendingPods: true container: image: docker/whalesay metrics: