Repository: argoproj/argo
Pull request #2483 (2020-03-19 18:06:42)

chore: Fix Swagger for PDB to support Java client
Checklist:

* [x] Either (a) I've created an [enhancement proposal](https://github.com/argoproj/argo/issues/new/choose) and discussed it with the community, (b) this is a bug fix, or (c) this is a chore.
* [x] The title of the PR is (a) [conventional](https://www.conventionalcommits.org/en/v1.0.0/), (b) states what changed, and (c) suffixes the related issues number. E.g. `"fix(controller): Updates such and such. Fixes #1234"`.  
* [x] I have written unit and/or e2e tests for my change. PRs without these are unlike to be merged.
* [ ] Optional. I've added My organization is added to the USERS.md.
* [ ] I've signed the CLA and required builds are green. 



Patch:
diff --git a/api/openapi-spec/swagger.json b/api/openapi-spec/swagger.json
index 9fabc4854..6747359b0 100644
--- a/api/openapi-spec/swagger.json
+++ b/api/openapi-spec/swagger.json
@@ -2154,6 +2154,14 @@
           "type": "string",
           "title": "PodIP captures the IP of the pod for daemoned steps"
         },
+        "resourcesDuration": {
+          "description": "ResourcesDuration is indicative, but not accurate, resource duration. This is populated when the nodes completes.",
+          "type": "object",
+          "additionalProperties": {
+            "type": "string",
+            "format": "int64"
+          }
+        },
         "startedAt": {
           "title": "Time at which this node started",
           "$ref": "#/definitions/io.k8s.api.core.v1.Time"
@@ -2846,7 +2854,7 @@
         },
         "podDisruptionBudget": {
           "title": "PodDisruptionBudget holds the number of concurrent disruptions that you allow for Workflow's Pods.\nController will automatically add the selector with workflow name, if selector is empty.\nOptional: Defaults to empty.\n+optional",
-          "$ref": "#/definitions/k8s.io.api.policy.v1beta1.PodDisruptionBudgetSpec"
+          "$ref": "#/definitions/io.k8s.api.core.v1.PodDisruptionBudgetSpec"
         },
         "podGC": {
           "title": "PodGC describes the strategy to use when to deleting completed pods",
@@ -5279,7 +5287,7 @@
         }
       }
     },
-    "k8s.io.api.policy.v1beta1.PodDisruptionBudgetSpec": {
+    "io.k8s.api.core.v1.PodDisruptionBudgetSpec": {
       "description": "PodDisruptionBudgetSpec is a description of a PodDisruptionBudget.",
       "type": "object",
       "properties": {
diff --git a/cmd/argo/commands/get.go b/cmd/argo/commands/get.go
index bca77ceb9..28981d67c 100644
--- a/cmd/argo/commands/get.go
+++ b/cmd/argo/commands/get.go
@@ -107,6 +107,9 @@ func printWorkflowHelper(wf *wfv1.Workflow, getArgs getFlags) {
 	if !wf.Status.StartedAt.IsZero() {
 		fmt.Printf(fmtStr, "Duration:", humanize.RelativeDuration(wf.Status.StartedAt.Time, wf.Status.FinishedAt.Time))
 	}
+	if !wf.Status.Nodes.GetResourcesRequested().IsZero() {
+		fmt.Printf(fmtStr, "ResourcesDuration:", wf.Status.Nodes.GetResourcesRequested())
+	}
 
 	if len(wf.Spec.Arguments.Parameters) > 0 {
 		fmt.Printf(fmtStr, "Parameters:", "")
@@ -147,9 +150,9 @@ func printWorkflowHelper(wf *wfv1.Workflow, getArgs getFlags) {
 		fmt.Println()
 		// apply a dummy FgDefault format to align tab writer with the rest of the columns
 		if getArgs.output == "wide" {
-			_, _ = fmt.Fprintf(w, "%s\tPODNAME\tDURATION\tARTIFACTS\tMESSAGE\n", ansiFormat("STEP", FgDefault))
+			_, _ = fmt.Fprintf(w, "%s\tPODNAME\tDURATION\tARTIFACTS\tMESSAGE\tRESOURCESDURATION\n", ansiFormat("STEP", FgDefault))
 		} else {
-			_, _ = fmt.Fprintf(w, "%s\tPODNAME\tDURATION\tMESSAGE\n", ansiFormat("STEP", FgDefault))
+			_, _ = fmt.Fprintf(w, "%s\tPODNAME\tDURATION\tMESSAGE\tRESOURCESDURATION\n", ansiFormat("STEP", FgDefault))
 		}
 
 		// Convert Nodes to Render Trees
@@ -450,10 +453,11 @@ func printNode(w *tabwriter.Writer, node wfv1.NodeStatus, nodePrefix string, get
 	if getArgs.output == "wide" {
 		msg := args[len(args)-1]
 		args[len(args)-1] = getArtifactsString(node)
-		args = append(args, msg)
-		_, _ = fmt.Fprintf(w, "%s%s\t%s\t%s\t%s\t%s\n", args...)
+		args = append(args, msg, node.ResourcesDuration)
+		_, _ = fmt.Fprintf(w, "%s%s\t%s\t%s\t%s\t%s\t%s\n", args...)
 	} else {
-		_, _ = fmt.Fprintf(w, "%s%s\t%s\t%s\t%s\n", args...)
+		args = append(args, node.ResourcesDuration)
+		_, _ = fmt.Fprintf(w, "%s%s\t%s\t%s\t%s\t%s\n", args...)
 	}
 }
 
diff --git a/docs/resource-duration.md b/docs/resource-duration.md
new file mode 100644
index 000000000..a85e470b6
--- /dev/null
+++ b/docs/resource-duration.md
@@ -0,0 +1,66 @@
+# Resource Duration
+
+![alpha](assets/alpha.svg)
+
+Argo Workflows provides an indication of how much resource your workflow has used and saves this 
+information. This is intended to be an **indicative but not accurate** value.
+
+## Configuration
+
+This is only set if [the feature flags is enabled in config](workflow-controller-configmap.yaml).
+
+## Calculation
+
+The calculation is always an estimate, and is calculated by [../util/resource/duration.go](../util/resource/duration.go) 
+based on container duration, specified pod resource requests, limits, or (for memory and CPU) 
+defaults. 
+
+Each indicator is divided by a common denominator depending on resource type.
+
+### Base amounts
+
+Each resource type has a "base amount" used to normalize usage across containers.
+
+ * CPU: `1000m`
+ * Memory: `1Gi`
+ * Storage: `10Gi`
+ * Ephemeral Storage: `10Gi`
+ * All others: `1` 
+
+The requested fraction of the base amount will be multiplied by the container's run time to get 
+the container's Resource Duration. 
+
+For example, if you've requested `100Mi` of memory (one tenth of the base amount), and the container 
+runs 120sec, then the reported Resource Duration will be `12sec * (1Gi memory)`. 
+
+### Request defaults
+
+If `requests` are not set for a container, Kubernetes defaults to `limits`. If `limits` are not set,
+Argo falls back to `100m` for CPU and `100Mi` for memory. 
+
+**Note:** these are Argo's defaults, _not_ Kubernetes' defaults. For the most meaningful results, 
+set `requests` and/or `limits` for all containers.
+
+### Example
+
+A pod that runs for 3min, with a CPU limit of `2000m`, no memory request and an `nvidia.com/gpu` 
+resource limit of `1`:
+
+```
+CPU:    3min * 2000m / 1000m = 6min * (1000m cpu)
+Memory: 3min * 100Mi / 1Gi   = 18sec * (1Gi memory)
+GPU:    3min * 1     / 1     = 2min * (1 nvidia.com/gpu)
+```
+
+### Web/CLI reporting
+
+Both the web and CLI give abbreviated usage, like `9m10s*cpu,6s*memory,2m31s*nvidia.com/gpu`. In
+this context, resources like `memory` refer to the "base amounts".
+
+For example, `memory` means "amount of time a resource requested 1Gi of memory." If a container only 
+uses 100Mi, each second it runs will only count as a tenth-second of `memory`.
+
+## Rounding Down
+
+For short running pods (<10s), the memory value may be 0s. This is because the default is `100Mi`, 
+but the denominator is `1Gi`. 
diff --git a/docs/workflow-controller-configmap.yaml b/docs/workflow-controller-configmap.yaml
index 9ab5171ab..e85e0cdb4 100644
--- a/docs/workflow-controller-configmap.yaml
+++ b/docs/workflow-controller-configmap.yaml
@@ -39,6 +39,10 @@ data:
         scope: pod
         url: http://logging-facility?namespace=${metadata.namespace}&podName=${metadata.name}
 
+    featureFlags:
+      # Enable resource duration
+      resourcesDuration: false
+
     # artifactRepository defines the default location to be used as the artifact repository for
     # container artifacts.
     artifactRepository:
diff --git a/hack/swaggify.sh b/hack/swaggify.sh
index 5a2c2dcb6..2de307fda 100755
--- a/hack/swaggify.sh
+++ b/hack/swaggify.sh
@@ -12,6 +12,7 @@ cat \
     | sed 's/io.argoproj.REPLACEME.v1alpha1./io.argoproj.workflow.v1alpha1./' \
     | sed 's/io.k8s.apimachinery.pkg.runtime./io.k8s.api.core.v1./' \
     | sed 's/k8s.io.api.core.v1./io.k8s.api.core.v1./' \
+    | sed 's/k8s.io.api.policy.v1beta1./io.k8s.api.core.v1./' \
     | sed 's/k8s.io.apimachinery.pkg.api.resource./io.k8s.api.core.v1./' \
     | sed 's/k8s.io.apimachinery.pkg.apis.meta.v1./io.k8s.api.core.v1./' \
     | sed 's/k8s.io.apimachinery.pkg.util.intstr./io.k8s.api.core.v1./'
diff --git a/manifests/quick-start-mysql.yaml b/manifests/quick-start-mysql.yaml
index cebc1247d..cb714dfa8 100644
--- a/manifests/quick-start-mysql.yaml
+++ b/manifests/quick-start-mysql.yaml
@@ -300,6 +300,8 @@ data:
       - name: Example Pod Link
         scope: pod
         url: http://logging-facility?namespace=${metadata.namespace}&podName=${metadata.name}
+    featureFlags:
+      resourcesDuration: true
     persistence:
       connectionPool:
         maxIdleConns: 100
diff --git a/manifests/quick-start-no-db.yaml b/manifests/quick-start-no-db.yaml
index 88272f58e..e71f18398 100644
--- a/manifests/quick-start-no-db.yaml
+++ b/manifests/quick-start-no-db.yaml
@@ -300,6 +300,8 @@ data:
       - name: Example Pod Link
         scope: pod
         url: http://logging-facility?namespace=${metadata.namespace}&podName=${metadata.name}
+    featureFlags:
+      resourcesDuration: true
 kind: ConfigMap
 metadata:
   name: workflow-controller-configmap
diff --git a/manifests/quick-start-postgres.yaml b/manifests/quick-start-postgres.yaml
index 710da265b..e08eea638 100644
--- a/manifests/quick-start-postgres.yaml
+++ b/manifests/quick-start-postgres.yaml
@@ -300,6 +300,8 @@ data:
       - name: Example Pod Link
         scope: pod
         url: http://logging-facility?namespace=${metadata.namespace}&podName=${metadata.name}
+    featureFlags:
+      resourcesDuration: true
     persistence:
       connectionPool:
         maxIdleConns: 100
diff --git a/manifests/quick-start/mysql/overlays/workflow-controller-configmap.yaml b/manifests/quick-start/mysql/overlays/workflow-controller-configmap.yaml
index a57181ec2..1f1cfef19 100644
--- a/manifests/quick-start/mysql/overlays/workflow-controller-configmap.yaml
+++ b/manifests/quick-start/mysql/overlays/workflow-controller-configmap.yaml
@@ -33,6 +33,8 @@ data:
       - name: Example Pod Link
         scope: pod
         url: http://logging-facility?namespace=${metadata.namespace}&podName=${metadata.name}
+    featureFlags:
+      resourcesDuration: true
     persistence:
       connectionPool:
         maxIdleConns: 100
diff --git a/manifests/quick-start/no-db/overlays/workflow-controller-configmap.yaml b/manifests/quick-start/no-db/overlays/workflow-controller-configmap.yaml
index 65aab45d5..a388ed448 100644
--- a/manifests/quick-start/no-db/overlays/workflow-controller-configmap.yaml
+++ b/manifests/quick-start/no-db/overlays/workflow-controller-configmap.yaml
@@ -33,6 +33,8 @@ data:
       - name: Example Pod Link
         scope: pod
         url: http://logging-facility?namespace=${metadata.namespace}&podName=${metadata.name}
+    featureFlags:
+      resourcesDuration: true
 kind: ConfigMap
 metadata:
   name: workflow-controller-configmap
\ No newline at end of file
diff --git a/manifests/quick-start/postgres/overlays/workflow-controller-configmap.yaml b/manifests/quick-start/postgres/overlays/workflow-controller-configmap.yaml
index 8975e3caf..7d8f2eef2 100644
--- a/manifests/quick-start/postgres/overlays/workflow-controller-configmap.yaml
+++ b/manifests/quick-start/postgres/overlays/workflow-controller-configmap.yaml
@@ -33,6 +33,8 @@ data:
       - name: Example Pod Link
         scope: pod
         url: http://logging-facility?namespace=${metadata.namespace}&podName=${metadata.name}
+    featureFlags:
+      resourcesDuration: true
     persistence:
       connectionPool:
         maxIdleConns: 100
diff --git a/pkg/apiclient/workflow/workflow.swagger.json b/pkg/apiclient/workflow/workflow.swagger.json
index e8dc8f586..10d032c96 100644
--- a/pkg/apiclient/workflow/workflow.swagger.json
+++ b/pkg/apiclient/workflow/workflow.swagger.json
@@ -1337,6 +1337,14 @@
           "$ref": "#/definitions/k8s.io.apimachinery.pkg.apis.meta.v1.Time",
           "title": "Time at which this node completed"
         },
+        "resourcesDuration": {
+          "type": "object",
+          "additionalProperties": {
+            "type": "string",
+            "format": "int64"
+          },
+          "description": "ResourcesDuration is indicative, but not accurate, resource duration. This is populated when the nodes completes."
+        },
         "podIP": {
           "type": "string",
           "title": "PodIP captures the IP of the pod for daemoned steps"
diff --git a/pkg/apiclient/workflowarchive/workflow-archive.swagger.json b/pkg/apiclient/workflowarchive/workflow-archive.swagger.json
index 3526271b4..e2d09b41a 100644
--- a/pkg/apiclient/workflowarchive/workflow-archive.swagger.json
+++ b/pkg/apiclient/workflowarchive/workflow-archive.swagger.json
@@ -768,6 +768,14 @@
           "$ref": "#/definitions/k8s.io.apimachinery.pkg.apis.meta.v1.Time",
           "title": "Time at which this node completed"
         },
+        "resourcesDuration": {
+          "type": "object",
+          "additionalProperties": {
+            "type": "string",
+            "format": "int64"
+          },
+          "description": "ResourcesDuration is indicative, but not accurate, resource duration. This is populated when the nodes completes."
+        },
         "podIP": {
           "type": "string",
           "title": "PodIP captures the IP of the pod for daemoned steps"
diff --git a/pkg/apis/workflow/v1alpha1/generated.pb.go b/pkg/apis/workflow/v1alpha1/generated.pb.go
index 40f0e66c3..05b5797de 100644
--- a/pkg/apis/workflow/v1alpha1/generated.pb.go
+++ b/pkg/apis/workflow/v1alpha1/generated.pb.go
@@ -1837,6 +1837,7 @@ func init() {
 	proto.RegisterType((*MetricLabel)(nil), "github.com.argoproj.argo.pkg.apis.workflow.v1alpha1.MetricLabel")
 	proto.RegisterType((*Metrics)(nil), "github.com.argoproj.argo.pkg.apis.workflow.v1alpha1.Metrics")
 	proto.RegisterType((*NodeStatus)(nil), "github.com.argoproj.argo.pkg.apis.workflow.v1alpha1.NodeStatus")
+	proto.RegisterMapType((ResourcesDuration)(nil), "github.com.argoproj.argo.pkg.apis.workflow.v1alpha1.NodeStatus.ResourcesDurationEntry")
 	proto.RegisterType((*NoneStrategy)(nil), "github.com.argoproj.argo.pkg.apis.workflow.v1alpha1.NoneStrategy")
 	proto.RegisterType((*OSSArtifact)(nil), "github.com.argoproj.argo.pkg.apis.workflow.v1alpha1.OSSArtifact")
 	proto.RegisterType((*OSSBucket)(nil), "github.com.argoproj.argo.pkg.apis.workflow.v1alpha1.OSSBucket")
@@ -1878,369 +1879,373 @@ func init() {
 }
 
 var fileDescriptor_c23edafa7e7ea072 = []byte{
-	// 5784 bytes of a gzipped FileDescriptorProto
-	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0x7c, 0x4d, 0x6c, 0x1c, 0xc9,
-	0x75, 0xbf, 0x86, 0xe4, 0x0c, 0x67, 0xde, 0x90, 0x12, 0x55, 0xa2, 0xa4, 0x59, 0x5a, 0xcb, 0x91,
-	0x7b, 0xff, 0xbb, 0x7f, 0x39, 0xb1, 0x87, 0x5e, 0xad, 0x37, 0x59, 0x7f, 0xec, 0x07, 0x87, 0x14,
-	0x25, 0xea, 0x83, 0xa4, 0xdf, 0x50, 0x52, 0x9c, 0x5d, 0xd8, 0x69, 0x4e, 0xd7, 0xcc, 0xb4, 0x38,
-	0xd3, 0xdd, 0xee, 0xea, 0x11, 0x97, 0xde, 0x04, 0x71, 0x82, 0x04, 0x4e, 0x10, 0x18, 0x88, 0x11,
-	0xc0, 0x30, 0x60, 0x04, 0x08, 0x7c, 0x48, 0x2e, 0xb9, 0xe4, 0x90, 0x4b, 0x0e, 0x3e, 0x18, 0x39,
-	0x18, 0xbe, 0xc4, 0xc8, 0x25, 0x46, 0x10, 0x10, 0x5e, 0x06, 0x08, 0x0c, 0x24, 0x40, 0x2e, 0x01,
-	0x82, 0x10, 0x39, 0x04, 0xf5, 0xd1, 0xd5, 0x1f, 0xd3, 0xd4, 0x52, 0x3d, 0x94, 0x90, 0xc0, 0xbe,
-	0xcd, 0xbc, 0xf7, 0xea, 0xf7, 0xaa, 0xab, 0xab, 0x5e, 0xbd, 0xf7, 0xea, 0x55, 0xc3, 0x4a, 0xd7,
-	0x0e, 0x7a, 0xc3, 0x9d, 0x46, 0xdb, 0x1d, 0x2c, 0x99, 0x7e, 0xd7, 0xf5, 0x7c, 0xf7, 0x91, 0xf8,
-	0xb1, 0xe4, 0xed, 0x76, 0x97, 0x4c, 0xcf, 0x66, 0x4b, 0x7b, 0xae, 0xbf, 0xdb, 0xe9, 0xbb, 0x7b,
-	0x4b, 0x8f, 0x5f, 0x35, 0xfb, 0x5e, 0xcf, 0x7c, 0x75, 0xa9, 0x4b, 0x1d, 0xea, 0x9b, 0x01, 0xb5,
-	0x1a, 0x9e, 0xef, 0x06, 0x2e, 0x79, 0x2d, 0x02, 0x69, 0x84, 0x20, 0xe2, 0x47, 0xc3, 0xdb, 0xed,
-	0x36, 0x38, 0x48, 0x23, 0x04, 0x69, 0x84, 0x20, 0x0b, 0x9f, 0x8a, 0x69, 0xee, 0xba, 0x5c, 0x21,
-	0xc7, 0xda, 0x19, 0x76, 0xc4, 0x3f, 0xf1, 0x47, 0xfc, 0x92, 0x3a, 0x16, 0x8c, 0xdd, 0x37, 0x58,
-	0xc3, 0x76, 0x79, 0x97, 0x96, 0xda, 0xae, 0x4f, 0x97, 0x1e, 0x8f, 0xf4, 0x63, 0xe1, 0x13, 0x31,
-	0x19, 0xcf, 0xed, 0xdb, 0xed, 0xfd, 0xa5, 0xc7, 0xaf, 0xee, 0xd0, 0x60, 0xb4, 0xcb, 0x0b, 0x9f,
-	0x89, 0x44, 0x07, 0x66, 0xbb, 0x67, 0x3b, 0xd4, 0xdf, 0x8f, 0x1e, 0x79, 0x40, 0x03, 0x33, 0x4b,
-	0xc1, 0xd2, 0x71, 0xad, 0xfc, 0xa1, 0x13, 0xd8, 0x03, 0x3a, 0xd2, 0xe0, 0x57, 0x3e, 0xaa, 0x01,
-	0x6b, 0xf7, 0xe8, 0xc0, 0x4c, 0xb7, 0x33, 0xfe, 0xae, 0x00, 0xe7, 0x96, 0xfd, 0x76, 0xcf, 0x7e,
-	0x4c, 0x5b, 0x01, 0x67, 0x74, 0xf7, 0xc9, 0xbb, 0x30, 0x19, 0x98, 0x7e, 0xad, 0x70, 0xb5, 0x70,
-	0xad, 0x7a, 0xfd, 0x9d, 0x46, 0x8e, 0x31, 0x6f, 0x6c, 0x9b, 0x7e, 0x08, 0xd7, 0x9c, 0x3e, 0x3c,
-	0xa8, 0x4f, 0x6e, 0x9b, 0x3e, 0x72, 0x54, 0xf2, 0x15, 0x98, 0x72, 0x5c, 0x87, 0xd6, 0x26, 0x04,
-	0xfa, 0x72, 0x2e, 0xf4, 0x0d, 0xd7, 0xd1, 0xbd, 0x6d, 0x96, 0x0f, 0x0f, 0xea, 0x53, 0x9c, 0x82,
-	0x02, 0xd8, 0xf8, 0xf7, 0x02, 0x54, 0x96, 0xfd, 0xee, 0x70, 0x40, 0x9d, 0x80, 0x11, 0x1f, 0xc0,
-	0x33, 0x7d, 0x73, 0x40, 0x03, 0xea, 0xb3, 0x5a, 0xe1, 0xea, 0xe4, 0xb5, 0xea, 0xf5, 0xb7, 0x72,
-	0x29, 0xdd, 0x0a, 0x61, 0x9a, 0xe4, 0x87, 0x07, 0xf5, 0x33, 0x87, 0x07, 0x75, 0xd0, 0x24, 0x86,
-	0x31, 0x2d, 0xc4, 0x81, 0x8a, 0xe9, 0x07, 0x76, 0xc7, 0x6c, 0x07, 0xac, 0x36, 0x21, 0x54, 0xbe,
-	0x99, 0x4b, 0xe5, 0xb2, 0x42, 0x69, 0x9e, 0x57, 0x1a, 0x2b, 0x21, 0x85, 0x61, 0xa4, 0xc2, 0xf8,
-	0xd7, 0x49, 0x28, 0x87, 0x0c, 0x72, 0x15, 0xa6, 0x1c, 0x73, 0x40, 0xc5, 0xdb, 0xab, 0x34, 0x67,
-	0x54, 0xc3, 0xa9, 0x0d, 0x73, 0xc0, 0x07, 0xc8, 0x1c, 0x50, 0x2e, 0xe1, 0x99, 0x41, 0x4f, 0xbc,
-	0x81, 0x98, 0xc4, 0x96, 0x19, 0xf4, 0x50, 0x70, 0xc8, 0x15, 0x98, 0x1a, 0xb8, 0x16, 0xad, 0x4d,
-	0x5e, 0x2d, 0x5c, 0x2b, 0xca, 0x01, 0xbe, 0xe7, 0x5a, 0x14, 0x05, 0x95, 0xb7, 0xef, 0xf8, 0xee,
-	0xa0, 0x36, 0x95, 0x6c, 0xbf, 0xe6, 0xbb, 0x03, 0x14, 0x1c, 0xf2, 0x47, 0x05, 0x98, 0x0b, 0xbb,
-	0x77, 0xd7, 0x6d, 0x9b, 0x81, 0xed, 0x3a, 0xb5, 0xa2, 0x78, 0xe1, 0x37, 0xc6, 0x1a, 0x88, 0x10,
-	0xac, 0x59, 0x53, 0x5a, 0xe7, 0xd2, 0x1c, 0x1c, 0x51, 0x4c, 0xae, 0x03, 0x74, 0xfb, 0xee, 0x8e,
-	0xd9, 0xe7, 0x63, 0x50, 0x2b, 0x89, 0x5e, 0xeb, 0x57, 0x78, 0x53, 0x73, 0x30, 0x26, 0x45, 0x76,
-	0x61, 0xda, 0x94, 0xab, 0xa2, 0x36, 0x2d, 0xfa, 0xbd, 0x9a, 0xb3, 0xdf, 0x89, 0x95, 0xd5, 0xac,
-	0x1e, 0x1e, 0xd4, 0xa7, 0x15, 0x11, 0x43, 0x0d, 0xe4, 0x93, 0x50, 0x76, 0x3d, 0xde, 0x55, 0xb3,
-	0x5f, 0x2b, 0x5f, 0x2d, 0x5c, 0x2b, 0x37, 0xe7, 0x54, 0xf7, 0xca, 0x9b, 0x8a, 0x8e, 0x5a, 0xc2,
-	0xf8, 0x8f, 0x22, 0x8c, 0x3c, 0x35, 0x79, 0x15, 0xaa, 0x0a, 0xed, 0xae, 0xdb, 0x65, 0xe2, 0xe5,
-	0x97, 0x9b, 0xe7, 0x0e, 0x0f, 0xea, 0xd5, 0xe5, 0x88, 0x8c, 0x71, 0x19, 0xf2, 0x10, 0x26, 0xd8,
-	0x6b, 0x6a, 0x19, 0xbe, 0x9d, 0xeb, 0xe9, 0x5a, 0xaf, 0xe9, 0x09, 0x5a, 0x3a, 0x3c, 0xa8, 0x4f,
-	0xb4, 0x5e, 0xc3, 0x09, 0xf6, 0x1a, 0x37, 0x1f, 0x5d, 0x3b, 0x10, 0x93, 0x27, 0xaf, 0xf9, 0xb8,
-	0x69, 0x07, 0x1a, 0x5a, 0x98, 0x8f, 0x9b, 0x76, 0x80, 0x1c, 0x95, 0x9b, 0x8f, 0x5e, 0x10, 0x78,
-	0x62, 0xf2, 0xe5, 0x35, 0x1f, 0xb7, 0xb6, 0xb7, 0xb7, 0x34, 0xbc, 0x98, 0xdd, 0x9c, 0x82, 0x02,
-	0x98, 0x7c, 0xc0, 0x47, 0x52, 0xf2, 0x5c, 0x7f, 0x5f, 0xcd, 0xda, 0x5b, 0x63, 0xcd, 0x5a, 0xd7,
-	0xdf, 0xd7, 0xea, 0xd4, 0x3b, 0xd1, 0x0c, 0x8c, 0x6b, 0x13, 0x4f, 0x67, 0x75, 0x98, 0x98, 0xa4,
-	0xb9, 0x9f, 0x6e, 0x75, 0xad, 0x95, 0x7a, 0xba, 0xd5, 0xb5, 0x16, 0x0a, 0x60, 0xfe, 0x6e, 0x7c,
-	0x73, 0x4f, 0xcd, 0xe9, 0x7c, 0xef, 0x06, 0xcd, 0xbd, 0xe4, 0xbb, 0x41, 0x73, 0x0f, 0x39, 0x2a,
-	0x07, 0x77, 0x19, 0x13, 0x53, 0x38, 0x2f, 0xf8, 0x66, 0xab, 0x95, 0x04, 0xdf, 0x6c, 0xb5, 0x90,
-	0xa3, 0x1a, 0x5d, 0xb8, 0x18, 0x72, 0x90, 0x7a, 0x2e, 0xb3, 0xc5, 0xe8, 0xd1, 0x0e, 0x59, 0x82,
-	0x4a, 0xdb, 0x75, 0x3a, 0x76, 0xf7, 0x9e, 0xe9, 0x29, 0xab, 0xa7, 0xcd, 0xe5, 0x4a, 0xc8, 0xc0,
-	0x48, 0x86, 0xbc, 0x08, 0x93, 0xbb, 0x74, 0x5f, 0x99, 0xbf, 0xaa, 0x12, 0x9d, 0xbc, 0x43, 0xf7,
-	0x91, 0xd3, 0x8d, 0xef, 0x17, 0xe0, 0x42, 0xc6, 0x9b, 0xe3, 0xcd, 0x86, 0x7e, 0x5f, 0x69, 0xd0,
-	0xcd, 0xee, 0xe3, 0x5d, 0xe4, 0x74, 0xf2, 0x8d, 0x02, 0x9c, 0x8b, 0xbd, 0xca, 0xe5, 0xa1, 0xb2,
-	0xb0, 0xf9, 0x4d, 0x47, 0x02, 0xab, 0x79, 0x59, 0x69, 0x3c, 0x97, 0x62, 0x60, 0x5a, 0xab, 0xf1,
-	0x0f, 0x62, 0x4b, 0x4f, 0xd0, 0x88, 0x09, 0x67, 0x87, 0x8c, 0xfa, 0xdc, 0xfe, 0xb7, 0x68, 0xdb,
-	0xa7, 0x81, 0xda, 0xdd, 0x5f, 0x6e, 0x48, 0xbf, 0x81, 0xf7, 0xa2, 0xc1, 0xbd, 0x9d, 0xc6, 0xe3,
-	0x57, 0x1b, 0x52, 0xe2, 0x0e, 0xdd, 0x6f, 0xd1, 0x3e, 0xe5, 0x18, 0x4d, 0x72, 0x78, 0x50, 0x3f,
-	0x7b, 0x3f, 0x01, 0x80, 0x29, 0x40, 0xae, 0xc2, 0x33, 0x19, 0xdb, 0x73, 0x7d, 0x4b, 0xa9, 0x98,
-	0x78, 0x6a, 0x15, 0x5b, 0x09, 0x00, 0x4c, 0x01, 0x1a, 0xdf, 0x2e, 0xc0, 0x74, 0xd3, 0x6c, 0xef,
-	0xba, 0x9d, 0x0e, 0x37, 0x9a, 0xd6, 0xd0, 0x97, 0x5b, 0x8b, 0x7c, 0x27, 0xda, 0x68, 0xae, 0x2a,
-	0x3a, 0x6a, 0x09, 0xf2, 0x0a, 0x94, 0xe4, 0x70, 0x88, 0x4e, 0x15, 0x9b, 0x67, 0x95, 0x6c, 0x69,
-	0x4d, 0x50, 0x51, 0x71, 0xc9, 0xeb, 0x50, 0x1d, 0x98, 0xef, 0x87, 0x00, 0xc2, 0x86, 0x55, 0x9a,
-	0x17, 0x94, 0x70, 0xf5, 0x5e, 0xc4, 0xc2, 0xb8, 0x9c, 0xf1, 0xcd, 0x02, 0xf0, 0xb9, 0x66, 0xd9,
-	0x42, 0xd9, 0x97, 0xa1, 0xc4, 0x02, 0x33, 0x18, 0x32, 0xd5, 0xb1, 0xb5, 0x50, 0x59, 0x4b, 0x50,
-	0x8f, 0x0e, 0xea, 0x27, 0x72, 0x0a, 0x1b, 0x1a, 0x51, 0xb6, 0x43, 0x85, 0xca, 0x37, 0xe0, 0x60,
-	0xdf, 0xa3, 0xe9, 0x0d, 0x7c, 0x7b, 0xdf, 0xa3, 0x28, 0x38, 0xc6, 0x97, 0x00, 0x56, 0x5c, 0x27,
-	0xb0, 0x9d, 0x21, 0xdd, 0x74, 0xc8, 0x4b, 0x50, 0xa4, 0xbe, 0xef, 0xfa, 0x6a, 0x5b, 0x98, 0x55,
-	0x0d, 0x8a, 0x37, 0x38, 0x11, 0x25, 0x4f, 0x8e, 0x90, 0xdd, 0xa7, 0x96, 0x80, 0x2d, 0xc7, 0x47,
-	0x88, 0x53, 0x51, 0x71, 0x8d, 0x06, 0x4c, 0xaf, 0xb8, 0x43, 0x27, 0xa0, 0x3e, 0xc7, 0x7d, 0x6c,
-	0xf6, 0x87, 0xa1, 0xaf, 0xa1, 0x71, 0x1f, 0x70, 0x22, 0x4a, 0x9e, 0xf1, 0xa3, 0x09, 0x98, 0x59,
-	0xf1, 0x5d, 0xe7, 0xa1, 0x9a, 0xe1, 0xe4, 0x37, 0xa0, 0xcc, 0x1f, 0xd0, 0x32, 0x03, 0x53, 0x4d,
-	0xc2, 0x4f, 0xc7, 0x66, 0x88, 0x1e, 0x8e, 0x68, 0x6d, 0x70, 0x69, 0x3e, 0x67, 0x36, 0x77, 0x1e,
-	0xd1, 0x76, 0x70, 0x8f, 0x06, 0x66, 0xb4, 0x7d, 0x47, 0x34, 0xd4, 0xa8, 0xa4, 0x0b, 0x53, 0xcc,
-	0xa3, 0x6d, 0x35, 0xff, 0xf2, 0x79, 0x1c, 0xf1, 0x2e, 0xb7, 0x3c, 0xda, 0x8e, 0x86, 0x99, 0xff,
-	0x43, 0xa1, 0x80, 0xb8, 0xfa, 0x45, 0xcb, 0xcd, 0xee, 0xe6, 0xf8, 0xaa, 0x04, 0x5c, 0x34, 0xf8,
-	0xc9, 0x37, 0x6f, 0xfc, 0xa4, 0x00, 0x73, 0x71, 0xf1, 0xbb, 0x36, 0x0b, 0xc8, 0x7b, 0x23, 0x03,
-	0xda, 0x38, 0xd9, 0x80, 0xf2, 0xd6, 0x62, 0x38, 0xf5, 0xca, 0x09, 0x29, 0xb1, 0xc1, 0xec, 0x40,
-	0xd1, 0x0e, 0xe8, 0x20, 0x74, 0x64, 0x97, 0xc7, 0x7e, 0xc4, 0x68, 0x9e, 0xac, 0x73, 0x5c, 0x94,
-	0xf0, 0xc6, 0x7f, 0x17, 0x93, 0x8f, 0xc6, 0x87, 0x99, 0x3b, 0x92, 0x33, 0x7b, 0x31, 0x82, 0x7a,
-	0xbe, 0x7c, 0x9d, 0x48, 0xbc, 0xce, 0xff, 0xa7, 0x3a, 0x31, 0x13, 0xa7, 0x1e, 0xa5, 0xfe, 0x63,
-	0x42, 0x39, 0x37, 0x39, 0x3c, 0x8a, 0xb2, 0x86, 0xfd, 0x70, 0xed, 0xe9, 0x81, 0x6b, 0x29, 0x3a,
-	0x6a, 0x09, 0xf2, 0x1e, 0x9c, 0x6f, 0xbb, 0x4e, 0x7b, 0xe8, 0xfb, 0xd4, 0x69, 0xef, 0x6f, 0x89,
-	0x28, 0x51, 0x19, 0x94, 0x86, 0x6a, 0x76, 0x7e, 0x25, 0x2d, 0x70, 0x94, 0x45, 0xc4, 0x51, 0x20,
-	0xf2, 0x09, 0x98, 0x66, 0x43, 0xe6, 0x51, 0xc7, 0x12, 0xae, 0x50, 0xb9, 0x79, 0x4e, 0x61, 0x4e,
-	0xb7, 0x24, 0x19, 0x43, 0x3e, 0xb9, 0x0f, 0x97, 0x59, 0xc0, 0x37, 0x09, 0xa7, 0xbb, 0x4a, 0x4d,
-	0xab, 0x6f, 0x3b, 0xdc, 0x64, 0xbb, 0x8e, 0xc5, 0x84, 0x77, 0x33, 0xd9, 0xfc, 0xd8, 0xe1, 0x41,
-	0xfd, 0x72, 0x2b, 0x5b, 0x04, 0x8f, 0x6b, 0x4b, 0xbe, 0x0c, 0x0b, 0x6c, 0xd8, 0x6e, 0x53, 0xc6,
-	0x3a, 0xc3, 0xfe, 0x6d, 0x77, 0x87, 0xdd, 0xb2, 0x19, 0xdf, 0x6f, 0xee, 0xda, 0x03, 0x3b, 0x10,
-	0x1e, 0x4c, 0xb1, 0xb9, 0x78, 0x78, 0x50, 0x5f, 0x68, 0x1d, 0x2b, 0x85, 0x4f, 0x40, 0x20, 0x08,
-	0x97, 0xa4, 0xc9, 0x19, 0xc1, 0x9e, 0x16, 0xd8, 0x0b, 0x87, 0x07, 0xf5, 0x4b, 0x6b, 0x99, 0x12,
-	0x78, 0x4c, 0x4b, 0xfe, 0x06, 0x79, 0x30, 0xfc, 0x35, 0x1e, 0x80, 0x96, 0x93, 0x6f, 0x70, 0x5b,
-	0xd1, 0x51, 0x4b, 0x90, 0x47, 0xd1, 0xe4, 0xe3, 0x8b, 0xa2, 0x56, 0xc9, 0x69, 0xad, 0xe6, 0x79,
-	0xa0, 0xf2, 0x30, 0x86, 0xc4, 0x17, 0x16, 0x26, 0xb0, 0x8d, 0xbf, 0x2f, 0x00, 0x19, 0x35, 0x04,
-	0xe4, 0x0e, 0x94, 0xcc, 0x76, 0xc0, 0xc3, 0x10, 0x19, 0xba, 0xbe, 0x94, 0xb5, 0x99, 0x4a, 0x55,
-	0x48, 0x3b, 0x94, 0xcf, 0x10, 0x1a, 0x59, 0x8f, 0x65, 0xd1, 0x14, 0x15, 0x04, 0x71, 0xe1, 0x7c,
-	0xdf, 0x64, 0x41, 0x38, 0x57, 0x2d, 0xfe, 0xc8, 0xca, 0x48, 0xfe, 0xd2, 0xc9, 0x1e, 0x8a, 0xb7,
-	0x68, 0x5e, 0xe4, 0x33, 0xf7, 0x6e, 0x1a, 0x08, 0x47, 0xb1, 0x8d, 0x1f, 0x94, 0x60, 0x7a, 0x75,
-	0xf9, 0xe6, 0xb6, 0xc9, 0x76, 0x4f, 0x10, 0x97, 0xf2, 0x97, 0x43, 0x07, 0x5e, 0xdf, 0x0c, 0x46,
-	0x96, 0xd7, 0xb6, 0xa2, 0xa3, 0x96, 0x20, 0x2e, 0x0f, 0xb2, 0x55, 0x94, 0xaf, 0xcc, 0xef, 0x5b,
-	0x39, 0x1d, 0x2d, 0x85, 0x12, 0x8f, 0xb2, 0x15, 0x09, 0x23, 0x1d, 0x84, 0x41, 0x35, 0x54, 0x8e,
-	0xb4, 0xa3, 0x02, 0x90, 0x9c, 0xd9, 0x91, 0x08, 0x47, 0x06, 0x04, 0x31, 0x02, 0xc6, 0xb5, 0x90,
-	0xcf, 0xc0, 0x8c, 0x45, 0xf9, 0x2a, 0xa6, 0x4e, 0xdb, 0xa6, 0x7c, 0xc1, 0x4e, 0xf2, 0x71, 0xe1,
-	0x86, 0x6b, 0x35, 0x46, 0xc7, 0x84, 0x14, 0x79, 0x04, 0x95, 0x3d, 0x3b, 0xe8, 0x09, 0xfb, 0x5a,
-	0x2b, 0x89, 0x89, 0xf3, 0xd9, 0x5c, 0x1d, 0xe5, 0x08, 0xd1, 0xb0, 0x3c, 0x0c, 0x31, 0x31, 0x82,
-	0xe7, 0xee, 0x37, 0xff, 0x23, 0x52, 0x21, 0x62, 0x65, 0x56, 0x92, 0x0d, 0x04, 0x03, 0x23, 0x19,
-	0xc2, 0x60, 0x86, 0xff, 0x69, 0xd1, 0xaf, 0x0e, 0xf9, 0x6c, 0x55, 0xe1, 0x42, 0xbe, 0x04, 0x49,
-	0x08, 0x22, 0x47, 0xe4, 0x61, 0x0c, 0x16, 0x13, 0x4a, 0xf8, 0xec, 0xdb, 0xeb, 0x51, 0x47, 0x2c,
-	0xe1, 0xd8, 0xec, 0x7b, 0xd8, 0xa3, 0x0e, 0x0a, 0x0e, 0x71, 0x01, 0xda, 0xda, 0x65, 0xaa, 0xc1,
-	0x18, 0x61, 0x71, 0xe4, 0x79, 0x35, 0xcf, 0x72, 0x1f, 0x25, 0xfa, 0x8f, 0x31, 0x15, 0xdc, 0xe1,
-	0x72, 0x9d, 0x1b, 0xef, 0xdb, 0x41, 0xad, 0x2a, 0x3a, 0xa5, 0x57, 0xed, 0xa6, 0xa0, 0xa2, 0xe2,
-	0x1a, 0x3f, 0x28, 0x40, 0x95, 0x2f, 0xa2, 0x70, 0xe2, 0xbf, 0x02, 0xa5, 0xc0, 0xf4, 0xbb, 0xca,
-	0x85, 0x8f, 0xb5, 0xdb, 0x16, 0x54, 0x54, 0x5c, 0x62, 0x42, 0x31, 0x30, 0xd9, 0x6e, 0xb8, 0x71,
-	0x7f, 0x21, 0xd7, 0xb3, 0xa8, 0xd5, 0x1b, 0xed, 0xd9, 0xfc, 0x1f, 0x43, 0x89, 0x4c, 0xae, 0x41,
-	0x99, 0x1b, 0xda, 0x35, 0x93, 0xc9, 0x70, 0xbf, 0xdc, 0x9c, 0xe1, 0xab, 0x75, 0x4d, 0xd1, 0x50,
-	0x73, 0x8d, 0xf7, 0xe0, 0xec, 0x8d, 0xf7, 0x69, 0x7b, 0x18, 0xb8, 0xbe, 0x8c, 0xc9, 0xc8, 0x6d,
-	0x20, 0x8c, 0xfa, 0x8f, 0xed, 0x36, 0x5d, 0x6e, 0xb7, 0xb9, 0x43, 0xb9, 0x11, 0x59, 0x87, 0x05,
-	0xa5, 0x8d, 0xb4, 0x46, 0x24, 0x30, 0xa3, 0x95, 0xf1, 0x00, 0x8a, 0x37, 0xcd, 0x61, 0x97, 0x9e,
-	0xc8, 0x23, 0xe5, 0xbd, 0xf6, 0xa9, 0xd9, 0x0f, 0x42, 0xeb, 0xa7, 0x7a, 0x8d, 0x8a, 0x86, 0x9a,
-	0x6b, 0xfc, 0xe5, 0x14, 0x54, 0x63, 0xa9, 0x08, 0x3e, 0x8b, 0x7c, 0xea, 0xb9, 0x69, 0x1b, 0xc6,
-	0xe3, 0x51, 0x14, 0x1c, 0x6e, 0xc3, 0x7c, 0xfa, 0xd8, 0x66, 0x3c, 0x78, 0x48, 0xd9, 0x30, 0x54,
-	0x74, 0xd4, 0x12, 0xa4, 0x0e, 0x45, 0x8b, 0x7a, 0x41, 0x4f, 0x0c, 0xde, 0x54, 0xb3, 0xc2, 0xbb,
-	0xba, 0xca, 0x09, 0x28, 0xe9, 0x5c, 0xa0, 0x43, 0x83, 0x76, 0xaf, 0x36, 0x25, 0xd6, 0xbd, 0x10,
-	0x58, 0xe3, 0x04, 0x94, 0xf4, 0x8c, 0xb8, 0xae, 0xf8, 0xec, 0xe3, 0xba, 0xd2, 0x29, 0xc7, 0x75,
-	0xc4, 0x83, 0x0b, 0x8c, 0xf5, 0xb6, 0x7c, 0xfb, 0xb1, 0x19, 0x50, 0xd1, 0x58, 0xe8, 0x99, 0x7e,
-	0x1a, 0x3d, 0x97, 0x0f, 0x0f, 0xea, 0x17, 0x5a, 0xad, 0x5b, 0x69, 0x14, 0xcc, 0x82, 0x26, 0x2d,
-	0xb8, 0x68, 0x3b, 0x8c, 0xb6, 0x87, 0x3e, 0x5d, 0xef, 0x3a, 0xae, 0x4f, 0x6f, 0xb9, 0x8c, 0xc3,
-	0xa9, 0xfc, 0xdb, 0x8b, 0xea, 0xa5, 0x5d, 0x5c, 0xcf, 0x12, 0xc2, 0xec, 0xb6, 0xc6, 0x8f, 0x0a,
-	0x30, 0x13, 0xcf, 0xbe, 0x10, 0x06, 0xd0, 0x5b, 0x5d, 0x6b, 0xc9, 0x19, 0xaf, 0x7c, 0xd7, 0xb7,
-	0x73, 0x27, 0x75, 0x24, 0x4c, 0x14, 0xfb, 0x44, 0x34, 0x8c, 0xa9, 0x39, 0x41, 0x7a, 0xf7, 0x25,
-	0x28, 0x76, 0x5c, 0xbf, 0x4d, 0xd5, 0x9a, 0xd5, 0xab, 0x64, 0x8d, 0x13, 0x51, 0xf2, 0x8c, 0x9f,
-	0x15, 0x20, 0xa6, 0x81, 0xfc, 0x36, 0xcc, 0x72, 0x1d, 0x77, 0xfc, 0x9d, 0xc4, 0xd3, 0x34, 0x73,
-	0x3f, 0x8d, 0x46, 0x6a, 0x5e, 0x54, 0xfa, 0x67, 0x13, 0x64, 0x4c, 0xea, 0x23, 0xbf, 0x0c, 0x15,
-	0xd3, 0xb2, 0x7c, 0xca, 0x18, 0x95, 0x26, 0xad, 0xd2, 0x9c, 0x15, 0x7b, 0x75, 0x48, 0xc4, 0x88,
-	0xcf, 0x97, 0x61, 0xcf, 0xea, 0x30, 0x3e, 0xb3, 0x95, 0xcb, 0xad, 0x97, 0x21, 0x57, 0xc2, 0xe9,
-	0xa8, 0x25, 0x8c, 0x6f, 0x4e, 0x41, 0x52, 0x37, 0xb1, 0xe0, 0xdc, 0xae, 0xbf, 0xb3, 0xb2, 0x62,
-	0xb6, 0x7b, 0xb9, 0xf2, 0x25, 0x17, 0x0e, 0x0f, 0xea, 0xe7, 0xee, 0x24, 0x11, 0x30, 0x0d, 0xa9,
-	0xb4, 0xdc, 0xa1, 0xfb, 0x81, 0xb9, 0x93, 0x27, 0x65, 0x12, 0x6a, 0x89, 0x23, 0x60, 0x1a, 0x92,
-	0xbc, 0x0e, 0xd5, 0x5d, 0x7f, 0x27, 0x5c, 0xe4, 0xe9, 0x94, 0xc6, 0x9d, 0x88, 0x85, 0x71, 0x39,
-	0x3e, 0x84, 0xbb, 0xfe, 0x0e, 0x37, 0x8a, 0x61, 0xa6, 0x5f, 0x0f, 0xe1, 0x1d, 0x45, 0x47, 0x2d,
-	0x41, 0x3c, 0x20, 0xbb, 0xe1, 0xe8, 0xe9, 0xa4, 0x9b, 0xb2, 0x45, 0xd7, 0xb2, 0x9e, 0x46, 0x0b,
-	0xc5, 0x1f, 0xe8, 0x12, 0xb7, 0xf9, 0x77, 0x46, 0x70, 0x30, 0x03, 0x9b, 0x7c, 0x09, 0x2e, 0xef,
-	0xfa, 0x3b, 0x6a, 0x83, 0xd8, 0xf2, 0x6d, 0xa7, 0x6d, 0x7b, 0x89, 0x14, 0x7f, 0x5d, 0x75, 0xf7,
-	0xf2, 0x9d, 0x6c, 0x31, 0x3c, 0xae, 0xbd, 0xf1, 0x29, 0x98, 0x89, 0xa7, 0x88, 0x3f, 0x22, 0xf3,
-	0x67, 0x3c, 0x84, 0x8a, 0x08, 0x32, 0xba, 0xdc, 0xbb, 0xd1, 0x3b, 0xd0, 0xe4, 0x13, 0x76, 0xa0,
-	0x97, 0x61, 0x7a, 0x67, 0xd8, 0xde, 0xa5, 0x01, 0x13, 0x86, 0xbd, 0x20, 0xcf, 0x05, 0x9a, 0x92,
-	0x84, 0x21, 0xcf, 0xf8, 0xb7, 0x02, 0x94, 0xd6, 0x1d, 0x6f, 0xf8, 0x73, 0x72, 0x8c, 0xf5, 0xbd,
-	0x29, 0x98, 0xe2, 0x3e, 0x25, 0xb9, 0xa6, 0xf2, 0x5b, 0x05, 0x11, 0x9d, 0xce, 0xc7, 0xf3, 0x5b,
-	0x47, 0x89, 0x3c, 0x17, 0x79, 0x0b, 0x4a, 0xce, 0x70, 0xf0, 0xc0, 0xec, 0x2b, 0x6b, 0xf7, 0x4a,
-	0xe8, 0x0b, 0x6d, 0x08, 0xea, 0xd1, 0x41, 0x7d, 0x9e, 0x3a, 0x6d, 0xd7, 0xb2, 0x9d, 0xee, 0xd2,
-	0x23, 0xe6, 0x3a, 0x8d, 0x8d, 0xe1, 0x60, 0x87, 0xfa, 0xa8, 0x5a, 0xf1, 0x28, 0x7a, 0xc7, 0x75,
-	0xfb, 0x1c, 0x60, 0x32, 0x19, 0x45, 0x37, 0x25, 0x19, 0x43, 0x3e, 0x77, 0xbb, 0x58, 0xe0, 0x73,
-	0xc9, 0xa9, 0xa4, 0xdb, 0xd5, 0x12, 0x54, 0x54, 0x5c, 0x32, 0x80, 0xd2, 0xc0, 0xf4, 0xb8, 0x5c,
-	0x51, 0x0c, 0xd9, 0x8d, 0xdc, 0x8e, 0x77, 0xe3, 0x9e, 0xc0, 0xb9, 0xe1, 0x04, 0xfe, 0x7e, 0xa4,
-	0x4e, 0x12, 0x51, 0x29, 0x21, 0x36, 0x4c, 0xf7, 0x6d, 0x16, 0x70, 0x7d, 0xa5, 0x31, 0x66, 0x05,
-	0xd7, 0x27, 0xa6, 0x68, 0x34, 0x02, 0x77, 0x25, 0x2c, 0x86, 0xf8, 0x0b, 0xfb, 0x50, 0x8d, 0xf5,
-	0x88, 0xcc, 0xc9, 0x34, 0xba, 0x58, 0x15, 0x22, 0x73, 0x4e, 0xb6, 0xc3, 0xb9, 0x3f, 0x31, 0x46,
-	0x38, 0xa6, 0x7b, 0xa2, 0x16, 0xcb, 0xe7, 0x26, 0xde, 0x28, 0x7c, 0xae, 0xfc, 0x9d, 0x3f, 0xab,
-	0x9f, 0xf9, 0xfa, 0x3f, 0x5d, 0x3d, 0x63, 0xfc, 0xed, 0x24, 0x54, 0xb4, 0xc8, 0xff, 0xed, 0x99,
-	0xe2, 0xa7, 0x66, 0xca, 0xed, 0xf1, 0xc6, 0xeb, 0x44, 0xd3, 0x65, 0x39, 0x39, 0x5d, 0x66, 0x9a,
-	0xff, 0x3f, 0xf6, 0xaa, 0x8f, 0x0e, 0xea, 0xb5, 0xe4, 0x20, 0xa0, 0xb9, 0x77, 0x8f, 0x32, 0x66,
-	0x76, 0x69, 0x34, 0x0d, 0x3e, 0xfb, 0x51, 0xd3, 0x60, 0x3e, 0x3e, 0x0d, 0x2a, 0xd9, 0xaf, 0xb1,
-	0x0f, 0x53, 0x77, 0x6d, 0xe7, 0x24, 0x59, 0x81, 0x97, 0xa0, 0xc8, 0xda, 0xae, 0xce, 0x76, 0x6b,
-	0x83, 0xda, 0xe2, 0x44, 0x94, 0xbc, 0xd0, 0x42, 0x4f, 0x1e, 0x63, 0xa1, 0xbf, 0x3e, 0x09, 0xe5,
-	0x30, 0xef, 0x42, 0x7e, 0xbf, 0x00, 0x55, 0xd3, 0x71, 0xdc, 0x40, 0xa4, 0xee, 0x43, 0x63, 0xba,
-	0x91, 0x6b, 0xf0, 0x43, 0xd0, 0xc6, 0x72, 0x04, 0x28, 0x5f, 0x80, 0xde, 0x60, 0x63, 0x1c, 0x8c,
-	0xeb, 0x25, 0x5f, 0x85, 0x52, 0xdf, 0xdc, 0xa1, 0xfd, 0xd0, 0xb6, 0xae, 0x8f, 0xd7, 0x83, 0xbb,
-	0x02, 0x2b, 0xf5, 0xf6, 0x25, 0x11, 0x95, 0xa2, 0x85, 0xb7, 0x60, 0x2e, 0xdd, 0xd1, 0xa7, 0x79,
-	0x7f, 0xfc, 0xd5, 0xc7, 0xd4, 0x3c, 0x4d, 0x53, 0xe3, 0x8b, 0x50, 0xbd, 0x47, 0x03, 0xdf, 0x6e,
-	0x0b, 0x80, 0xf0, 0x0c, 0xae, 0x90, 0x7d, 0x06, 0x17, 0xed, 0xa2, 0x13, 0x4f, 0x38, 0x59, 0xf8,
-	0x1a, 0x4c, 0x4b, 0x48, 0xc6, 0x83, 0x77, 0xcf, 0x77, 0x07, 0x34, 0xe8, 0xd1, 0x61, 0xf8, 0x46,
-	0xf3, 0x39, 0xda, 0x5b, 0x1a, 0x46, 0x06, 0xef, 0xd1, 0x7f, 0x8c, 0xa9, 0x30, 0xfe, 0xab, 0x02,
-	0xb0, 0xe1, 0x5a, 0x54, 0xa5, 0xe9, 0x16, 0x60, 0xc2, 0xb6, 0xd4, 0xd3, 0x80, 0xea, 0xec, 0xc4,
-	0xfa, 0x2a, 0x4e, 0xd8, 0x96, 0x9e, 0xe2, 0x13, 0xc7, 0x4e, 0xf1, 0xd7, 0xa1, 0x6a, 0xd9, 0xcc,
-	0xeb, 0x9b, 0xfb, 0x1b, 0x19, 0x1e, 0xda, 0x6a, 0xc4, 0xc2, 0xb8, 0x1c, 0xf9, 0xa4, 0x32, 0x7e,
-	0xd2, 0xca, 0xd4, 0x52, 0xc6, 0xaf, 0xcc, 0xbb, 0x17, 0x33, 0x80, 0x6f, 0xc0, 0x4c, 0x98, 0x58,
-	0x12, 0x5a, 0x8a, 0xa2, 0x55, 0x68, 0x32, 0x67, 0xb6, 0x63, 0x3c, 0x4c, 0x48, 0xa6, 0x13, 0x5f,
-	0xa5, 0xe7, 0x92, 0xf8, 0x5a, 0x85, 0x39, 0x16, 0xb8, 0x3e, 0xb5, 0x42, 0x89, 0xf5, 0xd5, 0x1a,
-	0x49, 0x3c, 0xe8, 0x5c, 0x2b, 0xc5, 0xc7, 0x91, 0x16, 0x64, 0x0b, 0xe6, 0xc3, 0x4e, 0xc4, 0x1f,
-	0xb0, 0x76, 0x41, 0x20, 0x5d, 0x51, 0x48, 0xf3, 0x0f, 0x33, 0x64, 0x30, 0xb3, 0x25, 0xf9, 0x3c,
-	0xcc, 0x86, 0xdd, 0x14, 0x16, 0xa8, 0x36, 0x2f, 0xa0, 0x74, 0x0c, 0xb3, 0x1d, 0x67, 0x62, 0x52,
-	0x96, 0x7c, 0x1a, 0x8a, 0x5e, 0xcf, 0x64, 0x54, 0xe5, 0xc9, 0xc2, 0x34, 0x47, 0x71, 0x8b, 0x13,
-	0x8f, 0x0e, 0xea, 0x15, 0xfe, 0xce, 0xc4, 0x1f, 0x94, 0x82, 0xe4, 0x3a, 0xc0, 0x8e, 0x3b, 0x74,
-	0x2c, 0xd3, 0xdf, 0x5f, 0x5f, 0x55, 0x29, 0x6b, 0xed, 0xb7, 0x35, 0x35, 0x07, 0x63, 0x52, 0x7c,
-	0xab, 0x1a, 0x48, 0xa3, 0xad, 0xd2, 0x5d, 0x7a, 0xab, 0xd2, 0xb6, 0x5c, 0xf1, 0xc9, 0xbb, 0x50,
-	0x11, 0xe9, 0x7d, 0x6a, 0x2d, 0x07, 0x2a, 0xe7, 0xf5, 0x34, 0x99, 0x60, 0xed, 0xcf, 0xb5, 0x42,
-	0x10, 0x8c, 0xf0, 0xc8, 0x97, 0x01, 0x3a, 0xb6, 0x63, 0xb3, 0x9e, 0x40, 0xaf, 0x3e, 0x35, 0xba,
-	0x7e, 0xce, 0x35, 0x8d, 0x82, 0x31, 0x44, 0x6e, 0x24, 0x3c, 0xd7, 0x5a, 0xdf, 0xaa, 0xcd, 0x24,
-	0x8d, 0xc4, 0x16, 0x27, 0xa2, 0xe4, 0x91, 0x6b, 0x50, 0xb6, 0x4c, 0x3a, 0x70, 0x1d, 0x6a, 0xd5,
-	0x66, 0xa3, 0x64, 0xcf, 0xaa, 0xa2, 0xa1, 0xe6, 0x92, 0xaf, 0x40, 0xc9, 0x16, 0xce, 0x76, 0xed,
-	0xac, 0xe8, 0xea, 0xe7, 0xf3, 0x6d, 0xc7, 0x02, 0xa2, 0x09, 0xdc, 0xfa, 0xca, 0xdf, 0xa8, 0x60,
-	0x49, 0x1b, 0xa6, 0xdd, 0x61, 0x20, 0x34, 0x9c, 0x13, 0x1a, 0xf2, 0xa5, 0xe4, 0x36, 0x25, 0x86,
-	0x8c, 0x19, 0xd4, 0x1f, 0x0c, 0x91, 0xf9, 0xf3, 0xb6, 0x7b, 0x76, 0xdf, 0xf2, 0xa9, 0x53, 0x9b,
-	0x13, 0x51, 0xb2, 0x78, 0xde, 0x15, 0x45, 0x43, 0xcd, 0x25, 0xbf, 0x0a, 0xb3, 0xee, 0x30, 0x10,
-	0xf3, 0x86, 0x4f, 0x3b, 0x56, 0x3b, 0x2f, 0xc4, 0xcf, 0xf3, 0x59, 0xbc, 0x19, 0x67, 0x60, 0x52,
-	0xce, 0x38, 0x0b, 0x33, 0xf1, 0x02, 0x3c, 0xe3, 0x4f, 0x0b, 0x50, 0x8d, 0xd5, 0x6d, 0x10, 0x17,
-	0x2a, 0x6e, 0xab, 0x25, 0xa3, 0x19, 0x15, 0x36, 0xbf, 0x95, 0xb7, 0x18, 0x44, 0xa2, 0x44, 0x13,
-	0x4d, 0x93, 0x30, 0xd2, 0xf1, 0x51, 0x05, 0x1d, 0x7f, 0x3d, 0x01, 0x51, 0x3b, 0x1e, 0xd7, 0x52,
-	0xc7, 0xf2, 0x5c, 0xdb, 0x09, 0xd2, 0x75, 0x03, 0x37, 0x14, 0x1d, 0xb5, 0x04, 0xf7, 0xe5, 0x64,
-	0x34, 0xa6, 0xd0, 0xf5, 0xce, 0xaa, 0x7a, 0xa1, 0xb8, 0xa4, 0x07, 0xe7, 0x4c, 0x71, 0x92, 0x15,
-	0x65, 0xaf, 0x26, 0x9f, 0x2a, 0x7b, 0xa5, 0xab, 0x3b, 0x92, 0x28, 0x98, 0x86, 0xe5, 0x9a, 0x58,
-	0xd4, 0x5c, 0x68, 0x9a, 0xca, 0xa5, 0xa9, 0x95, 0x44, 0xc1, 0x34, 0xac, 0xf1, 0xad, 0x09, 0x08,
-	0xe7, 0xd7, 0xcf, 0x43, 0xfc, 0x49, 0x0c, 0x28, 0xf9, 0x94, 0x0d, 0xfb, 0x81, 0xda, 0x81, 0xc5,
-	0x1a, 0x46, 0x41, 0x41, 0xc5, 0x31, 0xf6, 0x60, 0x96, 0xf7, 0xb6, 0xdf, 0xa7, 0xfd, 0x56, 0x40,
-	0x3d, 0x46, 0x3a, 0x50, 0x64, 0xfc, 0x87, 0x1a, 0x93, 0x31, 0x4f, 0xa6, 0x03, 0xea, 0xc5, 0x3c,
-	0x5c, 0x8e, 0x8b, 0x12, 0xde, 0xf8, 0xf6, 0x04, 0x54, 0xf4, 0x38, 0x9d, 0xc0, 0x6d, 0x7e, 0x19,
-	0xa6, 0x2d, 0xda, 0x31, 0xf9, 0xd3, 0xa8, 0x75, 0xc1, 0xcd, 0xc5, 0xaa, 0x24, 0x61, 0xc8, 0x23,
-	0xf5, 0x64, 0xba, 0xa2, 0x32, 0x92, 0xaa, 0xd8, 0x85, 0x8a, 0xf8, 0xb1, 0x16, 0x56, 0x7c, 0xe6,
-	0x7d, 0xef, 0x0f, 0x42, 0x14, 0x99, 0xb6, 0xd3, 0x7f, 0x31, 0xc2, 0x4f, 0x55, 0x6a, 0x16, 0x4f,
-	0x52, 0xa9, 0x69, 0xac, 0x01, 0x37, 0xf8, 0x37, 0x57, 0xc8, 0x9b, 0x50, 0x66, 0xca, 0x24, 0xa9,
-	0x71, 0xf9, 0xb8, 0x3e, 0x9d, 0x57, 0xf4, 0xa3, 0x83, 0xfa, 0xac, 0x10, 0x0e, 0x09, 0xa8, 0x9b,
-	0x18, 0xdf, 0x98, 0x82, 0x98, 0xb3, 0x77, 0x82, 0x11, 0xb6, 0x52, 0xfe, 0xfb, 0x3b, 0x79, 0xfd,
-	0xf7, 0xd0, 0x29, 0x96, 0x13, 0x2e, 0xe9, 0xb2, 0xf3, 0x7e, 0xf4, 0x68, 0xdf, 0x53, 0xef, 0x47,
-	0xf7, 0xe3, 0x16, 0xed, 0x7b, 0x28, 0x38, 0xfa, 0x68, 0x6b, 0xea, 0xd8, 0xa3, 0xad, 0x77, 0xa1,
-	0xd8, 0x35, 0x87, 0x5d, 0xaa, 0xf2, 0x71, 0x9f, 0xcb, 0x57, 0x92, 0xc9, 0x11, 0xe4, 0x04, 0x11,
-	0x3f, 0x51, 0x62, 0xf2, 0x09, 0xd2, 0x0b, 0xb3, 0x5f, 0xca, 0x37, 0xcc, 0x37, 0x41, 0x74, 0x0e,
-	0x4d, 0x4e, 0x10, 0xfd, 0x17, 0x23, 0x7c, 0xbe, 0x85, 0xb6, 0x65, 0xf1, 0x91, 0x3a, 0x1c, 0xf8,
-	0x42, 0xce, 0x13, 0x3a, 0x81, 0x21, 0xd7, 0x84, 0xfa, 0x83, 0x21, 0xb2, 0xb1, 0x04, 0xd5, 0x58,
-	0x8d, 0x23, 0x1f, 0x5f, 0x5d, 0x5a, 0x13, 0x1b, 0xdf, 0x55, 0x33, 0x30, 0x51, 0x70, 0x8c, 0xa3,
-	0x09, 0x98, 0x43, 0xca, 0xdc, 0xa1, 0xdf, 0xa6, 0xf1, 0x63, 0x3a, 0xb3, 0x1d, 0xab, 0x4e, 0x4b,
-	0x1c, 0xca, 0xbb, 0x0e, 0x2a, 0x2e, 0x77, 0x28, 0x07, 0xd4, 0xef, 0xea, 0xed, 0x54, 0x2d, 0x57,
-	0xed, 0x50, 0xde, 0x8b, 0x33, 0x31, 0x29, 0xcb, 0x37, 0xb3, 0x81, 0xe9, 0xd8, 0x1d, 0xca, 0x82,
-	0x74, 0x9e, 0xfb, 0x9e, 0xa2, 0xa3, 0x96, 0x20, 0x37, 0xe1, 0x3c, 0xa3, 0xc1, 0xe6, 0x9e, 0x43,
-	0x7d, 0x5d, 0x2c, 0xa0, 0xaa, 0x47, 0x5e, 0x08, 0x2b, 0x52, 0x5a, 0x69, 0x01, 0x1c, 0x6d, 0x23,
-	0x9c, 0x73, 0x59, 0xb8, 0xa1, 0x4b, 0xd4, 0xd4, 0x6a, 0x8d, 0x9c, 0xf3, 0x14, 0x1f, 0x47, 0x5a,
-	0x70, 0x94, 0x8e, 0x69, 0xf7, 0x87, 0x3e, 0x8d, 0x50, 0x4a, 0x49, 0x94, 0xb5, 0x14, 0x1f, 0x47,
-	0x5a, 0x18, 0xff, 0x52, 0x80, 0x59, 0xa4, 0x81, 0xbf, 0xaf, 0x07, 0xa5, 0x0e, 0xc5, 0xbe, 0xa8,
-	0x13, 0x29, 0x88, 0x3a, 0x11, 0x31, 0x65, 0x65, 0x59, 0x88, 0xa4, 0x93, 0x55, 0xa8, 0xfa, 0xbc,
-	0x85, 0xaa, 0xc9, 0x91, 0x03, 0x6e, 0x84, 0xf1, 0x16, 0x46, 0xac, 0xa3, 0xe4, 0x5f, 0x8c, 0x37,
-	0x23, 0x0e, 0x4c, 0xef, 0xc8, 0x5a, 0x44, 0xb5, 0xd5, 0xe7, 0x9b, 0x8b, 0xaa, 0x9e, 0x51, 0xe4,
-	0xbe, 0xc3, 0xe2, 0xc6, 0xa3, 0xe8, 0x27, 0x86, 0x4a, 0x8c, 0xef, 0x14, 0x00, 0xa2, 0x8a, 0x6b,
-	0xb2, 0x0b, 0x65, 0xf6, 0x5a, 0xc2, 0xc9, 0xca, 0x79, 0x84, 0xae, 0x40, 0x62, 0xb5, 0x4c, 0x8a,
-	0x82, 0x5a, 0xc1, 0x47, 0x79, 0x58, 0x3f, 0x9b, 0x04, 0xdd, 0xea, 0x19, 0x39, 0x58, 0xaf, 0xf0,
-	0xcd, 0xb9, 0x1b, 0xd5, 0x64, 0x6a, 0x39, 0x14, 0x54, 0x54, 0x5c, 0xee, 0xff, 0x86, 0x87, 0x73,
-	0x6a, 0x6a, 0x0b, 0xff, 0x37, 0x3c, 0xc7, 0x43, 0xcd, 0xcd, 0x72, 0xd9, 0x8a, 0xcf, 0xcd, 0x65,
-	0x2b, 0x3d, 0x13, 0x97, 0x8d, 0x87, 0x7e, 0xbe, 0xdb, 0xa7, 0xcb, 0xb8, 0xa1, 0x42, 0x4c, 0x1d,
-	0xfa, 0xa1, 0x24, 0x63, 0xc8, 0x27, 0xaf, 0x43, 0x75, 0xc8, 0x68, 0x6b, 0xf5, 0xce, 0x8a, 0x4f,
-	0x2d, 0xa6, 0xce, 0x3d, 0x75, 0xd2, 0xe1, 0x7e, 0xc4, 0xc2, 0xb8, 0x9c, 0xf1, 0x07, 0x05, 0x38,
-	0xdb, 0x6a, 0xfb, 0xb6, 0x17, 0x68, 0x4b, 0xb7, 0x21, 0x0a, 0xb0, 0x03, 0x93, 0xc7, 0x72, 0x6a,
-	0x2a, 0xbe, 0x78, 0xcc, 0x91, 0x8f, 0x14, 0x4a, 0xd4, 0x67, 0x4b, 0x12, 0x46, 0x10, 0x22, 0x7f,
-	0x2a, 0x6c, 0x69, 0x7a, 0x4a, 0xb4, 0x04, 0x15, 0x15, 0xd7, 0xf8, 0x6e, 0x01, 0xca, 0xba, 0xc0,
-	0xe3, 0x25, 0x28, 0x0a, 0xfb, 0x9d, 0x3e, 0xf9, 0x17, 0xd6, 0x1d, 0x25, 0x4f, 0xe4, 0x12, 0x79,
-	0x78, 0x3a, 0x92, 0x4b, 0xe4, 0x44, 0x94, 0x3c, 0x3e, 0xd7, 0xa9, 0x63, 0xa5, 0x73, 0x89, 0x37,
-	0x1c, 0x0b, 0x39, 0x5d, 0xd4, 0xc9, 0xba, 0xfe, 0xc0, 0x0c, 0xd2, 0xd9, 0xdd, 0x35, 0x41, 0x45,
-	0xc5, 0x35, 0xde, 0x86, 0x73, 0xaa, 0x12, 0x4f, 0x0f, 0xd4, 0x53, 0x95, 0x2c, 0x1b, 0xff, 0x59,
-	0x80, 0xea, 0xf6, 0xf6, 0x5d, 0x6d, 0xd6, 0x10, 0x2e, 0x31, 0x59, 0x7a, 0xb7, 0xdc, 0x09, 0xa8,
-	0xbf, 0xe2, 0x0e, 0xbc, 0x3e, 0xd5, 0x58, 0xaa, 0x1e, 0xae, 0x95, 0x29, 0x81, 0xc7, 0xb4, 0x24,
-	0xeb, 0x70, 0x21, 0xce, 0x51, 0x46, 0x5b, 0xd5, 0x48, 0xcb, 0x13, 0xf5, 0x51, 0x36, 0x66, 0xb5,
-	0x49, 0x43, 0x29, 0xcb, 0xad, 0xae, 0x10, 0x8d, 0x40, 0x29, 0x36, 0x66, 0xb5, 0x31, 0x66, 0xa1,
-	0x1a, 0xbb, 0x3f, 0x66, 0x7c, 0xef, 0x05, 0xd0, 0x05, 0x60, 0xbf, 0x28, 0x23, 0xcb, 0x95, 0x4d,
-	0x6b, 0xeb, 0xdc, 0x46, 0x71, 0xfc, 0xdc, 0x86, 0x9e, 0xf1, 0xa9, 0xfc, 0x46, 0x37, 0xca, 0x6f,
-	0x94, 0x4e, 0x21, 0xbf, 0xa1, 0x4d, 0xd7, 0x48, 0x8e, 0xe3, 0x0f, 0x0b, 0x30, 0xe3, 0xb8, 0x16,
-	0x0d, 0x0d, 0x64, 0x6d, 0x5a, 0x38, 0xe0, 0x9b, 0x63, 0x0d, 0x62, 0x63, 0x23, 0x86, 0x28, 0xd3,
-	0xe8, 0x3a, 0x39, 0x1a, 0x67, 0x61, 0x42, 0x35, 0x59, 0x83, 0xb2, 0xd9, 0xe9, 0xd8, 0x8e, 0x1d,
-	0xec, 0xab, 0x4a, 0xb6, 0x2b, 0x59, 0xb6, 0x6f, 0x59, 0xc9, 0xc8, 0xdd, 0x28, 0xfc, 0x87, 0xba,
-	0x2d, 0xdf, 0xce, 0x75, 0x11, 0x77, 0x65, 0x8c, 0xed, 0x3c, 0x3c, 0x0f, 0x88, 0x39, 0x82, 0x61,
-	0xc1, 0x69, 0x54, 0xd3, 0x6d, 0x40, 0x49, 0xa6, 0xbd, 0x44, 0xce, 0xaf, 0x2c, 0x03, 0x0f, 0x99,
-	0x12, 0x43, 0xc5, 0x21, 0xdd, 0x30, 0xb0, 0xad, 0x8a, 0xc1, 0x6d, 0xe6, 0x0e, 0xf6, 0x75, 0xac,
-	0x9c, 0x1d, 0xd9, 0x92, 0xdb, 0xf1, 0xed, 0x63, 0xe6, 0x24, 0xdb, 0xc7, 0xec, 0xb1, 0x5b, 0x47,
-	0x17, 0x4a, 0x4c, 0x6c, 0x4e, 0x22, 0xd7, 0x57, 0xbd, 0xbe, 0x92, 0xcf, 0x25, 0x4a, 0xec, 0x6f,
-	0x72, 0x74, 0x24, 0x0d, 0x15, 0x3c, 0x71, 0xa1, 0xec, 0x2b, 0x8f, 0x5f, 0xa5, 0x0b, 0xf3, 0x9d,
-	0xf3, 0xa6, 0xc3, 0x86, 0xb0, 0x14, 0x4d, 0x52, 0x51, 0x2b, 0x21, 0xef, 0xc2, 0xa4, 0x65, 0x76,
-	0x55, 0xe2, 0xf0, 0x9d, 0xdc, 0xb5, 0x7c, 0xa1, 0x1a, 0x71, 0xb7, 0x6a, 0x75, 0xf9, 0x26, 0x72,
-	0x54, 0xb2, 0x1b, 0x15, 0x93, 0xcf, 0x8d, 0x71, 0x65, 0x29, 0xb5, 0xdf, 0xc9, 0xf0, 0x6a, 0xa4,
-	0x1c, 0xfd, 0x06, 0x4c, 0x3f, 0x76, 0xfb, 0xc3, 0x81, 0xca, 0x38, 0x56, 0xaf, 0x2f, 0x64, 0xbd,
-	0xed, 0x07, 0x42, 0x24, 0x32, 0x02, 0xf2, 0x3f, 0xc3, 0xb0, 0x2d, 0xf9, 0xdd, 0x02, 0x9c, 0xe5,
-	0x4b, 0x47, 0xcf, 0x03, 0x56, 0x23, 0x63, 0xcc, 0xd4, 0xfb, 0x8c, 0x6f, 0x8c, 0xe1, 0x0c, 0xbb,
-	0xa4, 0xd4, 0x9e, 0x5d, 0x4f, 0x68, 0xc0, 0x94, 0x46, 0xe2, 0x41, 0x99, 0xd9, 0x16, 0x6d, 0x9b,
-	0x3e, 0xab, 0x5d, 0x38, 0x35, 0xed, 0x91, 0x27, 0xae, 0xb0, 0x51, 0x6b, 0x21, 0xbf, 0x27, 0xae,
-	0x99, 0xa9, 0x5b, 0x9c, 0xea, 0x66, 0xed, 0xfc, 0x69, 0xde, 0xac, 0xbd, 0x20, 0xef, 0x98, 0x25,
-	0x34, 0x60, 0x5a, 0x25, 0xd9, 0x84, 0x8b, 0xb2, 0xa8, 0x3c, 0x7d, 0xa3, 0xe0, 0xa2, 0x38, 0x89,
-	0x7f, 0xe1, 0xf0, 0xa0, 0x7e, 0x71, 0x39, 0x4b, 0x00, 0xb3, 0xdb, 0x91, 0x0f, 0x60, 0xd6, 0x8f,
-	0x47, 0x71, 0xb5, 0x4b, 0x63, 0xd4, 0x97, 0x25, 0xe2, 0x41, 0x99, 0xd1, 0x4e, 0x90, 0x30, 0xa9,
-	0x8b, 0xbc, 0x0a, 0x55, 0x4f, 0x59, 0x2a, 0x9b, 0x0d, 0x6a, 0x97, 0xc5, 0x33, 0x88, 0x1d, 0x75,
-	0x2b, 0x22, 0x63, 0x5c, 0x86, 0xdc, 0x87, 0x6a, 0xe0, 0xf6, 0xa9, 0xaf, 0x0e, 0x91, 0x6b, 0xe2,
-	0xe5, 0x2f, 0x66, 0xcd, 0xe4, 0x6d, 0x2d, 0x16, 0xb9, 0xd7, 0x11, 0x8d, 0x61, 0x1c, 0x87, 0x7c,
-	0x1e, 0x66, 0xc3, 0x0b, 0x24, 0xbe, 0x48, 0x82, 0xbd, 0x90, 0xcc, 0x06, 0xb4, 0xe2, 0x4c, 0x4c,
-	0xca, 0xf2, 0xf8, 0xde, 0xf3, 0x6d, 0xd7, 0xb7, 0x83, 0xfd, 0x95, 0xbe, 0xc9, 0x98, 0x00, 0x58,
-	0x10, 0x00, 0x3a, 0xbe, 0xdf, 0x4a, 0x0b, 0xe0, 0x68, 0x1b, 0x1e, 0x44, 0x85, 0xc4, 0xda, 0xc7,
-	0x84, 0x03, 0x27, 0xcc, 0x52, 0xd8, 0x16, 0x35, 0xf7, 0x98, 0x2a, 0xde, 0x2b, 0x79, 0xaa, 0x78,
-	0x89, 0x05, 0x57, 0xcc, 0x61, 0xe0, 0x0e, 0x38, 0x21, 0xd9, 0x64, 0xdb, 0xdd, 0xa5, 0x4e, 0xed,
-	0xaa, 0xd8, 0xab, 0xae, 0x1e, 0x1e, 0xd4, 0xaf, 0x2c, 0x3f, 0x41, 0x0e, 0x9f, 0x88, 0x42, 0x06,
-	0x50, 0xa6, 0xaa, 0x12, 0xb9, 0xf6, 0xf1, 0x31, 0x36, 0x89, 0x64, 0x39, 0xb3, 0x1c, 0xa0, 0x90,
-	0x86, 0x5a, 0x05, 0xd9, 0x86, 0x6a, 0xcf, 0x65, 0xc1, 0x72, 0xdf, 0x36, 0x19, 0x65, 0xb5, 0x17,
-	0xc5, 0x3c, 0xc9, 0xdc, 0xdf, 0x6e, 0x85, 0x62, 0xd1, 0x34, 0xb9, 0x15, 0xb5, 0xc4, 0x38, 0x0c,
-	0xa1, 0x22, 0xa2, 0x1c, 0x8a, 0xb7, 0xe6, 0x3a, 0x01, 0x7d, 0x3f, 0xa8, 0x2d, 0x8a, 0x67, 0x79,
-	0x25, 0x0b, 0x79, 0xcb, 0xb5, 0x5a, 0x49, 0x69, 0xb9, 0xca, 0x53, 0x44, 0x4c, 0x63, 0x92, 0x37,
-	0x60, 0xc6, 0x73, 0xad, 0x96, 0x47, 0xdb, 0x5b, 0x66, 0xd0, 0xee, 0xd5, 0xea, 0xc9, 0x33, 0xe3,
-	0xad, 0x18, 0x0f, 0x13, 0x92, 0x3c, 0x1a, 0xf0, 0x29, 0x1b, 0xee, 0x0c, 0xec, 0x60, 0x8b, 0x3a,
-	0x96, 0xed, 0x74, 0xb7, 0x5c, 0x8b, 0xd5, 0x0c, 0xf1, 0x0a, 0x45, 0x34, 0x80, 0xa3, 0x6c, 0xcc,
-	0x6a, 0x43, 0xda, 0x30, 0x3d, 0x90, 0xc7, 0xfc, 0xb5, 0x97, 0xc6, 0x70, 0x2b, 0x55, 0xa9, 0x80,
-	0xdc, 0x94, 0xd4, 0x1f, 0x0c, 0x91, 0x17, 0xde, 0x86, 0xf3, 0x23, 0xfe, 0xdf, 0x53, 0xd5, 0x37,
-	0xfc, 0x39, 0x8f, 0xd6, 0x62, 0x1e, 0xf7, 0x69, 0xc7, 0x29, 0x37, 0xe1, 0xbc, 0xfa, 0x92, 0x07,
-	0x77, 0x0e, 0xfa, 0x43, 0x7d, 0x3d, 0x35, 0x96, 0xbb, 0xc3, 0xb4, 0x00, 0x8e, 0xb6, 0x31, 0xfe,
-	0xa2, 0x00, 0xb3, 0x89, 0xed, 0xe6, 0xd4, 0xe3, 0xf7, 0x35, 0x20, 0x03, 0xdb, 0xf7, 0x5d, 0x5f,
-	0xee, 0xd9, 0xf7, 0xf8, 0xda, 0x63, 0xaa, 0xd2, 0x5e, 0x54, 0x78, 0xde, 0x1b, 0xe1, 0x62, 0x46,
-	0x0b, 0xe3, 0x6f, 0x0a, 0x10, 0x1d, 0x13, 0xe8, 0xb2, 0xe6, 0xc2, 0xb1, 0x65, 0xcd, 0x9f, 0x84,
-	0xf2, 0x23, 0xe6, 0x3a, 0x5b, 0x51, 0xf1, 0xb3, 0x1e, 0xd0, 0xdb, 0xad, 0xcd, 0x0d, 0x21, 0xa9,
-	0x25, 0x84, 0xf4, 0x57, 0xd7, 0xec, 0x7e, 0x30, 0x5a, 0x22, 0x7c, 0xfb, 0x8b, 0x92, 0x8e, 0x5a,
-	0x82, 0x2c, 0x41, 0x45, 0x9f, 0x4c, 0xa9, 0xc0, 0x5f, 0x0f, 0x82, 0x3e, 0x96, 0xc1, 0x48, 0xc6,
-	0xf8, 0xfe, 0x04, 0x94, 0x9f, 0xe3, 0x95, 0xd7, 0x76, 0xe2, 0xca, 0xeb, 0x29, 0xdc, 0x8f, 0xcc,
-	0xba, 0xee, 0xba, 0x9b, 0xba, 0xee, 0xba, 0x32, 0xe6, 0x61, 0xd7, 0x13, 0xaf, 0xba, 0xfe, 0xb8,
-	0x00, 0x33, 0xcf, 0xf1, 0x9a, 0xeb, 0x4e, 0xf2, 0x9a, 0xeb, 0x9b, 0x63, 0x3d, 0xda, 0x31, 0x57,
-	0x5c, 0xff, 0xf1, 0x12, 0x24, 0xae, 0x97, 0x12, 0x07, 0x2a, 0xe1, 0x02, 0x0f, 0x0f, 0x10, 0xdf,
-	0x1c, 0x2b, 0x88, 0x8d, 0x26, 0x65, 0x48, 0x61, 0x18, 0xa9, 0x20, 0xd7, 0x01, 0x28, 0xb7, 0x6c,
-	0x32, 0x39, 0x3b, 0x91, 0x3c, 0x5f, 0xbb, 0xa1, 0x39, 0x18, 0x93, 0x7a, 0xfe, 0x09, 0x92, 0x6c,
-	0x97, 0x62, 0xea, 0x99, 0xb8, 0x14, 0x57, 0x4e, 0xdd, 0xa5, 0x78, 0xf1, 0xd9, 0xbb, 0x14, 0xb1,
-	0x00, 0xaa, 0x38, 0x46, 0x00, 0xf5, 0x01, 0xcc, 0xcb, 0x9f, 0x2b, 0x7d, 0xd3, 0x1e, 0xe8, 0xf9,
-	0xa2, 0xca, 0x88, 0x3f, 0x91, 0xe9, 0x48, 0x50, 0x9f, 0xd9, 0x2c, 0xa0, 0x4e, 0xf0, 0x20, 0x6a,
-	0x19, 0x95, 0x51, 0x3d, 0xc8, 0x80, 0xc3, 0x4c, 0x25, 0x69, 0x8f, 0x7b, 0xfa, 0x04, 0x1e, 0xf7,
-	0x77, 0x0b, 0x70, 0xd1, 0xcc, 0xfa, 0x02, 0x88, 0xca, 0xbb, 0xdc, 0x1e, 0x2b, 0xfe, 0x49, 0x20,
-	0xaa, 0xf8, 0x25, 0x8b, 0x85, 0xd9, 0x7d, 0x20, 0x2f, 0x47, 0x21, 0x74, 0x45, 0x4c, 0xaa, 0xec,
-	0xe0, 0xf7, 0x9b, 0xe9, 0xd4, 0x15, 0x88, 0xd1, 0x6e, 0x8d, 0x6d, 0xb0, 0x4f, 0x21, 0x7d, 0x55,
-	0x1d, 0x23, 0x7d, 0x95, 0x0a, 0x87, 0x66, 0x4e, 0x29, 0x1c, 0x72, 0x60, 0xce, 0x1e, 0x98, 0x5d,
-	0xba, 0x35, 0xec, 0xf7, 0xe5, 0x11, 0x07, 0xab, 0xcd, 0x0a, 0xec, 0xcc, 0x4b, 0x25, 0x3c, 0x3c,
-	0xed, 0xa7, 0x6f, 0x43, 0xeb, 0xc3, 0xc4, 0xf5, 0x14, 0x12, 0x8e, 0x60, 0xf3, 0x69, 0xc9, 0xdd,
-	0xec, 0x0d, 0x1a, 0xf0, 0xd1, 0x16, 0x99, 0x1d, 0xf5, 0x19, 0xa5, 0x5b, 0x11, 0x19, 0xe3, 0x32,
-	0xe4, 0x0e, 0x54, 0x2c, 0x87, 0xa9, 0xa3, 0xc4, 0x73, 0xc2, 0x4a, 0x7d, 0x8a, 0xdb, 0xb6, 0xd5,
-	0x8d, 0x96, 0x3e, 0x44, 0xbc, 0x32, 0xfa, 0x49, 0xb9, 0x86, 0xe6, 0x63, 0xd4, 0x9e, 0xdc, 0x13,
-	0x60, 0xea, 0x86, 0x95, 0x4c, 0xc5, 0x5c, 0x3d, 0xc6, 0xa3, 0x5f, 0xdd, 0x08, 0x2f, 0x84, 0xcd,
-	0x2a, 0x75, 0xea, 0xde, 0x54, 0x84, 0x10, 0xbb, 0x62, 0x7a, 0xfe, 0x49, 0x57, 0x4c, 0xc9, 0x7d,
-	0xb8, 0x1c, 0x04, 0xfd, 0x44, 0x7e, 0x5e, 0x95, 0xd9, 0x89, 0x9a, 0xcb, 0xa2, 0xfc, 0x42, 0xc0,
-	0xf6, 0xf6, 0xdd, 0x2c, 0x11, 0x3c, 0xae, 0xad, 0x48, 0x75, 0x07, 0x7d, 0x1d, 0xd1, 0x2f, 0x8e,
-	0x93, 0xea, 0x8e, 0x0e, 0x42, 0x54, 0xaa, 0x3b, 0x22, 0x60, 0x5c, 0xcb, 0xf1, 0x99, 0x89, 0x0b,
-	0x39, 0x33, 0x13, 0xf1, 0x60, 0x78, 0xfe, 0x89, 0xc1, 0xf0, 0x48, 0xf0, 0x7e, 0xf1, 0x29, 0x82,
-	0xf7, 0x77, 0x45, 0x35, 0xe3, 0xcd, 0x15, 0x95, 0xf8, 0xc8, 0x57, 0xa4, 0x21, 0x8a, 0x5b, 0xe4,
-	0x89, 0xb7, 0xf8, 0x89, 0x12, 0x93, 0x6c, 0xc1, 0xbc, 0xe7, 0x5a, 0x23, 0xb1, 0xbf, 0xc8, 0x74,
-	0xc4, 0xea, 0x60, 0xb7, 0x32, 0x64, 0x30, 0xb3, 0xa5, 0x30, 0xe0, 0x11, 0xbd, 0x56, 0x13, 0x03,
-	0x23, 0x0d, 0x78, 0x44, 0xc6, 0xb8, 0x4c, 0x3a, 0x14, 0x7e, 0xe1, 0x99, 0x85, 0xc2, 0x0b, 0xcf,
-	0x21, 0x14, 0xfe, 0xd8, 0x89, 0x43, 0xe1, 0xdf, 0x82, 0x0b, 0x9e, 0x6b, 0xad, 0xda, 0xcc, 0x1f,
-	0x8a, 0x4f, 0xb8, 0x35, 0x87, 0x56, 0x97, 0x06, 0x22, 0x96, 0xae, 0x5e, 0xbf, 0x1e, 0xef, 0xa4,
-	0xfc, 0x92, 0x64, 0x43, 0x7d, 0x49, 0x52, 0x2c, 0xf2, 0x54, 0x2b, 0xe1, 0x9a, 0x8b, 0xf0, 0x39,
-	0x83, 0x89, 0x59, 0x7a, 0xe2, 0xe1, 0xf3, 0xd5, 0x67, 0x15, 0x3e, 0x93, 0x77, 0xa0, 0xcc, 0x7a,
-	0xc3, 0xc0, 0x72, 0xf7, 0x1c, 0x91, 0x54, 0xa9, 0xe8, 0xef, 0xab, 0x94, 0x5b, 0x8a, 0x7e, 0x74,
-	0x50, 0x9f, 0x0b, 0x7f, 0xc7, 0xca, 0xaf, 0x14, 0x65, 0xfc, 0x00, 0xfc, 0xaf, 0x00, 0xce, 0xa6,
-	0x3e, 0x9e, 0xa1, 0xcb, 0xad, 0x0b, 0x27, 0x2d, 0xb7, 0x4e, 0xd4, 0x43, 0x4f, 0x3c, 0xd3, 0x7a,
-	0xe8, 0xc9, 0x53, 0xaf, 0x87, 0x8e, 0xd5, 0x7d, 0x4f, 0x7d, 0x44, 0xdd, 0xf7, 0x32, 0x9c, 0x6b,
-	0xbb, 0x03, 0x4f, 0xdc, 0x96, 0x55, 0xd5, 0xbf, 0xb2, 0x7e, 0x47, 0x97, 0x1a, 0xac, 0x24, 0xd9,
-	0x98, 0x96, 0x27, 0xbf, 0x09, 0x45, 0x47, 0x34, 0x2c, 0x8d, 0x71, 0x7f, 0x26, 0xf9, 0xc2, 0x84,
-	0x0f, 0xa3, 0xae, 0xb0, 0x84, 0x19, 0xf8, 0xa2, 0xa0, 0x1d, 0x85, 0x3f, 0x50, 0x2a, 0x25, 0xef,
-	0x41, 0xcd, 0xed, 0x74, 0xfa, 0xae, 0x69, 0x45, 0xb7, 0x30, 0x1e, 0x70, 0xef, 0x54, 0x9d, 0x69,
-	0x55, 0x9a, 0x57, 0x15, 0x40, 0x6d, 0xf3, 0x18, 0x39, 0x3c, 0x16, 0x81, 0xbb, 0x9a, 0xe7, 0x92,
-	0x77, 0x09, 0x58, 0xad, 0x22, 0x1e, 0xf3, 0xd7, 0x4e, 0xe3, 0x31, 0x93, 0x17, 0x17, 0xd4, 0x03,
-	0x47, 0x45, 0x1e, 0x49, 0x2e, 0xa6, 0x7b, 0x42, 0x7c, 0xb8, 0xe4, 0x65, 0x39, 0xe2, 0x4c, 0x9d,
-	0x83, 0x3e, 0x29, 0x1c, 0x58, 0x54, 0x5a, 0x2e, 0x65, 0xba, 0xf2, 0x0c, 0x8f, 0x41, 0x8e, 0xd7,
-	0xae, 0x97, 0x9f, 0x59, 0xed, 0xba, 0x27, 0x12, 0x51, 0xaa, 0x12, 0xac, 0x3a, 0x46, 0x8d, 0xb1,
-	0xae, 0x0e, 0x8b, 0xd6, 0x8c, 0x26, 0x31, 0x8c, 0x94, 0x2c, 0xec, 0xcb, 0x5b, 0x3c, 0xc7, 0xde,
-	0x67, 0xba, 0x9f, 0xbc, 0xd1, 0xf8, 0x76, 0xce, 0xaf, 0xd5, 0x86, 0xf3, 0x2b, 0x7e, 0x97, 0xea,
-	0x77, 0x0a, 0x30, 0x9f, 0x35, 0x11, 0x32, 0x7a, 0xd1, 0x4a, 0xf6, 0x62, 0xbc, 0x14, 0x41, 0xdc,
-	0x66, 0x7e, 0xab, 0x14, 0x4b, 0x48, 0x04, 0xd4, 0xfb, 0x45, 0x75, 0x45, 0xae, 0xea, 0x8a, 0xc4,
-	0xe7, 0x76, 0x8a, 0xcf, 0xf1, 0x73, 0x3b, 0xa5, 0x1c, 0x9f, 0xdb, 0x99, 0x7e, 0x9e, 0x9f, 0xdb,
-	0x29, 0x9f, 0xf0, 0x73, 0x3b, 0x95, 0xff, 0x3d, 0x9f, 0xdb, 0xf9, 0xb0, 0x00, 0x73, 0xe9, 0xfb,
-	0x60, 0xcf, 0x21, 0x81, 0xbb, 0x9b, 0x48, 0xe0, 0xae, 0x8f, 0xb5, 0xcd, 0xe8, 0x3b, 0x68, 0xc7,
-	0x24, 0x72, 0x8d, 0x9f, 0x16, 0x60, 0xe4, 0xce, 0xdb, 0x73, 0xc8, 0xb1, 0x3e, 0x4a, 0xe6, 0x58,
-	0x6f, 0x9c, 0xca, 0x43, 0x1e, 0x93, 0x6b, 0xfd, 0x93, 0x8c, 0x47, 0x14, 0x39, 0xd7, 0x0f, 0x9e,
-	0xd5, 0x17, 0x05, 0xe7, 0xb3, 0xbe, 0x28, 0x98, 0xfc, 0x82, 0x60, 0xb3, 0xf1, 0xc3, 0x0f, 0x17,
-	0xcf, 0xfc, 0xf8, 0xc3, 0xc5, 0x33, 0x3f, 0xf9, 0x70, 0xf1, 0xcc, 0xd7, 0x0f, 0x17, 0x0b, 0x3f,
-	0x3c, 0x5c, 0x2c, 0xfc, 0xf8, 0x70, 0xb1, 0xf0, 0x93, 0xc3, 0xc5, 0xc2, 0x4f, 0x0f, 0x17, 0x0b,
-	0x7f, 0xfc, 0xcf, 0x8b, 0x67, 0x7e, 0xbd, 0x1c, 0x2a, 0xf8, 0x9f, 0x00, 0x00, 0x00, 0xff, 0xff,
-	0x27, 0x18, 0x7f, 0x37, 0x35, 0x5f, 0x00, 0x00,
+	// 5849 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0x5c, 0x4d, 0x6c, 0x1c, 0xc9,
+	0x75, 0xde, 0x21, 0x39, 0xc3, 0x99, 0x37, 0xa4, 0x48, 0x95, 0x28, 0x69, 0x96, 0xd6, 0x72, 0xe4,
+	0xde, 0xec, 0x46, 0x4e, 0xd6, 0xa4, 0x57, 0xeb, 0x4d, 0xd6, 0x3f, 0xfb, 0xc3, 0x21, 0x45, 0x89,
+	0xfa, 0x21, 0xe9, 0x37, 0x94, 0x14, 0x67, 0x17, 0x76, 0x9a, 0xd3, 0x35, 0x33, 0x2d, 0xce, 0x74,
+	0xb7, 0xbb, 0x7a, 0xc4, 0xa5, 0x37, 0x41, 0x1c, 0x23, 0x81, 0xf3, 0x03, 0x03, 0x31, 0x02, 0x18,
+	0x06, 0x8c, 0x00, 0x81, 0x0f, 0xc9, 0x25, 0x39, 0xe4, 0x90, 0x4b, 0x0e, 0x3e, 0x18, 0x39, 0x18,
+	0xbe, 0xc4, 0xc8, 0x25, 0x46, 0x10, 0xd0, 0x5e, 0x06, 0x08, 0x0c, 0x38, 0x40, 0x2e, 0x01, 0x02,
+	0x10, 0x39, 0x04, 0xf5, 0xd3, 0xd5, 0x3f, 0xd3, 0x94, 0xa8, 0x1e, 0x4a, 0x48, 0x60, 0xdf, 0xa6,
+	0xdf, 0x7b, 0xf5, 0xbd, 0xea, 0xea, 0xaa, 0x57, 0xef, 0xbd, 0x7a, 0x35, 0xb0, 0xd2, 0xb1, 0x83,
+	0xee, 0x60, 0x67, 0xb1, 0xe5, 0xf6, 0x97, 0x4c, 0xbf, 0xe3, 0x7a, 0xbe, 0xfb, 0x40, 0xfc, 0x58,
+	0xf2, 0x76, 0x3b, 0x4b, 0xa6, 0x67, 0xb3, 0xa5, 0x3d, 0xd7, 0xdf, 0x6d, 0xf7, 0xdc, 0xbd, 0xa5,
+	0x87, 0xaf, 0x9a, 0x3d, 0xaf, 0x6b, 0xbe, 0xba, 0xd4, 0xa1, 0x0e, 0xf5, 0xcd, 0x80, 0x5a, 0x8b,
+	0x9e, 0xef, 0x06, 0x2e, 0x79, 0x2d, 0x02, 0x59, 0x0c, 0x41, 0xc4, 0x8f, 0x45, 0x6f, 0xb7, 0xb3,
+	0xc8, 0x41, 0x16, 0x43, 0x90, 0xc5, 0x10, 0x64, 0xfe, 0xe3, 0x31, 0xcd, 0x1d, 0x97, 0x2b, 0xe4,
+	0x58, 0x3b, 0x83, 0xb6, 0x78, 0x12, 0x0f, 0xe2, 0x97, 0xd4, 0x31, 0x6f, 0xec, 0xbe, 0xc1, 0x16,
+	0x6d, 0x97, 0x77, 0x69, 0xa9, 0xe5, 0xfa, 0x74, 0xe9, 0xe1, 0x50, 0x3f, 0xe6, 0x3f, 0x16, 0x93,
+	0xf1, 0xdc, 0x9e, 0xdd, 0xda, 0x5f, 0x7a, 0xf8, 0xea, 0x0e, 0x0d, 0x86, 0xbb, 0x3c, 0xff, 0xc9,
+	0x48, 0xb4, 0x6f, 0xb6, 0xba, 0xb6, 0x43, 0xfd, 0xfd, 0xe8, 0x95, 0xfb, 0x34, 0x30, 0xb3, 0x14,
+	0x2c, 0x1d, 0xd7, 0xca, 0x1f, 0x38, 0x81, 0xdd, 0xa7, 0x43, 0x0d, 0x7e, 0xed, 0x71, 0x0d, 0x58,
+	0xab, 0x4b, 0xfb, 0x66, 0xba, 0x9d, 0xf1, 0x8f, 0x05, 0x98, 0x59, 0xf6, 0x5b, 0x5d, 0xfb, 0x21,
+	0x6d, 0x06, 0x9c, 0xd1, 0xd9, 0x27, 0xef, 0xc2, 0x78, 0x60, 0xfa, 0xb5, 0xc2, 0xe5, 0xc2, 0x95,
+	0xea, 0xd5, 0x77, 0x16, 0x73, 0x8c, 0xf9, 0xe2, 0xb6, 0xe9, 0x87, 0x70, 0x8d, 0xc9, 0xc3, 0x83,
+	0xfa, 0xf8, 0xb6, 0xe9, 0x23, 0x47, 0x25, 0x5f, 0x84, 0x09, 0xc7, 0x75, 0x68, 0x6d, 0x4c, 0xa0,
+	0x2f, 0xe7, 0x42, 0xdf, 0x70, 0x1d, 0xdd, 0xdb, 0x46, 0xf9, 0xf0, 0xa0, 0x3e, 0xc1, 0x29, 0x28,
+	0x80, 0x8d, 0xff, 0x2c, 0x40, 0x65, 0xd9, 0xef, 0x0c, 0xfa, 0xd4, 0x09, 0x18, 0xf1, 0x01, 0x3c,
+	0xd3, 0x37, 0xfb, 0x34, 0xa0, 0x3e, 0xab, 0x15, 0x2e, 0x8f, 0x5f, 0xa9, 0x5e, 0x7d, 0x2b, 0x97,
+	0xd2, 0xad, 0x10, 0xa6, 0x41, 0xbe, 0x7f, 0x50, 0x7f, 0xee, 0xf0, 0xa0, 0x0e, 0x9a, 0xc4, 0x30,
+	0xa6, 0x85, 0x38, 0x50, 0x31, 0xfd, 0xc0, 0x6e, 0x9b, 0xad, 0x80, 0xd5, 0xc6, 0x84, 0xca, 0x37,
+	0x73, 0xa9, 0x5c, 0x56, 0x28, 0x8d, 0xb3, 0x4a, 0x63, 0x25, 0xa4, 0x30, 0x8c, 0x54, 0x18, 0x3f,
+	0x1b, 0x87, 0x72, 0xc8, 0x20, 0x97, 0x61, 0xc2, 0x31, 0xfb, 0x54, 0x7c, 0xbd, 0x4a, 0x63, 0x4a,
+	0x35, 0x9c, 0xd8, 0x30, 0xfb, 0x7c, 0x80, 0xcc, 0x3e, 0xe5, 0x12, 0x9e, 0x19, 0x74, 0xc5, 0x17,
+	0x88, 0x49, 0x6c, 0x99, 0x41, 0x17, 0x05, 0x87, 0x5c, 0x82, 0x89, 0xbe, 0x6b, 0xd1, 0xda, 0xf8,
+	0xe5, 0xc2, 0x95, 0xa2, 0x1c, 0xe0, 0x3b, 0xae, 0x45, 0x51, 0x50, 0x79, 0xfb, 0xb6, 0xef, 0xf6,
+	0x6b, 0x13, 0xc9, 0xf6, 0x6b, 0xbe, 0xdb, 0x47, 0xc1, 0x21, 0x7f, 0x52, 0x80, 0xd9, 0xb0, 0x7b,
+	0xb7, 0xdd, 0x96, 0x19, 0xd8, 0xae, 0x53, 0x2b, 0x8a, 0x0f, 0x7e, 0x6d, 0xa4, 0x81, 0x08, 0xc1,
+	0x1a, 0x35, 0xa5, 0x75, 0x36, 0xcd, 0xc1, 0x21, 0xc5, 0xe4, 0x2a, 0x40, 0xa7, 0xe7, 0xee, 0x98,
+	0x3d, 0x3e, 0x06, 0xb5, 0x92, 0xe8, 0xb5, 0xfe, 0x84, 0xd7, 0x35, 0x07, 0x63, 0x52, 0x64, 0x17,
+	0x26, 0x4d, 0xb9, 0x2a, 0x6a, 0x93, 0xa2, 0xdf, 0xab, 0x39, 0xfb, 0x9d, 0x58, 0x59, 0x8d, 0xea,
+	0xe1, 0x41, 0x7d, 0x52, 0x11, 0x31, 0xd4, 0x40, 0x5e, 0x81, 0xb2, 0xeb, 0xf1, 0xae, 0x9a, 0xbd,
+	0x5a, 0xf9, 0x72, 0xe1, 0x4a, 0xb9, 0x31, 0xab, 0xba, 0x57, 0xde, 0x54, 0x74, 0xd4, 0x12, 0xc6,
+	0x7f, 0x15, 0x61, 0xe8, 0xad, 0xc9, 0xab, 0x50, 0x55, 0x68, 0xb7, 0xdd, 0x0e, 0x13, 0x1f, 0xbf,
+	0xdc, 0x98, 0x39, 0x3c, 0xa8, 0x57, 0x97, 0x23, 0x32, 0xc6, 0x65, 0xc8, 0x7d, 0x18, 0x63, 0xaf,
+	0xa9, 0x65, 0xf8, 0x76, 0xae, 0xb7, 0x6b, 0xbe, 0xa6, 0x27, 0x68, 0xe9, 0xf0, 0xa0, 0x3e, 0xd6,
+	0x7c, 0x0d, 0xc7, 0xd8, 0x6b, 0xdc, 0x7c, 0x74, 0xec, 0x40, 0x4c, 0x9e, 0xbc, 0xe6, 0xe3, 0xba,
+	0x1d, 0x68, 0x68, 0x61, 0x3e, 0xae, 0xdb, 0x01, 0x72, 0x54, 0x6e, 0x3e, 0xba, 0x41, 0xe0, 0x89,
+	0xc9, 0x97, 0xd7, 0x7c, 0xdc, 0xd8, 0xde, 0xde, 0xd2, 0xf0, 0x62, 0x76, 0x73, 0x0a, 0x0a, 0x60,
+	0xf2, 0x01, 0x1f, 0x49, 0xc9, 0x73, 0xfd, 0x7d, 0x35, 0x6b, 0x6f, 0x8c, 0x34, 0x6b, 0x5d, 0x7f,
+	0x5f, 0xab, 0x53, 0xdf, 0x44, 0x33, 0x30, 0xae, 0x4d, 0xbc, 0x9d, 0xd5, 0x66, 0x62, 0x92, 0xe6,
+	0x7e, 0xbb, 0xd5, 0xb5, 0x66, 0xea, 0xed, 0x56, 0xd7, 0x9a, 0x28, 0x80, 0xf9, 0xb7, 0xf1, 0xcd,
+	0x3d, 0x35, 0xa7, 0xf3, 0x7d, 0x1b, 0x34, 0xf7, 0x92, 0xdf, 0x06, 0xcd, 0x3d, 0xe4, 0xa8, 0x1c,
+	0xdc, 0x65, 0x4c, 0x4c, 0xe1, 0xbc, 0xe0, 0x9b, 0xcd, 0x66, 0x12, 0x7c, 0xb3, 0xd9, 0x44, 0x8e,
+	0x6a, 0x74, 0xe0, 0x7c, 0xc8, 0x41, 0xea, 0xb9, 0xcc, 0x16, 0xa3, 0x47, 0xdb, 0x64, 0x09, 0x2a,
+	0x2d, 0xd7, 0x69, 0xdb, 0x9d, 0x3b, 0xa6, 0xa7, 0xac, 0x9e, 0x36, 0x97, 0x2b, 0x21, 0x03, 0x23,
+	0x19, 0xf2, 0x02, 0x8c, 0xef, 0xd2, 0x7d, 0x65, 0xfe, 0xaa, 0x4a, 0x74, 0xfc, 0x16, 0xdd, 0x47,
+	0x4e, 0x37, 0xbe, 0x5b, 0x80, 0x73, 0x19, 0x5f, 0x8e, 0x37, 0x1b, 0xf8, 0x3d, 0xa5, 0x41, 0x37,
+	0xbb, 0x8b, 0xb7, 0x91, 0xd3, 0xc9, 0xd7, 0x0a, 0x30, 0x13, 0xfb, 0x94, 0xcb, 0x03, 0x65, 0x61,
+	0xf3, 0x9b, 0x8e, 0x04, 0x56, 0xe3, 0xa2, 0xd2, 0x38, 0x93, 0x62, 0x60, 0x5a, 0xab, 0xf1, 0xcf,
+	0x62, 0x4b, 0x4f, 0xd0, 0x88, 0x09, 0x67, 0x06, 0x8c, 0xfa, 0xdc, 0xfe, 0x37, 0x69, 0xcb, 0xa7,
+	0x81, 0xda, 0xdd, 0x5f, 0x5a, 0x94, 0x7e, 0x03, 0xef, 0xc5, 0x22, 0xf7, 0x76, 0x16, 0x1f, 0xbe,
+	0xba, 0x28, 0x25, 0x6e, 0xd1, 0xfd, 0x26, 0xed, 0x51, 0x8e, 0xd1, 0x20, 0x87, 0x07, 0xf5, 0x33,
+	0x77, 0x13, 0x00, 0x98, 0x02, 0xe4, 0x2a, 0x3c, 0x93, 0xb1, 0x3d, 0xd7, 0xb7, 0x94, 0x8a, 0xb1,
+	0x27, 0x56, 0xb1, 0x95, 0x00, 0xc0, 0x14, 0xa0, 0xf1, 0xcd, 0x02, 0x4c, 0x36, 0xcc, 0xd6, 0xae,
+	0xdb, 0x6e, 0x73, 0xa3, 0x69, 0x0d, 0x7c, 0xb9, 0xb5, 0xc8, 0x6f, 0xa2, 0x8d, 0xe6, 0xaa, 0xa2,
+	0xa3, 0x96, 0x20, 0x2f, 0x43, 0x49, 0x0e, 0x87, 0xe8, 0x54, 0xb1, 0x71, 0x46, 0xc9, 0x96, 0xd6,
+	0x04, 0x15, 0x15, 0x97, 0xbc, 0x0e, 0xd5, 0xbe, 0xf9, 0x7e, 0x08, 0x20, 0x6c, 0x58, 0xa5, 0x71,
+	0x4e, 0x09, 0x57, 0xef, 0x44, 0x2c, 0x8c, 0xcb, 0x19, 0x5f, 0x2f, 0x00, 0x9f, 0x6b, 0x96, 0x2d,
+	0x94, 0x7d, 0x01, 0x4a, 0x2c, 0x30, 0x83, 0x01, 0x53, 0x1d, 0x5b, 0x0b, 0x95, 0x35, 0x05, 0xf5,
+	0xe8, 0xa0, 0x7e, 0x22, 0xa7, 0x70, 0x51, 0x23, 0xca, 0x76, 0xa8, 0x50, 0xf9, 0x06, 0x1c, 0xec,
+	0x7b, 0x34, 0xbd, 0x81, 0x6f, 0xef, 0x7b, 0x14, 0x05, 0xc7, 0xf8, 0x3c, 0xc0, 0x8a, 0xeb, 0x04,
+	0xb6, 0x33, 0xa0, 0x9b, 0x0e, 0x79, 0x11, 0x8a, 0xd4, 0xf7, 0x5d, 0x5f, 0x6d, 0x0b, 0xd3, 0xaa,
+	0x41, 0xf1, 0x1a, 0x27, 0xa2, 0xe4, 0xc9, 0x11, 0xb2, 0x7b, 0xd4, 0x12, 0xb0, 0xe5, 0xf8, 0x08,
+	0x71, 0x2a, 0x2a, 0xae, 0xb1, 0x08, 0x93, 0x2b, 0xee, 0xc0, 0x09, 0xa8, 0xcf, 0x71, 0x1f, 0x9a,
+	0xbd, 0x41, 0xe8, 0x6b, 0x68, 0xdc, 0x7b, 0x9c, 0x88, 0x92, 0x67, 0xfc, 0x60, 0x0c, 0xa6, 0x56,
+	0x7c, 0xd7, 0xb9, 0xaf, 0x66, 0x38, 0xf9, 0x2d, 0x28, 0xf3, 0x17, 0xb4, 0xcc, 0xc0, 0x54, 0x93,
+	0xf0, 0x13, 0xb1, 0x19, 0xa2, 0x87, 0x23, 0x5a, 0x1b, 0x5c, 0x9a, 0xcf, 0x99, 0xcd, 0x9d, 0x07,
+	0xb4, 0x15, 0xdc, 0xa1, 0x81, 0x19, 0x6d, 0xdf, 0x11, 0x0d, 0x35, 0x2a, 0xe9, 0xc0, 0x04, 0xf3,
+	0x68, 0x4b, 0xcd, 0xbf, 0x7c, 0x1e, 0x47, 0xbc, 0xcb, 0x4d, 0x8f, 0xb6, 0xa2, 0x61, 0xe6, 0x4f,
+	0x28, 0x14, 0x10, 0x57, 0x7f, 0x68, 0xb9, 0xd9, 0x5d, 0x1f, 0x5d, 0x95, 0x80, 0x8b, 0x06, 0x3f,
+	0xf9, 0xe5, 0x8d, 0x1f, 0x15, 0x60, 0x36, 0x2e, 0x7e, 0xdb, 0x66, 0x01, 0x79, 0x6f, 0x68, 0x40,
+	0x17, 0x4f, 0x36, 0xa0, 0xbc, 0xb5, 0x18, 0x4e, 0xbd, 0x72, 0x42, 0x4a, 0x6c, 0x30, 0xdb, 0x50,
+	0xb4, 0x03, 0xda, 0x0f, 0x1d, 0xd9, 0xe5, 0x91, 0x5f, 0x31, 0x9a, 0x27, 0xeb, 0x1c, 0x17, 0x25,
+	0xbc, 0xf1, 0x3f, 0xc5, 0xe4, 0xab, 0xf1, 0x61, 0xe6, 0x8e, 0xe4, 0xd4, 0x5e, 0x8c, 0xa0, 0xde,
+	0x2f, 0x5f, 0x27, 0x12, 0x9f, 0xf3, 0x97, 0x54, 0x27, 0xa6, 0xe2, 0xd4, 0xa3, 0xd4, 0x33, 0x26,
+	0x94, 0x73, 0x93, 0xc3, 0xa3, 0x28, 0x6b, 0xd0, 0x0b, 0xd7, 0x9e, 0x1e, 0xb8, 0xa6, 0xa2, 0xa3,
+	0x96, 0x20, 0xef, 0xc1, 0xd9, 0x96, 0xeb, 0xb4, 0x06, 0xbe, 0x4f, 0x9d, 0xd6, 0xfe, 0x96, 0x88,
+	0x12, 0x95, 0x41, 0x59, 0x54, 0xcd, 0xce, 0xae, 0xa4, 0x05, 0x8e, 0xb2, 0x88, 0x38, 0x0c, 0x44,
+	0x3e, 0x06, 0x93, 0x6c, 0xc0, 0x3c, 0xea, 0x58, 0xc2, 0x15, 0x2a, 0x37, 0x66, 0x14, 0xe6, 0x64,
+	0x53, 0x92, 0x31, 0xe4, 0x93, 0xbb, 0x70, 0x91, 0x05, 0x7c, 0x93, 0x70, 0x3a, 0xab, 0xd4, 0xb4,
+	0x7a, 0xb6, 0xc3, 0x4d, 0xb6, 0xeb, 0x58, 0x4c, 0x78, 0x37, 0xe3, 0x8d, 0x8f, 0x1c, 0x1e, 0xd4,
+	0x2f, 0x36, 0xb3, 0x45, 0xf0, 0xb8, 0xb6, 0xe4, 0x0b, 0x30, 0xcf, 0x06, 0xad, 0x16, 0x65, 0xac,
+	0x3d, 0xe8, 0xdd, 0x74, 0x77, 0xd8, 0x0d, 0x9b, 0xf1, 0xfd, 0xe6, 0xb6, 0xdd, 0xb7, 0x03, 0xe1,
+	0xc1, 0x14, 0x1b, 0x0b, 0x87, 0x07, 0xf5, 0xf9, 0xe6, 0xb1, 0x52, 0xf8, 0x08, 0x04, 0x82, 0x70,
+	0x41, 0x9a, 0x9c, 0x21, 0xec, 0x49, 0x81, 0x3d, 0x7f, 0x78, 0x50, 0xbf, 0xb0, 0x96, 0x29, 0x81,
+	0xc7, 0xb4, 0xe4, 0x5f, 0x90, 0x07, 0xc3, 0x5f, 0xe6, 0x01, 0x68, 0x39, 0xf9, 0x05, 0xb7, 0x15,
+	0x1d, 0xb5, 0x04, 0x79, 0x10, 0x4d, 0x3e, 0xbe, 0x28, 0x6a, 0x95, 0x9c, 0xd6, 0x6a, 0x8e, 0x07,
+	0x2a, 0xf7, 0x63, 0x48, 0x7c, 0x61, 0x61, 0x02, 0xdb, 0xf8, 0xa7, 0x02, 0x90, 0x61, 0x43, 0x40,
+	0x6e, 0x41, 0xc9, 0x6c, 0x05, 0x3c, 0x0c, 0x91, 0xa1, 0xeb, 0x8b, 0x59, 0x9b, 0xa9, 0x54, 0x85,
+	0xb4, 0x4d, 0xf9, 0x0c, 0xa1, 0x91, 0xf5, 0x58, 0x16, 0x4d, 0x51, 0x41, 0x10, 0x17, 0xce, 0xf6,
+	0x4c, 0x16, 0x84, 0x73, 0xd5, 0xe2, 0xaf, 0xac, 0x8c, 0xe4, 0xaf, 0x9c, 0xec, 0xa5, 0x78, 0x8b,
+	0xc6, 0x79, 0x3e, 0x73, 0x6f, 0xa7, 0x81, 0x70, 0x18, 0xdb, 0xf8, 0x5e, 0x09, 0x26, 0x57, 0x97,
+	0xaf, 0x6f, 0x9b, 0x6c, 0xf7, 0x04, 0x71, 0x29, 0xff, 0x38, 0xb4, 0xef, 0xf5, 0xcc, 0x60, 0x68,
+	0x79, 0x6d, 0x2b, 0x3a, 0x6a, 0x09, 0xe2, 0xf2, 0x20, 0x5b, 0x45, 0xf9, 0xca, 0xfc, 0xbe, 0x95,
+	0xd3, 0xd1, 0x52, 0x28, 0xf1, 0x28, 0x5b, 0x91, 0x30, 0xd2, 0x41, 0x18, 0x54, 0x43, 0xe5, 0x48,
+	0xdb, 0x2a, 0x00, 0xc9, 0x99, 0x1d, 0x89, 0x70, 0x64, 0x40, 0x10, 0x23, 0x60, 0x5c, 0x0b, 0xf9,
+	0x24, 0x4c, 0x59, 0x94, 0xaf, 0x62, 0xea, 0xb4, 0x6c, 0xca, 0x17, 0xec, 0x38, 0x1f, 0x17, 0x6e,
+	0xb8, 0x56, 0x63, 0x74, 0x4c, 0x48, 0x91, 0x07, 0x50, 0xd9, 0xb3, 0x83, 0xae, 0xb0, 0xaf, 0xb5,
+	0x92, 0x98, 0x38, 0x9f, 0xca, 0xd5, 0x51, 0x8e, 0x10, 0x0d, 0xcb, 0xfd, 0x10, 0x13, 0x23, 0x78,
+	0xee, 0x7e, 0xf3, 0x07, 0x91, 0x0a, 0x11, 0x2b, 0xb3, 0x92, 0x6c, 0x20, 0x18, 0x18, 0xc9, 0x10,
+	0x06, 0x53, 0xfc, 0xa1, 0x49, 0xbf, 0x34, 0xe0, 0xb3, 0x55, 0x85, 0x0b, 0xf9, 0x12, 0x24, 0x21,
+	0x88, 0x1c, 0x91, 0xfb, 0x31, 0x58, 0x4c, 0x28, 0xe1, 0xb3, 0x6f, 0xaf, 0x4b, 0x1d, 0xb1, 0x84,
+	0x63, 0xb3, 0xef, 0x7e, 0x97, 0x3a, 0x28, 0x38, 0xc4, 0x05, 0x68, 0x69, 0x97, 0xa9, 0x06, 0x23,
+	0x84, 0xc5, 0x91, 0xe7, 0xd5, 0x38, 0xc3, 0x7d, 0x94, 0xe8, 0x19, 0x63, 0x2a, 0xb8, 0xc3, 0xe5,
+	0x3a, 0xd7, 0xde, 0xb7, 0x83, 0x5a, 0x55, 0x74, 0x4a, 0xaf, 0xda, 0x4d, 0x41, 0x45, 0xc5, 0x35,
+	0xbe, 0x57, 0x80, 0x2a, 0x5f, 0x44, 0xe1, 0xc4, 0x7f, 0x19, 0x4a, 0x81, 0xe9, 0x77, 0x94, 0x0b,
+	0x1f, 0x6b, 0xb7, 0x2d, 0xa8, 0xa8, 0xb8, 0xc4, 0x84, 0x62, 0x60, 0xb2, 0xdd, 0x70, 0xe3, 0xfe,
+	0x6c, 0xae, 0x77, 0x51, 0xab, 0x37, 0xda, 0xb3, 0xf9, 0x13, 0x43, 0x89, 0x4c, 0xae, 0x40, 0x99,
+	0x1b, 0xda, 0x35, 0x93, 0xc9, 0x70, 0xbf, 0xdc, 0x98, 0xe2, 0xab, 0x75, 0x4d, 0xd1, 0x50, 0x73,
+	0x8d, 0xf7, 0xe0, 0xcc, 0xb5, 0xf7, 0x69, 0x6b, 0x10, 0xb8, 0xbe, 0x8c, 0xc9, 0xc8, 0x4d, 0x20,
+	0x8c, 0xfa, 0x0f, 0xed, 0x16, 0x5d, 0x6e, 0xb5, 0xb8, 0x43, 0xb9, 0x11, 0x59, 0x87, 0x79, 0xa5,
+	0x8d, 0x34, 0x87, 0x24, 0x30, 0xa3, 0x95, 0x71, 0x0f, 0x8a, 0xd7, 0xcd, 0x41, 0x87, 0x9e, 0xc8,
+	0x23, 0xe5, 0xbd, 0xf6, 0xa9, 0xd9, 0x0b, 0x42, 0xeb, 0xa7, 0x7a, 0x8d, 0x8a, 0x86, 0x9a, 0x6b,
+	0xfc, 0xf5, 0x04, 0x54, 0x63, 0xa9, 0x08, 0x3e, 0x8b, 0x7c, 0xea, 0xb9, 0x69, 0x1b, 0xc6, 0xe3,
+	0x51, 0x14, 0x1c, 0x6e, 0xc3, 0x7c, 0xfa, 0xd0, 0x66, 0x3c, 0x78, 0x48, 0xd9, 0x30, 0x54, 0x74,
+	0xd4, 0x12, 0xa4, 0x0e, 0x45, 0x8b, 0x7a, 0x41, 0x57, 0x0c, 0xde, 0x44, 0xa3, 0xc2, 0xbb, 0xba,
+	0xca, 0x09, 0x28, 0xe9, 0x5c, 0xa0, 0x4d, 0x83, 0x56, 0xb7, 0x36, 0x21, 0xd6, 0xbd, 0x10, 0x58,
+	0xe3, 0x04, 0x94, 0xf4, 0x8c, 0xb8, 0xae, 0xf8, 0xf4, 0xe3, 0xba, 0xd2, 0x29, 0xc7, 0x75, 0xc4,
+	0x83, 0x73, 0x8c, 0x75, 0xb7, 0x7c, 0xfb, 0xa1, 0x19, 0x50, 0xd1, 0x58, 0xe8, 0x99, 0x7c, 0x12,
+	0x3d, 0x17, 0x0f, 0x0f, 0xea, 0xe7, 0x9a, 0xcd, 0x1b, 0x69, 0x14, 0xcc, 0x82, 0x26, 0x4d, 0x38,
+	0x6f, 0x3b, 0x8c, 0xb6, 0x06, 0x3e, 0x5d, 0xef, 0x38, 0xae, 0x4f, 0x6f, 0xb8, 0x8c, 0xc3, 0xa9,
+	0xfc, 0xdb, 0x0b, 0xea, 0xa3, 0x9d, 0x5f, 0xcf, 0x12, 0xc2, 0xec, 0xb6, 0xc6, 0x0f, 0x0a, 0x30,
+	0x15, 0xcf, 0xbe, 0x10, 0x06, 0xd0, 0x5d, 0x5d, 0x6b, 0xca, 0x19, 0xaf, 0x7c, 0xd7, 0xb7, 0x73,
+	0x27, 0x75, 0x24, 0x4c, 0x14, 0xfb, 0x44, 0x34, 0x8c, 0xa9, 0x39, 0x41, 0x7a, 0xf7, 0x45, 0x28,
+	0xb6, 0x5d, 0xbf, 0x45, 0xd5, 0x9a, 0xd5, 0xab, 0x64, 0x8d, 0x13, 0x51, 0xf2, 0x8c, 0x9f, 0x16,
+	0x20, 0xa6, 0x81, 0xfc, 0x2e, 0x4c, 0x73, 0x1d, 0xb7, 0xfc, 0x9d, 0xc4, 0xdb, 0x34, 0x72, 0xbf,
+	0x8d, 0x46, 0x6a, 0x9c, 0x57, 0xfa, 0xa7, 0x13, 0x64, 0x4c, 0xea, 0x23, 0xbf, 0x0a, 0x15, 0xd3,
+	0xb2, 0x7c, 0xca, 0x18, 0x95, 0x26, 0xad, 0xd2, 0x98, 0x16, 0x7b, 0x75, 0x48, 0xc4, 0x88, 0xcf,
+	0x97, 0x61, 0xd7, 0x6a, 0x33, 0x3e, 0xb3, 0x95, 0xcb, 0xad, 0x97, 0x21, 0x57, 0xc2, 0xe9, 0xa8,
+	0x25, 0x8c, 0xaf, 0x4f, 0x40, 0x52, 0x37, 0xb1, 0x60, 0x66, 0xd7, 0xdf, 0x59, 0x59, 0x31, 0x5b,
+	0xdd, 0x5c, 0xf9, 0x92, 0x73, 0x87, 0x07, 0xf5, 0x99, 0x5b, 0x49, 0x04, 0x4c, 0x43, 0x2a, 0x2d,
+	0xb7, 0xe8, 0x7e, 0x60, 0xee, 0xe4, 0x49, 0x99, 0x84, 0x5a, 0xe2, 0x08, 0x98, 0x86, 0x24, 0xaf,
+	0x43, 0x75, 0xd7, 0xdf, 0x09, 0x17, 0x79, 0x3a, 0xa5, 0x71, 0x2b, 0x62, 0x61, 0x5c, 0x8e, 0x0f,
+	0xe1, 0xae, 0xbf, 0xc3, 0x8d, 0x62, 0x98, 0xe9, 0xd7, 0x43, 0x78, 0x4b, 0xd1, 0x51, 0x4b, 0x10,
+	0x0f, 0xc8, 0x6e, 0x38, 0x7a, 0x3a, 0xe9, 0xa6, 0x6c, 0xd1, 0x95, 0xac, 0xb7, 0xd1, 0x42, 0xf1,
+	0x17, 0xba, 0xc0, 0x6d, 0xfe, 0xad, 0x21, 0x1c, 0xcc, 0xc0, 0x26, 0x9f, 0x87, 0x8b, 0xbb, 0xfe,
+	0x8e, 0xda, 0x20, 0xb6, 0x7c, 0xdb, 0x69, 0xd9, 0x5e, 0x22, 0xc5, 0x5f, 0x57, 0xdd, 0xbd, 0x78,
+	0x2b, 0x5b, 0x0c, 0x8f, 0x6b, 0x6f, 0x7c, 0x1c, 0xa6, 0xe2, 0x29, 0xe2, 0xc7, 0x64, 0xfe, 0x8c,
+	0xfb, 0x50, 0x11, 0x41, 0x46, 0x87, 0x7b, 0x37, 0x7a, 0x07, 0x1a, 0x7f, 0xc4, 0x0e, 0xf4, 0x12,
+	0x4c, 0xee, 0x0c, 0x5a, 0xbb, 0x34, 0x60, 0xc2, 0xb0, 0x17, 0xe4, 0xb9, 0x40, 0x43, 0x92, 0x30,
+	0xe4, 0x19, 0xff, 0x51, 0x80, 0xd2, 0xba, 0xe3, 0x0d, 0x7e, 0x4e, 0x8e, 0xb1, 0xbe, 0x33, 0x01,
+	0x13, 0xdc, 0xa7, 0x24, 0x57, 0x54, 0x7e, 0xab, 0x20, 0xa2, 0xd3, 0xb9, 0x78, 0x7e, 0xeb, 0x28,
+	0x91, 0xe7, 0x22, 0x6f, 0x41, 0xc9, 0x19, 0xf4, 0xef, 0x99, 0x3d, 0x65, 0xed, 0x5e, 0x0e, 0x7d,
+	0xa1, 0x0d, 0x41, 0x3d, 0x3a, 0xa8, 0xcf, 0x51, 0xa7, 0xe5, 0x5a, 0xb6, 0xd3, 0x59, 0x7a, 0xc0,
+	0x5c, 0x67, 0x71, 0x63, 0xd0, 0xdf, 0xa1, 0x3e, 0xaa, 0x56, 0x3c, 0x8a, 0xde, 0x71, 0xdd, 0x1e,
+	0x07, 0x18, 0x4f, 0x46, 0xd1, 0x0d, 0x49, 0xc6, 0x90, 0xcf, 0xdd, 0x2e, 0x16, 0xf8, 0x5c, 0x72,
+	0x22, 0xe9, 0x76, 0x35, 0x05, 0x15, 0x15, 0x97, 0xf4, 0xa1, 0xd4, 0x37, 0x3d, 0x2e, 0x57, 0x14,
+	0x43, 0x76, 0x2d, 0xb7, 0xe3, 0xbd, 0x78, 0x47, 0xe0, 0x5c, 0x73, 0x02, 0x7f, 0x3f, 0x52, 0x27,
+	0x89, 0xa8, 0x94, 0x10, 0x1b, 0x26, 0x7b, 0x36, 0x0b, 0xb8, 0xbe, 0xd2, 0x08, 0xb3, 0x82, 0xeb,
+	0x13, 0x53, 0x34, 0x1a, 0x81, 0xdb, 0x12, 0x16, 0x43, 0xfc, 0xf9, 0x7d, 0xa8, 0xc6, 0x7a, 0x44,
+	0x66, 0x65, 0x1a, 0x5d, 0xac, 0x0a, 0x91, 0x39, 0x27, 0xdb, 0xe1, 0xdc, 0x1f, 0x1b, 0x21, 0x1c,
+	0xd3, 0x3d, 0x51, 0x8b, 0xe5, 0xd3, 0x63, 0x6f, 0x14, 0x3e, 0x5d, 0xfe, 0xd6, 0x5f, 0xd4, 0x9f,
+	0xfb, 0xca, 0xbf, 0x5e, 0x7e, 0xce, 0xf8, 0x87, 0x71, 0xa8, 0x68, 0x91, 0xff, 0xdf, 0x33, 0xc5,
+	0x4f, 0xcd, 0x94, 0x9b, 0xa3, 0x8d, 0xd7, 0x89, 0xa6, 0xcb, 0x72, 0x72, 0xba, 0x4c, 0x35, 0x7e,
+	0x39, 0xf6, 0xa9, 0x8f, 0x0e, 0xea, 0xb5, 0xe4, 0x20, 0xa0, 0xb9, 0x77, 0x87, 0x32, 0x66, 0x76,
+	0x68, 0x34, 0x0d, 0x3e, 0xf5, 0xb8, 0x69, 0x30, 0x17, 0x9f, 0x06, 0x95, 0xec, 0xcf, 0xd8, 0x83,
+	0x89, 0xdb, 0xb6, 0x73, 0x92, 0xac, 0xc0, 0x8b, 0x50, 0x64, 0x2d, 0x57, 0x67, 0xbb, 0xb5, 0x41,
+	0x6d, 0x72, 0x22, 0x4a, 0x5e, 0x68, 0xa1, 0xc7, 0x8f, 0xb1, 0xd0, 0x5f, 0x19, 0x87, 0x72, 0x98,
+	0x77, 0x21, 0x7f, 0x50, 0x80, 0xaa, 0xe9, 0x38, 0x6e, 0x20, 0x52, 0xf7, 0xa1, 0x31, 0xdd, 0xc8,
+	0x35, 0xf8, 0x21, 0xe8, 0xe2, 0x72, 0x04, 0x28, 0x3f, 0x80, 0xde, 0x60, 0x63, 0x1c, 0x8c, 0xeb,
+	0x25, 0x5f, 0x82, 0x52, 0xcf, 0xdc, 0xa1, 0xbd, 0xd0, 0xb6, 0xae, 0x8f, 0xd6, 0x83, 0xdb, 0x02,
+	0x2b, 0xf5, 0xf5, 0x25, 0x11, 0x95, 0xa2, 0xf9, 0xb7, 0x60, 0x36, 0xdd, 0xd1, 0x27, 0xf9, 0x7e,
+	0xfc, 0xd3, 0xc7, 0xd4, 0x3c, 0x49, 0x53, 0xe3, 0x73, 0x50, 0xbd, 0x43, 0x03, 0xdf, 0x6e, 0x09,
+	0x80, 0xf0, 0x0c, 0xae, 0x90, 0x7d, 0x06, 0x17, 0xed, 0xa2, 0x63, 0x8f, 0x38, 0x59, 0xf8, 0x32,
+	0x4c, 0x4a, 0x48, 0xc6, 0x83, 0x77, 0xcf, 0x77, 0xfb, 0x34, 0xe8, 0xd2, 0x41, 0xf8, 0x45, 0xf3,
+	0x39, 0xda, 0x5b, 0x1a, 0x46, 0x06, 0xef, 0xd1, 0x33, 0xc6, 0x54, 0x18, 0x7f, 0x33, 0x05, 0xb0,
+	0xe1, 0x5a, 0x54, 0xa5, 0xe9, 0xe6, 0x61, 0xcc, 0xb6, 0xd4, 0xdb, 0x80, 0xea, 0xec, 0xd8, 0xfa,
+	0x2a, 0x8e, 0xd9, 0x96, 0x9e, 0xe2, 0x63, 0xc7, 0x4e, 0xf1, 0xd7, 0xa1, 0x6a, 0xd9, 0xcc, 0xeb,
+	0x99, 0xfb, 0x1b, 0x19, 0x1e, 0xda, 0x6a, 0xc4, 0xc2, 0xb8, 0x1c, 0x79, 0x45, 0x19, 0x3f, 0x69,
+	0x65, 0x6a, 0x29, 0xe3, 0x57, 0xe6, 0xdd, 0x8b, 0x19, 0xc0, 0x37, 0x60, 0x2a, 0x4c, 0x2c, 0x09,
+	0x2d, 0x45, 0xd1, 0x2a, 0x34, 0x99, 0x53, 0xdb, 0x31, 0x1e, 0x26, 0x24, 0xd3, 0x89, 0xaf, 0xd2,
+	0x33, 0x49, 0x7c, 0xad, 0xc2, 0x2c, 0x0b, 0x5c, 0x9f, 0x5a, 0xa1, 0xc4, 0xfa, 0x6a, 0x8d, 0x24,
+	0x5e, 0x74, 0xb6, 0x99, 0xe2, 0xe3, 0x50, 0x0b, 0xb2, 0x05, 0x73, 0x61, 0x27, 0xe2, 0x2f, 0x58,
+	0x3b, 0x27, 0x90, 0x2e, 0x29, 0xa4, 0xb9, 0xfb, 0x19, 0x32, 0x98, 0xd9, 0x92, 0x7c, 0x06, 0xa6,
+	0xc3, 0x6e, 0x0a, 0x0b, 0x54, 0x9b, 0x13, 0x50, 0x3a, 0x86, 0xd9, 0x8e, 0x33, 0x31, 0x29, 0x4b,
+	0x3e, 0x01, 0x45, 0xaf, 0x6b, 0x32, 0xaa, 0xf2, 0x64, 0x61, 0x9a, 0xa3, 0xb8, 0xc5, 0x89, 0x47,
+	0x07, 0xf5, 0x0a, 0xff, 0x66, 0xe2, 0x01, 0xa5, 0x20, 0xb9, 0x0a, 0xb0, 0xe3, 0x0e, 0x1c, 0xcb,
+	0xf4, 0xf7, 0xd7, 0x57, 0x55, 0xca, 0x5a, 0xfb, 0x6d, 0x0d, 0xcd, 0xc1, 0x98, 0x14, 0xdf, 0xaa,
+	0xfa, 0xd2, 0x68, 0xab, 0x74, 0x97, 0xde, 0xaa, 0xb4, 0x2d, 0x57, 0x7c, 0xf2, 0x2e, 0x54, 0x44,
+	0x7a, 0x9f, 0x5a, 0xcb, 0x81, 0xca, 0x79, 0x3d, 0x49, 0x26, 0x58, 0xfb, 0x73, 0xcd, 0x10, 0x04,
+	0x23, 0x3c, 0xf2, 0x05, 0x80, 0xb6, 0xed, 0xd8, 0xac, 0x2b, 0xd0, 0xab, 0x4f, 0x8c, 0xae, 0xdf,
+	0x73, 0x4d, 0xa3, 0x60, 0x0c, 0x91, 0xfc, 0xac, 0x00, 0x67, 0x7d, 0xca, 0xdc, 0x81, 0xdf, 0xa2,
+	0x4c, 0x1f, 0xd9, 0x9e, 0x17, 0x8b, 0xff, 0x5e, 0xce, 0xba, 0xb2, 0x70, 0x45, 0x2f, 0x62, 0x1a,
+	0x58, 0x5a, 0x56, 0x1a, 0x9e, 0xdc, 0x0c, 0xf1, 0x8f, 0xb2, 0x88, 0x5f, 0xfd, 0x71, 0xbd, 0x3e,
+	0x5c, 0x4e, 0xa8, 0xc1, 0xf9, 0x8c, 0xfa, 0xe3, 0x1f, 0xd7, 0x67, 0xc3, 0x67, 0x7d, 0xb8, 0x3c,
+	0xfc, 0x5e, 0xdc, 0x24, 0x7a, 0xae, 0xb5, 0xbe, 0x55, 0x9b, 0x4a, 0x9a, 0xc4, 0x2d, 0x4e, 0x44,
+	0xc9, 0x23, 0x57, 0xa0, 0x6c, 0x99, 0xb4, 0xef, 0x3a, 0xd4, 0xaa, 0x4d, 0x47, 0xa9, 0xad, 0x55,
+	0x45, 0x43, 0xcd, 0x25, 0x5f, 0x84, 0x92, 0x2d, 0x42, 0x8b, 0xda, 0x19, 0xf1, 0x61, 0x3e, 0x93,
+	0xcf, 0xf9, 0x10, 0x10, 0x0d, 0xe0, 0x7b, 0x8d, 0xfc, 0x8d, 0x0a, 0x96, 0xb4, 0x60, 0xd2, 0x1d,
+	0x04, 0x42, 0xc3, 0x8c, 0xd0, 0x90, 0x2f, 0x01, 0xb9, 0x29, 0x31, 0x64, 0x84, 0xa4, 0x1e, 0x30,
+	0x44, 0xe6, 0xef, 0xdb, 0xea, 0xda, 0x3d, 0xcb, 0xa7, 0x4e, 0x6d, 0x56, 0xe4, 0x04, 0xc4, 0xfb,
+	0xae, 0x28, 0x1a, 0x6a, 0x2e, 0xf9, 0x75, 0x98, 0x76, 0x07, 0x81, 0x58, 0x25, 0xfc, 0x2b, 0xb3,
+	0xda, 0x59, 0x21, 0x7e, 0x96, 0xaf, 0xd9, 0xcd, 0x38, 0x03, 0x93, 0x72, 0xf3, 0xab, 0x70, 0x21,
+	0x7b, 0x2e, 0x3c, 0x6e, 0xfb, 0x1b, 0x8f, 0x6f, 0x7f, 0x67, 0x60, 0x2a, 0x5e, 0xb4, 0x68, 0xfc,
+	0x79, 0x01, 0xaa, 0xb1, 0x5a, 0x17, 0xe2, 0x42, 0xc5, 0x6d, 0x36, 0x65, 0x04, 0xa8, 0x52, 0x0d,
+	0x6f, 0xe5, 0x2d, 0xa0, 0x91, 0x28, 0xd1, 0xe2, 0xd4, 0x24, 0x8c, 0x74, 0x3c, 0xae, 0x08, 0xe6,
+	0xef, 0xc6, 0x20, 0x6a, 0x47, 0x5e, 0x81, 0x32, 0x75, 0x2c, 0xcf, 0xb5, 0x9d, 0x20, 0x5d, 0x6b,
+	0x71, 0x4d, 0xd1, 0x51, 0x4b, 0x70, 0xff, 0x57, 0x46, 0xb0, 0x0a, 0x5d, 0x7b, 0x23, 0xaa, 0x17,
+	0x8a, 0x4b, 0xba, 0x30, 0x63, 0x8a, 0xd3, 0xbf, 0x28, 0xe3, 0x37, 0xfe, 0x44, 0x19, 0x3f, 0x5d,
+	0x11, 0x93, 0x44, 0xc1, 0x34, 0x2c, 0xd7, 0xc4, 0xa2, 0xe6, 0x42, 0xd3, 0x44, 0x2e, 0x4d, 0xcd,
+	0x24, 0x0a, 0xa6, 0x61, 0x8d, 0x6f, 0x8c, 0x41, 0x38, 0x4b, 0x7f, 0x1e, 0x62, 0x76, 0x62, 0x40,
+	0xc9, 0xa7, 0x6c, 0xd0, 0x0b, 0x94, 0xd7, 0x22, 0x2c, 0x01, 0x0a, 0x0a, 0x2a, 0x8e, 0xb1, 0x07,
+	0xd3, 0xbc, 0xb7, 0xbd, 0x1e, 0xed, 0x35, 0x03, 0xea, 0x31, 0xd2, 0x86, 0x22, 0xe3, 0x3f, 0xd4,
+	0x98, 0x8c, 0x78, 0x9a, 0x1f, 0x50, 0x2f, 0x16, 0x15, 0x70, 0x5c, 0x94, 0xf0, 0xc6, 0x37, 0xc7,
+	0xa0, 0xa2, 0xc7, 0xe9, 0x04, 0xa1, 0xc6, 0x4b, 0x30, 0x69, 0xd1, 0xb6, 0xc9, 0xdf, 0x46, 0xad,
+	0x0b, 0x6e, 0x74, 0x56, 0x25, 0x09, 0x43, 0x1e, 0xa9, 0x27, 0x53, 0x3c, 0x95, 0xa1, 0xf4, 0xce,
+	0x2e, 0x54, 0xc4, 0x8f, 0xb5, 0xb0, 0x4a, 0x36, 0xef, 0x77, 0xbf, 0x17, 0xa2, 0xc8, 0x54, 0xa7,
+	0x7e, 0xc4, 0x08, 0x3f, 0x55, 0xdd, 0x5a, 0x3c, 0x49, 0x75, 0xab, 0xb1, 0x06, 0x7c, 0xdb, 0xb8,
+	0xbe, 0x42, 0xde, 0x84, 0x32, 0x53, 0x26, 0x49, 0x8d, 0xcb, 0x47, 0x75, 0x45, 0x83, 0xa2, 0x1f,
+	0x1d, 0xd4, 0xa7, 0x85, 0x70, 0x48, 0x40, 0xdd, 0xc4, 0xf8, 0xda, 0x04, 0xc4, 0x1c, 0xe4, 0x13,
+	0x8c, 0xb0, 0x95, 0x8a, 0x79, 0xde, 0xc9, 0x1b, 0xf3, 0x84, 0x81, 0x84, 0x9c, 0x70, 0xc9, 0x30,
+	0x87, 0xf7, 0xa3, 0x4b, 0x7b, 0x9e, 0xfa, 0x3e, 0xba, 0x1f, 0x37, 0x68, 0xcf, 0x43, 0xc1, 0xd1,
+	0xc7, 0x81, 0x13, 0xc7, 0x1e, 0x07, 0xbe, 0x0b, 0xc5, 0x8e, 0x39, 0xe8, 0x50, 0x95, 0xc3, 0xfc,
+	0x74, 0xbe, 0x32, 0x56, 0x8e, 0x20, 0x27, 0x88, 0xf8, 0x89, 0x12, 0x93, 0x4f, 0x90, 0x6e, 0x98,
+	0x31, 0x54, 0xfe, 0x74, 0xbe, 0x09, 0xa2, 0xf3, 0x8e, 0x72, 0x82, 0xe8, 0x47, 0x8c, 0xf0, 0xf9,
+	0x46, 0xdc, 0x92, 0x05, 0x5b, 0xea, 0x40, 0xe5, 0xb3, 0x39, 0x4f, 0x35, 0x05, 0x86, 0x5c, 0x13,
+	0xea, 0x01, 0x43, 0x64, 0x63, 0x09, 0xaa, 0xb1, 0xba, 0x50, 0x3e, 0xbe, 0xba, 0x1c, 0x29, 0x36,
+	0xbe, 0xab, 0x66, 0x60, 0xa2, 0xe0, 0x18, 0x47, 0x63, 0xa0, 0xdd, 0x9e, 0xf8, 0xd1, 0xa6, 0xd9,
+	0x8a, 0x55, 0xf4, 0x25, 0x0a, 0x19, 0x5c, 0x07, 0x15, 0x97, 0x3b, 0xe1, 0x7d, 0xea, 0x77, 0xf4,
+	0x76, 0xaa, 0x96, 0xab, 0x76, 0xc2, 0xef, 0xc4, 0x99, 0x98, 0x94, 0xe5, 0x9b, 0x59, 0xdf, 0x74,
+	0xec, 0x36, 0x65, 0x41, 0xfa, 0x6c, 0xe0, 0x8e, 0xa2, 0xa3, 0x96, 0x20, 0xd7, 0xe1, 0x2c, 0xa3,
+	0xc1, 0xe6, 0x9e, 0x43, 0x7d, 0x5d, 0x60, 0xa1, 0x2a, 0x6e, 0x9e, 0x0f, 0x7d, 0xc1, 0x66, 0x5a,
+	0x00, 0x87, 0xdb, 0x88, 0x80, 0x46, 0x16, 0xbb, 0xe8, 0xb2, 0x3e, 0xb5, 0x5a, 0xa3, 0x80, 0x26,
+	0xc5, 0xc7, 0xa1, 0x16, 0x1c, 0xa5, 0x6d, 0xda, 0xbd, 0x81, 0x4f, 0x23, 0x94, 0x52, 0x12, 0x65,
+	0x2d, 0xc5, 0xc7, 0xa1, 0x16, 0xc6, 0xbf, 0x17, 0x60, 0x1a, 0x69, 0xe0, 0xef, 0xeb, 0x41, 0xa9,
+	0x43, 0xb1, 0x27, 0x6a, 0x6b, 0x0a, 0xa2, 0xb6, 0x46, 0x4c, 0x59, 0x59, 0x4a, 0x23, 0xe9, 0x64,
+	0x15, 0xaa, 0x3e, 0x6f, 0xa1, 0xea, 0x98, 0xe4, 0x80, 0x1b, 0x61, 0x8c, 0x8a, 0x11, 0xeb, 0x28,
+	0xf9, 0x88, 0xf1, 0x66, 0xc4, 0x81, 0xc9, 0x1d, 0x59, 0xbf, 0xa9, 0xb6, 0xfa, 0x7c, 0x73, 0x51,
+	0xd5, 0x80, 0x8a, 0xf3, 0x82, 0xb0, 0x20, 0xf4, 0x28, 0xfa, 0x89, 0xa1, 0x12, 0xe3, 0x5b, 0x05,
+	0x80, 0xa8, 0x4a, 0x9d, 0xec, 0x42, 0x99, 0xbd, 0x96, 0x70, 0xb2, 0x72, 0x96, 0x1d, 0x28, 0x90,
+	0x58, 0xfd, 0x97, 0xa2, 0xa0, 0x56, 0xf0, 0x38, 0x0f, 0xeb, 0xa7, 0xe3, 0xa0, 0x5b, 0x3d, 0x25,
+	0x07, 0xeb, 0x65, 0xbe, 0x39, 0x77, 0xa2, 0x3a, 0x56, 0x2d, 0x87, 0x82, 0x8a, 0x8a, 0xcb, 0xbd,
+	0xe8, 0xf0, 0x40, 0x53, 0x4d, 0x6d, 0xe1, 0x45, 0x87, 0x67, 0x9f, 0xa8, 0xb9, 0x59, 0x2e, 0x5b,
+	0xf1, 0x99, 0xb9, 0x6c, 0xa5, 0xa7, 0xe2, 0xb2, 0xf1, 0x70, 0xd9, 0x77, 0x7b, 0x74, 0x19, 0x37,
+	0x54, 0x58, 0xae, 0xc3, 0x65, 0x94, 0x64, 0x0c, 0xf9, 0xe4, 0x75, 0xa8, 0x0e, 0x18, 0x6d, 0xae,
+	0xde, 0x5a, 0xf1, 0xa9, 0xc5, 0xd4, 0x59, 0xb1, 0x4e, 0xd4, 0xdc, 0x8d, 0x58, 0x18, 0x97, 0x33,
+	0xfe, 0xb0, 0x00, 0x67, 0x9a, 0x2d, 0xdf, 0xf6, 0x02, 0x6d, 0xe9, 0x36, 0x44, 0xd1, 0x7a, 0x60,
+	0xf2, 0xf8, 0x57, 0x4d, 0xc5, 0x17, 0x8e, 0x39, 0x26, 0x93, 0x42, 0x89, 0x9a, 0x76, 0x49, 0xc2,
+	0x08, 0x42, 0xe4, 0x9c, 0x85, 0x2d, 0x4d, 0x4f, 0x89, 0xa6, 0xa0, 0xa2, 0xe2, 0x1a, 0xdf, 0x2e,
+	0x40, 0x59, 0x17, 0xc5, 0xbc, 0x08, 0x45, 0x61, 0xbf, 0xd3, 0xd5, 0x12, 0xc2, 0xba, 0xa3, 0xe4,
+	0x89, 0xfc, 0x2b, 0x0f, 0xe9, 0x87, 0xf2, 0xaf, 0x9c, 0x88, 0x92, 0xc7, 0xe7, 0x3a, 0x75, 0xac,
+	0x74, 0xfe, 0xf5, 0x9a, 0x63, 0x21, 0xa7, 0x8b, 0xda, 0x62, 0xd7, 0xef, 0x9b, 0x41, 0x3a, 0x23,
+	0xbe, 0x26, 0xa8, 0xa8, 0xb8, 0xc6, 0xdb, 0x30, 0xa3, 0xaa, 0x17, 0xf5, 0x40, 0x3d, 0x51, 0x99,
+	0xb7, 0xf1, 0xdf, 0x05, 0xa8, 0x6e, 0x6f, 0xdf, 0xd6, 0x66, 0x0d, 0xe1, 0x02, 0x93, 0xe5, 0x8a,
+	0xcb, 0xed, 0x80, 0xfa, 0x2b, 0x6e, 0xdf, 0xeb, 0x51, 0x8d, 0xa5, 0x6a, 0x08, 0x9b, 0x99, 0x12,
+	0x78, 0x4c, 0x4b, 0xb2, 0x0e, 0xe7, 0xe2, 0x1c, 0x65, 0xb4, 0x55, 0x5d, 0xb9, 0xac, 0x42, 0x18,
+	0x66, 0x63, 0x56, 0x9b, 0x34, 0x94, 0xb2, 0xdc, 0xea, 0xda, 0xd5, 0x10, 0x94, 0x62, 0x63, 0x56,
+	0x1b, 0x63, 0x1a, 0xaa, 0xb1, 0x3b, 0x77, 0xc6, 0x77, 0x9e, 0x07, 0x5d, 0x34, 0xf7, 0x8b, 0xd2,
+	0xbb, 0x5c, 0x19, 0xc8, 0x96, 0xce, 0x90, 0x14, 0x47, 0xcf, 0x90, 0xe8, 0x19, 0x9f, 0xca, 0x92,
+	0x74, 0xa2, 0x2c, 0x49, 0xe9, 0x14, 0xb2, 0x24, 0xda, 0x74, 0x0d, 0x65, 0x4a, 0xfe, 0xa8, 0x00,
+	0x53, 0x8e, 0x6b, 0xd1, 0xd0, 0x40, 0xd6, 0x26, 0x85, 0x03, 0xbe, 0x39, 0xd2, 0x20, 0xca, 0x84,
+	0x99, 0x42, 0x94, 0x09, 0x32, 0x9d, 0x50, 0x8e, 0xb3, 0x30, 0xa1, 0x9a, 0xac, 0x41, 0xd9, 0x6c,
+	0xb7, 0x6d, 0xc7, 0x0e, 0xf6, 0x55, 0xf5, 0xdf, 0xa5, 0x2c, 0xdb, 0xb7, 0xac, 0x64, 0xe4, 0x6e,
+	0x14, 0x3e, 0xa1, 0x6e, 0xcb, 0xb7, 0x73, 0x5d, 0xf8, 0x5e, 0x19, 0x61, 0x3b, 0x0f, 0xcf, 0x50,
+	0x62, 0x8e, 0x60, 0x58, 0xa4, 0x1b, 0xd5, 0xc1, 0x1b, 0x50, 0x92, 0xc9, 0x33, 0x91, 0x27, 0x2d,
+	0xcb, 0xc0, 0x43, 0x26, 0xd6, 0x50, 0x71, 0x48, 0x27, 0x0c, 0x6c, 0xab, 0x62, 0x70, 0x1b, 0xb9,
+	0x83, 0x7d, 0x1d, 0x2b, 0x67, 0x47, 0xb6, 0xe4, 0x66, 0x7c, 0xfb, 0x98, 0x3a, 0xc9, 0xf6, 0x31,
+	0x7d, 0xec, 0xd6, 0xd1, 0x81, 0x12, 0x13, 0x9b, 0x93, 0xc8, 0x18, 0x56, 0xaf, 0xae, 0xe4, 0x73,
+	0x89, 0x12, 0xfb, 0x9b, 0x1c, 0x1d, 0x49, 0x43, 0x05, 0x4f, 0x5c, 0x28, 0x87, 0x69, 0x4d, 0x95,
+	0x74, 0xcc, 0x77, 0x36, 0x9e, 0x0e, 0x1b, 0xc2, 0xf2, 0x3d, 0x49, 0x45, 0xad, 0x84, 0xbc, 0x0b,
+	0xe3, 0x96, 0xd9, 0x51, 0xe9, 0xc7, 0x77, 0x72, 0xd7, 0x3f, 0x86, 0x6a, 0xc4, 0x7d, 0xb4, 0xd5,
+	0xe5, 0xeb, 0xc8, 0x51, 0xc9, 0x6e, 0x54, 0x80, 0x3f, 0x3b, 0xc2, 0x35, 0xaf, 0xd4, 0x7e, 0x27,
+	0xc3, 0xab, 0xa1, 0x12, 0xfe, 0x6b, 0x30, 0xf9, 0xd0, 0xed, 0x0d, 0xfa, 0x2a, 0x6f, 0x59, 0xbd,
+	0x3a, 0x9f, 0xf5, 0xb5, 0xef, 0x09, 0x91, 0xc8, 0x08, 0xc8, 0x67, 0x86, 0x61, 0x5b, 0xf2, 0xd5,
+	0x02, 0x9c, 0xe1, 0x4b, 0x47, 0xcf, 0x03, 0x56, 0x23, 0x23, 0xcc, 0xd4, 0xbb, 0x8c, 0x6f, 0x8c,
+	0xe1, 0x0c, 0xbb, 0xa0, 0xd4, 0x9e, 0x59, 0x4f, 0x68, 0xc0, 0x94, 0x46, 0xe2, 0x41, 0x99, 0xd9,
+	0x16, 0x6d, 0x99, 0x3e, 0xab, 0x9d, 0x3b, 0x35, 0xed, 0x91, 0x27, 0xae, 0xb0, 0x51, 0x6b, 0x21,
+	0xbf, 0x2f, 0xae, 0xe6, 0xa9, 0x9b, 0xaf, 0xea, 0x36, 0xf2, 0xdc, 0x69, 0xde, 0x46, 0x3e, 0x27,
+	0xef, 0xe5, 0x25, 0x34, 0x60, 0x5a, 0x25, 0xd9, 0x84, 0xf3, 0xb2, 0x10, 0x3f, 0x7d, 0x0b, 0xe3,
+	0xbc, 0xa8, 0x5e, 0x78, 0xfe, 0xf0, 0xa0, 0x7e, 0x7e, 0x39, 0x4b, 0x00, 0xb3, 0xdb, 0x91, 0x0f,
+	0x60, 0xda, 0x8f, 0x47, 0x71, 0xb5, 0x0b, 0x23, 0xd4, 0xe4, 0x25, 0xe2, 0x41, 0x99, 0x17, 0x4f,
+	0x90, 0x30, 0xa9, 0x8b, 0xbc, 0x0a, 0x55, 0x4f, 0x59, 0x2a, 0x9b, 0xf5, 0x6b, 0x17, 0xc5, 0x3b,
+	0x88, 0x1d, 0x75, 0x2b, 0x22, 0x63, 0x5c, 0x86, 0xdc, 0x85, 0x6a, 0xe0, 0xf6, 0xa8, 0xaf, 0x0e,
+	0xde, 0x6b, 0xe2, 0xe3, 0x2f, 0x64, 0xcd, 0xe4, 0x6d, 0x2d, 0x16, 0xb9, 0xd7, 0x11, 0x8d, 0x61,
+	0x1c, 0x87, 0x7c, 0x06, 0xa6, 0xc3, 0x4b, 0x37, 0xbe, 0x48, 0x82, 0x3d, 0x9f, 0xcc, 0x06, 0x34,
+	0xe3, 0x4c, 0x4c, 0xca, 0xf2, 0xf8, 0xde, 0xf3, 0x6d, 0xd7, 0xb7, 0x83, 0xfd, 0x95, 0x9e, 0xc9,
+	0x98, 0x00, 0x98, 0x17, 0x00, 0x3a, 0xbe, 0xdf, 0x4a, 0x0b, 0xe0, 0x70, 0x1b, 0x1e, 0x44, 0x85,
+	0xc4, 0xda, 0x47, 0x84, 0x03, 0x27, 0xcc, 0x52, 0xd8, 0x16, 0x35, 0xf7, 0x98, 0xca, 0xe7, 0x4b,
+	0x79, 0x2a, 0x9f, 0x89, 0x05, 0x97, 0xcc, 0x41, 0xe0, 0xf6, 0x39, 0x21, 0xd9, 0x64, 0xdb, 0xdd,
+	0xa5, 0x4e, 0xed, 0xb2, 0xd8, 0xab, 0x2e, 0x1f, 0x1e, 0xd4, 0x2f, 0x2d, 0x3f, 0x42, 0x0e, 0x1f,
+	0x89, 0x42, 0xfa, 0x50, 0xa6, 0xaa, 0x7a, 0xbb, 0xf6, 0xd1, 0x11, 0x36, 0x89, 0x64, 0x09, 0xb8,
+	0x1c, 0xa0, 0x90, 0x86, 0x5a, 0x05, 0xd9, 0x86, 0x6a, 0xd7, 0x65, 0xc1, 0x72, 0xcf, 0x36, 0x19,
+	0x65, 0xb5, 0x17, 0xc4, 0x3c, 0xc9, 0xdc, 0xdf, 0x6e, 0x84, 0x62, 0xd1, 0x34, 0xb9, 0x11, 0xb5,
+	0xc4, 0x38, 0x0c, 0xa1, 0x22, 0xa2, 0x1c, 0x88, 0xaf, 0xe6, 0x3a, 0x01, 0x7d, 0x3f, 0xa8, 0x2d,
+	0x88, 0x77, 0x79, 0x39, 0x0b, 0x79, 0xcb, 0xb5, 0x9a, 0x49, 0x69, 0xb9, 0xca, 0x53, 0x44, 0x4c,
+	0x63, 0x92, 0x37, 0x60, 0xca, 0x73, 0xad, 0xa6, 0x47, 0x5b, 0x5b, 0x66, 0xd0, 0xea, 0xd6, 0xea,
+	0xc9, 0x73, 0xf6, 0xad, 0x18, 0x0f, 0x13, 0x92, 0x3c, 0x1a, 0xf0, 0x29, 0x1b, 0xec, 0xf4, 0xed,
+	0x60, 0x8b, 0x3a, 0x96, 0xed, 0x74, 0xb6, 0x5c, 0x8b, 0xd5, 0x0c, 0xf1, 0x09, 0x45, 0x34, 0x80,
+	0xc3, 0x6c, 0xcc, 0x6a, 0x43, 0x5a, 0x30, 0xd9, 0x97, 0xa5, 0x11, 0xb5, 0x17, 0x47, 0x70, 0x2b,
+	0x55, 0x79, 0x85, 0xdc, 0x94, 0xd4, 0x03, 0x86, 0xc8, 0xf3, 0x6f, 0xc3, 0xd9, 0x21, 0xff, 0xef,
+	0x89, 0x6a, 0x42, 0xfe, 0x92, 0x47, 0x6b, 0x31, 0x8f, 0xfb, 0xb4, 0xe3, 0x94, 0xeb, 0x70, 0x56,
+	0xfd, 0xfb, 0x09, 0x77, 0x0e, 0x7a, 0x03, 0x7d, 0xa5, 0x37, 0x96, 0xbb, 0xc3, 0xb4, 0x00, 0x0e,
+	0xb7, 0x31, 0xfe, 0xaa, 0x00, 0xd3, 0x89, 0xed, 0xe6, 0xd4, 0xe3, 0xf7, 0x35, 0x20, 0x7d, 0xdb,
+	0xf7, 0x5d, 0x5f, 0xee, 0xd9, 0x77, 0xf8, 0xda, 0x63, 0xea, 0x76, 0x82, 0xa8, 0x8a, 0xbd, 0x33,
+	0xc4, 0xc5, 0x8c, 0x16, 0xc6, 0xdf, 0x17, 0x20, 0x3a, 0x26, 0xd0, 0xa5, 0xe0, 0x85, 0x63, 0x4b,
+	0xc1, 0x5f, 0x81, 0xf2, 0x03, 0xe6, 0x3a, 0x5b, 0x51, 0xc1, 0xb8, 0x1e, 0xd0, 0x9b, 0xcd, 0xcd,
+	0x0d, 0x21, 0xa9, 0x25, 0x84, 0xf4, 0x97, 0xd6, 0xec, 0x5e, 0x30, 0x5c, 0x56, 0x7d, 0xf3, 0x73,
+	0x92, 0x8e, 0x5a, 0x82, 0x2c, 0x41, 0x45, 0x9f, 0x4c, 0xa9, 0xc0, 0x5f, 0x0f, 0x82, 0x3e, 0x96,
+	0xc1, 0x48, 0xc6, 0xf8, 0xee, 0x18, 0x94, 0x9f, 0xe1, 0x35, 0xe1, 0x56, 0xe2, 0x9a, 0xf0, 0x29,
+	0xdc, 0x29, 0xcd, 0xba, 0x22, 0xbc, 0x9b, 0xba, 0x22, 0xbc, 0x32, 0xe2, 0x61, 0xd7, 0x23, 0xaf,
+	0x07, 0xff, 0xb0, 0x00, 0x53, 0xcf, 0xf0, 0x6a, 0xf0, 0x4e, 0xf2, 0x6a, 0xf0, 0x9b, 0x23, 0xbd,
+	0xda, 0x31, 0xd7, 0x82, 0xff, 0xe5, 0x02, 0x24, 0xae, 0xe4, 0x12, 0x07, 0x2a, 0xe1, 0x02, 0x0f,
+	0x0f, 0x10, 0xdf, 0x1c, 0x29, 0x88, 0x8d, 0x26, 0x65, 0x48, 0x61, 0x18, 0xa9, 0x20, 0x57, 0x01,
+	0x28, 0xb7, 0x6c, 0x32, 0x39, 0x3b, 0x96, 0x3c, 0x5f, 0xbb, 0xa6, 0x39, 0x18, 0x93, 0x7a, 0xf6,
+	0x09, 0x92, 0x6c, 0x97, 0x62, 0xe2, 0xa9, 0xb8, 0x14, 0x97, 0x4e, 0xdd, 0xa5, 0x78, 0xe1, 0xe9,
+	0xbb, 0x14, 0xb1, 0x00, 0xaa, 0x38, 0x42, 0x00, 0xf5, 0x01, 0xcc, 0xc9, 0x9f, 0x2b, 0x3d, 0xd3,
+	0xee, 0xeb, 0xf9, 0xa2, 0x4a, 0xaf, 0x3f, 0x96, 0xe9, 0x48, 0x50, 0x9f, 0xd9, 0x2c, 0xa0, 0x4e,
+	0x70, 0x2f, 0x6a, 0x19, 0x95, 0x9e, 0xdd, 0xcb, 0x80, 0xc3, 0x4c, 0x25, 0x69, 0x8f, 0x7b, 0xf2,
+	0x04, 0x1e, 0xf7, 0xb7, 0x0b, 0x70, 0xde, 0xcc, 0xfa, 0xd7, 0x14, 0x95, 0x77, 0xb9, 0x39, 0x52,
+	0xfc, 0x93, 0x40, 0x54, 0xf1, 0x4b, 0x16, 0x0b, 0xb3, 0xfb, 0x40, 0x5e, 0x8a, 0x42, 0xe8, 0x8a,
+	0x98, 0x54, 0xd9, 0xc1, 0xef, 0xd7, 0xd3, 0xa9, 0x2b, 0x10, 0xa3, 0xdd, 0x1c, 0xd9, 0x60, 0x9f,
+	0x42, 0xfa, 0xaa, 0x3a, 0x42, 0xfa, 0x2a, 0x15, 0x0e, 0x4d, 0x9d, 0x52, 0x38, 0xe4, 0xc0, 0xac,
+	0xdd, 0x37, 0x3b, 0x74, 0x6b, 0xd0, 0xeb, 0xc9, 0x23, 0x0e, 0x56, 0x9b, 0x16, 0xd8, 0x99, 0x17,
+	0x71, 0x78, 0x78, 0xda, 0x4b, 0xdf, 0x20, 0xd7, 0x87, 0x89, 0xeb, 0x29, 0x24, 0x1c, 0xc2, 0xe6,
+	0xd3, 0x92, 0xbb, 0xd9, 0x1b, 0x34, 0xe0, 0xa3, 0x2d, 0x32, 0x3b, 0xea, 0xaf, 0xa7, 0x6e, 0x44,
+	0x64, 0x8c, 0xcb, 0x90, 0x5b, 0x50, 0xb1, 0x1c, 0xa6, 0x8e, 0x12, 0x67, 0x84, 0x95, 0xfa, 0x38,
+	0xb7, 0x6d, 0xab, 0x1b, 0x4d, 0x7d, 0x88, 0x78, 0x29, 0xa3, 0x6e, 0x4e, 0xf3, 0x31, 0x6a, 0x4f,
+	0xee, 0x08, 0x30, 0x75, 0x2b, 0x4d, 0xa6, 0x62, 0x2e, 0x1f, 0xe3, 0xd1, 0xaf, 0x6e, 0x84, 0x97,
+	0xe8, 0xa6, 0x95, 0x3a, 0x75, 0xd7, 0x2c, 0x42, 0x88, 0x5d, 0xcb, 0x3d, 0xfb, 0xa8, 0x6b, 0xb9,
+	0xe4, 0x2e, 0x5c, 0x0c, 0x82, 0x5e, 0x22, 0x3f, 0xaf, 0x4a, 0x13, 0x45, 0x9d, 0x6a, 0x51, 0xfe,
+	0xab, 0xc2, 0xf6, 0xf6, 0xed, 0x2c, 0x11, 0x3c, 0xae, 0xad, 0x48, 0x75, 0x07, 0x3d, 0x1d, 0xd1,
+	0x2f, 0x8c, 0x92, 0xea, 0x8e, 0x0e, 0x42, 0x54, 0xaa, 0x3b, 0x22, 0x60, 0x5c, 0xcb, 0xf1, 0x99,
+	0x89, 0x73, 0x39, 0x33, 0x13, 0xf1, 0x60, 0x78, 0xee, 0x91, 0xc1, 0xf0, 0x50, 0xf0, 0x7e, 0xfe,
+	0x09, 0x82, 0xf7, 0x77, 0x45, 0x4d, 0xe4, 0xf5, 0x15, 0x95, 0xf8, 0xc8, 0x57, 0xa4, 0x21, 0x8a,
+	0x5b, 0xe4, 0x89, 0xb7, 0xf8, 0x89, 0x12, 0x93, 0x6c, 0xc1, 0x9c, 0xe7, 0x5a, 0x43, 0xb1, 0xbf,
+	0xc8, 0x74, 0xc4, 0x6a, 0x87, 0xb7, 0x32, 0x64, 0x30, 0xb3, 0xa5, 0x30, 0xe0, 0x11, 0xbd, 0x56,
+	0x13, 0x03, 0x23, 0x0d, 0x78, 0x44, 0xc6, 0xb8, 0x4c, 0x3a, 0x14, 0x7e, 0xfe, 0xa9, 0x85, 0xc2,
+	0xf3, 0xcf, 0x20, 0x14, 0xfe, 0xc8, 0x89, 0x43, 0xe1, 0xdf, 0x81, 0x73, 0x9e, 0x6b, 0xad, 0xda,
+	0xcc, 0x1f, 0x88, 0xbf, 0xbd, 0x6b, 0x0c, 0xac, 0x0e, 0x0d, 0x44, 0x2c, 0x5d, 0xbd, 0x7a, 0x35,
+	0xde, 0x49, 0xf9, 0xef, 0x9b, 0x8b, 0xea, 0xdf, 0x37, 0xc5, 0x22, 0x4f, 0xb5, 0x12, 0xae, 0xb9,
+	0x08, 0x9f, 0x33, 0x98, 0x98, 0xa5, 0x27, 0x1e, 0x3e, 0x5f, 0x7e, 0x5a, 0xe1, 0x33, 0x79, 0x07,
+	0xca, 0xac, 0x3b, 0x08, 0x2c, 0x77, 0xcf, 0x11, 0x49, 0x95, 0x8a, 0xfe, 0x4f, 0x9a, 0x72, 0x53,
+	0xd1, 0x8f, 0x0e, 0xea, 0xb3, 0xe1, 0xef, 0x58, 0xf9, 0x95, 0xa2, 0x8c, 0x1e, 0x80, 0xff, 0x2d,
+	0xc0, 0x99, 0xd4, 0x1f, 0x8e, 0xe8, 0x12, 0xf5, 0xc2, 0x49, 0x4b, 0xd4, 0x13, 0x35, 0xe4, 0x63,
+	0x4f, 0xb5, 0x86, 0x7c, 0xfc, 0xd4, 0x6b, 0xc8, 0x63, 0xb5, 0xf2, 0x13, 0x8f, 0xa9, 0x95, 0x5f,
+	0x86, 0x99, 0x96, 0xdb, 0xf7, 0xc4, 0x0d, 0x63, 0x55, 0x43, 0x2c, 0xeb, 0x77, 0x74, 0xa9, 0xc1,
+	0x4a, 0x92, 0x8d, 0x69, 0x79, 0xf2, 0xdb, 0x50, 0x74, 0x44, 0xc3, 0xd2, 0x08, 0x77, 0x8e, 0x92,
+	0x1f, 0x4c, 0xf8, 0x30, 0xea, 0xda, 0x4f, 0x98, 0x81, 0x2f, 0x0a, 0xda, 0x51, 0xf8, 0x03, 0xa5,
+	0x52, 0xf2, 0x1e, 0xd4, 0xdc, 0x76, 0xbb, 0xe7, 0x9a, 0x56, 0x54, 0xe7, 0x7e, 0x8f, 0x7b, 0xa7,
+	0xea, 0x4c, 0xab, 0xd2, 0xb8, 0xac, 0x00, 0x6a, 0x9b, 0xc7, 0xc8, 0xe1, 0xb1, 0x08, 0xdc, 0xd5,
+	0x9c, 0x49, 0xde, 0xbf, 0x60, 0xb5, 0x8a, 0x78, 0xcd, 0xdf, 0x38, 0x8d, 0xd7, 0x4c, 0x5e, 0xf6,
+	0x50, 0x2f, 0x1c, 0x15, 0x79, 0x24, 0xb9, 0x98, 0xee, 0x09, 0xf1, 0xe1, 0x82, 0x97, 0xe5, 0x88,
+	0x33, 0x75, 0x0e, 0xfa, 0xa8, 0x70, 0x60, 0x41, 0x69, 0xb9, 0x90, 0xe9, 0xca, 0x33, 0x3c, 0x06,
+	0x39, 0x5e, 0x01, 0x5f, 0x7e, 0x6a, 0x15, 0xf0, 0x9e, 0x48, 0x44, 0xa9, 0x4a, 0xb0, 0xea, 0x08,
+	0x35, 0xc6, 0xba, 0x3a, 0x2c, 0x5a, 0x33, 0x9a, 0xc4, 0x30, 0x52, 0x32, 0xbf, 0x2f, 0x6f, 0x3e,
+	0x1d, 0x7b, 0x07, 0xec, 0x6e, 0xf2, 0x16, 0xe8, 0xdb, 0x23, 0xde, 0xc4, 0x88, 0xdf, 0x3f, 0xfb,
+	0xbd, 0x02, 0xcc, 0x65, 0x4d, 0x84, 0x8c, 0x5e, 0x34, 0x93, 0xbd, 0x18, 0x2d, 0x45, 0x10, 0xb7,
+	0x99, 0xdf, 0x28, 0xc5, 0x12, 0x12, 0x01, 0xf5, 0x7e, 0x51, 0x5d, 0x91, 0xab, 0xba, 0x22, 0xf1,
+	0x17, 0x45, 0xc5, 0x67, 0xf8, 0x17, 0x45, 0xa5, 0x1c, 0x7f, 0x51, 0x34, 0xf9, 0x2c, 0xff, 0xa2,
+	0xa8, 0x7c, 0xc2, 0xbf, 0x28, 0xaa, 0xfc, 0xdf, 0xf9, 0x8b, 0xa2, 0x0f, 0x0b, 0x30, 0x9b, 0xbe,
+	0x43, 0xf7, 0x0c, 0x12, 0xb8, 0xbb, 0x89, 0x04, 0xee, 0xfa, 0x48, 0xdb, 0x8c, 0xbe, 0xb7, 0x77,
+	0x4c, 0x22, 0xd7, 0xf8, 0x49, 0x01, 0x86, 0xee, 0x09, 0x3e, 0x83, 0x1c, 0xeb, 0x83, 0x64, 0x8e,
+	0xf5, 0xda, 0xa9, 0xbc, 0xe4, 0x31, 0xb9, 0xd6, 0x3f, 0xcb, 0x78, 0x45, 0x91, 0x73, 0xfd, 0xe0,
+	0x69, 0xfd, 0x0b, 0xe3, 0x5c, 0xd6, 0xbf, 0x30, 0x26, 0xff, 0x75, 0xb1, 0xb1, 0xf8, 0xfd, 0x0f,
+	0x17, 0x9e, 0xfb, 0xe1, 0x87, 0x0b, 0xcf, 0xfd, 0xe8, 0xc3, 0x85, 0xe7, 0xbe, 0x72, 0xb8, 0x50,
+	0xf8, 0xfe, 0xe1, 0x42, 0xe1, 0x87, 0x87, 0x0b, 0x85, 0x1f, 0x1d, 0x2e, 0x14, 0x7e, 0x72, 0xb8,
+	0x50, 0xf8, 0xd3, 0x7f, 0x5b, 0x78, 0xee, 0x37, 0xcb, 0xa1, 0x82, 0xff, 0x0d, 0x00, 0x00, 0xff,
+	0xff, 0xb1, 0x3f, 0x76, 0xe4, 0x69, 0x60, 0x00, 0x00,
 }
 
 func (m *ArchiveStrategy) Marshal() (dAtA []byte, err error) {
@@ -3994,6 +3999,30 @@ func (m *NodeStatus) MarshalToSizedBuffer(dAtA []byte) (int, error) {
 	_ = i
 	var l int
 	_ = l
+	if len(m.ResourcesDuration) > 0 {
+		keysForResourcesDuration := make([]string, 0, len(m.ResourcesDuration))
+		for k := range m.ResourcesDuration {
+			keysForResourcesDuration = append(keysForResourcesDuration, string(k))
+		}
+		github_com_gogo_protobuf_sortkeys.Strings(keysForResourcesDuration)
+		for iNdEx := len(keysForResourcesDuration) - 1; iNdEx >= 0; iNdEx-- {
+			v := m.ResourcesDuration[k8s_io_api_core_v1.ResourceName(keysForResourcesDuration[iNdEx])]
+			baseI := i
+			i = encodeVarintGenerated(dAtA, i, uint64(v))
+			i--
+			dAtA[i] = 0x10
+			i -= len(keysForResourcesDuration[iNdEx])
+			copy(dAtA[i:], keysForResourcesDuration[iNdEx])
+			i = encodeVarintGenerated(dAtA, i, uint64(len(keysForResourcesDuration[iNdEx])))
+			i--
+			dAtA[i] = 0xa
+			i = encodeVarintGenerated(dAtA, i, uint64(baseI-i))
+			i--
+			dAtA[i] = 0x1
+			i--
+			dAtA[i] = 0xaa
+		}
+	}
 	i -= len(m.TemplateScope)
 	copy(dAtA[i:], m.TemplateScope)
 	i = encodeVarintGenerated(dAtA, i, uint64(len(m.TemplateScope)))
@@ -7093,6 +7122,14 @@ func (m *NodeStatus) Size() (n int) {
 	n += 2 + l + sovGenerated(uint64(l))
 	l = len(m.TemplateScope)
 	n += 2 + l + sovGenerated(uint64(l))
+	if len(m.ResourcesDuration) > 0 {
+		for k, v := range m.ResourcesDuration {
+			_ = k
+			_ = v
+			mapEntrySize := 1 + len(k) + sovGenerated(uint64(len(k))) + 1 + sovGenerated(uint64(v))
+			n += mapEntrySize + 2 + sovGenerated(uint64(mapEntrySize))
+		}
+	}
 	return n
 }
 
@@ -8328,6 +8365,16 @@ func (this *NodeStatus) String() string {
 	if this == nil {
 		return "nil"
 	}
+	keysForResourcesDuration := make([]string, 0, len(this.ResourcesDuration))
+	for k := range this.ResourcesDuration {
+		keysForResourcesDuration = append(keysForResourcesDuration, string(k))
+	}
+	github_com_gogo_protobuf_sortkeys.Strings(keysForResourcesDuration)
+	mapStringForResourcesDuration := "ResourcesDuration{"
+	for _, k := range keysForResourcesDuration {
+		mapStringForResourcesDuration += fmt.Sprintf("%v: %v,", k, this.ResourcesDuration[k8s_io_api_core_v1.ResourceName(k)])
+	}
+	mapStringForResourcesDuration += "}"
 	s := strings.Join([]string{`&NodeStatus{`,
 		`ID:` + fmt.Sprintf("%v", this.ID) + `,`,
 		`Name:` + fmt.Sprintf("%v", this.Name) + `,`,
@@ -8349,6 +8396,7 @@ func (this *NodeStatus) String() string {
 		`StoredTemplateID:` + fmt.Sprintf("%v", this.StoredTemplateID) + `,`,
 		`WorkflowTemplateName:` + fmt.Sprintf("%v", this.WorkflowTemplateName) + `,`,
 		`TemplateScope:` + fmt.Sprintf("%v", this.TemplateScope) + `,`,
+		`ResourcesDuration:` + mapStringForResourcesDuration + `,`,
 		`}`,
 	}, "")
 	return s
@@ -15187,6 +15235,119 @@ func (m *NodeStatus) Unmarshal(dAtA []byte) error {
 			}
 			m.TemplateScope = string(dAtA[iNdEx:postIndex])
 			iNdEx = postIndex
+		case 21:
+			if wireType != 2 {
+				return fmt.Errorf("proto: wrong wireType = %d for field ResourcesDuration", 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.ResourcesDuration == nil {
+				m.ResourcesDuration = make(ResourcesDuration)
+			}
+			var mapkey k8s_io_api_core_v1.ResourceName
+			var mapvalue int64
+			for iNdEx < postIndex {
+				entryPreIndex := iNdEx
+				var wire uint64
+				for shift := uint(0); ; shift += 7 {
+					if shift >= 64 {
+						return ErrIntOverflowGenerated
+					}
+					if iNdEx >= l {
+						return io.ErrUnexpectedEOF
+					}
+					b := dAtA[iNdEx]
+					iNdEx++
+					wire |= uint64(b&0x7F) << shift
+					if b < 0x80 {
+						break
+					}
+				}
+				fieldNum := int32(wire >> 3)
+				if fieldNum == 1 {
+					var stringLenmapkey uint64
+					for shift := uint(0); ; shift += 7 {
+						if shift >= 64 {
+							return ErrIntOverflowGenerated
+						}
+						if iNdEx >= l {
+							return io.ErrUnexpectedEOF
+						}
+						b := dAtA[iNdEx]
+						iNdEx++
+						stringLenmapkey |= uint64(b&0x7F) << shift
+						if b < 0x80 {
+							break
+						}
+					}
+					intStringLenmapkey := int(stringLenmapkey)
+					if intStringLenmapkey < 0 {
+						return ErrInvalidLengthGenerated
+					}
+					postStringIndexmapkey := iNdEx + intStringLenmapkey
+					if postStringIndexmapkey < 0 {
+						return ErrInvalidLengthGenerated
+					}
+					if postStringIndexmapkey > l {
+						return io.ErrUnexpectedEOF
+					}
+					mapkey = k8s_io_api_core_v1.ResourceName(dAtA[iNdEx:postStringIndexmapkey])
+					iNdEx = postStringIndexmapkey
+				} else if fieldNum == 2 {
+					for shift := uint(0); ; shift += 7 {
+						if shift >= 64 {
+							return ErrIntOverflowGenerated
+						}
+						if iNdEx >= l {
+							return io.ErrUnexpectedEOF
+						}
+						b := dAtA[iNdEx]
+						iNdEx++
+						mapvalue |= int64(b&0x7F) << shift
+						if b < 0x80 {
+							break
+						}
+					}
+				} else {
+					iNdEx = entryPreIndex
+					skippy, err := skipGenerated(dAtA[iNdEx:])
+					if err != nil {
+						return err
+					}
+					if skippy < 0 {
+						return ErrInvalidLengthGenerated
+					}
+					if (iNdEx + skippy) > postIndex {
+						return io.ErrUnexpectedEOF
+					}
+					iNdEx += skippy
+				}
+			}
+			m.ResourcesDuration[k8s_io_api_core_v1.ResourceName(mapkey)] = ((ResourceDuration)(mapvalue))
+			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 833010107..e71520c95 100644
--- a/pkg/apis/workflow/v1alpha1/generated.proto
+++ b/pkg/apis/workflow/v1alpha1/generated.proto
@@ -505,6 +505,9 @@ message NodeStatus {
   // Time at which this node completed
   optional k8s.io.apimachinery.pkg.apis.meta.v1.Time finishedAt = 11;
 
+  // ResourcesDuration is indicative, but not accurate, resource duration. This is populated when the nodes completes.
+  map<string, int64> resourcesDuration = 21;
+
   // PodIP captures the IP of the pod for daemoned steps
   optional string podIP = 12;
 
diff --git a/pkg/apis/workflow/v1alpha1/workflow_types.go b/pkg/apis/workflow/v1alpha1/workflow_types.go
index 0d107512d..3e4c88201 100644
--- a/pkg/apis/workflow/v1alpha1/workflow_types.go
+++ b/pkg/apis/workflow/v1alpha1/workflow_types.go
@@ -6,6 +6,7 @@ import (
 	"hash/fnv"
 	"reflect"
 	"strings"
+	"time"
 
 	apiv1 "k8s.io/api/core/v1"
 	policyv1beta "k8s.io/api/policy/v1beta1"
@@ -955,6 +956,46 @@ type RetryStrategy struct {
 	Backoff *Backoff `json:"backoff,omitempty" protobuf:"bytes,3,opt,name=backoff,casttype=Backoff"`
 }
 
+// The amount of requested resource * the duration that request was used.
+// This is represented as duration in seconds, so can be converted to and from
+// duration (with loss of precision).
+type ResourceDuration int64
+
+func NewResourceDuration(d time.Duration) ResourceDuration {
+	return ResourceDuration(d.Seconds())
+}
+
+func (in ResourceDuration) Duration() time.Duration {
+	return time.Duration(in) * time.Second
+}
+
+func (in ResourceDuration) String() string {
+	return in.Duration().String()
+}
+
+// This contains each duration by request requested.
+// e.g. 100m CPU * 1h, 1Gi memory * 1h
+type ResourcesDuration map[apiv1.ResourceName]ResourceDuration
+
+func (in ResourcesDuration) Add(o ResourcesDuration) ResourcesDuration {
+	for n, d := range o {
+		in[n] += d
+	}
+	return in
+}
+
+func (in ResourcesDuration) String() string {
+	var parts []string
+	for n, d := range in {
+		parts = append(parts, fmt.Sprintf("%v*%s", d, n))
+	}
+	return strings.Join(parts, ",")
+}
+
+func (in ResourcesDuration) IsZero() bool {
+	return len(in) == 0
+}
+
 // NodeStatus contains status information about an individual node in the workflow
 type NodeStatus struct {
 	// ID is a unique identifier of a node within the worklow
@@ -1005,6 +1046,9 @@ type NodeStatus struct {
 	// Time at which this node completed
 	FinishedAt metav1.Time `json:"finishedAt,omitempty" protobuf:"bytes,11,opt,name=finishedAt"`
 
+	// ResourcesDuration is indicative, but not accurate, resource duration. This is populated when the nodes completes.
+	ResourcesDuration ResourcesDuration `json:"resourcesDuration,omitempty" protobuf:"bytes,21,opt,name=resourcesDuration"`
+
 	// PodIP captures the IP of the pod for daemoned steps
 	PodIP string `json:"podIP,omitempty" protobuf:"bytes,12,opt,name=podIP"`
 
@@ -1035,6 +1079,14 @@ type NodeStatus struct {
 	OutboundNodes []string `json:"outboundNodes,omitempty" protobuf:"bytes,17,rep,name=outboundNodes"`
 }
 
+func (n Nodes) GetResourcesRequested() ResourcesDuration {
+	i := ResourcesDuration{}
+	for _, status := range n {
+		i = i.Add(status.ResourcesDuration)
+	}
+	return i
+}
+
 func (phase NodePhase) Completed() bool {
 	return phase == NodeSucceeded ||
 		phase == NodeFailed ||
diff --git a/pkg/apis/workflow/v1alpha1/zz_generated.deepcopy.go b/pkg/apis/workflow/v1alpha1/zz_generated.deepcopy.go
index a00c03725..4c4c6a498 100644
--- a/pkg/apis/workflow/v1alpha1/zz_generated.deepcopy.go
+++ b/pkg/apis/workflow/v1alpha1/zz_generated.deepcopy.go
@@ -850,6 +850,13 @@ func (in *NodeStatus) DeepCopyInto(out *NodeStatus) {
 	}
 	in.StartedAt.DeepCopyInto(&out.StartedAt)
 	in.FinishedAt.DeepCopyInto(&out.FinishedAt)
+	if in.ResourcesDuration != nil {
+		in, out := &in.ResourcesDuration, &out.ResourcesDuration
+		*out = make(ResourcesDuration, len(*in))
+		for key, val := range *in {
+			(*out)[key] = val
+		}
+	}
 	if in.Daemoned != nil {
 		in, out := &in.Daemoned, &out.Daemoned
 		*out = new(bool)
@@ -1140,6 +1147,28 @@ func (in *ResourceTemplate) DeepCopy() *ResourceTemplate {
 	return out
 }
 
+// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
+func (in ResourcesDuration) DeepCopyInto(out *ResourcesDuration) {
+	{
+		in := &in
+		*out = make(ResourcesDuration, len(*in))
+		for key, val := range *in {
+			(*out)[key] = val
+		}
+		return
+	}
+}
+
+// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ResourcesDuration.
+func (in ResourcesDuration) DeepCopy() ResourcesDuration {
+	if in == nil {
+		return nil
+	}
+	out := new(ResourcesDuration)
+	in.DeepCopyInto(out)
+	return *out
+}
+
 // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
 func (in *RetryStrategy) DeepCopyInto(out *RetryStrategy) {
 	*out = *in
diff --git a/ui/src/app/shared/duration.ts b/ui/src/app/shared/duration.ts
new file mode 100644
index 000000000..1c148f3c0
--- /dev/null
+++ b/ui/src/app/shared/duration.ts
@@ -0,0 +1,26 @@
+/**
+ * Format the given number number of seconds in the form _d_h_m_s.
+ * @param seconds Number of seconds to format. Will be rounded to the nearest whole number.
+ */
+export function formatDuration(seconds: number) {
+    let remainingSeconds = Math.round(seconds);
+    let formattedDuration = '';
+
+    if (remainingSeconds > 86400) {
+        formattedDuration += Math.floor(remainingSeconds / 86400) + 'd';
+        remainingSeconds = remainingSeconds % 86400;
+    }
+    if (remainingSeconds > 3600) {
+        formattedDuration += Math.floor(remainingSeconds / 3600) + 'h';
+        remainingSeconds = remainingSeconds % 3600;
+    }
+    if (remainingSeconds > 60) {
+        formattedDuration += Math.floor(remainingSeconds / 60) + 'm';
+        remainingSeconds = remainingSeconds % 60;
+    }
+    if (remainingSeconds > 0 || Math.round(seconds) === 0) {
+        formattedDuration += remainingSeconds + 's';
+    }
+
+    return formattedDuration;
+}
diff --git a/ui/src/app/workflows/components/workflow-node-info/workflow-node-info.tsx b/ui/src/app/workflows/components/workflow-node-info/workflow-node-info.tsx
index 290e236b2..2a220c03b 100644
--- a/ui/src/app/workflows/components/workflow-node-info/workflow-node-info.tsx
+++ b/ui/src/app/workflows/components/workflow-node-info/workflow-node-info.tsx
@@ -5,6 +5,7 @@ import * as React from 'react';
 
 import * as models from '../../../../models';
 import {Timestamp} from '../../../shared/components/timestamp';
+import {formatDuration} from '../../../shared/duration';
 import {services} from '../../../shared/services';
 import {Utils} from '../../../shared/utils';
 
@@ -71,6 +72,20 @@ export const WorkflowNodeSummary = (props: Props) => {
     ];
     if (props.node.type === 'Pod') {
         attributes.splice(2, 0, {title: 'POD NAME', value: props.node.id});
+        attributes.push({
+            title: 'RESOURCES DURATION',
+            value: (
+                <>
+                    {props.node.resourcesDuration &&
+                        Object.entries(props.node.resourcesDuration)
+                            .map(([resource, duration]) => formatDuration(duration) + '*' + resource)
+                            .join(',')}{' '}
+                    <a href='https://github.com/argoproj/argo/blob/master/docs/resource-duration.md'>
+                        <i className='fa fa-info-circle' />
+                    </a>
+                </>
+            )
+        });
     }
     const template = Utils.getResolvedTemplates(props.workflow, props.node);
     return (
diff --git a/ui/src/models/workflows.ts b/ui/src/models/workflows.ts
index f58f87ab0..863bc7ae0 100644
--- a/ui/src/models/workflows.ts
+++ b/ui/src/models/workflows.ts
@@ -655,6 +655,11 @@ export interface NodeStatus {
      */
     finishedAt: kubernetes.Time;
 
+    /**
+     * How much resource was used.
+     */
+    resourcesDuration?: {[resource: string]: number};
+
     /**
      * PodIP captures the IP of the pod for daemoned steps
      */
diff --git a/util/resource/duration.go b/util/resource/duration.go
new file mode 100644
index 000000000..76685f417
--- /dev/null
+++ b/util/resource/duration.go
@@ -0,0 +1,70 @@
+package resource
+
+import (
+	"time"
+
+	corev1 "k8s.io/api/core/v1"
+	"k8s.io/apimachinery/pkg/api/resource"
+
+	wfv1 "github.com/argoproj/argo/pkg/apis/workflow/v1alpha1"
+)
+
+type containerSummary struct {
+	corev1.ResourceList
+	corev1.ContainerState
+}
+
+func (s containerSummary) duration(now time.Time) time.Duration {
+	if s.Terminated != nil {
+		return s.Terminated.FinishedAt.Time.Sub(s.Terminated.StartedAt.Time)
+	} else if s.Running != nil {
+		return now.Sub(s.Running.StartedAt.Time)
+	} else {
+		return 0
+	}
+}
+
+func resourceDenominator(r corev1.ResourceName) *resource.Quantity {
+	q, ok := map[corev1.ResourceName]resource.Quantity{
+		corev1.ResourceCPU:              resource.MustParse("1000m"),
+		corev1.ResourceMemory:           resource.MustParse("1Gi"),
+		corev1.ResourceStorage:          resource.MustParse("10Gi"),
+		corev1.ResourceEphemeralStorage: resource.MustParse("10Gi"),
+	}[r]
+	if !ok {
+		q = resource.MustParse("1")
+	}
+	return &q
+}
+
+func DurationForPod(pod *corev1.Pod, now time.Time) wfv1.ResourcesDuration {
+	summaries := map[string]containerSummary{}
+	for _, c := range append(pod.Spec.InitContainers, pod.Spec.Containers...) {
+		// Initialize summaries with default limits for CPU and memory.
+		summaries[c.Name] = containerSummary{ResourceList: map[corev1.ResourceName]resource.Quantity{
+			// https://medium.com/@betz.mark/understanding-resource-limits-in-kubernetes-cpu-time-9eff74d3161b
+			corev1.ResourceCPU: resource.MustParse("100m"),
+			// https://medium.com/@betz.mark/understanding-resource-limits-in-kubernetes-memory-6b41e9a955f9
+			corev1.ResourceMemory: resource.MustParse("100Mi"),
+		}}
+		// Update with user-configured resources (falls back to limits as == requests, same as Kubernetes).
+		for name, quantity := range c.Resources.Limits {
+			summaries[c.Name].ResourceList[name] = quantity
+		}
+		for name, quantity := range c.Resources.Requests {
+			summaries[c.Name].ResourceList[name] = quantity
+		}
+	}
+	// Add container states.
+	for _, c := range append(pod.Status.InitContainerStatuses, pod.Status.ContainerStatuses...) {
+		summaries[c.Name] = containerSummary{ResourceList: summaries[c.Name].ResourceList, ContainerState: c.State}
+	}
+	i := wfv1.ResourcesDuration{}
+	for _, s := range summaries {
+		duration := s.duration(now)
+		for r, q := range s.ResourceList {
+			i = i.Add(wfv1.ResourcesDuration{r: wfv1.NewResourceDuration(time.Duration(q.Value() * duration.Nanoseconds() / resourceDenominator(r).Value()))})
+		}
+	}
+	return i
+}
diff --git a/workflow/config/config.go b/workflow/config/config.go
index 88d39745c..c8689a280 100644
--- a/workflow/config/config.go
+++ b/workflow/config/config.go
@@ -53,6 +53,9 @@ type WorkflowControllerConfig struct {
 
 	MetricsConfig PrometheusConfig `json:"metricsConfig,omitempty"`
 
+	// FeatureFlags for general/experimental features
+	FeatureFlags FeatureFlags `json:"featureFlags,omitempty"`
+
 	TelemetryConfig PrometheusConfig `json:"telemetryConfig,omitempty"`
 
 	// Parallelism limits the max total parallel workflows that can execute at the same time
@@ -71,6 +74,12 @@ type WorkflowControllerConfig struct {
 	DefautWorkflowSpec *wfv1.WorkflowSpec `json:"workflowDefaults,omitempty"`
 }
 
+// More general feature flags.
+type FeatureFlags struct {
+	// ResourcesDuration.
+	ResourcesDuration bool `json:"resourcesDuration,omitempty"`
+}
+
 // KubeConfig is used for wait & init sidecar containers to communicate with a k8s apiserver by a outofcluster method,
 // it is used when the workflow controller is in a different cluster with the workflow workloads
 type KubeConfig struct {
diff --git a/workflow/controller/operator.go b/workflow/controller/operator.go
index a14e748f8..621833f1b 100644
--- a/workflow/controller/operator.go
+++ b/workflow/controller/operator.go
@@ -34,6 +34,7 @@ import (
 	wfv1 "github.com/argoproj/argo/pkg/apis/workflow/v1alpha1"
 	"github.com/argoproj/argo/pkg/client/clientset/versioned/typed/workflow/v1alpha1"
 	"github.com/argoproj/argo/util/argo"
+	"github.com/argoproj/argo/util/resource"
 	"github.com/argoproj/argo/util/retry"
 	"github.com/argoproj/argo/workflow/common"
 	"github.com/argoproj/argo/workflow/config"
@@ -730,7 +731,7 @@ func (woc *wfOperationCtx) podReconciliation() error {
 		wfNodesLock.Lock()
 		defer wfNodesLock.Unlock()
 		if node, ok := woc.wf.Status.Nodes[nodeID]; ok {
-			if newState := assessNodeStatus(pod, &node); newState != nil {
+			if newState := woc.assessNodeStatus(pod, &node); newState != nil {
 				woc.wf.Status.Nodes[nodeID] = *newState
 				woc.addOutputsToScope("workflow", node.Outputs, nil)
 				woc.updated = true
@@ -866,7 +867,7 @@ func (woc *wfOperationCtx) getAllWorkflowPods() (*apiv1.PodList, error) {
 
 // assessNodeStatus compares the current state of a pod with its corresponding node
 // and returns the new node status if something changed
-func assessNodeStatus(pod *apiv1.Pod, node *wfv1.NodeStatus) *wfv1.NodeStatus {
+func (woc *wfOperationCtx) assessNodeStatus(pod *apiv1.Pod, node *wfv1.NodeStatus) *wfv1.NodeStatus {
 	var newPhase wfv1.NodePhase
 	var newDaemonStatus *bool
 	var message string
@@ -979,6 +980,9 @@ func assessNodeStatus(pod *apiv1.Pod, node *wfv1.NodeStatus) *wfv1.NodeStatus {
 			// finishedAt might not have been set.
 			node.FinishedAt = metav1.Time{Time: time.Now().UTC()}
 		}
+		if woc.controller.Config.FeatureFlags.ResourcesDuration {
+			node.ResourcesDuration = resource.DurationForPod(pod, time.Now())
+		}
 	}
 	if updated {
 		return node


Test patch:
diff --git a/cmd/argo/commands/get_test.go b/cmd/argo/commands/get_test.go
index 9279995f4..15ef6e7dc 100644
--- a/cmd/argo/commands/get_test.go
+++ b/cmd/argo/commands/get_test.go
@@ -46,22 +46,22 @@ func TestPrintNode(t *testing.T) {
 		FinishedAt:  timestamp,
 		Message:     nodeMessage,
 	}
-	testPrintNodeImpl(t, fmt.Sprintf("%s %s\t%s\t%s\t%s\n", jobStatusIconMap[wfv1.NodeRunning], nodeName, nodeID, "0s", nodeMessage), node, nodePrefix, getArgs)
+	testPrintNodeImpl(t, fmt.Sprintf("%s %s\t%s\t%s\t%s\t\n", jobStatusIconMap[wfv1.NodeRunning], nodeName, nodeID, "0s", nodeMessage), node, nodePrefix, getArgs)
 
 	node.TemplateName = nodeTemplateName
-	testPrintNodeImpl(t, fmt.Sprintf("%s %s (%s)\t%s\t%s\t%s\n", jobStatusIconMap[wfv1.NodeRunning], nodeName, nodeTemplateName, nodeID, "0s", nodeMessage), node, nodePrefix, getArgs)
+	testPrintNodeImpl(t, fmt.Sprintf("%s %s (%s)\t%s\t%s\t%s\t\n", jobStatusIconMap[wfv1.NodeRunning], nodeName, nodeTemplateName, nodeID, "0s", nodeMessage), node, nodePrefix, getArgs)
 
 	node.Type = wfv1.NodeTypeSuspend
-	testPrintNodeImpl(t, fmt.Sprintf("%s %s (%s)\t%s\t%s\t%s\n", nodeTypeIconMap[wfv1.NodeTypeSuspend], nodeName, nodeTemplateName, "", "", nodeMessage), node, nodePrefix, getArgs)
+	testPrintNodeImpl(t, fmt.Sprintf("%s %s (%s)\t%s\t%s\t%s\t\n", nodeTypeIconMap[wfv1.NodeTypeSuspend], nodeName, nodeTemplateName, "", "", nodeMessage), node, nodePrefix, getArgs)
 
 	node.TemplateRef = &wfv1.TemplateRef{
 		Name:     nodeTemplateRefName,
 		Template: nodeTemplateRefName,
 	}
-	testPrintNodeImpl(t, fmt.Sprintf("%s %s (%s/%s)\t%s\t%s\t%s\n", nodeTypeIconMap[wfv1.NodeTypeSuspend], nodeName, nodeTemplateRefName, nodeTemplateRefName, "", "", nodeMessage), node, nodePrefix, getArgs)
+	testPrintNodeImpl(t, fmt.Sprintf("%s %s (%s/%s)\t%s\t%s\t%s\t\n", nodeTypeIconMap[wfv1.NodeTypeSuspend], nodeName, nodeTemplateRefName, nodeTemplateRefName, "", "", nodeMessage), node, nodePrefix, getArgs)
 
 	getArgs.output = "wide"
-	testPrintNodeImpl(t, fmt.Sprintf("%s %s (%s/%s)\t%s\t%s\t%s\t%s\n", nodeTypeIconMap[wfv1.NodeTypeSuspend], nodeName, nodeTemplateRefName, nodeTemplateRefName, "", "", getArtifactsString(node), nodeMessage), node, nodePrefix, getArgs)
+	testPrintNodeImpl(t, fmt.Sprintf("%s %s (%s/%s)\t%s\t%s\t%s\t%s\t\n", nodeTypeIconMap[wfv1.NodeTypeSuspend], nodeName, nodeTemplateRefName, nodeTemplateRefName, "", "", getArtifactsString(node), nodeMessage), node, nodePrefix, getArgs)
 
 	getArgs.status = "foobar"
 	testPrintNodeImpl(t, "", node, nodePrefix, getArgs)
diff --git a/pkg/apis/workflow/v1alpha1/workflow_types_test.go b/pkg/apis/workflow/v1alpha1/workflow_types_test.go
index 262b930b7..79d1e4c55 100644
--- a/pkg/apis/workflow/v1alpha1/workflow_types_test.go
+++ b/pkg/apis/workflow/v1alpha1/workflow_types_test.go
@@ -6,6 +6,7 @@ import (
 	"time"
 
 	"github.com/stretchr/testify/assert"
+	corev1 "k8s.io/api/core/v1"
 	v1 "k8s.io/apimachinery/pkg/apis/meta/v1"
 )
 
@@ -32,3 +33,27 @@ func TestNodes_Any(t *testing.T) {
 	assert.False(t, Nodes{"": NodeStatus{Name: "foo"}}.Any(func(node NodeStatus) bool { return node.Name == "bar" }))
 	assert.True(t, Nodes{"": NodeStatus{Name: "foo"}}.Any(func(node NodeStatus) bool { return node.Name == "foo" }))
 }
+
+func TestResourcesDuration(t *testing.T) {
+	t.Run("String", func(t *testing.T) {
+		assert.Equal(t, ResourcesDuration{}.String(), "")
+		assert.Equal(t, ResourcesDuration{corev1.ResourceMemory: NewResourceDuration(1 * time.Second)}.String(), "1s*memory")
+	})
+	t.Run("Add", func(t *testing.T) {
+		assert.Equal(t, ResourcesDuration{}.Add(ResourcesDuration{}).String(), "")
+		assert.Equal(t, ResourcesDuration{corev1.ResourceMemory: NewResourceDuration(1 * time.Second)}.Add(ResourcesDuration{corev1.ResourceMemory: NewResourceDuration(1 * time.Second)}).String(), "2s*memory")
+	})
+}
+
+func TestResourceDuration(t *testing.T) {
+	assert.Equal(t, ResourceDuration(1), NewResourceDuration(1*time.Second))
+	assert.Equal(t, "1s", NewResourceDuration(1*time.Second).String())
+}
+
+func TestNodes_GetResourcesRequested(t *testing.T) {
+	assert.Equal(t, ResourcesDuration{}, Nodes{}.GetResourcesRequested())
+	assert.Equal(t, ResourcesDuration{corev1.ResourceMemory: 3}, Nodes{
+		"foo": NodeStatus{ResourcesDuration: ResourcesDuration{corev1.ResourceMemory: 1}},
+		"bar": NodeStatus{ResourcesDuration: ResourcesDuration{corev1.ResourceMemory: 2}},
+	}.GetResourcesRequested())
+}
diff --git a/test/e2e/functional_test.go b/test/e2e/functional_test.go
index 1557c7db4..df47d0648 100644
--- a/test/e2e/functional_test.go
+++ b/test/e2e/functional_test.go
@@ -8,13 +8,12 @@ import (
 
 	"github.com/stretchr/testify/assert"
 	"github.com/stretchr/testify/suite"
+	corev1 "k8s.io/api/core/v1"
 	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
 
 	wfv1 "github.com/argoproj/argo/pkg/apis/workflow/v1alpha1"
 	"github.com/argoproj/argo/test/e2e/fixtures"
 	"github.com/argoproj/argo/util/argo"
-
-	apiv1 "k8s.io/api/core/v1"
 )
 
 type FunctionalSuite struct {
@@ -105,7 +104,7 @@ func (s *FunctionalSuite) TestEventOnNodeFail() {
 		SubmitWorkflow().
 		WaitForWorkflow(30 * time.Second).
 		Then().
-		ExpectAuditEvents(func(t *testing.T, events *apiv1.EventList) {
+		ExpectAuditEvents(func(t *testing.T, events *corev1.EventList) {
 			found := false
 			for _, e := range events.Items {
 				isAboutFailedStep := strings.HasPrefix(e.InvolvedObject.Name, "failed-step-event-")
@@ -127,7 +126,7 @@ func (s *FunctionalSuite) TestEventOnWorkflowSuccess() {
 		SubmitWorkflow().
 		WaitForWorkflow(60 * time.Second).
 		Then().
-		ExpectAuditEvents(func(t *testing.T, events *apiv1.EventList) {
+		ExpectAuditEvents(func(t *testing.T, events *corev1.EventList) {
 			found := false
 			for _, e := range events.Items {
 				isAboutSuccess := strings.HasPrefix(e.InvolvedObject.Name, "success-event-")
@@ -149,7 +148,7 @@ func (s *FunctionalSuite) TestEventOnPVCFail() {
 		SubmitWorkflow().
 		WaitForWorkflow(120 * time.Second).
 		Then().
-		ExpectAuditEvents(func(t *testing.T, events *apiv1.EventList) {
+		ExpectAuditEvents(func(t *testing.T, events *corev1.EventList) {
 			found := false
 			for _, e := range events.Items {
 				isAboutSuccess := strings.HasPrefix(e.InvolvedObject.Name, "volumes-pvc-fail-event-")
diff --git a/test/e2e/manifests/mysql.yaml b/test/e2e/manifests/mysql.yaml
index b76088ae6..8d94a5dad 100644
--- a/test/e2e/manifests/mysql.yaml
+++ b/test/e2e/manifests/mysql.yaml
@@ -300,6 +300,8 @@ data:
       - name: Example Pod Link
         scope: pod
         url: http://logging-facility?namespace=${metadata.namespace}&podName=${metadata.name}
+    featureFlags:
+      resourcesDuration: true
     persistence:
       connectionPool:
         maxIdleConns: 100
diff --git a/test/e2e/manifests/no-db.yaml b/test/e2e/manifests/no-db.yaml
index 933d3d35a..f63553150 100644
--- a/test/e2e/manifests/no-db.yaml
+++ b/test/e2e/manifests/no-db.yaml
@@ -300,6 +300,8 @@ data:
       - name: Example Pod Link
         scope: pod
         url: http://logging-facility?namespace=${metadata.namespace}&podName=${metadata.name}
+    featureFlags:
+      resourcesDuration: true
 kind: ConfigMap
 metadata:
   name: workflow-controller-configmap
diff --git a/test/e2e/manifests/postgres.yaml b/test/e2e/manifests/postgres.yaml
index 1d79afce9..f1c758ba1 100644
--- a/test/e2e/manifests/postgres.yaml
+++ b/test/e2e/manifests/postgres.yaml
@@ -300,6 +300,8 @@ data:
       - name: Example Pod Link
         scope: pod
         url: http://logging-facility?namespace=${metadata.namespace}&podName=${metadata.name}
+    featureFlags:
+      resourcesDuration: true
     persistence:
       connectionPool:
         maxIdleConns: 100
diff --git a/util/resource/duration_test.go b/util/resource/duration_test.go
new file mode 100644
index 000000000..1477570e1
--- /dev/null
+++ b/util/resource/duration_test.go
@@ -0,0 +1,83 @@
+package resource
+
+import (
+	"testing"
+	"time"
+
+	"github.com/stretchr/testify/assert"
+	corev1 "k8s.io/api/core/v1"
+	"k8s.io/apimachinery/pkg/api/resource"
+	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
+
+	wfv1 "github.com/argoproj/argo/pkg/apis/workflow/v1alpha1"
+)
+
+func TestDurationForPod(t *testing.T) {
+	now := time.Now()
+
+	tests := []struct {
+		name string
+		pod  *corev1.Pod
+		want wfv1.ResourcesDuration
+	}{
+		{"Empty", &corev1.Pod{}, wfv1.ResourcesDuration{}},
+		{"RunningContainerWithCPURequest", &corev1.Pod{
+			Spec: corev1.PodSpec{Containers: []corev1.Container{{Name: "main", Resources: corev1.ResourceRequirements{
+				Requests: corev1.ResourceList{
+					corev1.ResourceCPU: resource.MustParse("2000m"),
+				},
+			}}}},
+			Status: corev1.PodStatus{
+				ContainerStatuses: []corev1.ContainerStatus{
+					{
+						Name: "main",
+						State: corev1.ContainerState{
+							Running: &corev1.ContainerStateRunning{
+								StartedAt: metav1.Time{
+									Time: now.Add(-1 * time.Minute),
+								},
+							},
+						},
+					},
+				},
+			},
+		}, wfv1.ResourcesDuration{
+			corev1.ResourceCPU:    wfv1.NewResourceDuration(2 * time.Minute),
+			corev1.ResourceMemory: wfv1.NewResourceDuration(5 * time.Second),
+		}},
+		{"TerminatedContainerWithCPURequest", &corev1.Pod{
+			Spec: corev1.PodSpec{Containers: []corev1.Container{{Name: "main", Resources: corev1.ResourceRequirements{
+				Requests: corev1.ResourceList{
+					corev1.ResourceCPU: resource.MustParse("2000m"),
+				},
+				Limits: corev1.ResourceList{
+					corev1.ResourceName("nvidia.com/gpu"): resource.MustParse("1"),
+				},
+			}}}},
+			Status: corev1.PodStatus{
+				ContainerStatuses: []corev1.ContainerStatus{
+					{
+						Name: "main",
+						State: corev1.ContainerState{
+							Running: &corev1.ContainerStateRunning{
+								StartedAt: metav1.Time{
+									Time: now.Add(-3 * time.Minute),
+								},
+							},
+						},
+					},
+				},
+			},
+		}, wfv1.ResourcesDuration{
+			corev1.ResourceCPU:                    wfv1.NewResourceDuration(6 * time.Minute),
+			corev1.ResourceMemory:                 wfv1.NewResourceDuration(0 * time.Second),
+			corev1.ResourceName("nvidia.com/gpu"): wfv1.NewResourceDuration(3 * time.Minute),
+		}},
+	}
+	for _, tt := range tests {
+		t.Run(tt.name, func(t *testing.T) {
+			got := DurationForPod(tt.pod, now)
+			assert.Equal(t, tt.want, got)
+		})
+	}
+}
diff --git a/workflow/controller/operator_test.go b/workflow/controller/operator_test.go
index 6953a87f3..9a1de973c 100644
--- a/workflow/controller/operator_test.go
+++ b/workflow/controller/operator_test.go
@@ -452,9 +452,11 @@ func TestAssessNodeStatus(t *testing.T) {
 		want: wfv1.NodeError,
 	}}
 
+	wf := unmarshalWF(helloWorldWf)
 	for _, test := range tests {
 		t.Run(test.name, func(t *testing.T) {
-			got := assessNodeStatus(test.pod, test.node)
+			woc := newWorkflowOperationCtx(wf, newController())
+			got := woc.assessNodeStatus(test.pod, test.node)
 			assert.Equal(t, test.want, got.Phase)
 		})
 	}