From b757ce90f41db8f3444f3712e51a1a72a9751e9a Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 12 Dec 2024 07:38:59 +0000 Subject: [PATCH 01/22] Bump the electron group with 2 updates (#49610) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Bump the electron group with 2 updates Bumps the electron group with 2 updates: [electron](https://github.com/electron/electron) and [electron-builder](https://github.com/electron-userland/electron-builder/tree/HEAD/packages/electron-builder). Updates `electron` from 33.1.0 to 33.2.1 - [Release notes](https://github.com/electron/electron/releases) - [Changelog](https://github.com/electron/electron/blob/main/docs/breaking-changes.md) - [Commits](https://github.com/electron/electron/compare/v33.1.0...v33.2.1) Updates `electron-builder` from 25.1.7 to 25.1.8 - [Release notes](https://github.com/electron-userland/electron-builder/releases) - [Changelog](https://github.com/electron-userland/electron-builder/blob/master/packages/electron-builder/CHANGELOG.md) - [Commits](https://github.com/electron-userland/electron-builder/commits/electron-builder@25.1.8/packages/electron-builder) --- updated-dependencies: - dependency-name: electron dependency-type: direct:development update-type: version-update:semver-minor dependency-group: electron - dependency-name: electron-builder dependency-type: direct:development update-type: version-update:semver-patch dependency-group: electron ... Signed-off-by: dependabot[bot] * Turn off electron-builder's notarization * Add console.log to notarize.js Otherwise the output during a build would just say this: > skipped macOS notarization reason=`notarize` options were set explicitly `false` which could give the wrong impression that notarization was not done at all. --------- Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Rafał Cieślak --- pnpm-lock.yaml | 89 ++++++++++++++----- .../teleterm/electron-builder-config.js | 5 ++ web/packages/teleterm/notarize.js | 2 + web/packages/teleterm/package.json | 4 +- 4 files changed, 77 insertions(+), 23 deletions(-) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 4f4d986da4820..5258282a287b4 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -470,11 +470,11 @@ importers: specifier: ^5.5.0 version: 5.5.0 electron: - specifier: 33.1.0 - version: 33.1.0 + specifier: 33.2.1 + version: 33.2.1 electron-builder: - specifier: ^25.1.7 - version: 25.1.7(electron-builder-squirrel-windows@25.1.7(dmg-builder@25.1.7)) + specifier: ^25.1.8 + version: 25.1.8(electron-builder-squirrel-windows@25.1.7(dmg-builder@25.1.8)) electron-vite: specifier: ^2.3.0 version: 2.3.0(@swc/core@1.9.3)(vite@5.4.8(@types/node@20.17.9)(terser@5.31.1)) @@ -2880,6 +2880,13 @@ packages: dmg-builder: 25.1.7 electron-builder-squirrel-windows: 25.1.7 + app-builder-lib@25.1.8: + resolution: {integrity: sha512-pCqe7dfsQFBABC1jeKZXQWhGcCPF3rPCXDdfqVKjIeWBcXzyC1iOWZdfFhGl+S9MyE/k//DFmC6FzuGAUudNDg==} + engines: {node: '>=14.0.0'} + peerDependencies: + dmg-builder: 25.1.8 + electron-builder-squirrel-windows: 25.1.8 + append-transform@2.0.0: resolution: {integrity: sha512-7yeyCEurROLQJFv5Xj4lEGTy0borxepjFv1g22oAdqFu//SrAlDl1O1Nxx15SH1RoliUml6p8dwJW9jvZughhg==} engines: {node: '>=8'} @@ -3578,8 +3585,8 @@ packages: resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} engines: {node: '>=8'} - dmg-builder@25.1.7: - resolution: {integrity: sha512-Hac0AfXQrAV62JT99Had6bvUJb/f7vjJTaLOsmA/gAQcrc/cLmNAqCJ0ZZDqwKy2+LKXnxx45TvMXvovKd4iMg==} + dmg-builder@25.1.8: + resolution: {integrity: sha512-NoXo6Liy2heSklTI5OIZbCgXC1RzrDQsZkeEwXhdOro3FT1VBOvbubvscdPnjVuQ4AMwwv61oaH96AbiYg9EnQ==} dmg-license@1.0.11: resolution: {integrity: sha512-ZdzmqwKmECOWJpqefloC5OJy1+WZBBse5+MR88z9g9Zn4VY+WYUkAyojmhzJckH5YbbZGcYIuGAkY5/Ys5OM2Q==} @@ -3646,8 +3653,8 @@ packages: electron-builder-squirrel-windows@25.1.7: resolution: {integrity: sha512-nJMvw1FNy+6YP8HmjSb0JwMowpdlZpydZGab9KevKO/fIC9wTcr5rkhbLsTfEPOjdAqOTycRoK0mOJCFB/1uig==} - electron-builder@25.1.7: - resolution: {integrity: sha512-lsKtX93GSHWnmuteNRvBzgJIjRiiYB0qrJVRjShwBi75Ns+mRdWeOGZiXItqOWj+3g5UyY722kgoq2WlqCB87A==} + electron-builder@25.1.8: + resolution: {integrity: sha512-poRgAtUHHOnlzZnc9PK4nzG53xh74wj2Jy7jkTrqZ0MWPoHGh1M2+C//hGeYdA+4K8w4yiVCNYoLXF7ySj2Wig==} engines: {node: '>=14.0.0'} hasBin: true @@ -3668,8 +3675,8 @@ packages: '@swc/core': optional: true - electron@33.1.0: - resolution: {integrity: sha512-7KiY6MtRo1fVFLPGyHS7Inh8yZfrbUTy43nNwUgMD2CBk729BgSwOC2WhmcptNJVlzHJpVxSWkiVi2hp9mH/bw==} + electron@33.2.1: + resolution: {integrity: sha512-SG/nmSsK9Qg1p6wAW+ZfqU+AV8cmXMTIklUL18NnOKfZLlum4ZsDoVdmmmlL39ZmeCaq27dr7CgslRPahfoVJg==} engines: {node: '>= 12.20.55'} hasBin: true @@ -9410,7 +9417,47 @@ snapshots: app-builder-bin@5.0.0-alpha.10: {} - app-builder-lib@25.1.7(dmg-builder@25.1.7(electron-builder-squirrel-windows@25.1.7))(electron-builder-squirrel-windows@25.1.7(dmg-builder@25.1.7)): + app-builder-lib@25.1.7(dmg-builder@25.1.8(electron-builder-squirrel-windows@25.1.7))(electron-builder-squirrel-windows@25.1.7(dmg-builder@25.1.8)): + dependencies: + '@develar/schema-utils': 2.6.5 + '@electron/notarize': 2.5.0 + '@electron/osx-sign': 1.3.1 + '@electron/rebuild': 3.6.1 + '@electron/universal': 2.0.1 + '@malept/flatpak-bundler': 0.4.0 + '@types/fs-extra': 9.0.13 + async-exit-hook: 2.0.1 + bluebird-lst: 1.0.9 + builder-util: 25.1.7 + builder-util-runtime: 9.2.10 + chromium-pickle-js: 0.2.0 + config-file-ts: 0.2.8-rc1 + debug: 4.3.7 + dmg-builder: 25.1.8(electron-builder-squirrel-windows@25.1.7) + dotenv: 16.4.5 + dotenv-expand: 11.0.6 + ejs: 3.1.10 + electron-builder-squirrel-windows: 25.1.7(dmg-builder@25.1.8) + electron-publish: 25.1.7 + form-data: 4.0.1 + fs-extra: 10.1.0 + hosted-git-info: 4.1.0 + is-ci: 3.0.1 + isbinaryfile: 5.0.2 + js-yaml: 4.1.0 + json5: 2.2.3 + lazy-val: 1.0.5 + minimatch: 10.0.1 + resedit: 1.7.0 + sanitize-filename: 1.6.3 + semver: 7.6.3 + tar: 6.2.1 + temp-file: 3.4.0 + transitivePeerDependencies: + - bluebird + - supports-color + + app-builder-lib@25.1.8(dmg-builder@25.1.8(electron-builder-squirrel-windows@25.1.7))(electron-builder-squirrel-windows@25.1.7(dmg-builder@25.1.8)): dependencies: '@develar/schema-utils': 2.6.5 '@electron/notarize': 2.5.0 @@ -9426,11 +9473,11 @@ snapshots: chromium-pickle-js: 0.2.0 config-file-ts: 0.2.8-rc1 debug: 4.3.7 - dmg-builder: 25.1.7(electron-builder-squirrel-windows@25.1.7) + dmg-builder: 25.1.8(electron-builder-squirrel-windows@25.1.7) dotenv: 16.4.5 dotenv-expand: 11.0.6 ejs: 3.1.10 - electron-builder-squirrel-windows: 25.1.7(dmg-builder@25.1.7) + electron-builder-squirrel-windows: 25.1.7(dmg-builder@25.1.8) electron-publish: 25.1.7 form-data: 4.0.1 fs-extra: 10.1.0 @@ -10289,9 +10336,9 @@ snapshots: dependencies: path-type: 4.0.0 - dmg-builder@25.1.7(electron-builder-squirrel-windows@25.1.7): + dmg-builder@25.1.8(electron-builder-squirrel-windows@25.1.7): dependencies: - app-builder-lib: 25.1.7(dmg-builder@25.1.7(electron-builder-squirrel-windows@25.1.7))(electron-builder-squirrel-windows@25.1.7(dmg-builder@25.1.7)) + app-builder-lib: 25.1.8(dmg-builder@25.1.8(electron-builder-squirrel-windows@25.1.7))(electron-builder-squirrel-windows@25.1.7(dmg-builder@25.1.8)) builder-util: 25.1.7 builder-util-runtime: 9.2.10 fs-extra: 10.1.0 @@ -10373,9 +10420,9 @@ snapshots: dependencies: jake: 10.8.5 - electron-builder-squirrel-windows@25.1.7(dmg-builder@25.1.7): + electron-builder-squirrel-windows@25.1.7(dmg-builder@25.1.8): dependencies: - app-builder-lib: 25.1.7(dmg-builder@25.1.7(electron-builder-squirrel-windows@25.1.7))(electron-builder-squirrel-windows@25.1.7(dmg-builder@25.1.7)) + app-builder-lib: 25.1.7(dmg-builder@25.1.8(electron-builder-squirrel-windows@25.1.7))(electron-builder-squirrel-windows@25.1.7(dmg-builder@25.1.8)) archiver: 5.3.2 builder-util: 25.1.7 fs-extra: 10.1.0 @@ -10384,13 +10431,13 @@ snapshots: - dmg-builder - supports-color - electron-builder@25.1.7(electron-builder-squirrel-windows@25.1.7(dmg-builder@25.1.7)): + electron-builder@25.1.8(electron-builder-squirrel-windows@25.1.7(dmg-builder@25.1.8)): dependencies: - app-builder-lib: 25.1.7(dmg-builder@25.1.7(electron-builder-squirrel-windows@25.1.7))(electron-builder-squirrel-windows@25.1.7(dmg-builder@25.1.7)) + app-builder-lib: 25.1.8(dmg-builder@25.1.8(electron-builder-squirrel-windows@25.1.7))(electron-builder-squirrel-windows@25.1.7(dmg-builder@25.1.8)) builder-util: 25.1.7 builder-util-runtime: 9.2.10 chalk: 4.1.2 - dmg-builder: 25.1.7(electron-builder-squirrel-windows@25.1.7) + dmg-builder: 25.1.8(electron-builder-squirrel-windows@25.1.7) fs-extra: 10.1.0 is-ci: 3.0.1 lazy-val: 1.0.5 @@ -10429,7 +10476,7 @@ snapshots: transitivePeerDependencies: - supports-color - electron@33.1.0: + electron@33.2.1: dependencies: '@electron/get': 2.0.2 '@types/node': 20.17.9 diff --git a/web/packages/teleterm/electron-builder-config.js b/web/packages/teleterm/electron-builder-config.js index 27a874422f6e6..b61b2b316b9bd 100644 --- a/web/packages/teleterm/electron-builder-config.js +++ b/web/packages/teleterm/electron-builder-config.js @@ -43,6 +43,8 @@ module.exports = { appId, asar: true, asarUnpack: '**\\*.{node,dll}', + // TODO(ravicious): Migrate from custom notarize.js script to using the notarize field of the + // mac target. afterSign: 'notarize.js', afterPack: packed => { // @electron-universal adds the `ElectronAsarIntegrity` key to every .plist @@ -95,6 +97,9 @@ module.exports = { target: 'dmg', category: 'public.app-category.developer-tools', type: 'distribution', + // TODO(ravicious): Migrate from custom notarize.js script to using the notarize field of the + // mac target. + notarize: false, hardenedRuntime: true, gatekeeperAssess: false, // If CONNECT_TSH_APP_PATH is provided, we assume that tsh.app is already signed. diff --git a/web/packages/teleterm/notarize.js b/web/packages/teleterm/notarize.js index 082a43e3ff5f3..dad6cfd9d9be2 100644 --- a/web/packages/teleterm/notarize.js +++ b/web/packages/teleterm/notarize.js @@ -23,6 +23,8 @@ exports.default = async function notarizing(context) { const appName = context.packager.appInfo.productFilename; const appBundleId = context.packager.appInfo.macBundleIdentifier; + console.log('notarize.js: Notarizing in progress.'); + return await notarize({ appBundleId, appPath: `${appOutDir}/${appName}.app`, diff --git a/web/packages/teleterm/package.json b/web/packages/teleterm/package.json index 6f24853b5c7a3..4cd65da0abec2 100644 --- a/web/packages/teleterm/package.json +++ b/web/packages/teleterm/package.json @@ -45,8 +45,8 @@ "@types/whatwg-url": "^11.0.5", "@xterm/addon-fit": "^0.10.0", "@xterm/xterm": "^5.5.0", - "electron": "33.1.0", - "electron-builder": "^25.1.7", + "electron": "33.2.1", + "electron-builder": "^25.1.8", "electron-vite": "^2.3.0", "events": "3.3.0", "immer": "^10.1.1", From ca459089824fe7f7c786ec0d11d9c705211879ec Mon Sep 17 00:00:00 2001 From: Leszek Charkiewicz Date: Thu, 12 Dec 2024 11:52:42 +0100 Subject: [PATCH 02/22] [16.4.9] bump cloud docs (#49993) --- docs/config.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/config.json b/docs/config.json index 10947e64273f4..f5ce95aca7d60 100644 --- a/docs/config.json +++ b/docs/config.json @@ -132,7 +132,7 @@ "aws_secret_access_key": "zyxw9876-this-is-an-example" }, "cloud": { - "version": "16.4.8", + "version": "16.4.9", "major_version": "16", "sla": { "monthly_percentage": "99.9%", From 49c30832f7ccb21832e9319a1d4a08d7cdc6c745 Mon Sep 17 00:00:00 2001 From: Noah Stride Date: Thu, 12 Dec 2024 11:46:19 +0000 Subject: [PATCH 03/22] Add `workload_identity_labels` to RoleCondition (#50071) * Add WorkloadIdentityLabels field to role * Wire up access checker * Add validation for new field * Update CRDs * Add to terraform provider * Mispel some words to keep the republic happy * Add WorkloadIdentityLabelsExpression * Update Terraform provider * Add to operator CRD * PLS RUN CLA CHECK --- api/proto/teleport/legacy/types/types.proto | 12 + api/types/role.go | 33 + api/types/types.pb.go | 4273 +++++++++-------- .../resources.teleport.dev_roles.mdx | 8 + .../resources.teleport.dev_rolesv6.mdx | 4 + .../resources.teleport.dev_rolesv7.mdx | 4 + .../terraform-provider/data-sources/role.mdx | 4 + .../terraform-provider/resources/role.mdx | 4 + .../resources.teleport.dev_roles.yaml | 44 + .../resources.teleport.dev_rolesv6.yaml | 22 + .../resources.teleport.dev_rolesv7.yaml | 22 + .../bases/resources.teleport.dev_roles.yaml | 44 + .../bases/resources.teleport.dev_rolesv6.yaml | 22 + .../bases/resources.teleport.dev_rolesv7.yaml | 22 + .../terraform/tfschema/types_terraform.go | 128 + lib/services/access_checker_test.go | 95 + 16 files changed, 2656 insertions(+), 2085 deletions(-) diff --git a/api/proto/teleport/legacy/types/types.proto b/api/proto/teleport/legacy/types/types.proto index 393dbe78ff348..42b6852923223 100644 --- a/api/proto/teleport/legacy/types/types.proto +++ b/api/proto/teleport/legacy/types/types.proto @@ -3439,6 +3439,18 @@ message RoleConditions { (gogoproto.nullable) = false, (gogoproto.jsontag) = "github_permissions,omitempty" ]; + + // WorkloadIdentityLabels controls whether or not specific WorkloadIdentity + // resources can be invoked. Further authorization controls exist on the + // WorkloadIdentity resource itself. + wrappers.LabelValues WorkloadIdentityLabels = 44 [ + (gogoproto.nullable) = false, + (gogoproto.jsontag) = "workload_identity_labels,omitempty", + (gogoproto.customtype) = "Labels" + ]; + // WorkloadIdentityLabelsExpression is a predicate expression used to + // allow/deny access to issuing a WorkloadIdentity. + string WorkloadIdentityLabelsExpression = 45 [(gogoproto.jsontag) = "workload_identity_labels_expression,omitempty"]; } // IdentityCenterAccountAssignment captures an AWS Identity Center account diff --git a/api/types/role.go b/api/types/role.go index b9f52c1bd9ad5..05963d4ebbdc2 100644 --- a/api/types/role.go +++ b/api/types/role.go @@ -107,6 +107,13 @@ type Role interface { // SetNodeLabels sets the map of node labels this role is allowed or denied access to. SetNodeLabels(RoleConditionType, Labels) + // GetWorkloadIdentityLabels gets the map of node labels this role is + // allowed or denied access to. + GetWorkloadIdentityLabels(RoleConditionType) Labels + // SetWorkloadIdentityLabels sets the map of WorkloadIdentity labels this + // role is allowed or denied access to. + SetWorkloadIdentityLabels(RoleConditionType, Labels) + // GetAppLabels gets the map of app labels this role is allowed or denied access to. GetAppLabels(RoleConditionType) Labels // SetAppLabels sets the map of app labels this role is allowed or denied access to. @@ -616,6 +623,25 @@ func (r *RoleV6) SetNodeLabels(rct RoleConditionType, labels Labels) { } } +// GetWorkloadIdentityLabels gets the map of WorkloadIdentity labels for +// allow or deny. +func (r *RoleV6) GetWorkloadIdentityLabels(rct RoleConditionType) Labels { + if rct == Allow { + return r.Spec.Allow.WorkloadIdentityLabels + } + return r.Spec.Deny.WorkloadIdentityLabels +} + +// SetWorkloadIdentityLabels sets the map of WorkloadIdentity labels this role +// is allowed or denied access to. +func (r *RoleV6) SetWorkloadIdentityLabels(rct RoleConditionType, labels Labels) { + if rct == Allow { + r.Spec.Allow.WorkloadIdentityLabels = labels.Clone() + } else { + r.Spec.Deny.WorkloadIdentityLabels = labels.Clone() + } +} + // GetAppLabels gets the map of app labels this role is allowed or denied access to. func (r *RoleV6) GetAppLabels(rct RoleConditionType) Labels { if rct == Allow { @@ -1255,6 +1281,7 @@ func (r *RoleV6) CheckAndSetDefaults() error { r.Spec.Allow.DatabaseLabels, r.Spec.Allow.WindowsDesktopLabels, r.Spec.Allow.GroupLabels, + r.Spec.Allow.WorkloadIdentityLabels, } { if err := checkWildcardSelector(labels); err != nil { return trace.Wrap(err) @@ -1970,6 +1997,8 @@ func (r *RoleV6) GetLabelMatchers(rct RoleConditionType, kind string) (LabelMatc return LabelMatchers{cond.GroupLabels, cond.GroupLabelsExpression}, nil case KindGitServer: return r.makeGitServerLabelMatchers(cond), nil + case KindWorkloadIdentity: + return LabelMatchers{cond.WorkloadIdentityLabels, cond.WorkloadIdentityLabelsExpression}, nil } return LabelMatchers{}, trace.BadParameter("can't get label matchers for resource kind %q", kind) } @@ -2023,6 +2052,10 @@ func (r *RoleV6) SetLabelMatchers(rct RoleConditionType, kind string, labelMatch cond.GroupLabels = labelMatchers.Labels cond.GroupLabelsExpression = labelMatchers.Expression return nil + case KindWorkloadIdentity: + cond.WorkloadIdentityLabels = labelMatchers.Labels + cond.WorkloadIdentityLabelsExpression = labelMatchers.Expression + return nil } return trace.BadParameter("can't set label matchers for resource kind %q", kind) } diff --git a/api/types/types.pb.go b/api/types/types.pb.go index 7520c1e9216ae..5a5743a778c11 100644 --- a/api/types/types.pb.go +++ b/api/types/types.pb.go @@ -8710,10 +8710,17 @@ type RoleConditions struct { // condition. AccountAssignments []IdentityCenterAccountAssignment `protobuf:"bytes,42,rep,name=AccountAssignments,proto3" json:"account_assignments,omitempty"` // GitHubPermissions defines GitHub integration related permissions. - GitHubPermissions []GitHubPermission `protobuf:"bytes,43,rep,name=git_hub_permissions,json=gitHubPermissions,proto3" json:"github_permissions,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` + GitHubPermissions []GitHubPermission `protobuf:"bytes,43,rep,name=git_hub_permissions,json=gitHubPermissions,proto3" json:"github_permissions,omitempty"` + // WorkloadIdentityLabels controls whether or not specific WorkloadIdentity + // resources can be invoked. Further authorization controls exist on the + // WorkloadIdentity resource itself. + WorkloadIdentityLabels Labels `protobuf:"bytes,44,opt,name=WorkloadIdentityLabels,proto3,customtype=Labels" json:"workload_identity_labels,omitempty"` + // WorkloadIdentityLabelsExpression is a predicate expression used to + // allow/deny access to issuing a WorkloadIdentity. + WorkloadIdentityLabelsExpression string `protobuf:"bytes,45,opt,name=WorkloadIdentityLabelsExpression,proto3" json:"workload_identity_labels_expression,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` } func (m *RoleConditions) Reset() { *m = RoleConditions{} } @@ -21898,1902 +21905,1906 @@ func init() { func init() { proto.RegisterFile("teleport/legacy/types/types.proto", fileDescriptor_9198ee693835762e) } var fileDescriptor_9198ee693835762e = []byte{ - // 30312 bytes of a gzipped FileDescriptorProto + // 30381 bytes of a gzipped FileDescriptorProto 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0xbd, 0x6d, 0x70, 0x1c, 0x49, - 0x76, 0x20, 0x36, 0xdd, 0x8d, 0x8f, 0xc6, 0xc3, 0x57, 0x23, 0x01, 0x92, 0x20, 0x66, 0xc8, 0xe6, - 0xd4, 0xcc, 0x70, 0xc8, 0xd9, 0x19, 0x72, 0x09, 0xee, 0x70, 0x77, 0x76, 0xbe, 0xb6, 0xd1, 0x0d, - 0x12, 0x4d, 0x82, 0x20, 0xb6, 0x1a, 0x20, 0x76, 0xb4, 0x1f, 0xb5, 0x85, 0xee, 0x04, 0x50, 0x83, - 0xee, 0xae, 0xde, 0xaa, 0x6a, 0x82, 0xd0, 0x9e, 0xac, 0xef, 0x93, 0x15, 0xb2, 0x3e, 0x4f, 0x3a, - 0xed, 0x39, 0x74, 0xb2, 0x42, 0xbe, 0xb3, 0x15, 0xe7, 0x90, 0xe2, 0x2c, 0x59, 0xf6, 0xd9, 0x0a, - 0xcb, 0xd2, 0xc5, 0x59, 0x96, 0x15, 0x17, 0x27, 0x85, 0x7d, 0xb6, 0xc3, 0xeb, 0x0b, 0xc8, 0xb2, - 0xfc, 0xc3, 0x81, 0x08, 0x47, 0x48, 0xbe, 0x08, 0x47, 0x78, 0x1d, 0xba, 0xbb, 0xc8, 0x97, 0x99, - 0x55, 0x99, 0x55, 0xd5, 0x8d, 0xc6, 0x90, 0xa3, 0x13, 0x27, 0xf4, 0x87, 0x44, 0xbf, 0x7c, 0xef, - 0x65, 0xe5, 0xf7, 0xcb, 0x97, 0xef, 0x03, 0x5e, 0x0c, 0x68, 0x93, 0x76, 0x5c, 0x2f, 0xb8, 0xde, - 0xa4, 0xbb, 0x76, 0xfd, 0xf0, 0x7a, 0x70, 0xd8, 0xa1, 0x3e, 0xff, 0xf7, 0x5a, 0xc7, 0x73, 0x03, - 0x97, 0x0c, 0xe3, 0x8f, 0x85, 0xb9, 0x5d, 0x77, 0xd7, 0x45, 0xc8, 0x75, 0xf6, 0x17, 0x2f, 0x5c, - 0xb8, 0xb8, 0xeb, 0xba, 0xbb, 0x4d, 0x7a, 0x1d, 0x7f, 0x6d, 0x77, 0x77, 0xae, 0x37, 0xba, 0x9e, - 0x1d, 0x38, 0x6e, 0x5b, 0x94, 0x17, 0xe3, 0xe5, 0x81, 0xd3, 0xa2, 0x7e, 0x60, 0xb7, 0x3a, 0xbd, - 0x18, 0x1c, 0x78, 0x76, 0xa7, 0x43, 0x3d, 0x51, 0xfb, 0xc2, 0xd5, 0xf0, 0x03, 0xed, 0x20, 0x60, - 0x94, 0x8c, 0xf9, 0xf5, 0x47, 0x37, 0xd4, 0x9f, 0x02, 0xf5, 0x56, 0x8f, 0xb6, 0x78, 0x5d, 0x3f, - 0xa0, 0x0d, 0xab, 0x41, 0x1f, 0x39, 0x75, 0x6a, 0x79, 0xf4, 0x1b, 0x5d, 0xc7, 0xa3, 0x2d, 0xda, - 0x0e, 0x04, 0xdd, 0x1b, 0xe9, 0x74, 0xf2, 0x43, 0x62, 0x5f, 0x64, 0xfc, 0x62, 0x0e, 0xc6, 0xee, - 0x51, 0xda, 0x29, 0x35, 0x9d, 0x47, 0x94, 0xbc, 0x04, 0x43, 0x6b, 0x76, 0x8b, 0xce, 0x67, 0x2e, - 0x65, 0xae, 0x8c, 0x2d, 0x4d, 0x1f, 0x1f, 0x15, 0xc7, 0x7d, 0xea, 0x3d, 0xa2, 0x9e, 0xd5, 0xb6, - 0x5b, 0xd4, 0xc4, 0x42, 0xf2, 0x29, 0x18, 0x63, 0xff, 0xfb, 0x1d, 0xbb, 0x4e, 0xe7, 0xb3, 0x88, - 0x39, 0x79, 0x7c, 0x54, 0x1c, 0x6b, 0x4b, 0xa0, 0x19, 0x95, 0x93, 0x2a, 0x8c, 0x2e, 0x3f, 0xee, - 0x38, 0x1e, 0xf5, 0xe7, 0x87, 0x2e, 0x65, 0xae, 0x8c, 0x2f, 0x2e, 0x5c, 0xe3, 0x7d, 0x74, 0x4d, - 0xf6, 0xd1, 0xb5, 0x0d, 0xd9, 0x89, 0x4b, 0xb3, 0xbf, 0x7f, 0x54, 0x7c, 0xee, 0xf8, 0xa8, 0x38, - 0x4a, 0x39, 0xc9, 0x4f, 0xfd, 0x71, 0x31, 0x63, 0x4a, 0x7a, 0xf2, 0x0e, 0x0c, 0x6d, 0x1c, 0x76, - 0xe8, 0xfc, 0xd8, 0xa5, 0xcc, 0x95, 0xa9, 0xc5, 0x8b, 0xd7, 0xf8, 0xb0, 0x86, 0x1f, 0x1f, 0xfd, - 0xc5, 0xb0, 0x96, 0xf2, 0xc7, 0x47, 0xc5, 0x21, 0x86, 0x62, 0x22, 0x15, 0x79, 0x03, 0x46, 0x56, - 0x5c, 0x3f, 0xa8, 0x56, 0xe6, 0x01, 0x3f, 0xf9, 0xcc, 0xf1, 0x51, 0x71, 0x66, 0xcf, 0xf5, 0x03, - 0xcb, 0x69, 0xbc, 0xee, 0xb6, 0x9c, 0x80, 0xb6, 0x3a, 0xc1, 0xa1, 0x29, 0x90, 0x8c, 0xc7, 0x30, - 0xa9, 0xf1, 0x23, 0xe3, 0x30, 0xba, 0xb9, 0x76, 0x6f, 0xed, 0xc1, 0xd6, 0x5a, 0xe1, 0x39, 0x92, - 0x87, 0xa1, 0xb5, 0x07, 0x95, 0xe5, 0x42, 0x86, 0x8c, 0x42, 0xae, 0xb4, 0xbe, 0x5e, 0xc8, 0x92, - 0x09, 0xc8, 0x57, 0x4a, 0x1b, 0xa5, 0xa5, 0x52, 0x6d, 0xb9, 0x90, 0x23, 0xb3, 0x30, 0xbd, 0x55, - 0x5d, 0xab, 0x3c, 0xd8, 0xaa, 0x59, 0x95, 0xe5, 0xda, 0xbd, 0x8d, 0x07, 0xeb, 0x85, 0x21, 0x32, - 0x05, 0x70, 0x6f, 0x73, 0x69, 0xd9, 0x5c, 0x5b, 0xde, 0x58, 0xae, 0x15, 0x86, 0xc9, 0x1c, 0x14, - 0x24, 0x89, 0x55, 0x5b, 0x36, 0x1f, 0x56, 0xcb, 0xcb, 0x85, 0x91, 0xbb, 0x43, 0xf9, 0x5c, 0x61, - 0xc8, 0x1c, 0x5d, 0xa5, 0xb6, 0x4f, 0xab, 0x15, 0xe3, 0x3f, 0xcc, 0x41, 0xfe, 0x3e, 0x0d, 0xec, - 0x86, 0x1d, 0xd8, 0xe4, 0x05, 0x6d, 0x7c, 0xb0, 0x89, 0xca, 0xc0, 0xbc, 0x94, 0x1c, 0x98, 0xe1, - 0xe3, 0xa3, 0x62, 0xe6, 0x0d, 0x75, 0x40, 0xde, 0x86, 0xf1, 0x0a, 0xf5, 0xeb, 0x9e, 0xd3, 0x61, - 0x93, 0x6d, 0x3e, 0x87, 0x68, 0xe7, 0x8f, 0x8f, 0x8a, 0x67, 0x1a, 0x11, 0x58, 0xe9, 0x10, 0x15, - 0x9b, 0x54, 0x61, 0x64, 0xd5, 0xde, 0xa6, 0x4d, 0x7f, 0x7e, 0xf8, 0x52, 0xee, 0xca, 0xf8, 0xe2, - 0xf3, 0x62, 0x10, 0xe4, 0x07, 0x5e, 0xe3, 0xa5, 0xcb, 0xed, 0xc0, 0x3b, 0x5c, 0x9a, 0x3b, 0x3e, - 0x2a, 0x16, 0x9a, 0x08, 0x50, 0x3b, 0x98, 0xa3, 0x90, 0x5a, 0x34, 0x31, 0x46, 0x4e, 0x9c, 0x18, - 0x17, 0x7e, 0xff, 0xa8, 0x98, 0x61, 0x03, 0x26, 0x26, 0x46, 0xc4, 0x4f, 0x9f, 0x22, 0x8b, 0x90, - 0x37, 0xe9, 0x23, 0xc7, 0x67, 0x2d, 0xcb, 0x63, 0xcb, 0xce, 0x1e, 0x1f, 0x15, 0x89, 0x27, 0x60, - 0xca, 0x67, 0x84, 0x78, 0x0b, 0x6f, 0xc1, 0xb8, 0xf2, 0xd5, 0xa4, 0x00, 0xb9, 0x7d, 0x7a, 0xc8, - 0x7b, 0xd8, 0x64, 0x7f, 0x92, 0x39, 0x18, 0x7e, 0x64, 0x37, 0xbb, 0xa2, 0x4b, 0x4d, 0xfe, 0xe3, - 0xf3, 0xd9, 0xcf, 0x65, 0xee, 0x0e, 0xe5, 0x47, 0x0b, 0x79, 0x33, 0x5b, 0xad, 0x18, 0x3f, 0x33, - 0x04, 0x79, 0xd3, 0xe5, 0x0b, 0x98, 0x5c, 0x85, 0xe1, 0x5a, 0x60, 0x07, 0x72, 0x98, 0x66, 0x8f, - 0x8f, 0x8a, 0xd3, 0x6c, 0x71, 0x53, 0xa5, 0x7e, 0x8e, 0xc1, 0x50, 0xd7, 0xf7, 0x6c, 0x5f, 0x0e, - 0x17, 0xa2, 0x76, 0x18, 0x40, 0x45, 0x45, 0x0c, 0x72, 0x19, 0x86, 0xee, 0xbb, 0x0d, 0x2a, 0x46, - 0x8c, 0x1c, 0x1f, 0x15, 0xa7, 0x5a, 0x6e, 0x43, 0x45, 0xc4, 0x72, 0xf2, 0x3a, 0x8c, 0x95, 0xbb, - 0x9e, 0x47, 0xdb, 0x6c, 0xae, 0x0f, 0x21, 0xf2, 0xd4, 0xf1, 0x51, 0x11, 0xea, 0x1c, 0x68, 0x39, - 0x0d, 0x33, 0x42, 0x60, 0xc3, 0x50, 0x0b, 0x6c, 0x2f, 0xa0, 0x8d, 0xf9, 0xe1, 0x81, 0x86, 0x81, - 0xad, 0xcf, 0x19, 0x9f, 0x93, 0xc4, 0x87, 0x41, 0x70, 0x22, 0x2b, 0x30, 0x7e, 0xc7, 0xb3, 0xeb, - 0x74, 0x9d, 0x7a, 0x8e, 0xdb, 0xc0, 0xf1, 0xcd, 0x2d, 0x5d, 0x3e, 0x3e, 0x2a, 0x9e, 0xdd, 0x65, - 0x60, 0xab, 0x83, 0xf0, 0x88, 0xfa, 0x3b, 0x47, 0xc5, 0x7c, 0x45, 0x6c, 0xb5, 0xa6, 0x4a, 0x4a, - 0xbe, 0xce, 0x06, 0xc7, 0x0f, 0xb0, 0x6b, 0x69, 0x63, 0x7e, 0xf4, 0xc4, 0x4f, 0x34, 0xc4, 0x27, - 0x9e, 0x6d, 0xda, 0x7e, 0x60, 0x79, 0x9c, 0x2e, 0xf6, 0x9d, 0x2a, 0x4b, 0xf2, 0x00, 0xf2, 0xb5, - 0xfa, 0x1e, 0x6d, 0x74, 0x9b, 0x14, 0xa7, 0xcc, 0xf8, 0xe2, 0x39, 0x31, 0xa9, 0xe5, 0x78, 0xca, - 0xe2, 0xa5, 0x05, 0xc1, 0x9b, 0xf8, 0x02, 0xa2, 0xce, 0x27, 0x89, 0xf5, 0xf9, 0xfc, 0xb7, 0x7e, - 0xa9, 0xf8, 0xdc, 0xf7, 0xfd, 0x8b, 0x4b, 0xcf, 0x19, 0xff, 0x45, 0x16, 0x0a, 0x71, 0x26, 0x64, - 0x07, 0x26, 0x37, 0x3b, 0x0d, 0x3b, 0xa0, 0xe5, 0xa6, 0x43, 0xdb, 0x81, 0x8f, 0x93, 0xa4, 0x7f, - 0x9b, 0x5e, 0x16, 0xf5, 0xce, 0x77, 0x91, 0xd0, 0xaa, 0x73, 0xca, 0x58, 0xab, 0x74, 0xb6, 0x51, - 0x3d, 0x35, 0xdc, 0xc0, 0x7d, 0x9c, 0x61, 0xa7, 0xab, 0x87, 0x6f, 0xfd, 0x3d, 0xea, 0x11, 0x6c, - 0xc5, 0x04, 0x6a, 0x37, 0xb6, 0x0f, 0x71, 0x66, 0x0e, 0x3e, 0x81, 0x18, 0x49, 0xca, 0x04, 0x62, - 0x60, 0xe3, 0xff, 0xcc, 0xc0, 0x94, 0x49, 0x7d, 0xb7, 0xeb, 0xd5, 0xe9, 0x0a, 0xb5, 0x1b, 0xd4, - 0x63, 0xd3, 0xff, 0x9e, 0xd3, 0x6e, 0x88, 0x35, 0x85, 0xd3, 0x7f, 0xdf, 0x69, 0xab, 0x5b, 0x37, - 0x96, 0x93, 0x4f, 0xc3, 0x68, 0xad, 0xbb, 0x8d, 0xa8, 0xd9, 0x68, 0x07, 0xf0, 0xbb, 0xdb, 0x56, - 0x0c, 0x5d, 0xa2, 0x91, 0xeb, 0x30, 0xfa, 0x90, 0x7a, 0x7e, 0xb4, 0x1b, 0xe2, 0xd1, 0xf0, 0x88, - 0x83, 0x54, 0x02, 0x81, 0x45, 0xee, 0x44, 0x3b, 0xb2, 0x38, 0xd4, 0xa6, 0x63, 0xfb, 0x60, 0x34, - 0x55, 0x5a, 0x02, 0xa2, 0x4e, 0x15, 0x89, 0x65, 0xfc, 0x74, 0x16, 0x0a, 0x15, 0x3b, 0xb0, 0xb7, - 0x6d, 0x5f, 0xf4, 0xe7, 0xc3, 0x9b, 0x6c, 0x8f, 0x57, 0x1a, 0x8a, 0x7b, 0x3c, 0xfb, 0xf2, 0x8f, - 0xdc, 0xbc, 0x57, 0xe2, 0xcd, 0x1b, 0x67, 0x27, 0xac, 0x68, 0x5e, 0xd4, 0xa8, 0x77, 0x4f, 0x6e, - 0x54, 0x41, 0x34, 0x2a, 0x2f, 0x1b, 0x15, 0x35, 0x85, 0xbc, 0x0b, 0x43, 0xb5, 0x0e, 0xad, 0x8b, - 0x4d, 0x44, 0x9e, 0x0b, 0x7a, 0xe3, 0x18, 0xc2, 0xc3, 0x9b, 0x4b, 0x13, 0x82, 0xcd, 0x90, 0xdf, - 0xa1, 0x75, 0x13, 0xc9, 0x94, 0x45, 0xf3, 0x8f, 0x72, 0x30, 0x97, 0x46, 0xa6, 0xb6, 0x63, 0xa4, - 0x4f, 0x3b, 0xae, 0x40, 0x9e, 0x1d, 0xe1, 0xec, 0x58, 0xc4, 0xed, 0x62, 0x6c, 0x69, 0x82, 0x7d, - 0xf2, 0x9e, 0x80, 0x99, 0x61, 0x29, 0x79, 0x29, 0x94, 0x08, 0xf2, 0x11, 0x3f, 0x21, 0x11, 0x48, - 0x39, 0x80, 0x8d, 0xb5, 0x5c, 0xc2, 0x28, 0x38, 0x44, 0xdd, 0x22, 0xc1, 0xd1, 0x58, 0x7b, 0x02, - 0xa2, 0x1d, 0x33, 0xf2, 0x50, 0x58, 0x86, 0xbc, 0x6c, 0xd6, 0xfc, 0x04, 0x32, 0x9a, 0x89, 0x75, - 0xd2, 0xc3, 0x9b, 0x7c, 0x30, 0x1b, 0xe2, 0xb7, 0xca, 0x46, 0xe2, 0x90, 0x9b, 0x90, 0x5f, 0xf7, - 0xdc, 0xc7, 0x87, 0xd5, 0x8a, 0x3f, 0x3f, 0x79, 0x29, 0x77, 0x65, 0x6c, 0xe9, 0xdc, 0xf1, 0x51, - 0x71, 0xb6, 0xc3, 0x60, 0x96, 0xd3, 0x50, 0x4f, 0xda, 0x10, 0xf1, 0xee, 0x50, 0x3e, 0x53, 0xc8, - 0xde, 0x1d, 0xca, 0x67, 0x0b, 0x39, 0x2e, 0x5e, 0xdc, 0x1d, 0xca, 0x0f, 0x15, 0x86, 0xef, 0x0e, - 0xe5, 0x87, 0x51, 0xe0, 0x18, 0x2b, 0xc0, 0xdd, 0xa1, 0xfc, 0x78, 0x61, 0x42, 0x3b, 0xed, 0x91, - 0x41, 0xe0, 0xd6, 0xdd, 0xa6, 0x99, 0xdb, 0x34, 0xab, 0xe6, 0x48, 0xb9, 0x54, 0xa6, 0x5e, 0x60, - 0xe6, 0x4a, 0x5b, 0x35, 0x73, 0xb2, 0x72, 0xd8, 0xb6, 0x5b, 0x4e, 0x9d, 0x1f, 0x9d, 0x66, 0xee, - 0x4e, 0x79, 0xdd, 0x28, 0xc1, 0x54, 0xd4, 0x96, 0x55, 0xc7, 0x0f, 0xc8, 0x75, 0x18, 0x93, 0x10, - 0xb6, 0xd1, 0xe5, 0x52, 0x5b, 0x6d, 0x46, 0x38, 0xc6, 0xef, 0x65, 0x01, 0xa2, 0x92, 0x67, 0x74, - 0x2d, 0x7c, 0x56, 0x5b, 0x0b, 0x67, 0xe2, 0x6b, 0xa1, 0xe7, 0x2a, 0x20, 0xef, 0xc3, 0x08, 0x13, - 0x0b, 0xba, 0x52, 0x24, 0x3a, 0x17, 0x27, 0xc5, 0xc2, 0x87, 0x37, 0x97, 0xa6, 0x04, 0xf1, 0x88, - 0x8f, 0x10, 0x53, 0x90, 0x29, 0xcb, 0xe8, 0x17, 0x47, 0xa3, 0xc1, 0x10, 0x0b, 0xe8, 0x0a, 0x84, - 0x03, 0x2a, 0x3a, 0x14, 0x57, 0x46, 0x47, 0x0e, 0x72, 0x58, 0x4a, 0xce, 0x03, 0x1b, 0x70, 0xd1, - 0xa9, 0xa3, 0xc7, 0x47, 0xc5, 0x5c, 0xd7, 0x73, 0x70, 0x12, 0x90, 0xeb, 0x20, 0xa6, 0x81, 0xe8, - 0x40, 0x36, 0xfb, 0x66, 0xea, 0xb6, 0x55, 0xa7, 0x5e, 0x10, 0xf5, 0xf8, 0x7c, 0x46, 0xce, 0x16, - 0xd2, 0x01, 0x7d, 0xaa, 0xcc, 0x0f, 0xe1, 0x34, 0xb8, 0x92, 0xda, 0x2b, 0xd7, 0x34, 0x54, 0x2e, - 0x46, 0x5e, 0x92, 0xa7, 0x52, 0x83, 0x97, 0x59, 0x09, 0x91, 0x52, 0xaf, 0x80, 0xdc, 0x04, 0x36, - 0x43, 0x45, 0xef, 0x83, 0xa8, 0xa7, 0xb4, 0x55, 0x5b, 0x3a, 0x23, 0x38, 0x4d, 0xda, 0x07, 0x2a, - 0x39, 0xc3, 0x26, 0x6f, 0x03, 0x9b, 0xc2, 0xa2, 0xdf, 0x89, 0x20, 0xba, 0x53, 0x5e, 0x2f, 0x37, - 0xdd, 0x6e, 0xa3, 0xf6, 0xc5, 0xd5, 0x88, 0x78, 0xb7, 0xde, 0x51, 0x89, 0xef, 0x94, 0xd7, 0xc9, - 0xdb, 0x30, 0x5c, 0xfa, 0xee, 0xae, 0x47, 0x85, 0x7c, 0x32, 0x21, 0xeb, 0x64, 0xb0, 0xa5, 0x73, - 0x82, 0x70, 0xda, 0x66, 0x3f, 0x55, 0xb9, 0x0e, 0xcb, 0x59, 0xcd, 0x1b, 0xab, 0x35, 0x21, 0x7b, - 0x90, 0x58, 0xb7, 0x6c, 0xac, 0x2a, 0x9f, 0x1d, 0x68, 0xad, 0x66, 0x54, 0xe4, 0x3a, 0x64, 0x4b, - 0x15, 0xbc, 0x11, 0x8d, 0x2f, 0x8e, 0xc9, 0x6a, 0x2b, 0x4b, 0x73, 0x82, 0x64, 0xc2, 0x56, 0x97, - 0x41, 0xb6, 0x54, 0x21, 0x4b, 0x30, 0x7c, 0xff, 0xb0, 0xf6, 0xc5, 0x55, 0xb1, 0x99, 0xcd, 0xca, - 0x79, 0xcd, 0x60, 0x0f, 0x70, 0xd9, 0xfb, 0xd1, 0x17, 0xb7, 0x0e, 0xfd, 0x6f, 0x34, 0xd5, 0x2f, - 0x46, 0x34, 0xb2, 0x0e, 0x63, 0xa5, 0x46, 0xcb, 0x69, 0x6f, 0xfa, 0xd4, 0x9b, 0x1f, 0x47, 0x3e, - 0xf3, 0xb1, 0xef, 0x0e, 0xcb, 0x97, 0xe6, 0x8f, 0x8f, 0x8a, 0x73, 0x36, 0xfb, 0x69, 0x75, 0x7d, - 0xea, 0x29, 0xdc, 0x22, 0x26, 0x64, 0x1d, 0xe0, 0xbe, 0xdb, 0xde, 0x75, 0x4b, 0x41, 0xd3, 0xf6, - 0x63, 0xdb, 0x63, 0x54, 0x10, 0x8a, 0x0f, 0x67, 0x5a, 0x0c, 0x66, 0xd9, 0x0c, 0xa8, 0x30, 0x54, - 0x78, 0x90, 0xdb, 0x30, 0xf2, 0xc0, 0xb3, 0xeb, 0x4d, 0x3a, 0x3f, 0x89, 0xdc, 0xe6, 0x04, 0x37, - 0x0e, 0x94, 0x2d, 0x9d, 0x17, 0x0c, 0x0b, 0x2e, 0x82, 0xd5, 0x6b, 0x0a, 0x47, 0x5c, 0xd8, 0x02, - 0x92, 0x9c, 0x93, 0x29, 0x97, 0x84, 0x4f, 0xa9, 0x97, 0x84, 0x68, 0xd1, 0x97, 0xdd, 0x56, 0xcb, - 0x6e, 0x37, 0x90, 0xf6, 0xe1, 0xa2, 0x72, 0x77, 0x30, 0xbe, 0x01, 0x33, 0x89, 0xce, 0x3a, 0xe1, - 0x7e, 0xf7, 0x1e, 0x4c, 0x57, 0xe8, 0x8e, 0xdd, 0x6d, 0x06, 0xe1, 0x49, 0xc2, 0x97, 0x28, 0xde, - 0xb4, 0x1a, 0xbc, 0xc8, 0x92, 0xc7, 0x87, 0x19, 0x47, 0x36, 0xde, 0x85, 0x49, 0xad, 0xf9, 0xec, - 0xaa, 0x50, 0xea, 0x36, 0x9c, 0x00, 0x07, 0x32, 0x13, 0x5d, 0x15, 0x6c, 0x06, 0xc4, 0xe1, 0x32, - 0x23, 0x04, 0xe3, 0xef, 0xa9, 0xd2, 0x8a, 0xd8, 0x89, 0xd8, 0xb5, 0x5a, 0xec, 0x07, 0x99, 0x48, - 0x76, 0x4a, 0xec, 0x07, 0xe1, 0x6e, 0x70, 0x95, 0xaf, 0xcd, 0x6c, 0x62, 0x6d, 0x8e, 0x8b, 0x91, - 0xc8, 0xd9, 0x07, 0x3e, 0x5f, 0x91, 0xe1, 0x4c, 0xcd, 0x7d, 0xf4, 0x99, 0xfa, 0x3e, 0x4c, 0xdc, - 0xb7, 0xdb, 0xf6, 0x2e, 0x6d, 0xb0, 0x16, 0xf0, 0xbd, 0x67, 0x6c, 0xe9, 0xf9, 0xe3, 0xa3, 0xe2, - 0xb9, 0x16, 0x87, 0x63, 0x2b, 0xd5, 0x49, 0xa4, 0x11, 0x90, 0x1b, 0x72, 0x65, 0x0f, 0xa7, 0xac, - 0xec, 0x49, 0x51, 0xfb, 0x30, 0xae, 0x6c, 0xb1, 0x9e, 0x8d, 0xdf, 0x19, 0xc3, 0x36, 0x92, 0xd7, - 0x61, 0xc4, 0xa4, 0xbb, 0xec, 0xa8, 0xc9, 0x44, 0x83, 0xe4, 0x21, 0x44, 0xed, 0x18, 0x8e, 0x83, - 0x72, 0x06, 0x6d, 0xf8, 0x7b, 0xce, 0x4e, 0x20, 0x7a, 0x27, 0x94, 0x33, 0x04, 0x58, 0x91, 0x33, - 0x04, 0x44, 0xbf, 0xce, 0x72, 0x18, 0xdb, 0xfd, 0xcc, 0x4a, 0x4d, 0x74, 0x9a, 0xec, 0x61, 0xb3, - 0xa2, 0x6c, 0x23, 0x9e, 0x26, 0x25, 0x30, 0x6c, 0x72, 0x0b, 0xc6, 0x4a, 0xf5, 0xba, 0xdb, 0x55, - 0xee, 0x8c, 0x7c, 0xdd, 0x72, 0xa0, 0xae, 0x22, 0x89, 0x50, 0x49, 0x0d, 0xc6, 0x97, 0xd9, 0x45, - 0xcb, 0x29, 0xdb, 0xf5, 0x3d, 0xd9, 0x49, 0x72, 0x0f, 0x53, 0x4a, 0xa2, 0x95, 0x4b, 0x11, 0x58, - 0x67, 0x40, 0x55, 0xc9, 0xa0, 0xe0, 0x92, 0x0d, 0x18, 0xaf, 0xd1, 0xba, 0x47, 0x83, 0x5a, 0xe0, - 0x7a, 0x34, 0xb6, 0x25, 0x2b, 0x25, 0x4b, 0x17, 0xe5, 0x5d, 0xcf, 0x47, 0xa0, 0xe5, 0x33, 0xa8, - 0xca, 0x55, 0x41, 0xe6, 0x42, 0x7b, 0xcb, 0xf5, 0x0e, 0x2b, 0x4b, 0x62, 0x9b, 0x8e, 0xce, 0x74, - 0x0e, 0x56, 0x85, 0x76, 0x06, 0x69, 0x6c, 0xeb, 0x42, 0x3b, 0xc7, 0xc2, 0x91, 0xaa, 0xd4, 0x50, - 0xb6, 0x12, 0x9b, 0xf6, 0x74, 0xd4, 0xcb, 0x08, 0x56, 0x46, 0xaa, 0xe1, 0xa3, 0x64, 0xa6, 0x8d, - 0x94, 0xc0, 0x22, 0x1d, 0x20, 0x72, 0xd4, 0xb8, 0xa0, 0xdb, 0xa4, 0xbe, 0x2f, 0xf6, 0xf2, 0xf3, - 0xb1, 0xc1, 0x8f, 0x10, 0x96, 0x5e, 0x11, 0xcc, 0x2f, 0xc8, 0x69, 0x20, 0xee, 0x69, 0xac, 0x50, - 0xa9, 0x27, 0x85, 0x37, 0x79, 0x0b, 0x60, 0xf9, 0x71, 0x40, 0xbd, 0xb6, 0xdd, 0x0c, 0xf5, 0x60, - 0xa8, 0xfa, 0xa1, 0x02, 0xaa, 0x0f, 0xb4, 0x82, 0x4c, 0xca, 0x30, 0x59, 0xf2, 0xfd, 0x6e, 0x8b, - 0x9a, 0x6e, 0x93, 0x96, 0xcc, 0x35, 0xdc, 0xf7, 0xc7, 0x96, 0x2e, 0x1c, 0x1f, 0x15, 0xcf, 0xdb, - 0x58, 0x60, 0x79, 0x6e, 0x93, 0x5a, 0xb6, 0xa7, 0xce, 0x6e, 0x9d, 0x86, 0x3c, 0x00, 0x78, 0xd0, - 0xa1, 0xed, 0x1a, 0xb5, 0xbd, 0xfa, 0x5e, 0x6c, 0x9b, 0x8f, 0x0a, 0x96, 0x5e, 0x10, 0x2d, 0x9c, - 0x73, 0x3b, 0xb4, 0xed, 0x23, 0x4c, 0xfd, 0xaa, 0x08, 0x93, 0x6c, 0xc1, 0x74, 0xb5, 0x74, 0x7f, - 0xdd, 0x6d, 0x3a, 0xf5, 0x43, 0x21, 0x39, 0x4d, 0xa1, 0x76, 0xf0, 0xac, 0xe0, 0x1a, 0x2b, 0xe5, - 0xdb, 0x93, 0x63, 0xb7, 0xac, 0x0e, 0x42, 0x2d, 0x21, 0x3f, 0xc5, 0xb9, 0x90, 0x0f, 0xd8, 0x1c, - 0xf4, 0x99, 0x30, 0xb8, 0x61, 0xef, 0xfa, 0xf3, 0xd3, 0x9a, 0xb6, 0xab, 0xb4, 0x55, 0xbb, 0xa6, - 0x94, 0x72, 0x31, 0x65, 0x81, 0x4f, 0x44, 0x84, 0x5a, 0x81, 0xbd, 0xeb, 0xeb, 0x13, 0x31, 0xc4, - 0x26, 0x77, 0x01, 0x2a, 0x6e, 0xbd, 0xdb, 0xa2, 0xed, 0xa0, 0xb2, 0x34, 0x5f, 0xd0, 0xaf, 0x02, - 0x61, 0x41, 0xb4, 0xb5, 0x35, 0xdc, 0xba, 0x36, 0x13, 0x15, 0xea, 0x85, 0xf7, 0xa0, 0x10, 0xff, - 0x90, 0x53, 0x2a, 0xb0, 0x26, 0x0b, 0x53, 0x4a, 0xeb, 0x97, 0x1f, 0x3b, 0x7e, 0xe0, 0x1b, 0xdf, - 0xd4, 0x56, 0x20, 0xdb, 0x1d, 0xee, 0xd1, 0xc3, 0x75, 0x8f, 0xee, 0x38, 0x8f, 0xc5, 0x66, 0x86, - 0xbb, 0xc3, 0x3e, 0x3d, 0xb4, 0x3a, 0x08, 0x55, 0x77, 0x87, 0x10, 0x95, 0x7c, 0x06, 0xf2, 0xf7, - 0xee, 0xd7, 0xee, 0xd1, 0xc3, 0x6a, 0x45, 0x1c, 0x54, 0x9c, 0xac, 0xe5, 0x5b, 0x8c, 0x54, 0x9b, - 0x6b, 0x21, 0xa6, 0xb1, 0x14, 0xed, 0x84, 0xac, 0xe6, 0x72, 0xb3, 0xeb, 0x07, 0xd4, 0xab, 0x56, - 0xd4, 0x9a, 0xeb, 0x1c, 0x18, 0xdb, 0x97, 0x42, 0x54, 0xe3, 0x5f, 0x67, 0x71, 0x17, 0x64, 0x13, - 0xbe, 0xda, 0xf6, 0x03, 0xbb, 0x5d, 0xa7, 0x21, 0x03, 0x9c, 0xf0, 0x8e, 0x80, 0xc6, 0x26, 0x7c, - 0x84, 0xac, 0x57, 0x9d, 0x1d, 0xb8, 0x6a, 0x56, 0xa5, 0xd4, 0x5c, 0x54, 0x2b, 0xaa, 0x7a, 0xd5, - 0x13, 0xd0, 0x58, 0x95, 0x11, 0x32, 0xb9, 0x0c, 0xa3, 0xd5, 0xd2, 0xfd, 0x52, 0x37, 0xd8, 0xc3, - 0x3d, 0x38, 0xcf, 0xe5, 0x73, 0x36, 0x5b, 0xed, 0x6e, 0xb0, 0x67, 0xca, 0x42, 0x72, 0x1d, 0xef, - 0x3d, 0x6d, 0x1a, 0x70, 0x35, 0xac, 0x38, 0x74, 0x7d, 0x0e, 0x8a, 0x5d, 0x7b, 0x18, 0x88, 0xbc, - 0x06, 0xc3, 0x0f, 0xd7, 0xcb, 0xd5, 0x8a, 0xb8, 0x38, 0xe3, 0x49, 0xf4, 0xa8, 0x53, 0xd7, 0xbf, - 0x84, 0xa3, 0x90, 0x65, 0x98, 0xaa, 0xd1, 0x7a, 0xd7, 0x73, 0x82, 0xc3, 0x3b, 0x9e, 0xdb, 0xed, - 0xf8, 0xf3, 0xa3, 0x58, 0x07, 0xae, 0x74, 0x5f, 0x94, 0x58, 0xbb, 0x58, 0xa4, 0x50, 0xc7, 0x88, - 0x8c, 0xdf, 0xcd, 0x44, 0xdb, 0x24, 0xb9, 0xac, 0x89, 0x35, 0xa8, 0xbb, 0x61, 0x62, 0x8d, 0xaa, - 0xbb, 0x41, 0x01, 0xc7, 0x04, 0x52, 0xee, 0xfa, 0x81, 0xdb, 0x5a, 0x6e, 0x37, 0x3a, 0xae, 0xd3, - 0x0e, 0x90, 0x8a, 0x77, 0xbe, 0x71, 0x7c, 0x54, 0xbc, 0x58, 0xc7, 0x52, 0x8b, 0x8a, 0x62, 0x2b, - 0xc6, 0x25, 0x85, 0xfa, 0x09, 0xc6, 0xc3, 0xf8, 0x83, 0xac, 0x76, 0xbc, 0xb1, 0xcf, 0x33, 0x69, - 0xa7, 0xe9, 0xd4, 0xf1, 0x46, 0x8f, 0x0d, 0x0d, 0x67, 0x15, 0x7e, 0x9e, 0x17, 0x95, 0xf2, 0x1e, - 0xd2, 0x79, 0xa7, 0x50, 0x93, 0x2f, 0xc0, 0x04, 0x93, 0x34, 0xc4, 0x4f, 0x7f, 0x3e, 0x8b, 0x9d, - 0xfd, 0x02, 0x6a, 0xe1, 0x7c, 0xea, 0x85, 0x6c, 0x34, 0x11, 0x45, 0xa5, 0x20, 0x0d, 0x98, 0xdf, - 0xf0, 0xec, 0xb6, 0xef, 0x04, 0xcb, 0xed, 0xba, 0x77, 0x88, 0x92, 0xd1, 0x72, 0xdb, 0xde, 0x6e, - 0xd2, 0x06, 0x36, 0x37, 0xbf, 0x74, 0xe5, 0xf8, 0xa8, 0xf8, 0x72, 0xc0, 0x71, 0x2c, 0x1a, 0x22, - 0x59, 0x94, 0x63, 0x29, 0x9c, 0x7b, 0x72, 0x62, 0x92, 0x94, 0xec, 0x56, 0x7c, 0x84, 0xe1, 0x42, - 0x02, 0x4a, 0x52, 0xe1, 0x68, 0xb0, 0x3d, 0x4c, 0xfd, 0x4c, 0x95, 0xc0, 0xf8, 0x7f, 0x33, 0xd1, - 0x01, 0x4c, 0xde, 0x81, 0x71, 0xb1, 0x62, 0x94, 0x79, 0x81, 0x3b, 0xa8, 0x5c, 0x5e, 0xb1, 0x91, - 0x55, 0xd1, 0xd9, 0xbd, 0xbf, 0x54, 0x5e, 0x55, 0xe6, 0x06, 0xde, 0xfb, 0xed, 0x7a, 0x33, 0x4e, - 0x25, 0xd1, 0xd8, 0x24, 0xd8, 0x58, 0xad, 0xe9, 0xbd, 0x82, 0x93, 0x20, 0x68, 0xfa, 0x29, 0xdd, - 0xa0, 0x20, 0x3f, 0x79, 0xc3, 0xff, 0x97, 0x4c, 0xda, 0x39, 0x4f, 0x96, 0x60, 0x72, 0xcb, 0xf5, - 0xf6, 0x71, 0x7c, 0x95, 0x4e, 0xc0, 0x91, 0x3f, 0x90, 0x05, 0xf1, 0x06, 0xe9, 0x24, 0xea, 0xb7, - 0x29, 0xbd, 0xa1, 0x7f, 0x5b, 0x8c, 0x83, 0x46, 0xc0, 0xc6, 0x21, 0xe4, 0x18, 0xae, 0x0e, 0x1c, - 0x87, 0xe8, 0x13, 0xb4, 0x29, 0xac, 0xa2, 0x1b, 0xff, 0x75, 0x46, 0x3d, 0xcf, 0x59, 0x27, 0x57, - 0xdc, 0x96, 0xed, 0xb4, 0x95, 0xe6, 0xf0, 0x87, 0x25, 0x84, 0xc6, 0xbf, 0x44, 0x41, 0x26, 0x37, - 0x21, 0xcf, 0x7f, 0x85, 0x7b, 0x2d, 0x6a, 0xb5, 0x04, 0xa1, 0x7e, 0x50, 0x48, 0xc4, 0xc4, 0xc8, - 0xe4, 0x4e, 0x3b, 0x32, 0xbf, 0x93, 0x51, 0x8f, 0xe2, 0x8f, 0x7a, 0xd8, 0xc4, 0x0e, 0x99, 0xec, - 0x69, 0x0e, 0x99, 0x27, 0x6e, 0xc2, 0xf7, 0x65, 0x60, 0x5c, 0xd1, 0x52, 0xb0, 0x36, 0xac, 0x7b, - 0xee, 0x87, 0xb4, 0x1e, 0xe8, 0x6d, 0xe8, 0x70, 0x60, 0xac, 0x0d, 0x21, 0xea, 0x13, 0xb4, 0xc1, - 0xf8, 0xf3, 0x8c, 0xb8, 0x23, 0x0d, 0xbc, 0xcd, 0xeb, 0x5b, 0x72, 0xf6, 0x34, 0x47, 0xe4, 0x17, - 0x60, 0xd8, 0xa4, 0x0d, 0xc7, 0x17, 0xf7, 0x9b, 0x19, 0xf5, 0x3e, 0x86, 0x05, 0x91, 0xdc, 0xe4, - 0xb1, 0x9f, 0xea, 0xf9, 0x86, 0xe5, 0x4c, 0x90, 0xad, 0xfa, 0xb7, 0x9b, 0xf4, 0xb1, 0xc3, 0x17, - 0xa3, 0x38, 0x6a, 0xf1, 0x78, 0x73, 0x7c, 0x6b, 0x87, 0x95, 0x08, 0x89, 0x5a, 0x5d, 0x78, 0x1a, - 0x8d, 0xf1, 0x01, 0x40, 0x54, 0x25, 0xb9, 0x07, 0x05, 0x31, 0x1b, 0x9c, 0xf6, 0x2e, 0x17, 0xa4, - 0x44, 0x1f, 0x14, 0x8f, 0x8f, 0x8a, 0xcf, 0xd7, 0xc3, 0x32, 0x21, 0x75, 0x2a, 0x7c, 0x13, 0x84, - 0xc6, 0x7f, 0x9c, 0x85, 0x6c, 0x09, 0x07, 0xe4, 0x1e, 0x3d, 0x0c, 0xec, 0xed, 0xdb, 0x4e, 0x53, - 0x5b, 0x4c, 0xfb, 0x08, 0xb5, 0x76, 0x1c, 0x4d, 0x5d, 0xa1, 0x20, 0xb3, 0xc5, 0x74, 0xcf, 0xdb, - 0x7e, 0x13, 0x09, 0x95, 0xc5, 0xb4, 0xef, 0x6d, 0xbf, 0x19, 0x27, 0x0b, 0x11, 0x89, 0x01, 0x23, - 0x7c, 0x61, 0x89, 0x39, 0x08, 0xc7, 0x47, 0xc5, 0x11, 0xbe, 0xfe, 0x4c, 0x51, 0x42, 0xce, 0x43, - 0xae, 0xb6, 0xbe, 0x26, 0x76, 0x40, 0x54, 0x0b, 0xfa, 0x9d, 0xb6, 0xc9, 0x60, 0xac, 0xce, 0xd5, - 0x4a, 0x69, 0x1d, 0x15, 0x01, 0xc3, 0x51, 0x9d, 0xcd, 0x86, 0xdd, 0x89, 0xab, 0x02, 0x42, 0x44, - 0xf2, 0x2e, 0x8c, 0xdf, 0xab, 0x94, 0x57, 0x5c, 0x9f, 0xef, 0x5e, 0x23, 0xd1, 0xe4, 0xdf, 0x6f, - 0xd4, 0x2d, 0xd4, 0xc4, 0xc7, 0x8f, 0x01, 0x05, 0xdf, 0xf8, 0xe1, 0x2c, 0x8c, 0x2b, 0x7a, 0x32, - 0xf2, 0x19, 0xf1, 0x40, 0x9a, 0xd1, 0x6e, 0x00, 0x0a, 0x06, 0x2b, 0xe5, 0x4a, 0x95, 0x96, 0xdb, - 0xa0, 0xe2, 0xb9, 0x34, 0x52, 0x60, 0x64, 0x07, 0x51, 0x60, 0xbc, 0x05, 0xc0, 0xe7, 0x00, 0x7e, - 0xb2, 0x22, 0x4e, 0x28, 0x76, 0x12, 0xea, 0xb8, 0x44, 0xc8, 0xe4, 0x21, 0xcc, 0x6e, 0x78, 0x5d, - 0x3f, 0xa8, 0x1d, 0xfa, 0x01, 0x6d, 0x31, 0x6e, 0xeb, 0xae, 0xdb, 0x14, 0xf3, 0xef, 0xe5, 0xe3, - 0xa3, 0xe2, 0x25, 0x34, 0xee, 0xb0, 0x7c, 0x2c, 0xc7, 0x0f, 0xb0, 0x3a, 0xae, 0xab, 0xaa, 0x35, - 0xd2, 0x18, 0x18, 0x26, 0x4c, 0xa8, 0x4a, 0x11, 0x76, 0xb2, 0x88, 0xc7, 0x24, 0xa1, 0xea, 0x56, - 0x4e, 0x16, 0xf1, 0x95, 0xc9, 0xc7, 0x2d, 0x9d, 0xc4, 0xf8, 0x8c, 0xaa, 0x90, 0x1b, 0x74, 0x61, - 0x1b, 0x3f, 0x90, 0x89, 0xb6, 0x91, 0x87, 0x37, 0xc8, 0xdb, 0x30, 0xc2, 0x1f, 0xef, 0xc4, 0x1b, - 0xe7, 0x99, 0xf0, 0x52, 0xab, 0xbe, 0xec, 0x71, 0x4d, 0xf8, 0x1f, 0xf1, 0x07, 0xfe, 0xe7, 0x4c, - 0x41, 0x12, 0x2a, 0xd1, 0x75, 0x7d, 0x9a, 0xe4, 0x8e, 0xea, 0xe2, 0x1b, 0x69, 0x4a, 0x74, 0xe3, - 0xc7, 0x87, 0x61, 0x4a, 0x47, 0x53, 0x5f, 0xf8, 0x32, 0x03, 0xbd, 0xf0, 0x7d, 0x01, 0xf2, 0xac, - 0x3f, 0x9c, 0x3a, 0x95, 0x12, 0xd9, 0xcb, 0xf8, 0xb4, 0x20, 0x60, 0xda, 0xcb, 0x35, 0xf0, 0xe1, - 0x60, 0x77, 0x5c, 0x33, 0xa4, 0x22, 0x8b, 0xca, 0x33, 0x54, 0x2e, 0x12, 0x52, 0xe4, 0x33, 0x94, - 0xba, 0x1e, 0xc2, 0x07, 0xa9, 0x37, 0x60, 0x84, 0xc9, 0xf7, 0xa1, 0x0a, 0x06, 0xbf, 0x92, 0x89, - 0xfe, 0x31, 0x13, 0x15, 0x8e, 0x44, 0xb6, 0x20, 0xbf, 0x6a, 0xfb, 0x41, 0x8d, 0xd2, 0xf6, 0x00, - 0x6f, 0xf7, 0x45, 0xd1, 0x55, 0xb3, 0xf8, 0x30, 0xee, 0x53, 0xda, 0x8e, 0x3d, 0xbe, 0x86, 0xcc, - 0xc8, 0x57, 0x01, 0xca, 0x6e, 0x3b, 0xf0, 0xdc, 0xe6, 0xaa, 0xbb, 0x3b, 0x3f, 0x82, 0x77, 0xdf, - 0x8b, 0xb1, 0x01, 0x88, 0x10, 0xf8, 0xf5, 0x37, 0x54, 0xf0, 0xd4, 0x79, 0x81, 0xd5, 0x74, 0x77, - 0xd5, 0x75, 0x10, 0xe1, 0x93, 0xdb, 0x50, 0x90, 0x8a, 0x85, 0xcd, 0xce, 0xae, 0x87, 0x13, 0x64, - 0x34, 0x92, 0x3c, 0xe8, 0xe3, 0xc0, 0xea, 0x0a, 0xb8, 0xba, 0x53, 0xc6, 0x69, 0xc8, 0x57, 0xe0, - 0x5c, 0x1c, 0x26, 0x47, 0x39, 0x1f, 0xc9, 0xe4, 0x2a, 0xbb, 0x94, 0x79, 0xdf, 0x8b, 0x05, 0xb9, - 0x03, 0xd3, 0xac, 0x43, 0xee, 0x53, 0xdb, 0xef, 0x72, 0x03, 0x2b, 0xa1, 0x9a, 0xb9, 0x20, 0x35, - 0x51, 0x7c, 0x15, 0x36, 0xdd, 0xfa, 0xbe, 0x82, 0x64, 0xc6, 0xa9, 0x8c, 0xa3, 0x2c, 0x9c, 0x4d, - 0xc7, 0x25, 0xdf, 0x0b, 0x67, 0x44, 0xbf, 0x34, 0xa9, 0xa7, 0xe0, 0x0c, 0x60, 0x13, 0xf0, 0x86, - 0xe8, 0xef, 0x17, 0xeb, 0x21, 0x83, 0x70, 0xe3, 0x60, 0x2c, 0x62, 0x83, 0x9b, 0x5e, 0x0f, 0xf9, - 0x3a, 0x8c, 0xab, 0xd5, 0x66, 0x07, 0x37, 0xaf, 0xe8, 0x53, 0x97, 0xca, 0x92, 0xd8, 0x30, 0x6d, - 0xd2, 0x6f, 0x74, 0xa9, 0x1f, 0x48, 0x03, 0x0f, 0x71, 0x74, 0x9f, 0x4f, 0xd4, 0x22, 0x11, 0x42, - 0xfd, 0x4f, 0xc1, 0xe3, 0x94, 0x96, 0x34, 0xc3, 0xfb, 0x16, 0x63, 0x1f, 0xe7, 0x67, 0x7c, 0x27, - 0x0b, 0xe7, 0x7a, 0x4c, 0x4b, 0xb6, 0x73, 0xa1, 0x60, 0xa5, 0xec, 0x5c, 0x31, 0x79, 0x8a, 0x5b, - 0x87, 0x5d, 0x82, 0xac, 0x10, 0x45, 0x86, 0x96, 0x0a, 0xc7, 0x47, 0xc5, 0x09, 0x6d, 0xc5, 0x65, - 0xab, 0x15, 0x72, 0x17, 0x86, 0x58, 0x37, 0x0c, 0x60, 0xe4, 0x20, 0xb5, 0x7f, 0x53, 0x81, 0xa3, - 0x2e, 0x74, 0xec, 0x1b, 0xe4, 0x41, 0x3e, 0x03, 0xb9, 0x8d, 0x8d, 0x55, 0x5c, 0xe5, 0x39, 0x9c, - 0xa5, 0x93, 0x41, 0xd0, 0xd4, 0x36, 0x95, 0x49, 0x46, 0x1b, 0xf6, 0x88, 0xc9, 0xd0, 0xc9, 0x97, - 0x62, 0xc6, 0x57, 0xaf, 0xf5, 0x5f, 0x92, 0x83, 0xdb, 0x62, 0x3d, 0x81, 0x09, 0x94, 0xf1, 0x0b, - 0xd9, 0x68, 0xb7, 0xbd, 0xed, 0x34, 0x03, 0xea, 0x91, 0x05, 0xbe, 0x79, 0x46, 0x62, 0xb4, 0x19, - 0xfe, 0x26, 0xf3, 0xd1, 0x4e, 0xcc, 0x59, 0x85, 0x5b, 0xee, 0x6b, 0xca, 0x96, 0x9b, 0xc3, 0x2d, - 0x77, 0xaa, 0xe7, 0xe6, 0xfa, 0x5a, 0xca, 0x0e, 0x82, 0x5b, 0x66, 0xca, 0x2e, 0xf1, 0x32, 0x4c, - 0xae, 0xb9, 0xcb, 0x8f, 0x83, 0x10, 0x91, 0x6d, 0x95, 0x79, 0x53, 0x07, 0x32, 0x8e, 0x0f, 0x9a, - 0x0d, 0xea, 0x6d, 0xec, 0xd9, 0x6d, 0xcd, 0xca, 0xc0, 0x4c, 0xc0, 0x19, 0xee, 0x1a, 0x3d, 0xd0, - 0x71, 0x47, 0x39, 0x6e, 0x1c, 0x6e, 0x7c, 0x7f, 0x56, 0x76, 0xc6, 0xc3, 0xc5, 0x67, 0xf4, 0x35, - 0xfb, 0x4d, 0xed, 0x35, 0x7b, 0x36, 0xd4, 0xc3, 0x87, 0xa6, 0x19, 0x8b, 0x27, 0x58, 0x74, 0xfc, - 0xbd, 0x11, 0x98, 0x50, 0xd1, 0x59, 0x3f, 0x94, 0x1a, 0x0d, 0x4f, 0xed, 0x07, 0xbb, 0xd1, 0xf0, - 0x4c, 0x84, 0x6a, 0x06, 0x1c, 0xb9, 0xbe, 0x06, 0x1c, 0x5f, 0x83, 0xb1, 0x72, 0xab, 0xa1, 0x3d, - 0x2b, 0x1b, 0x29, 0x9f, 0x77, 0x2d, 0x44, 0xe2, 0x6b, 0x21, 0x54, 0x2f, 0xd7, 0x5b, 0x8d, 0xe4, - 0x63, 0x72, 0xc4, 0x52, 0xb3, 0xfd, 0x18, 0x7e, 0x12, 0xdb, 0x8f, 0x5b, 0x30, 0xb6, 0xe9, 0xd3, - 0x8d, 0x6e, 0xbb, 0x4d, 0x9b, 0x38, 0xad, 0xf2, 0xfc, 0x56, 0xd6, 0xf5, 0xa9, 0x15, 0x20, 0x54, - 0xfd, 0x80, 0x10, 0x55, 0x1d, 0xe0, 0xd1, 0x3e, 0x03, 0x7c, 0x13, 0xf2, 0xeb, 0x94, 0x7a, 0xd8, - 0xa7, 0xe3, 0x91, 0xf0, 0xdd, 0xa1, 0xd4, 0xb3, 0x58, 0xc7, 0x6a, 0x36, 0x21, 0x02, 0x51, 0x33, - 0x24, 0x99, 0x18, 0xd0, 0x90, 0x84, 0xbc, 0x08, 0x13, 0x9d, 0xee, 0x76, 0xd3, 0xa9, 0x23, 0x5f, - 0x61, 0x81, 0x62, 0x8e, 0x73, 0x18, 0x63, 0xeb, 0x93, 0x2f, 0xc1, 0x24, 0xde, 0x46, 0xc3, 0x29, - 0x37, 0xa5, 0xbd, 0xbf, 0x6a, 0x65, 0x5c, 0x26, 0xad, 0x33, 0x90, 0x95, 0x62, 0x28, 0xa5, 0x33, - 0x22, 0x77, 0x61, 0x74, 0xd7, 0x09, 0xac, 0xbd, 0xee, 0xf6, 0xfc, 0xb4, 0x66, 0x65, 0x74, 0xc7, - 0x09, 0x56, 0xba, 0xdb, 0x7c, 0xc8, 0x43, 0xd6, 0xb8, 0xe3, 0xed, 0x3a, 0xc1, 0x5e, 0x57, 0x55, - 0x9e, 0x8f, 0xec, 0x22, 0xee, 0x42, 0x0d, 0xa6, 0xf4, 0x59, 0xf1, 0x14, 0x9e, 0x74, 0x43, 0x03, - 0x9b, 0x7c, 0x61, 0xec, 0xee, 0x50, 0x1e, 0x0a, 0xe3, 0xdc, 0xb4, 0xc6, 0x84, 0xf5, 0xb0, 0x7f, - 0x4c, 0x72, 0xaf, 0xbb, 0x4d, 0xbd, 0x36, 0x0d, 0xa8, 0x2f, 0xae, 0x7e, 0xbe, 0x39, 0x54, 0xea, - 0x74, 0x7c, 0xe3, 0x3f, 0xcb, 0xc2, 0x68, 0x69, 0xab, 0x56, 0x6d, 0xef, 0xb8, 0xf8, 0x30, 0x1b, - 0xbe, 0xc7, 0xa9, 0x0f, 0xb3, 0xe1, 0x7b, 0x9c, 0xfa, 0x0a, 0x77, 0x3d, 0xe5, 0xf2, 0x8e, 0xb6, - 0xdb, 0xca, 0xe5, 0x5d, 0x53, 0x3b, 0x44, 0x4f, 0x93, 0xb9, 0x01, 0x9e, 0x26, 0x43, 0xed, 0xf1, - 0xd0, 0xc9, 0xda, 0xe3, 0xb7, 0x61, 0xbc, 0xda, 0x0e, 0xe8, 0xae, 0x17, 0xad, 0x9a, 0x50, 0x91, - 0x10, 0x82, 0xd5, 0x0b, 0x9d, 0x82, 0xcd, 0xa6, 0x24, 0xd7, 0x58, 0x87, 0x9a, 0x6a, 0x9c, 0x92, - 0x5c, 0xb1, 0x1d, 0xd3, 0x02, 0x49, 0x44, 0xa3, 0x12, 0x9b, 0x6f, 0xd2, 0xfc, 0x83, 0x8b, 0x50, - 0x53, 0xd1, 0x93, 0x0d, 0xeb, 0xd8, 0xa5, 0x99, 0x74, 0xf3, 0x0f, 0xe3, 0x6f, 0x65, 0x60, 0x2e, - 0x6d, 0x1a, 0x91, 0xf7, 0x60, 0xc2, 0xf5, 0x76, 0xed, 0xb6, 0xf3, 0xdd, 0xbc, 0x45, 0x8a, 0xaa, - 0x52, 0x85, 0xab, 0x0a, 0x1a, 0x15, 0xce, 0x3a, 0x44, 0x69, 0xb9, 0xae, 0x59, 0x49, 0xed, 0x10, - 0x05, 0x6c, 0xfc, 0x48, 0x16, 0xc6, 0x4b, 0x9d, 0xce, 0x33, 0x6e, 0x1a, 0xf8, 0x39, 0xed, 0x00, - 0x91, 0xf7, 0xf2, 0xb0, 0x5d, 0x03, 0x59, 0x05, 0xfe, 0x5a, 0x16, 0xa6, 0x63, 0x14, 0xea, 0xd7, - 0x67, 0x06, 0x34, 0x08, 0xcc, 0x0e, 0x68, 0x10, 0x98, 0x1b, 0xcc, 0x20, 0x70, 0xe8, 0x49, 0x0e, - 0x85, 0x57, 0x21, 0x57, 0xea, 0x74, 0xe2, 0x86, 0x05, 0x9d, 0xce, 0xc3, 0x9b, 0x5c, 0xb7, 0x62, - 0x77, 0x3a, 0x26, 0xc3, 0xd0, 0x76, 0xea, 0x91, 0x01, 0x77, 0x6a, 0xe3, 0x0d, 0x18, 0x43, 0x5e, - 0x68, 0x86, 0x77, 0x09, 0x70, 0x8b, 0x11, 0x16, 0x78, 0x5a, 0x5d, 0x62, 0xf3, 0xf9, 0xff, 0x33, - 0x30, 0x8c, 0xbf, 0x9f, 0xd1, 0x39, 0xb6, 0xa8, 0xcd, 0xb1, 0x82, 0x32, 0xc7, 0x06, 0x99, 0x5d, - 0xff, 0x20, 0x07, 0x50, 0x7e, 0x60, 0xd6, 0xb8, 0x0a, 0x8e, 0xdc, 0x86, 0x69, 0xbb, 0xd9, 0x74, - 0x0f, 0x68, 0xc3, 0x72, 0x3d, 0x67, 0xd7, 0x69, 0xf3, 0x9e, 0x93, 0xaf, 0xdd, 0x7a, 0x91, 0xfa, - 0x06, 0x26, 0x8a, 0x1e, 0xf0, 0x12, 0x95, 0x4f, 0x8b, 0x06, 0x7b, 0x6e, 0x43, 0x2a, 0x13, 0x34, - 0x3e, 0xa2, 0x28, 0x85, 0xcf, 0x7d, 0x5e, 0xa2, 0xf2, 0xd9, 0x43, 0xe5, 0x88, 0x94, 0x90, 0x35, - 0x3e, 0xa2, 0x28, 0x85, 0x0f, 0xd7, 0xa8, 0xf8, 0x64, 0x15, 0x66, 0x10, 0x62, 0xd5, 0x3d, 0xda, - 0xa0, 0xed, 0xc0, 0xb1, 0x9b, 0xbe, 0x50, 0x3f, 0xa1, 0xa2, 0x32, 0x51, 0xa8, 0x5e, 0xbf, 0xb1, - 0xb0, 0x1c, 0x95, 0x91, 0x6b, 0x30, 0xda, 0xb2, 0x1f, 0x5b, 0xf6, 0x2e, 0xb7, 0xfb, 0x98, 0xe4, - 0xea, 0x0a, 0x01, 0x52, 0x8f, 0x91, 0x96, 0xfd, 0xb8, 0xb4, 0x4b, 0x59, 0x2b, 0xe8, 0xe3, 0x8e, - 0xeb, 0x2b, 0xad, 0x18, 0x89, 0x5a, 0x11, 0x2b, 0x52, 0x5b, 0x21, 0x8a, 0x44, 0x2b, 0x8c, 0x5f, - 0xcd, 0xc0, 0xf3, 0x55, 0xfc, 0x8a, 0xe0, 0xb0, 0x4c, 0xdb, 0x01, 0xf5, 0xd6, 0xa9, 0xd7, 0x72, - 0xf0, 0x15, 0xbc, 0x46, 0x03, 0xf2, 0x12, 0xe4, 0x4a, 0xe6, 0x9a, 0x98, 0xbf, 0x7c, 0xbf, 0xd7, - 0x6c, 0x12, 0x58, 0x69, 0xa8, 0xd1, 0xca, 0x9e, 0xa0, 0xaa, 0x2e, 0xc1, 0x44, 0xc9, 0xf7, 0x9d, - 0xdd, 0x76, 0x8b, 0xfb, 0x53, 0xe4, 0x34, 0xab, 0x07, 0x01, 0x4f, 0xbc, 0xb1, 0xa8, 0x24, 0xc6, - 0x7f, 0x9e, 0x81, 0x99, 0x52, 0xa7, 0xa3, 0x7f, 0xb2, 0x6e, 0x71, 0x93, 0x19, 0xdc, 0xe2, 0xc6, - 0x81, 0x29, 0xad, 0xb9, 0x7c, 0x4a, 0x45, 0x82, 0x6f, 0x9f, 0x9e, 0xe1, 0x9f, 0xdd, 0x09, 0x41, - 0x96, 0xaf, 0x3f, 0x17, 0xc7, 0x18, 0x1b, 0xff, 0xc1, 0x28, 0xee, 0x21, 0x62, 0xb7, 0x15, 0x36, - 0xa1, 0x99, 0x14, 0x9b, 0xd0, 0xb7, 0x40, 0x91, 0x70, 0xd4, 0x23, 0x4e, 0x91, 0x15, 0x55, 0x5d, - 0x50, 0x84, 0x4c, 0xf6, 0xe3, 0xd6, 0xa1, 0x39, 0x6c, 0xcd, 0x4b, 0xf1, 0x05, 0xfc, 0x54, 0x0c, - 0x43, 0x57, 0x80, 0x54, 0xdb, 0xf8, 0x84, 0x4d, 0x6b, 0xfb, 0x4e, 0xe7, 0x21, 0xf5, 0x9c, 0x9d, - 0x43, 0xb1, 0x00, 0xb0, 0xf3, 0x1d, 0x51, 0x6a, 0xf9, 0xfb, 0x4e, 0xc7, 0x7a, 0x84, 0xe5, 0x66, - 0x0a, 0x0d, 0x79, 0x1f, 0x46, 0x4d, 0x7a, 0xe0, 0x39, 0x81, 0xb4, 0x79, 0x9a, 0x0a, 0x55, 0x9b, - 0x08, 0xe5, 0x6b, 0xc1, 0xe3, 0x3f, 0xd4, 0x5d, 0x51, 0x94, 0x93, 0x45, 0x2e, 0xa4, 0x70, 0xdb, - 0xa6, 0xc9, 0xa8, 0xb5, 0xa5, 0xad, 0x5a, 0x2f, 0x19, 0x85, 0x5c, 0x85, 0x61, 0x94, 0x74, 0xc4, - 0x5d, 0x00, 0x7d, 0x85, 0x50, 0x76, 0x56, 0xc5, 0x30, 0xc4, 0x20, 0x17, 0x01, 0xc2, 0x37, 0x62, - 0x7f, 0x3e, 0x8f, 0x52, 0xba, 0x02, 0x89, 0x8b, 0x69, 0x63, 0xa7, 0x12, 0xd3, 0x56, 0xa1, 0x60, - 0x72, 0xb7, 0xc3, 0x46, 0xa9, 0x83, 0x0f, 0x91, 0xfe, 0x3c, 0xe0, 0x4a, 0xbe, 0x74, 0x7c, 0x54, - 0x7c, 0x41, 0xb8, 0x24, 0x36, 0x2c, 0xbb, 0xc3, 0xdf, 0x2f, 0xb5, 0x6d, 0x24, 0x4e, 0x49, 0xde, - 0x82, 0x21, 0xb6, 0xf5, 0x0a, 0x3b, 0x52, 0xf9, 0xa0, 0x13, 0xed, 0xc6, 0x7c, 0x71, 0xd6, 0x5d, - 0x6d, 0x4f, 0x40, 0x12, 0x62, 0xc1, 0x94, 0x3e, 0xdd, 0x85, 0x49, 0xd1, 0x7c, 0xd4, 0x9f, 0x7a, - 0xb9, 0x78, 0xe5, 0x11, 0x30, 0xab, 0x8e, 0x40, 0x75, 0x05, 0xc4, 0x16, 0xe9, 0x32, 0xe4, 0x37, - 0xca, 0xeb, 0xeb, 0xae, 0x17, 0xf0, 0xab, 0x4e, 0x74, 0xb2, 0x30, 0x98, 0x69, 0xb7, 0x77, 0x29, - 0x3f, 0x8b, 0x83, 0x7a, 0xc7, 0xea, 0x30, 0x34, 0xf5, 0x2c, 0x96, 0xa4, 0x1f, 0x9f, 0x0d, 0xe9, - 0xaf, 0x65, 0xe1, 0xa5, 0x50, 0x2a, 0x7a, 0xe0, 0xd5, 0x4a, 0xf7, 0x57, 0xab, 0x8d, 0x75, 0xa1, - 0x26, 0x59, 0xf7, 0xdc, 0x47, 0x4e, 0x83, 0x7a, 0x0f, 0x6f, 0x9c, 0x70, 0xa6, 0xaf, 0xf2, 0x65, - 0xce, 0x5f, 0xc3, 0xb2, 0x9a, 0xb5, 0x9d, 0x22, 0x7c, 0x8a, 0xed, 0xa9, 0xd3, 0x49, 0x3c, 0x8e, - 0xad, 0x3c, 0x67, 0x46, 0x0c, 0xc8, 0x0f, 0x64, 0xe0, 0x6c, 0xfa, 0x87, 0x08, 0xd5, 0x59, 0x51, - 0x5e, 0xd1, 0x7b, 0x7c, 0xed, 0xd2, 0xab, 0xc7, 0x47, 0xc5, 0x97, 0x7c, 0xbb, 0xd5, 0xb4, 0x9c, - 0x06, 0xaf, 0xcd, 0xa9, 0x53, 0xab, 0x23, 0x10, 0xb4, 0x7a, 0x7b, 0xd4, 0xf4, 0x79, 0x90, 0x47, - 0xfb, 0x7c, 0x66, 0x09, 0x20, 0x2f, 0x1f, 0x1c, 0x8c, 0xdf, 0xcc, 0x80, 0xb2, 0x04, 0xf3, 0x26, - 0x6d, 0x38, 0x1e, 0xad, 0x07, 0xe2, 0x78, 0x17, 0xbe, 0x82, 0x1c, 0x16, 0x33, 0xae, 0x44, 0x18, - 0x79, 0x0f, 0x46, 0xc5, 0x31, 0x24, 0xb6, 0x5d, 0xb9, 0x74, 0xc5, 0x53, 0x06, 0x77, 0x2a, 0x4d, - 0x1c, 0x61, 0x92, 0x88, 0xed, 0xfa, 0x77, 0xb7, 0x36, 0xca, 0x4d, 0xdb, 0x69, 0xf9, 0xe2, 0x2c, - 0xc1, 0x6e, 0xfd, 0xf0, 0x20, 0xb0, 0xea, 0x08, 0x55, 0x77, 0xfd, 0x10, 0xd5, 0xb8, 0x23, 0x5f, - 0x52, 0x4e, 0xb0, 0x10, 0x2e, 0xc2, 0xf0, 0xc3, 0x48, 0x4f, 0xb7, 0x34, 0x76, 0x7c, 0x54, 0xe4, - 0xd3, 0xc5, 0xe4, 0x70, 0x83, 0xc2, 0x58, 0x38, 0x75, 0x19, 0x2f, 0xf6, 0x03, 0x79, 0x4d, 0x72, - 0x5e, 0x6c, 0x12, 0x9b, 0x08, 0x65, 0xa2, 0xde, 0x72, 0xbb, 0x81, 0x08, 0x59, 0x44, 0xc0, 0xee, - 0xa1, 0xed, 0x06, 0xce, 0x74, 0xb5, 0x75, 0x02, 0x4d, 0x11, 0xa8, 0x7e, 0x2c, 0x03, 0x53, 0xfa, - 0xb4, 0x25, 0xd7, 0x60, 0x44, 0xb8, 0x03, 0x66, 0x50, 0xed, 0xc9, 0xb8, 0x8d, 0x70, 0x47, 0x40, - 0xcd, 0xfd, 0x4f, 0x60, 0x31, 0xb9, 0x51, 0x70, 0x10, 0x42, 0x13, 0xca, 0x8d, 0x75, 0x0e, 0x32, - 0x65, 0x19, 0x31, 0xd8, 0x55, 0xd6, 0xef, 0x36, 0x03, 0xf5, 0xdd, 0xd2, 0x43, 0x88, 0x29, 0x4a, - 0x8c, 0x32, 0x8c, 0xf0, 0xad, 0x35, 0x66, 0x00, 0x99, 0x39, 0x85, 0x01, 0xa4, 0x71, 0x94, 0x01, - 0xa8, 0xd5, 0x56, 0xee, 0xd1, 0xc3, 0x75, 0xdb, 0xc1, 0xf3, 0x9b, 0x1f, 0x63, 0xf7, 0xc4, 0x1a, - 0x9e, 0x10, 0x0f, 0xed, 0xfc, 0xc8, 0xdb, 0xa7, 0x87, 0xda, 0x43, 0xbb, 0x44, 0xc5, 0xb3, 0xd2, - 0x73, 0x1e, 0xd9, 0x01, 0x65, 0x84, 0x59, 0x24, 0xe4, 0x67, 0x25, 0x87, 0xc6, 0x28, 0x15, 0x64, - 0xf2, 0x55, 0x98, 0x8a, 0x7e, 0x85, 0xe6, 0x02, 0x53, 0xe1, 0x3e, 0xa1, 0x17, 0x2e, 0x5d, 0x3c, - 0x3e, 0x2a, 0x2e, 0x28, 0x5c, 0xe3, 0x86, 0x04, 0x31, 0x66, 0xc6, 0x2f, 0x67, 0xd0, 0x48, 0x46, - 0x36, 0xf0, 0x32, 0x0c, 0x85, 0x66, 0xdd, 0x13, 0x62, 0x13, 0xd6, 0x9f, 0x44, 0xb1, 0x9c, 0x89, - 0x5b, 0x51, 0x4b, 0xf0, 0xe8, 0xd2, 0x5b, 0xc0, 0x4a, 0xc9, 0x1d, 0x18, 0x1d, 0xe8, 0x9b, 0x71, - 0x8a, 0xa5, 0x7c, 0xab, 0xa4, 0xc6, 0x51, 0xb8, 0xbb, 0xb5, 0xf1, 0xc9, 0x1d, 0x85, 0x9f, 0xcc, - 0xc2, 0x34, 0xeb, 0xd7, 0x52, 0x37, 0xd8, 0x73, 0x3d, 0x27, 0x38, 0x7c, 0x66, 0xf5, 0xc6, 0xef, - 0x68, 0x57, 0xb2, 0x05, 0x79, 0x98, 0xa9, 0x6d, 0x1b, 0x48, 0x7d, 0xfc, 0x4f, 0x87, 0x61, 0x36, - 0x85, 0x8a, 0xbc, 0xae, 0x3d, 0xed, 0xcc, 0x4b, 0x77, 0xff, 0xef, 0x1c, 0x15, 0x27, 0x24, 0xfa, - 0x46, 0xe4, 0xfe, 0xbf, 0xa8, 0x5b, 0x9c, 0xf1, 0x9e, 0xc2, 0x97, 0x1e, 0xd5, 0xe2, 0x4c, 0xb7, - 0x33, 0xbb, 0x0a, 0xc3, 0xa6, 0xdb, 0xa4, 0xd2, 0xca, 0x12, 0x05, 0x2e, 0x8f, 0x01, 0x34, 0xab, - 0x12, 0x06, 0x20, 0x2b, 0x30, 0xca, 0xfe, 0xb8, 0x6f, 0x77, 0xc4, 0x7b, 0x29, 0x09, 0x95, 0x02, - 0x08, 0xed, 0x38, 0xed, 0x5d, 0x55, 0x2f, 0xd0, 0xa4, 0x56, 0xcb, 0xee, 0x68, 0x92, 0x21, 0x47, - 0xd4, 0xf4, 0x0b, 0xf9, 0xde, 0xfa, 0x85, 0xcc, 0x89, 0xfa, 0x85, 0x1d, 0x80, 0x9a, 0xb3, 0xdb, - 0x76, 0xda, 0xbb, 0xa5, 0xe6, 0xae, 0x08, 0x9a, 0x70, 0xb5, 0xf7, 0x28, 0x5c, 0x8b, 0x90, 0x71, - 0xe2, 0x3e, 0x8f, 0x46, 0x0d, 0x1c, 0x66, 0xd9, 0xcd, 0x5d, 0xcd, 0xb9, 0x4b, 0xe1, 0x4c, 0xd6, - 0x00, 0x4a, 0xf5, 0xc0, 0x79, 0xc4, 0xa6, 0xb0, 0x2f, 0xc4, 0x38, 0xf9, 0xc9, 0xe5, 0xd2, 0x3d, - 0x7a, 0x88, 0x57, 0x0f, 0xf9, 0x3c, 0x6c, 0x23, 0x2a, 0x5b, 0x09, 0x9a, 0xe7, 0x4e, 0xc4, 0x81, - 0x74, 0xe0, 0x4c, 0xa9, 0xd1, 0x70, 0x58, 0x1b, 0xec, 0xe6, 0x06, 0x0f, 0x77, 0x81, 0xac, 0x27, - 0xd2, 0x59, 0x5f, 0x95, 0x2f, 0xa1, 0x76, 0x48, 0x65, 0xc9, 0x28, 0x19, 0xb1, 0x6a, 0xd2, 0x19, - 0x1b, 0x35, 0x98, 0xd2, 0x1b, 0xaf, 0x07, 0x7b, 0x98, 0x80, 0xbc, 0x59, 0x2b, 0x59, 0xb5, 0x95, - 0xd2, 0x8d, 0x42, 0x86, 0x14, 0x60, 0x42, 0xfc, 0x5a, 0xb4, 0x16, 0xdf, 0xbc, 0x55, 0xc8, 0x6a, - 0x90, 0x37, 0x6f, 0x2c, 0x16, 0x72, 0x0b, 0xd9, 0xf9, 0x4c, 0xcc, 0xcf, 0x72, 0xb4, 0x90, 0xe7, - 0x2a, 0x61, 0xe3, 0xd7, 0x33, 0x90, 0x97, 0xdf, 0x4e, 0x6e, 0x41, 0xae, 0x56, 0x5b, 0x89, 0x79, - 0x46, 0x46, 0xa7, 0x0c, 0xdf, 0x4f, 0x7d, 0x5f, 0x35, 0x7f, 0x67, 0x04, 0x8c, 0x6e, 0x63, 0xb5, - 0x26, 0x64, 0x10, 0x49, 0x17, 0x6d, 0xde, 0x9c, 0x2e, 0xc5, 0x5d, 0xec, 0x16, 0xe4, 0xee, 0x6e, - 0x6d, 0x88, 0x4b, 0x96, 0xa4, 0x8b, 0xf6, 0x53, 0x4e, 0xf7, 0xe1, 0x81, 0xba, 0xcb, 0x33, 0x02, - 0xc3, 0x84, 0x71, 0x65, 0x22, 0xf3, 0x43, 0xb7, 0xe5, 0x86, 0x11, 0x0e, 0xc4, 0xa1, 0xcb, 0x20, - 0xa6, 0x28, 0x61, 0xa2, 0xc8, 0xaa, 0x5b, 0xb7, 0x9b, 0xe2, 0xf4, 0x46, 0x51, 0xa4, 0xc9, 0x00, - 0x26, 0x87, 0x1b, 0xbf, 0x9b, 0x81, 0x02, 0x0a, 0x6c, 0x68, 0xbe, 0xee, 0xee, 0xd3, 0xf6, 0xc3, - 0x1b, 0xe4, 0x0d, 0xb9, 0xe4, 0x32, 0xa1, 0xa2, 0x6b, 0x18, 0x97, 0x5c, 0xec, 0x2d, 0x50, 0x2c, - 0x3b, 0x25, 0x88, 0x44, 0x76, 0x70, 0xe7, 0xf3, 0x13, 0x82, 0x48, 0x14, 0x61, 0x18, 0x3f, 0x47, - 0x6c, 0x8e, 0xf8, 0xe5, 0x01, 0x03, 0x98, 0x1c, 0xae, 0xec, 0x4d, 0x3f, 0x9d, 0x4d, 0xb4, 0x61, - 0xf1, 0x13, 0xe5, 0xc0, 0xad, 0x37, 0x6e, 0xa0, 0xfd, 0xfa, 0x03, 0x98, 0x8b, 0x77, 0x09, 0x2a, - 0x21, 0x4b, 0x30, 0xad, 0xc3, 0xa5, 0x3e, 0xf2, 0x5c, 0x6a, 0x5d, 0x0f, 0x17, 0xcd, 0x38, 0xbe, - 0xf1, 0x7f, 0x64, 0x60, 0x0c, 0xff, 0x34, 0xbb, 0x4d, 0x34, 0x23, 0x2c, 0x6d, 0xd5, 0x84, 0x6a, - 0x44, 0x15, 0xe6, 0xec, 0x03, 0xdf, 0x12, 0x7a, 0x14, 0x6d, 0x8f, 0x09, 0x91, 0x05, 0x29, 0x7f, - 0xdf, 0x90, 0x4a, 0xb9, 0x90, 0x94, 0x3f, 0x84, 0xf8, 0x31, 0x52, 0x81, 0x8c, 0xc6, 0xc7, 0x5b, - 0x35, 0x36, 0xfd, 0x54, 0xbb, 0x1e, 0xa4, 0x73, 0x9b, 0xba, 0xf1, 0x31, 0x47, 0x43, 0xb3, 0x9e, - 0xad, 0x5a, 0xc9, 0x5c, 0xd3, 0xcc, 0x7a, 0xd8, 0x37, 0x6a, 0x7a, 0x29, 0x81, 0x64, 0xfc, 0xc2, - 0x78, 0xbc, 0x03, 0xc5, 0x81, 0x77, 0xca, 0xb5, 0xf1, 0x36, 0x0c, 0x97, 0x9a, 0x4d, 0xf7, 0x40, - 0xec, 0x12, 0xf2, 0xe6, 0x1a, 0xf6, 0x1f, 0x3f, 0xcf, 0x50, 0xad, 0xa7, 0x39, 0xa5, 0x32, 0x00, - 0x29, 0xc3, 0x58, 0x69, 0xab, 0x56, 0xad, 0x56, 0x36, 0x36, 0xb8, 0x03, 0x5e, 0x6e, 0xe9, 0x15, - 0xd9, 0x3f, 0x8e, 0xd3, 0xb0, 0xe2, 0xf6, 0x0a, 0x91, 0xfc, 0x1e, 0xd1, 0x91, 0x77, 0x01, 0xee, - 0xba, 0x4e, 0x9b, 0xab, 0x31, 0x45, 0xe3, 0xd9, 0x0d, 0x7c, 0xfc, 0x43, 0xd7, 0x69, 0x0b, 0xbd, - 0x27, 0xfb, 0xf6, 0x08, 0xc9, 0x54, 0xfe, 0x66, 0x3d, 0xbd, 0xe4, 0x72, 0xd3, 0xc0, 0xe1, 0xa8, - 0xa7, 0xb7, 0xdd, 0x84, 0xbe, 0x4d, 0xa2, 0x91, 0x16, 0x4c, 0xd7, 0xba, 0xbb, 0xbb, 0x94, 0xed, - 0xec, 0x42, 0x9f, 0x34, 0x22, 0xae, 0xd2, 0x61, 0xd8, 0x23, 0x7e, 0x1f, 0x61, 0x97, 0x21, 0x7f, - 0xe9, 0x75, 0x36, 0x91, 0xbf, 0x7d, 0x54, 0x14, 0x76, 0x10, 0x4c, 0x54, 0xf3, 0x25, 0x7d, 0x52, - 0x9b, 0x14, 0xe7, 0x4d, 0x1e, 0xc0, 0x08, 0x7f, 0x33, 0x12, 0x0e, 0x65, 0x2f, 0xf6, 0x59, 0x34, - 0x1c, 0xb1, 0xd7, 0xab, 0x24, 0x2f, 0x25, 0x5b, 0x90, 0x2f, 0x3b, 0x5e, 0xbd, 0x49, 0xcb, 0x55, - 0x71, 0xf6, 0xbf, 0xd4, 0x87, 0xa5, 0x44, 0xe5, 0xfd, 0x52, 0xc7, 0x5f, 0x75, 0x47, 0x95, 0x05, - 0x24, 0x06, 0xf9, 0x5b, 0x19, 0x78, 0x3e, 0xfc, 0xfa, 0xd2, 0x2e, 0x6d, 0x07, 0xf7, 0xed, 0xa0, - 0xbe, 0x47, 0x3d, 0xd1, 0x4b, 0x63, 0xfd, 0x7a, 0xe9, 0xf3, 0x89, 0x5e, 0xba, 0x12, 0xf5, 0x92, - 0xcd, 0x98, 0x59, 0x2d, 0xce, 0x2d, 0xd9, 0x67, 0xfd, 0x6a, 0x25, 0x16, 0x40, 0xf4, 0x1a, 0x2a, - 0x1c, 0x92, 0x5f, 0xe9, 0xd3, 0xe0, 0x08, 0x59, 0x38, 0x12, 0x85, 0xbf, 0x35, 0x4b, 0xd8, 0x10, - 0x4a, 0xee, 0x49, 0xef, 0x4d, 0x2e, 0x95, 0x5c, 0xea, 0xc3, 0x9b, 0x7b, 0x74, 0xce, 0xf6, 0xf1, - 0xd3, 0xe6, 0xa3, 0xbd, 0x6a, 0x6f, 0x0b, 0x41, 0xe4, 0x84, 0xd1, 0x5e, 0xb5, 0xa3, 0xd1, 0x6e, - 0xda, 0xf1, 0xd1, 0x5e, 0xb5, 0xb7, 0x49, 0x99, 0xbb, 0x9c, 0x73, 0xff, 0xe4, 0x8b, 0xfd, 0xb8, - 0x95, 0xd7, 0xf9, 0xc9, 0x9c, 0xe2, 0x7a, 0xfe, 0x65, 0x18, 0xab, 0x75, 0xec, 0x3a, 0x6d, 0x3a, - 0x3b, 0x81, 0x78, 0x6a, 0x7f, 0xb9, 0x0f, 0xab, 0x10, 0x57, 0x3c, 0xad, 0xca, 0x9f, 0xea, 0x35, - 0x29, 0xc4, 0x61, 0x5f, 0xb8, 0xb1, 0x7e, 0x5f, 0xbc, 0xb6, 0xf7, 0xfb, 0xc2, 0x8d, 0xf5, 0xfb, - 0x42, 0xe6, 0xe8, 0xb4, 0x34, 0x99, 0x63, 0xfd, 0x3e, 0xe9, 0xc0, 0xd4, 0x06, 0xf5, 0x3c, 0x7b, - 0xc7, 0xf5, 0x5a, 0x5c, 0x7f, 0xc9, 0x7d, 0xde, 0xae, 0xf6, 0xe3, 0xa7, 0x11, 0x70, 0xb5, 0x5d, - 0x20, 0x61, 0x56, 0x5c, 0xe9, 0x19, 0xe3, 0xcf, 0xfa, 0x64, 0xc9, 0x09, 0xb6, 0xbb, 0xf5, 0x7d, - 0x1a, 0xcc, 0xcf, 0x9c, 0xd8, 0x27, 0x21, 0x2e, 0xef, 0x93, 0x6d, 0xf9, 0x53, 0xed, 0x93, 0x10, - 0xc7, 0xf8, 0xad, 0x1c, 0x9c, 0xeb, 0xd1, 0x05, 0x64, 0x4d, 0x6e, 0xb9, 0x19, 0x4d, 0x8b, 0xdd, - 0x03, 0xfd, 0xda, 0x89, 0xbb, 0xf0, 0x2a, 0x14, 0x96, 0xef, 0xa1, 0xac, 0xce, 0x1f, 0x72, 0xca, - 0x25, 0x79, 0x58, 0xa1, 0xa6, 0x95, 0xee, 0xa3, 0x8d, 0xb0, 0x7c, 0x00, 0xaa, 0x6b, 0xce, 0xf0, - 0x09, 0xca, 0x85, 0xef, 0xcf, 0xc2, 0x10, 0x1e, 0x9c, 0xb1, 0x10, 0x60, 0x99, 0x53, 0x85, 0x00, - 0xfb, 0x02, 0x4c, 0x2c, 0xdf, 0xe3, 0x37, 0xe9, 0x15, 0xdb, 0xdf, 0x13, 0xdb, 0x3a, 0x1a, 0x72, - 0xd0, 0x7d, 0x4b, 0x5c, 0xbc, 0xf7, 0x6c, 0x4d, 0x66, 0xd5, 0x28, 0xc8, 0x26, 0xcc, 0xf2, 0x6f, - 0x73, 0x76, 0x9c, 0x3a, 0x8f, 0x24, 0xe4, 0xd8, 0x4d, 0xb1, 0xc7, 0xbf, 0x74, 0x7c, 0x54, 0x2c, - 0xd2, 0x7d, 0xb4, 0x7e, 0x16, 0xe5, 0x96, 0x8f, 0x08, 0xaa, 0x19, 0x74, 0x0a, 0xbd, 0x1a, 0xde, - 0xc4, 0x1c, 0xc3, 0x0a, 0x59, 0x6d, 0xac, 0x6e, 0x86, 0xcb, 0x91, 0x8c, 0x3f, 0x1b, 0x86, 0x85, - 0xde, 0xdb, 0x33, 0xf9, 0xa2, 0x3e, 0x80, 0x97, 0x4f, 0xdc, 0xd0, 0x4f, 0x1e, 0xc3, 0x2f, 0xc1, - 0xdc, 0x72, 0x3b, 0xa0, 0x5e, 0xc7, 0x73, 0x64, 0x40, 0x9b, 0x15, 0xd7, 0x97, 0xd6, 0xe6, 0x68, - 0xf6, 0x4d, 0xc3, 0x72, 0xa1, 0x5b, 0x45, 0xdb, 0x77, 0x85, 0x55, 0x2a, 0x07, 0xb2, 0x0c, 0x53, - 0x0a, 0xbc, 0xd9, 0xdd, 0x55, 0x5f, 0xa7, 0x54, 0x9e, 0xcd, 0xae, 0x6a, 0x8a, 0x1b, 0x23, 0x42, - 0x8b, 0x76, 0x76, 0x65, 0xac, 0xdf, 0xdd, 0xba, 0x57, 0x13, 0xc3, 0xc9, 0x2d, 0xda, 0x11, 0x6a, - 0x7d, 0x78, 0xb0, 0xaf, 0xed, 0xaf, 0x11, 0xf2, 0xc2, 0x2f, 0xe7, 0xc4, 0x8c, 0x7a, 0x09, 0x72, - 0xb5, 0xee, 0xb6, 0xfa, 0xe6, 0xe6, 0x6b, 0x07, 0x1c, 0x2b, 0x25, 0x9f, 0x03, 0x30, 0x69, 0xc7, - 0xf5, 0x9d, 0xc0, 0xf5, 0x0e, 0x55, 0x97, 0x4a, 0x2f, 0x84, 0xea, 0x5e, 0x1f, 0x12, 0x4a, 0x56, - 0x60, 0x3a, 0xfa, 0xf5, 0xe0, 0xa0, 0x2d, 0x74, 0xc9, 0x63, 0x5c, 0xbb, 0x12, 0x91, 0x5b, 0x2e, - 0x2b, 0x53, 0x8f, 0xec, 0x18, 0x19, 0x59, 0x84, 0xfc, 0x96, 0xeb, 0xed, 0xef, 0xb0, 0x31, 0x1e, - 0x8a, 0x84, 0x8a, 0x03, 0x01, 0x53, 0x0f, 0x4f, 0x89, 0xc7, 0x96, 0xcb, 0x72, 0xfb, 0x91, 0xe3, - 0xb9, 0xf8, 0xa2, 0xa7, 0xda, 0xb4, 0xd0, 0x08, 0xac, 0x39, 0xb3, 0x47, 0x60, 0x72, 0x15, 0x86, - 0x4b, 0xf5, 0xc0, 0xf5, 0x84, 0x41, 0x0b, 0x9f, 0x29, 0x0c, 0xa0, 0xcd, 0x14, 0x06, 0x60, 0x9d, - 0x68, 0xd2, 0x1d, 0xf1, 0xba, 0x83, 0x9d, 0xe8, 0xd1, 0x1d, 0xcd, 0x53, 0x9f, 0xee, 0x30, 0xa1, - 0xc8, 0xa4, 0x3b, 0xa8, 0xf8, 0xd0, 0x02, 0xdc, 0xed, 0x24, 0x54, 0x66, 0x02, 0xcd, 0xf8, 0xfd, - 0xb1, 0x9e, 0x53, 0x9e, 0x9d, 0x42, 0xa7, 0x9b, 0xf2, 0xab, 0xf6, 0x00, 0x53, 0xfe, 0xf5, 0xd0, - 0x97, 0x44, 0x0d, 0x4f, 0x81, 0x10, 0xf5, 0x18, 0xe4, 0x38, 0x0b, 0xbf, 0x92, 0x3f, 0xcd, 0x24, - 0x12, 0x9d, 0x94, 0x1d, 0xb4, 0x93, 0x72, 0x03, 0x75, 0x12, 0x59, 0x82, 0xc9, 0x30, 0x44, 0xe2, - 0xba, 0x1d, 0x68, 0xdb, 0x5a, 0x18, 0xd7, 0xd2, 0xea, 0xd8, 0x81, 0xba, 0xad, 0xe9, 0x24, 0xe4, - 0x1d, 0x18, 0x17, 0x0e, 0x55, 0xc8, 0x61, 0x38, 0xb2, 0x14, 0x92, 0xde, 0x57, 0x31, 0x7a, 0x15, - 0x9d, 0xad, 0xe6, 0x75, 0xa7, 0x43, 0x9b, 0x4e, 0x9b, 0xd6, 0xf0, 0xb1, 0x42, 0xcc, 0x18, 0xfe, - 0x68, 0x2b, 0x4a, 0x2c, 0xfe, 0x8e, 0xa1, 0xe9, 0x0f, 0x35, 0xa2, 0xf8, 0x64, 0x1d, 0x3d, 0xd5, - 0x64, 0xe5, 0x76, 0x8a, 0xde, 0xaa, 0xbb, 0xeb, 0x48, 0x1b, 0x7a, 0x69, 0xa7, 0xe8, 0x59, 0x4d, - 0x06, 0x8d, 0xd9, 0x29, 0x72, 0x54, 0x76, 0xc3, 0x61, 0x3f, 0xaa, 0x15, 0xf1, 0x92, 0x88, 0x37, - 0x1c, 0x24, 0xd2, 0x1d, 0x17, 0x38, 0x92, 0xac, 0x66, 0xb9, 0x65, 0x3b, 0x4d, 0x11, 0x85, 0x20, - 0xaa, 0x86, 0x32, 0x68, 0xbc, 0x1a, 0x44, 0x25, 0x75, 0x98, 0x30, 0xe9, 0xce, 0xba, 0xe7, 0x06, - 0xb4, 0x1e, 0xd0, 0x86, 0x90, 0xea, 0xe4, 0xc5, 0x66, 0xc9, 0x75, 0xb9, 0xc4, 0x8a, 0xb6, 0xf1, - 0x99, 0x6f, 0x1f, 0x15, 0x81, 0x81, 0xb8, 0x57, 0xcc, 0xf1, 0x51, 0xf1, 0x1c, 0x1b, 0xff, 0x8e, - 0x24, 0x56, 0x4f, 0x27, 0x95, 0x29, 0xf9, 0x26, 0xdb, 0xaf, 0xc3, 0x2e, 0x89, 0x2a, 0x9b, 0xe8, - 0x51, 0xd9, 0x9b, 0xa9, 0x95, 0x15, 0x95, 0xde, 0x4e, 0xad, 0x34, 0xb5, 0x12, 0xf2, 0x2e, 0x8c, - 0x97, 0xab, 0x65, 0xb7, 0xbd, 0xe3, 0xec, 0xd6, 0x56, 0x4a, 0x28, 0x1a, 0x0a, 0x8f, 0xa8, 0xba, - 0x63, 0xd5, 0x11, 0x6e, 0xf9, 0x7b, 0xb6, 0xe6, 0x18, 0x1b, 0xe1, 0x93, 0x3b, 0x30, 0x25, 0x7f, - 0x9a, 0x74, 0x67, 0xd3, 0xac, 0xa2, 0x44, 0x28, 0xdd, 0xd0, 0x42, 0x0e, 0xac, 0x23, 0xba, 0x9e, - 0x7a, 0x53, 0x88, 0x91, 0xb1, 0xc9, 0x58, 0xa1, 0x9d, 0xa6, 0x7b, 0xc8, 0x3e, 0x6f, 0xc3, 0xa1, - 0x1e, 0xca, 0x80, 0x62, 0x32, 0x36, 0xc2, 0x12, 0x2b, 0x70, 0xf4, 0xf7, 0x53, 0x9d, 0x88, 0xac, - 0xc1, 0x8c, 0x98, 0xe2, 0x0f, 0x1d, 0xdf, 0xd9, 0x76, 0x9a, 0x4e, 0x70, 0x88, 0xd2, 0x9f, 0x10, - 0x60, 0xe4, 0xba, 0x78, 0x14, 0x96, 0x2a, 0xcc, 0x92, 0xa4, 0xc6, 0xaf, 0x67, 0xe1, 0x85, 0x7e, - 0x37, 0x21, 0x52, 0xd3, 0x37, 0xb3, 0x2b, 0x03, 0xdc, 0x9e, 0x4e, 0xde, 0xce, 0x96, 0x61, 0xea, - 0x81, 0x62, 0xd2, 0x17, 0x9a, 0x58, 0x62, 0x67, 0xa8, 0xc6, 0x7e, 0xfa, 0x6c, 0x8f, 0x11, 0x2d, - 0x3c, 0x12, 0xdb, 0xdc, 0x47, 0x75, 0xd1, 0xbc, 0x05, 0x63, 0x65, 0xb7, 0x1d, 0xd0, 0xc7, 0x41, - 0x2c, 0x20, 0x01, 0x07, 0xc6, 0xdd, 0x53, 0x25, 0xaa, 0xf1, 0xaf, 0xb3, 0x70, 0xa1, 0xef, 0x55, - 0x80, 0x6c, 0xe8, 0xbd, 0x76, 0x75, 0x90, 0xfb, 0xc3, 0xc9, 0xdd, 0xb6, 0x98, 0xb0, 0xbb, 0x3b, - 0xd1, 0x03, 0x6a, 0xe1, 0x7f, 0xcc, 0x88, 0x4e, 0xfa, 0x34, 0x8c, 0x62, 0x55, 0x61, 0x17, 0x71, - 0x2d, 0x19, 0xee, 0xc2, 0x8e, 0xae, 0x25, 0xe3, 0x68, 0xe4, 0x26, 0xe4, 0xcb, 0x76, 0xb3, 0xa9, - 0x84, 0x6b, 0x40, 0x69, 0xbe, 0x8e, 0xb0, 0x98, 0xf1, 0xa8, 0x44, 0x64, 0xb2, 0x0f, 0xff, 0x5b, - 0x39, 0x2b, 0x70, 0xb3, 0x14, 0x64, 0xb1, 0xe3, 0x42, 0x41, 0xc6, 0x20, 0xaf, 0x75, 0x37, 0x74, - 0x08, 0xe7, 0x41, 0x5e, 0x19, 0x40, 0x0b, 0xf2, 0xca, 0x00, 0xc6, 0x6f, 0xe4, 0xe0, 0x62, 0xff, - 0xfb, 0x2c, 0xd9, 0xd4, 0x87, 0xe0, 0xb5, 0x81, 0x6e, 0xc1, 0x27, 0x8f, 0x81, 0x0c, 0x99, 0xcc, - 0x3b, 0xe4, 0x4a, 0xd2, 0xfd, 0xe5, 0x3b, 0x47, 0x45, 0xc5, 0x22, 0xf9, 0xae, 0xeb, 0xb4, 0x95, - 0x37, 0x93, 0x6f, 0x68, 0x92, 0x21, 0x7f, 0xbd, 0xbf, 0x35, 0xd8, 0x97, 0x45, 0x74, 0x7c, 0x5f, - 0x19, 0x54, 0xa2, 0xfc, 0x3c, 0x14, 0xe2, 0xa4, 0xe4, 0x32, 0x0c, 0xe1, 0x07, 0x28, 0x3e, 0x3c, - 0x31, 0x0e, 0x58, 0xbe, 0x70, 0x5f, 0xcc, 0x1d, 0x8c, 0x60, 0x81, 0xf6, 0x00, 0xba, 0x6e, 0x50, - 0x44, 0xb0, 0xe0, 0xe6, 0x04, 0x49, 0xfd, 0x60, 0x8c, 0xc8, 0xf8, 0x8b, 0x0c, 0x9c, 0xef, 0xa9, - 0x29, 0x20, 0xeb, 0xfa, 0x80, 0xbd, 0x72, 0x92, 0x6a, 0xe1, 0xc4, 0xb1, 0x5a, 0xf8, 0x71, 0x39, - 0xf7, 0xdf, 0x83, 0x89, 0x5a, 0x77, 0x3b, 0x7e, 0x3f, 0xe3, 0xf1, 0x65, 0x14, 0xb8, 0x7a, 0x82, - 0xa9, 0xf8, 0xac, 0xfd, 0xd2, 0xe0, 0x41, 0x18, 0x00, 0x29, 0x56, 0x87, 0xa1, 0x8b, 0x75, 0x32, - 0x82, 0x87, 0x4e, 0x64, 0xfc, 0x5a, 0x36, 0xfd, 0xa2, 0x7b, 0xa7, 0xbc, 0x7e, 0x9a, 0x8b, 0xee, - 0x9d, 0xf2, 0xfa, 0xc9, 0x6d, 0xff, 0xc7, 0xb2, 0xed, 0xf8, 0x30, 0x2b, 0x76, 0x3c, 0xa9, 0xe8, - 0x14, 0x0f, 0xb3, 0x72, 0x77, 0xf4, 0xf5, 0x87, 0x59, 0x89, 0x4c, 0xde, 0x84, 0xb1, 0x55, 0x97, - 0x07, 0xd7, 0x90, 0x2d, 0xe6, 0x3e, 0xc8, 0x12, 0xa8, 0x6e, 0x8f, 0x21, 0x26, 0xbb, 0x5b, 0xe8, - 0x03, 0x2f, 0x8d, 0x2b, 0xf1, 0x6e, 0x11, 0x9b, 0x2e, 0xba, 0x3a, 0x50, 0x27, 0x33, 0xfe, 0xd3, - 0x61, 0x30, 0x4e, 0x56, 0x66, 0x90, 0x0f, 0xf4, 0xbe, 0xbb, 0x36, 0xb0, 0x1a, 0x64, 0xa0, 0x2d, - 0xb7, 0xd4, 0x6d, 0x38, 0xb4, 0x5d, 0xd7, 0x23, 0x63, 0x08, 0x98, 0xba, 0x05, 0x4a, 0xbc, 0x8f, - 0xe2, 0xa8, 0xba, 0xf0, 0xdf, 0xe5, 0xa2, 0xa5, 0x16, 0x3b, 0x1a, 0x33, 0x1f, 0xe1, 0x68, 0x24, - 0xf7, 0xa0, 0xa0, 0x42, 0x94, 0x17, 0x5a, 0x94, 0x5c, 0x34, 0x46, 0xb1, 0x8f, 0x4a, 0x10, 0xea, - 0xe7, 0x6b, 0x6e, 0xf0, 0xf3, 0x35, 0x12, 0xdf, 0xb1, 0xfe, 0xa1, 0xa4, 0xf8, 0x1e, 0x77, 0x46, - 0x57, 0xd0, 0x65, 0x24, 0x0d, 0x5f, 0x1c, 0x5a, 0xc3, 0x7a, 0x24, 0x8d, 0x94, 0x83, 0x4b, 0x45, - 0x97, 0xc1, 0x40, 0xf0, 0xa7, 0xe2, 0x0b, 0x1f, 0x06, 0x03, 0xe1, 0xf4, 0x69, 0xc1, 0x40, 0x42, - 0x12, 0x76, 0x00, 0x9a, 0xdd, 0x36, 0x8f, 0x26, 0x3e, 0x1a, 0x1d, 0x80, 0x5e, 0xb7, 0x6d, 0xc5, - 0x23, 0x8a, 0x87, 0x88, 0xc6, 0x3f, 0x1a, 0x4a, 0x17, 0x0e, 0x42, 0x7d, 0xd7, 0x69, 0x84, 0x83, - 0x90, 0xe8, 0xe3, 0x99, 0xa9, 0x9b, 0x30, 0x2b, 0xed, 0xf3, 0xa4, 0xa1, 0xd7, 0xa6, 0xb9, 0x2a, - 0x86, 0x18, 0xf5, 0x46, 0xa1, 0x65, 0x9f, 0x34, 0x16, 0xb3, 0xba, 0x9e, 0xa6, 0x37, 0x4a, 0xa1, - 0x5f, 0xf8, 0x4d, 0xa9, 0x16, 0x53, 0x07, 0x61, 0x73, 0x33, 0x9c, 0xcb, 0xb1, 0x41, 0xe8, 0x76, - 0xb5, 0x61, 0xd4, 0x49, 0xf8, 0xde, 0x2b, 0x55, 0x0e, 0xc8, 0x44, 0x91, 0x15, 0x15, 0x45, 0x45, - 0x8c, 0x4b, 0x8c, 0x88, 0xec, 0xc2, 0xf9, 0x48, 0x94, 0x56, 0x6e, 0x0a, 0xc8, 0x91, 0x37, 0xf8, - 0xea, 0xf1, 0x51, 0xf1, 0x15, 0x45, 0x14, 0x57, 0x2f, 0x1c, 0x31, 0xee, 0xbd, 0x79, 0xb1, 0xfd, - 0x76, 0xc9, 0xb3, 0xdb, 0xf5, 0x3d, 0x65, 0xce, 0xe3, 0x7e, 0xbb, 0x8d, 0xd0, 0x44, 0x38, 0x83, - 0x08, 0xd9, 0xf8, 0xf1, 0x2c, 0x4c, 0xf1, 0xb3, 0x9a, 0xbf, 0xce, 0x3d, 0xb3, 0x2f, 0x9f, 0x6f, - 0x6b, 0x2f, 0x9f, 0x32, 0xf2, 0x9e, 0xda, 0xb4, 0x81, 0xde, 0x3d, 0xf7, 0x80, 0x24, 0x69, 0x88, - 0x09, 0x13, 0x2a, 0xb4, 0xff, 0x93, 0xe7, 0x8d, 0x28, 0x48, 0xa3, 0x10, 0x95, 0xf0, 0xdd, 0xd9, - 0x37, 0x35, 0x1e, 0xc6, 0x8f, 0x65, 0x61, 0x52, 0xb1, 0x53, 0x79, 0x66, 0x3b, 0xfe, 0xf3, 0x5a, - 0xc7, 0xcf, 0x87, 0x1e, 0x82, 0x61, 0xcb, 0x06, 0xea, 0xf7, 0x2e, 0xcc, 0x24, 0x48, 0xe2, 0xe6, - 0x3e, 0x99, 0x41, 0xcc, 0x7d, 0x5e, 0x4f, 0x46, 0x7c, 0xe3, 0x89, 0x13, 0xc2, 0xf8, 0x3f, 0x6a, - 0x88, 0xb9, 0x9f, 0xcc, 0xc2, 0x9c, 0xf8, 0x85, 0x21, 0x52, 0xb9, 0xb0, 0xfa, 0xcc, 0x8e, 0x45, - 0x49, 0x1b, 0x8b, 0xa2, 0x3e, 0x16, 0x4a, 0x03, 0x7b, 0x0f, 0x89, 0xf1, 0x43, 0x00, 0xf3, 0xbd, - 0x08, 0x06, 0x76, 0xc4, 0x8f, 0x5c, 0x13, 0xb3, 0x03, 0xb8, 0x26, 0xae, 0x42, 0x01, 0xab, 0x12, - 0x41, 0x10, 0xfd, 0x4d, 0xb3, 0x2a, 0x3a, 0x09, 0xf5, 0x0b, 0x3c, 0x8e, 0xad, 0x08, 0xca, 0xe8, - 0xc7, 0x74, 0x1e, 0x09, 0x4a, 0xf2, 0xcb, 0x19, 0x98, 0x42, 0xe0, 0xf2, 0x23, 0xda, 0x0e, 0x90, - 0xd9, 0x90, 0xf0, 0x59, 0x0b, 0x1f, 0x46, 0x6b, 0x81, 0xe7, 0xb4, 0x77, 0xc5, 0xcb, 0xe8, 0xb6, - 0x78, 0x19, 0x7d, 0x87, 0xbf, 0xe8, 0x5e, 0xab, 0xbb, 0xad, 0xeb, 0xbb, 0x9e, 0xfd, 0xc8, 0xe1, - 0x26, 0x58, 0x76, 0xf3, 0x7a, 0x94, 0xef, 0xa7, 0xe3, 0xc4, 0x32, 0xf1, 0x08, 0x56, 0xf8, 0xea, - 0xcc, 0x3f, 0x94, 0x62, 0xb5, 0x71, 0xd5, 0x8c, 0xfe, 0x45, 0xe4, 0xbb, 0xe0, 0x1c, 0x0f, 0x4d, - 0xc6, 0x6e, 0xf8, 0x4e, 0xbb, 0xeb, 0x76, 0xfd, 0x25, 0xbb, 0xbe, 0xcf, 0xc4, 0x7c, 0xee, 0x59, - 0x8c, 0x2d, 0xaf, 0x87, 0x85, 0xd6, 0x36, 0x2f, 0xd5, 0x62, 0x5e, 0xa4, 0x33, 0x20, 0x2b, 0x30, - 0xc3, 0x8b, 0x4a, 0xdd, 0xc0, 0xad, 0xd5, 0xed, 0xa6, 0xd3, 0xde, 0x45, 0x59, 0x22, 0xcf, 0x45, - 0x19, 0xbb, 0x1b, 0xb8, 0x96, 0xcf, 0xe1, 0xaa, 0xa6, 0x26, 0x41, 0x44, 0xaa, 0x30, 0x6d, 0x52, - 0xbb, 0x71, 0xdf, 0x7e, 0x5c, 0xb6, 0x3b, 0x76, 0xdd, 0x09, 0x78, 0xac, 0xd4, 0x1c, 0x17, 0xe8, - 0x3c, 0x6a, 0x37, 0xac, 0x96, 0xfd, 0xd8, 0xaa, 0x8b, 0x42, 0x5d, 0x65, 0xaf, 0xd1, 0x85, 0xac, - 0x9c, 0x76, 0xc8, 0x6a, 0x2c, 0xce, 0xca, 0x69, 0xf7, 0x66, 0x15, 0xd1, 0x49, 0x56, 0x1b, 0xb6, - 0xb7, 0x4b, 0x03, 0x6e, 0x28, 0x0d, 0x97, 0x32, 0x57, 0x32, 0x0a, 0xab, 0x00, 0xcb, 0x2c, 0x34, - 0x9a, 0x8e, 0xb3, 0x52, 0xe8, 0xd8, 0xcc, 0xdb, 0xf2, 0x9c, 0x80, 0xaa, 0x2d, 0x1c, 0xc7, 0xcf, - 0xc2, 0xfe, 0x47, 0x13, 0xf3, 0x5e, 0x4d, 0x4c, 0x50, 0x46, 0xdc, 0x94, 0x46, 0x4e, 0x24, 0xb8, - 0xa5, 0xb7, 0x32, 0x41, 0x19, 0x72, 0x53, 0xdb, 0x39, 0x89, 0xed, 0x54, 0xb8, 0xf5, 0x68, 0x68, - 0x82, 0x92, 0xac, 0xb1, 0x4e, 0x0b, 0x98, 0xdc, 0xe4, 0xb6, 0x85, 0x05, 0xf7, 0x14, 0x7e, 0xda, - 0xcb, 0xc2, 0x0c, 0xb1, 0xe0, 0xc9, 0x62, 0x2b, 0xc5, 0x9e, 0x3b, 0x4e, 0x4c, 0xfe, 0x06, 0x4c, - 0x6f, 0xfa, 0xf4, 0x76, 0x75, 0xbd, 0x26, 0x23, 0x99, 0xa1, 0x72, 0x71, 0x6a, 0xf1, 0xc6, 0x09, - 0x9b, 0xce, 0x35, 0x95, 0x06, 0xd3, 0xe7, 0xf0, 0x71, 0xeb, 0xfa, 0xd4, 0xda, 0x71, 0x3a, 0x7e, - 0x18, 0x16, 0x52, 0x1d, 0xb7, 0x58, 0x55, 0xc6, 0x0a, 0xcc, 0x24, 0xd8, 0x90, 0x29, 0x00, 0x06, - 0xb4, 0x36, 0xd7, 0x6a, 0xcb, 0x1b, 0x85, 0xe7, 0x48, 0x01, 0x26, 0xf0, 0xf7, 0xf2, 0x5a, 0x69, - 0x69, 0x75, 0xb9, 0x52, 0xc8, 0x90, 0x19, 0x98, 0x44, 0x48, 0xa5, 0x5a, 0xe3, 0xa0, 0x2c, 0x4f, - 0x9e, 0x60, 0x16, 0xf8, 0xd2, 0x0d, 0xd8, 0x02, 0xc0, 0x33, 0xc5, 0xf8, 0x3b, 0x59, 0x38, 0x2f, - 0x8f, 0x15, 0x1a, 0x30, 0xc1, 0xd1, 0x69, 0xef, 0x3e, 0xe3, 0xa7, 0xc3, 0x6d, 0xed, 0x74, 0x78, - 0x39, 0x76, 0x52, 0xc7, 0x5a, 0xd9, 0xe7, 0x88, 0xf8, 0x9d, 0x31, 0xb8, 0xd0, 0x97, 0x8a, 0x7c, - 0x91, 0x9d, 0xe6, 0x0e, 0x6d, 0x07, 0xd5, 0x46, 0x93, 0x6e, 0x38, 0x2d, 0xea, 0x76, 0x03, 0xe1, - 0x31, 0xf0, 0x12, 0xea, 0xf3, 0xb0, 0xd0, 0x72, 0x1a, 0x4d, 0x6a, 0x05, 0xbc, 0x58, 0x9b, 0x6e, - 0x49, 0x6a, 0xc6, 0x32, 0x4c, 0xe5, 0x55, 0x6d, 0x07, 0xd4, 0x7b, 0x84, 0x56, 0x89, 0x21, 0xcb, - 0x7d, 0x4a, 0x3b, 0x96, 0xcd, 0x4a, 0x2d, 0x47, 0x14, 0xeb, 0x2c, 0x13, 0xd4, 0xe4, 0xb6, 0xc2, - 0xb2, 0xcc, 0x6e, 0xff, 0xf7, 0xed, 0xc7, 0xc2, 0x4c, 0x4a, 0x44, 0xc6, 0x0d, 0x59, 0x72, 0x77, - 0xbe, 0x96, 0xfd, 0xd8, 0x4c, 0x92, 0x90, 0xaf, 0xc2, 0x19, 0x71, 0x00, 0x89, 0xe0, 0x2d, 0xb2, - 0xc5, 0x3c, 0x34, 0xcc, 0xab, 0xc7, 0x47, 0xc5, 0x73, 0x32, 0xa6, 0xb0, 0x0c, 0xac, 0x94, 0xd6, - 0xea, 0x74, 0x2e, 0x64, 0x83, 0x1d, 0xc8, 0xb1, 0xee, 0xb8, 0x4f, 0x7d, 0x5f, 0xfa, 0x6c, 0x8a, - 0x9b, 0xb1, 0xda, 0x99, 0x56, 0x8b, 0x97, 0x9b, 0x3d, 0x29, 0xc9, 0x0a, 0x4c, 0x6d, 0xd1, 0x6d, - 0x75, 0x7c, 0x46, 0xc2, 0xad, 0xaa, 0x70, 0x40, 0xb7, 0x7b, 0x0f, 0x4e, 0x8c, 0x8e, 0x38, 0xf8, - 0x3e, 0xf0, 0xf8, 0x70, 0xd5, 0xf1, 0x03, 0xda, 0xa6, 0x1e, 0x86, 0x6f, 0x1b, 0xc5, 0xcd, 0x60, - 0x3e, 0x92, 0x90, 0xf5, 0xf2, 0xa5, 0x17, 0x8f, 0x8f, 0x8a, 0x17, 0xb8, 0xf3, 0x73, 0x53, 0xc0, - 0xad, 0x58, 0x22, 0xac, 0x24, 0x57, 0xf2, 0x75, 0x98, 0x36, 0xdd, 0x6e, 0xe0, 0xb4, 0x77, 0x6b, - 0x81, 0x67, 0x07, 0x74, 0x97, 0x1f, 0x48, 0x51, 0x9c, 0xb8, 0x58, 0xa9, 0x78, 0x5a, 0xe6, 0x40, - 0xcb, 0x17, 0x50, 0xed, 0x44, 0xd0, 0x09, 0xc8, 0xd7, 0x60, 0x8a, 0x87, 0xed, 0x08, 0x2b, 0x18, - 0xd3, 0x92, 0x78, 0xe8, 0x85, 0x0f, 0x6f, 0x08, 0xab, 0x16, 0x84, 0xa6, 0x55, 0x10, 0xe3, 0x46, - 0xbe, 0x2c, 0x3a, 0x6b, 0xdd, 0x69, 0xef, 0x86, 0xd3, 0x18, 0xb0, 0xe7, 0xdf, 0x88, 0xba, 0xa4, - 0xc3, 0x3e, 0x57, 0x4e, 0xe3, 0x1e, 0x26, 0x7a, 0x49, 0x3e, 0x24, 0x80, 0x0b, 0x25, 0xdf, 0x77, - 0xfc, 0x40, 0xf8, 0xd5, 0x2c, 0x3f, 0xa6, 0xf5, 0x2e, 0x43, 0x66, 0xd7, 0x5b, 0xea, 0x71, 0xbb, - 0xee, 0xe1, 0xa5, 0x6b, 0xc7, 0x47, 0xc5, 0xd7, 0x6c, 0x44, 0xb4, 0x84, 0x2b, 0x8e, 0x45, 0x25, - 0xaa, 0x75, 0xc0, 0x71, 0x95, 0x36, 0xf4, 0x67, 0x4a, 0xbe, 0x06, 0x67, 0xcb, 0xb6, 0x4f, 0xab, - 0x6d, 0x9f, 0xb6, 0x7d, 0x27, 0x70, 0x1e, 0x51, 0xd1, 0xa9, 0x78, 0xf8, 0xe5, 0x31, 0x65, 0x98, - 0x51, 0xb7, 0x7d, 0xb6, 0x30, 0x43, 0x14, 0x4b, 0x0c, 0x8a, 0x52, 0x4d, 0x0f, 0x2e, 0xc4, 0x84, - 0xa9, 0x5a, 0x6d, 0xa5, 0xe2, 0xd8, 0xe1, 0xba, 0x9a, 0xc4, 0xfe, 0x7a, 0x0d, 0x55, 0x7b, 0xfe, - 0x9e, 0xd5, 0x70, 0xec, 0x70, 0x41, 0xf5, 0xe8, 0xac, 0x18, 0x07, 0xe3, 0x28, 0x03, 0x85, 0xf8, - 0x50, 0x92, 0x2f, 0xc1, 0x18, 0xb7, 0x6f, 0xa3, 0xfe, 0x9e, 0x88, 0x3c, 0x21, 0xcd, 0xa5, 0x42, - 0xb8, 0x4e, 0x24, 0xdc, 0xe9, 0xb8, 0xf5, 0x1c, 0x55, 0xad, 0x65, 0xd0, 0x9d, 0x4e, 0x12, 0x91, - 0x06, 0x4c, 0xf0, 0xd1, 0xa2, 0x18, 0x24, 0x52, 0x98, 0x39, 0xbf, 0xa8, 0xae, 0x0e, 0x51, 0x14, - 0xe3, 0x8f, 0xaf, 0x86, 0x62, 0x4e, 0x70, 0x04, 0xad, 0x0a, 0x8d, 0xeb, 0x12, 0x40, 0x5e, 0x12, - 0x1a, 0xe7, 0xe1, 0x5c, 0x8f, 0x6f, 0x36, 0x1e, 0xa1, 0x25, 0x41, 0x8f, 0x1a, 0xc9, 0x97, 0x60, - 0x0e, 0x09, 0xcb, 0x6e, 0xbb, 0x4d, 0xeb, 0x01, 0x6e, 0x47, 0x52, 0xfb, 0x9e, 0xe3, 0x96, 0x2e, - 0xbc, 0xbd, 0xf5, 0x10, 0xc1, 0x8a, 0x2b, 0xe1, 0x53, 0x39, 0x18, 0x3f, 0x9f, 0x85, 0x79, 0xb1, - 0xc3, 0x99, 0xb4, 0xee, 0x7a, 0x8d, 0x67, 0xff, 0x44, 0x5d, 0xd6, 0x4e, 0xd4, 0x97, 0xc2, 0xb0, - 0x45, 0x69, 0x8d, 0xec, 0x73, 0xa0, 0xfe, 0x5a, 0x06, 0x5e, 0xe8, 0x47, 0xc4, 0x7a, 0x27, 0x0c, - 0x8a, 0x39, 0x96, 0x08, 0x7e, 0xd9, 0x81, 0x59, 0x1c, 0xd0, 0xf2, 0x1e, 0xad, 0xef, 0xfb, 0x2b, - 0xae, 0x1f, 0xa0, 0xa7, 0x45, 0xb6, 0xc7, 0x5b, 0xf7, 0xeb, 0xa9, 0x6f, 0xdd, 0x67, 0xf9, 0x2c, - 0xab, 0x23, 0x0f, 0x1e, 0xb6, 0x73, 0x9f, 0x1e, 0xfa, 0x66, 0x1a, 0x6b, 0xb4, 0x98, 0x2f, 0x75, - 0x83, 0xbd, 0x75, 0x8f, 0xee, 0x50, 0x8f, 0xb6, 0xeb, 0xf4, 0x13, 0x66, 0x31, 0xaf, 0x37, 0x6e, - 0x20, 0x0d, 0xc6, 0x3f, 0x9e, 0x84, 0xb9, 0x34, 0x32, 0xd6, 0x2f, 0xca, 0xa5, 0x39, 0x9e, 0xd1, - 0xf4, 0x07, 0x33, 0x30, 0x51, 0xa3, 0x75, 0xb7, 0xdd, 0xb8, 0x8d, 0x16, 0x45, 0xa2, 0x77, 0x2c, - 0x2e, 0x34, 0x30, 0xb8, 0xb5, 0x13, 0x33, 0x35, 0xfa, 0xce, 0x51, 0xf1, 0x0b, 0x83, 0xdd, 0x55, - 0xeb, 0x2e, 0x86, 0x0b, 0x0a, 0x30, 0xe3, 0x46, 0x58, 0x05, 0x3e, 0x0e, 0x6a, 0x95, 0x92, 0x25, - 0x98, 0x14, 0xcb, 0xd5, 0x55, 0x63, 0xa2, 0xf2, 0xc8, 0x4e, 0xb2, 0x20, 0xa1, 0xba, 0xd6, 0x48, - 0xc8, 0x4d, 0xc8, 0x6d, 0x2e, 0xde, 0x16, 0x63, 0x20, 0x73, 0x96, 0x6c, 0x2e, 0xde, 0x46, 0x75, - 0x18, 0xbb, 0x62, 0x4c, 0x76, 0x17, 0x35, 0x23, 0x9f, 0xcd, 0xc5, 0xdb, 0xe4, 0x7b, 0xe1, 0x4c, - 0xc5, 0xf1, 0x45, 0x15, 0xdc, 0x77, 0xa3, 0x81, 0x1e, 0x8b, 0x23, 0x3d, 0x66, 0xef, 0x67, 0x53, - 0x67, 0xef, 0x8b, 0x8d, 0x90, 0x89, 0xc5, 0x1d, 0x43, 0x1a, 0xf1, 0xd8, 0xaf, 0xe9, 0xf5, 0x90, - 0x0f, 0x61, 0x0a, 0x95, 0xd9, 0xe8, 0xce, 0x82, 0x51, 0xfb, 0x47, 0x7b, 0xd4, 0xfc, 0xe9, 0xd4, - 0x9a, 0x17, 0x78, 0xbc, 0x0d, 0x74, 0x8a, 0xc1, 0x08, 0xff, 0xda, 0xad, 0x5f, 0xe3, 0x4c, 0xee, - 0xc2, 0xb4, 0x10, 0xbf, 0x1e, 0xec, 0x6c, 0xec, 0xd1, 0x8a, 0x7d, 0x28, 0xec, 0x73, 0xf0, 0x46, - 0x27, 0x64, 0x36, 0xcb, 0xdd, 0xb1, 0x82, 0x3d, 0x6a, 0x35, 0x6c, 0x4d, 0x50, 0x89, 0x11, 0x92, - 0x6f, 0xc2, 0xf8, 0xaa, 0x5b, 0x67, 0x92, 0x37, 0xee, 0x0c, 0xdc, 0x64, 0xe7, 0x03, 0xcc, 0x99, - 0xc9, 0xc1, 0x31, 0x71, 0xea, 0x3b, 0x47, 0xc5, 0xb7, 0x4f, 0x3b, 0x69, 0x94, 0x0a, 0x4c, 0xb5, - 0x36, 0x52, 0x86, 0xfc, 0x16, 0xdd, 0x66, 0xad, 0x8d, 0xe7, 0xd3, 0x93, 0x60, 0x61, 0x91, 0x27, - 0x7e, 0x69, 0x16, 0x79, 0x02, 0x46, 0x3c, 0x98, 0xc1, 0xfe, 0x59, 0xb7, 0x7d, 0xff, 0xc0, 0xf5, - 0x1a, 0x98, 0x38, 0xa5, 0x97, 0x35, 0xd0, 0x62, 0x6a, 0xe7, 0xbf, 0xc0, 0x3b, 0xbf, 0xa3, 0x70, - 0x50, 0x05, 0xc8, 0x04, 0x7b, 0xf2, 0x75, 0x98, 0x12, 0xb1, 0x0b, 0xee, 0xdf, 0x2e, 0xe1, 0xaa, - 0x9c, 0xd0, 0xfc, 0x3e, 0xf5, 0x42, 0x2e, 0xa5, 0x8a, 0x50, 0x08, 0x52, 0x03, 0x65, 0xb5, 0x76, - 0x6c, 0x5d, 0xe9, 0xaf, 0x92, 0x90, 0x75, 0x18, 0xaf, 0x60, 0x56, 0x67, 0xf4, 0x4d, 0x13, 0x76, - 0xe1, 0x61, 0x42, 0xb0, 0xa8, 0x84, 0xeb, 0x62, 0x44, 0x02, 0x68, 0xf4, 0x74, 0xd3, 0x6d, 0x75, - 0x43, 0x44, 0x72, 0x0b, 0x72, 0xd5, 0xca, 0xba, 0x30, 0x0b, 0x9f, 0x09, 0x23, 0x84, 0xac, 0xcb, - 0xf4, 0x49, 0x68, 0x3f, 0xe7, 0x34, 0x34, 0xa3, 0xf2, 0x6a, 0x65, 0x9d, 0xec, 0xc0, 0x24, 0x76, - 0xc0, 0x0a, 0xb5, 0x79, 0xdf, 0x4e, 0xf7, 0xe8, 0xdb, 0x6b, 0xa9, 0x7d, 0x3b, 0xcf, 0xfb, 0x76, - 0x4f, 0x50, 0x6b, 0xf9, 0x60, 0x54, 0xb6, 0x4c, 0xa4, 0x15, 0x39, 0xaa, 0x64, 0x16, 0x93, 0x8d, - 0x55, 0xb4, 0x0f, 0x12, 0x22, 0xad, 0x4c, 0x69, 0x15, 0xa6, 0x55, 0xe9, 0xe9, 0x75, 0x92, 0xe4, - 0x43, 0x3e, 0x0f, 0x43, 0x0f, 0xf6, 0x03, 0x5b, 0x18, 0x80, 0xcb, 0x7e, 0x64, 0x20, 0xd9, 0x7c, - 0xd4, 0x42, 0xba, 0xfb, 0x5a, 0xcc, 0x39, 0xa4, 0x61, 0x43, 0xb1, 0x62, 0x7b, 0x8d, 0x03, 0xdb, - 0x43, 0x07, 0xe1, 0x59, 0x8d, 0x85, 0x52, 0xc2, 0x87, 0x62, 0x4f, 0x00, 0x62, 0x5e, 0xc3, 0x2a, - 0x0b, 0xf2, 0x5d, 0x70, 0xde, 0x77, 0x76, 0xdb, 0x76, 0xd0, 0xf5, 0xa8, 0x65, 0x37, 0x77, 0x5d, - 0xcf, 0x09, 0xf6, 0x5a, 0x96, 0xdf, 0x75, 0x02, 0x3a, 0x3f, 0xa7, 0x65, 0xb4, 0xae, 0x49, 0xbc, - 0x92, 0x44, 0xab, 0x31, 0x2c, 0xf3, 0x9c, 0x9f, 0x5e, 0x40, 0xbe, 0x0c, 0x93, 0xea, 0x96, 0xec, - 0xcf, 0x9f, 0xb9, 0x94, 0xbb, 0x32, 0x15, 0x5e, 0x3c, 0xe2, 0x1b, 0xb8, 0x8c, 0x04, 0xad, 0x9c, - 0x10, 0xbe, 0x1e, 0x09, 0x5a, 0xe1, 0x15, 0xe6, 0x88, 0x24, 0x85, 0x59, 0x73, 0x46, 0xcc, 0x58, - 0xd1, 0xcb, 0xf7, 0x6f, 0x97, 0xcc, 0xd1, 0xf5, 0xea, 0xc3, 0x5a, 0xd3, 0x0d, 0x8c, 0xff, 0x32, - 0x83, 0x9b, 0x38, 0x79, 0x0d, 0x03, 0x49, 0x85, 0xaf, 0x67, 0xa8, 0xbf, 0xb5, 0x3b, 0xb1, 0x34, - 0x02, 0x1c, 0x85, 0xbc, 0x0e, 0x23, 0xb7, 0xed, 0xba, 0x0c, 0x62, 0x23, 0x90, 0x77, 0x10, 0xa2, - 0x2a, 0x7b, 0x39, 0x0e, 0x93, 0x2f, 0xf9, 0xe4, 0x2e, 0x45, 0xc9, 0xd2, 0xcb, 0x25, 0xf9, 0x5c, - 0x8f, 0xf2, 0xa5, 0x58, 0x14, 0x4a, 0x36, 0xf5, 0x98, 0x55, 0x7c, 0x2a, 0x07, 0xe3, 0xcf, 0x32, - 0xd1, 0xae, 0x44, 0x5e, 0x85, 0x21, 0x73, 0x3d, 0xfc, 0x7e, 0xee, 0xf4, 0x1b, 0xfb, 0x7c, 0x44, - 0x20, 0x5f, 0x86, 0x33, 0x0a, 0x9f, 0x84, 0x89, 0xfe, 0x2b, 0xe8, 0x93, 0xaa, 0x7c, 0x49, 0xba, - 0x9d, 0x7e, 0x3a, 0x0f, 0x14, 0xa6, 0xa3, 0x82, 0x0a, 0x6d, 0x3b, 0x9c, 0xb7, 0xd2, 0x58, 0x95, - 0x77, 0x03, 0x11, 0xe2, 0x8d, 0x4d, 0xe3, 0xc0, 0x5d, 0x52, 0x8d, 0xdf, 0xce, 0x68, 0xbb, 0x4d, - 0x98, 0x5d, 0x3a, 0x73, 0x42, 0x76, 0xe9, 0xb7, 0x00, 0x4a, 0xdd, 0xc0, 0x5d, 0x6e, 0x7b, 0x6e, - 0x93, 0x6b, 0x51, 0x44, 0x26, 0x0d, 0xd4, 0x0d, 0x53, 0x04, 0x6b, 0x9e, 0x73, 0x21, 0x72, 0xaa, - 0x37, 0x43, 0xee, 0xa3, 0x7a, 0x33, 0x18, 0x7f, 0x90, 0xd1, 0xd6, 0x28, 0x93, 0x12, 0xc5, 0x54, - 0x54, 0x2d, 0xc6, 0x3a, 0xce, 0x23, 0xcb, 0x6f, 0xba, 0x5a, 0xb8, 0x0a, 0x81, 0x46, 0xfe, 0xdd, - 0x0c, 0x9c, 0xe5, 0x6e, 0x01, 0x6b, 0xdd, 0xd6, 0x36, 0xf5, 0x1e, 0xda, 0x4d, 0xa7, 0x11, 0x85, - 0xe9, 0x8b, 0xcc, 0x07, 0x95, 0x6a, 0xd2, 0xf1, 0xf9, 0x45, 0x95, 0xbb, 0x29, 0x58, 0x6d, 0x2c, - 0xb4, 0x1e, 0x85, 0xa5, 0xea, 0x45, 0x35, 0x9d, 0xde, 0xf8, 0xf5, 0x0c, 0xbc, 0x78, 0x62, 0x2d, - 0xe4, 0x3a, 0x8c, 0xca, 0x14, 0x26, 0x19, 0xec, 0x78, 0xb4, 0xb3, 0x4d, 0xa6, 0x2f, 0x91, 0x58, - 0xe4, 0x2b, 0x70, 0x46, 0x65, 0xb5, 0xe1, 0xd9, 0x8e, 0x9a, 0x28, 0x24, 0xe5, 0xab, 0x03, 0x86, - 0x12, 0x97, 0xd6, 0xd2, 0x99, 0x18, 0xff, 0x5f, 0x46, 0xc9, 0x37, 0xff, 0x8c, 0xca, 0xf0, 0xb7, - 0x34, 0x19, 0x5e, 0x06, 0x29, 0x0d, 0x5b, 0xc5, 0xca, 0x52, 0xef, 0x5d, 0xd3, 0x8a, 0xbd, 0x38, - 0x02, 0x7e, 0x24, 0x0b, 0xe3, 0x9b, 0x3e, 0xf5, 0xf8, 0x43, 0xee, 0x27, 0x2b, 0x54, 0x63, 0xd8, - 0xae, 0x81, 0x82, 0xe9, 0xfd, 0x49, 0x06, 0x15, 0xfc, 0x2a, 0x05, 0xeb, 0x0d, 0x25, 0xc7, 0x24, - 0xf6, 0x06, 0x66, 0x97, 0x44, 0x28, 0x0f, 0x2d, 0xb6, 0xaa, 0xa7, 0x9b, 0xc5, 0x9c, 0xc3, 0xab, - 0xe4, 0x0b, 0x30, 0xbc, 0x89, 0xea, 0x4a, 0x3d, 0xc8, 0x46, 0xc8, 0x1f, 0x0b, 0xf9, 0x26, 0xdd, - 0xf5, 0xf5, 0xb8, 0x73, 0x9c, 0x90, 0xd4, 0x60, 0xb4, 0xec, 0x51, 0xcc, 0x1e, 0x3f, 0x34, 0xb8, - 0x8b, 0x78, 0x9d, 0x93, 0xc4, 0x5d, 0xc4, 0x05, 0x27, 0xe3, 0xe7, 0xb2, 0x40, 0xa2, 0x36, 0x62, - 0xaa, 0x34, 0xff, 0x99, 0x1d, 0xf4, 0xf7, 0xb5, 0x41, 0xbf, 0x90, 0x18, 0x74, 0xde, 0xbc, 0x81, - 0xc6, 0xfe, 0x77, 0x33, 0x70, 0x36, 0x9d, 0x90, 0xbc, 0x04, 0x23, 0x0f, 0x36, 0xd6, 0x65, 0x9c, - 0x16, 0xd1, 0x14, 0xb7, 0x83, 0xba, 0x02, 0x53, 0x14, 0x91, 0x37, 0x60, 0xe4, 0x8b, 0x66, 0x99, - 0x9d, 0x43, 0x4a, 0x32, 0x8e, 0x6f, 0x78, 0x56, 0x5d, 0x3f, 0x8a, 0x04, 0x92, 0x3a, 0xb6, 0xb9, - 0xa7, 0x36, 0xb6, 0x3f, 0x99, 0x85, 0xe9, 0x52, 0xbd, 0x4e, 0x7d, 0x5f, 0x04, 0x9a, 0x7f, 0x66, - 0x07, 0x36, 0x3d, 0x02, 0x8b, 0xd6, 0xb6, 0x81, 0x46, 0xf5, 0xf7, 0x32, 0x70, 0x46, 0x52, 0x3d, - 0x72, 0xe8, 0xc1, 0xc6, 0x9e, 0x47, 0xfd, 0x3d, 0xb7, 0xd9, 0x18, 0x38, 0xe3, 0x0f, 0x13, 0xf4, - 0x30, 0x38, 0xbc, 0xfa, 0xaa, 0xbf, 0x83, 0x10, 0x4d, 0xd0, 0xe3, 0x01, 0xe4, 0xaf, 0xc3, 0x68, - 0xa9, 0xd3, 0xf1, 0xdc, 0x47, 0x7c, 0xd9, 0x8b, 0xc8, 0x92, 0x36, 0x07, 0x69, 0x1e, 0xf6, 0x1c, - 0xc4, 0x3e, 0xa3, 0x42, 0xdb, 0x3c, 0x94, 0xdf, 0x24, 0xff, 0x8c, 0x06, 0x6d, 0xab, 0xb2, 0x38, - 0x96, 0x1b, 0x35, 0x20, 0xeb, 0x9e, 0xdb, 0x72, 0x03, 0xda, 0xe0, 0xed, 0xc1, 0xc0, 0x04, 0x27, - 0x86, 0xd4, 0xda, 0x70, 0x82, 0xa6, 0x16, 0x52, 0x2b, 0x60, 0x00, 0x93, 0xc3, 0x8d, 0xff, 0x67, - 0x18, 0x26, 0xd4, 0xde, 0x21, 0x06, 0x4f, 0xe3, 0xe1, 0x7a, 0x6a, 0x74, 0x0c, 0x1b, 0x21, 0xa6, - 0x28, 0x89, 0x42, 0xcb, 0x64, 0x4f, 0x0c, 0x2d, 0xb3, 0x05, 0x93, 0xeb, 0x9e, 0x8b, 0x21, 0x30, - 0xf1, 0xb5, 0x52, 0x6c, 0x85, 0xb3, 0xca, 0xbd, 0x93, 0x0d, 0x24, 0xbe, 0x87, 0xa2, 0x64, 0xdf, - 0x11, 0xd8, 0x98, 0xdc, 0x52, 0xd3, 0xba, 0x68, 0x7c, 0xb8, 0xa9, 0x85, 0xed, 0x8b, 0x38, 0xb6, - 0xa1, 0xa9, 0x05, 0x83, 0xe8, 0xa6, 0x16, 0x0c, 0xa2, 0xae, 0xb5, 0xe1, 0xa7, 0xb5, 0xd6, 0xc8, - 0xcf, 0x65, 0x60, 0xbc, 0xd4, 0x6e, 0x8b, 0x90, 0x35, 0x27, 0x78, 0xeb, 0x7f, 0x45, 0x58, 0x5b, - 0xbc, 0xfd, 0x91, 0xac, 0x2d, 0x50, 0x6e, 0xf1, 0x51, 0x52, 0x8d, 0x2a, 0x54, 0x6f, 0x6b, 0xca, - 0x77, 0x90, 0xb7, 0xa1, 0x10, 0x4e, 0xf2, 0x6a, 0xbb, 0x41, 0x1f, 0x53, 0x9e, 0x06, 0x71, 0x52, - 0xc4, 0xd5, 0x56, 0x25, 0xd3, 0x38, 0x22, 0xd9, 0x00, 0xb0, 0xc3, 0xd9, 0x15, 0xcb, 0xe7, 0x9a, - 0x9c, 0x7e, 0x42, 0x7a, 0xc6, 0xdf, 0xf8, 0xa0, 0xa5, 0x4a, 0xcf, 0x11, 0x1f, 0xd2, 0x82, 0x69, - 0x9e, 0x4c, 0xb5, 0x16, 0xd8, 0x5e, 0x80, 0xa9, 0x28, 0xe0, 0xc4, 0x71, 0x78, 0x55, 0xe8, 0xcf, - 0x9e, 0x17, 0x29, 0x5a, 0x7d, 0x46, 0x6b, 0xa5, 0xe4, 0xa5, 0x88, 0xf3, 0xe6, 0x51, 0xcc, 0xcd, - 0x73, 0xc9, 0xef, 0xe5, 0x93, 0xfe, 0x27, 0x33, 0x70, 0x56, 0x9d, 0xf4, 0xb5, 0xee, 0xb6, 0x08, - 0x1d, 0x4a, 0xae, 0xc1, 0x98, 0x98, 0x93, 0xe1, 0x25, 0x2a, 0x99, 0x51, 0x23, 0x42, 0x21, 0xcb, - 0x6c, 0x1a, 0x32, 0x1e, 0x42, 0xea, 0x9e, 0x8d, 0xed, 0x53, 0xac, 0x28, 0x4a, 0xd4, 0xed, 0xe1, - 0x6f, 0x7d, 0x7e, 0x32, 0x88, 0xf1, 0x1e, 0xcc, 0xe8, 0x23, 0x51, 0xa3, 0x01, 0xb9, 0x0a, 0xa3, - 0x72, 0xf8, 0x32, 0xe9, 0xc3, 0x27, 0xcb, 0x8d, 0x2d, 0x20, 0x09, 0x7a, 0x1f, 0xcd, 0xa2, 0xd8, - 0xfd, 0x94, 0x9b, 0xed, 0xc9, 0x47, 0xc9, 0x04, 0xe2, 0xd2, 0xac, 0xf8, 0xbe, 0x71, 0xcd, 0x2d, - 0x01, 0xc3, 0xa8, 0xfe, 0xd9, 0x14, 0xcc, 0xa6, 0xec, 0xb9, 0x27, 0xc8, 0x44, 0x45, 0x7d, 0x83, - 0x18, 0x0b, 0x83, 0x7d, 0xc8, 0x6d, 0xe1, 0x3d, 0x18, 0x3e, 0x71, 0x3b, 0xe0, 0x4e, 0x29, 0xb1, - 0x5d, 0x80, 0x93, 0x7d, 0x2c, 0x72, 0x91, 0x1a, 0x8f, 0x67, 0xf8, 0xa9, 0xc5, 0xe3, 0x59, 0x82, - 0x49, 0xd1, 0x2a, 0xb1, 0x5d, 0x29, 0xc6, 0xd1, 0x32, 0x43, 0x4c, 0x62, 0xdb, 0xd2, 0x49, 0x38, - 0x0f, 0xdf, 0x6d, 0x3e, 0xa2, 0x82, 0xc7, 0xa8, 0xca, 0x03, 0x0b, 0x52, 0x79, 0x28, 0x24, 0xe4, - 0x3f, 0xc1, 0x44, 0x8e, 0x08, 0x51, 0xf7, 0xac, 0x7c, 0xbf, 0x3d, 0xab, 0xf1, 0x74, 0xf6, 0xac, - 0x0b, 0xf2, 0x1b, 0xd3, 0xf7, 0xae, 0x94, 0xcf, 0x22, 0xbf, 0x92, 0x81, 0x19, 0x1e, 0x14, 0x46, - 0xfd, 0xd8, 0xbe, 0x81, 0x3e, 0xea, 0x4f, 0xe7, 0x63, 0x5f, 0x10, 0xb9, 0x81, 0xd2, 0xbf, 0x35, - 0xf9, 0x51, 0xe4, 0xbb, 0x00, 0xc2, 0x15, 0xc5, 0x43, 0xc9, 0x8e, 0x2f, 0xbe, 0x90, 0xb2, 0x0b, - 0x84, 0x48, 0x51, 0x0a, 0x8f, 0x20, 0xa4, 0xd3, 0xd2, 0x77, 0x86, 0x50, 0xf2, 0xbd, 0x30, 0xc7, - 0xd6, 0x4b, 0x08, 0x11, 0x21, 0xac, 0xe6, 0xc7, 0xb1, 0x96, 0xcf, 0xf4, 0x96, 0x89, 0xae, 0xa5, - 0x91, 0xf1, 0xc0, 0xc3, 0x51, 0x26, 0xf5, 0x40, 0x8d, 0x76, 0x91, 0x5a, 0x11, 0x46, 0x86, 0xc3, - 0xaf, 0xe7, 0x69, 0x36, 0x7a, 0xec, 0x6f, 0xe7, 0xe5, 0x5a, 0xe0, 0xfb, 0x9b, 0xaf, 0xfb, 0x28, - 0x23, 0x88, 0x7c, 0x11, 0x48, 0x18, 0x4d, 0x85, 0xc3, 0xa8, 0x4c, 0xc1, 0xc1, 0xd5, 0xcd, 0x51, - 0x54, 0x16, 0x4f, 0x16, 0xab, 0x93, 0x24, 0x49, 0x4c, 0x28, 0xcc, 0x89, 0x46, 0x33, 0xa8, 0xcc, - 0xb2, 0xe8, 0xcf, 0x4f, 0x69, 0x01, 0xc2, 0xa2, 0x92, 0x28, 0xe5, 0xba, 0x92, 0xaa, 0x51, 0x53, - 0x39, 0xa5, 0xb1, 0x23, 0xb7, 0x60, 0x0c, 0x1d, 0x85, 0x57, 0xa4, 0xb1, 0x97, 0x30, 0x3c, 0x41, - 0x97, 0x62, 0x6b, 0x4f, 0x37, 0xd9, 0x8a, 0x50, 0xd9, 0x75, 0xa0, 0xe2, 0x1d, 0x9a, 0xdd, 0x36, - 0x2a, 0x85, 0x85, 0xbe, 0xa3, 0xe1, 0x1d, 0x5a, 0x5e, 0x57, 0xf7, 0x24, 0x47, 0x24, 0xf2, 0x75, - 0x18, 0xbf, 0x6f, 0x3f, 0x0e, 0xf3, 0x4c, 0xcd, 0x0c, 0x9e, 0xcd, 0xaa, 0x65, 0x3f, 0x0e, 0x93, - 0x4c, 0xc5, 0xb3, 0x59, 0x29, 0x2c, 0xc9, 0x57, 0x01, 0x14, 0x4d, 0x35, 0x39, 0xb1, 0x82, 0x17, - 0x65, 0xd8, 0xbb, 0x54, 0x0d, 0x36, 0xf2, 0x57, 0x18, 0xc6, 0x24, 0x87, 0xb9, 0x8f, 0x4f, 0x72, - 0x38, 0xf3, 0xf1, 0x49, 0x0e, 0x0b, 0xdb, 0x70, 0xbe, 0xe7, 0xd2, 0x49, 0x09, 0x7a, 0x7c, 0x5d, - 0x0f, 0x7a, 0x7c, 0xbe, 0xd7, 0x11, 0xeb, 0xeb, 0x99, 0x56, 0x66, 0x0b, 0x73, 0xbd, 0xa5, 0x93, - 0x6f, 0x67, 0x63, 0x47, 0xae, 0xb8, 0x58, 0xf0, 0x2c, 0x5f, 0xbd, 0x64, 0x92, 0x2c, 0xa6, 0xe0, - 0xe6, 0x87, 0xb2, 0x12, 0x17, 0x9e, 0x1d, 0xca, 0xea, 0xa1, 0x8e, 0xc7, 0xf3, 0x93, 0x9e, 0xbe, - 0xef, 0xc0, 0x14, 0xcf, 0x9a, 0x7b, 0x8f, 0x1e, 0x1e, 0xb8, 0x5e, 0x83, 0xe7, 0x2f, 0x12, 0x32, - 0x78, 0x22, 0xe5, 0x7d, 0x0c, 0x97, 0x54, 0xa4, 0xef, 0xe9, 0x30, 0xd6, 0x7e, 0x3e, 0x75, 0x17, - 0x63, 0x08, 0xfd, 0xdc, 0x52, 0xc9, 0x9b, 0xa1, 0xa0, 0x46, 0x3d, 0x35, 0xdf, 0x8a, 0x27, 0x81, - 0x29, 0xf2, 0x1a, 0xf5, 0x8c, 0x7f, 0x91, 0x03, 0xc2, 0x6b, 0x2a, 0xdb, 0x1d, 0x1b, 0x3d, 0xb3, - 0x1d, 0x8c, 0xb5, 0x54, 0x10, 0x38, 0xf6, 0x76, 0x93, 0xaa, 0x81, 0xca, 0x84, 0x71, 0x6d, 0x58, - 0x66, 0xc5, 0x2f, 0x3a, 0x09, 0xc2, 0x1e, 0x5b, 0x5d, 0xf6, 0x49, 0xb6, 0xba, 0xaf, 0xc3, 0xf3, - 0xa5, 0x0e, 0xa6, 0xdf, 0x96, 0xb5, 0xdc, 0x76, 0x3d, 0xb9, 0x49, 0x69, 0x3e, 0x7f, 0x76, 0x88, - 0x96, 0xf8, 0xd2, 0x7e, 0x2c, 0x14, 0x39, 0x85, 0xcd, 0xcb, 0x4e, 0xa0, 0xc6, 0x90, 0x90, 0x72, - 0x4a, 0x07, 0x4b, 0x52, 0xe4, 0x14, 0x4e, 0x22, 0x79, 0x38, 0x9e, 0x94, 0x53, 0x30, 0x5b, 0x59, - 0xc4, 0xc3, 0xf1, 0x68, 0x0f, 0x59, 0x27, 0x24, 0x21, 0xef, 0xc0, 0x78, 0xa9, 0x1b, 0xb8, 0x82, - 0xb1, 0xb0, 0x0a, 0x8f, 0xec, 0xb7, 0xc5, 0xa7, 0x68, 0x57, 0x9f, 0x08, 0xdd, 0xf8, 0xd3, 0x1c, - 0x9c, 0x4f, 0x0e, 0xaf, 0x28, 0x0d, 0xd7, 0x47, 0xe6, 0x84, 0xf5, 0x91, 0x36, 0x1b, 0xb2, 0x51, - 0xa6, 0x89, 0xa7, 0x31, 0x1b, 0x78, 0x16, 0xef, 0x8f, 0x38, 0x1b, 0x6a, 0x30, 0xae, 0x9e, 0x77, - 0x43, 0x1f, 0xf5, 0xbc, 0x53, 0xb9, 0xb0, 0x4b, 0x3d, 0x0f, 0x9d, 0x31, 0x1c, 0x3d, 0x1d, 0xc5, - 0xa3, 0x66, 0x70, 0x0c, 0xf2, 0xef, 0xc0, 0x25, 0xbe, 0x27, 0xc5, 0x1b, 0xbb, 0x74, 0x28, 0x39, - 0x8a, 0x81, 0x5b, 0x3c, 0x3e, 0x2a, 0x5e, 0xe3, 0xaa, 0x12, 0x2b, 0xd1, 0x6d, 0xd6, 0xf6, 0xa1, - 0x25, 0xbf, 0x4c, 0xa9, 0xe4, 0x44, 0xde, 0x46, 0x19, 0xce, 0x8b, 0xd2, 0xc8, 0x69, 0x5b, 0x16, - 0xb2, 0x41, 0xde, 0x8f, 0xb4, 0x5d, 0x38, 0xc8, 0x31, 0x45, 0x16, 0x96, 0x63, 0xfe, 0x6f, 0x25, - 0x37, 0xf3, 0x1b, 0x69, 0x3e, 0x37, 0x3c, 0x6a, 0x37, 0x07, 0xeb, 0xee, 0x36, 0x52, 0xa7, 0x96, - 0x4d, 0xd5, 0xa9, 0x49, 0xa5, 0x4c, 0x2e, 0x55, 0x29, 0x53, 0x81, 0xe9, 0x5a, 0x77, 0x5b, 0xd6, - 0x1d, 0xf7, 0xd7, 0xf4, 0xbb, 0xdb, 0x69, 0xbd, 0x12, 0x27, 0x31, 0x7e, 0x34, 0x0b, 0x13, 0xeb, - 0xcd, 0xee, 0xae, 0xd3, 0xae, 0xd8, 0x81, 0xfd, 0xcc, 0xaa, 0xf9, 0xde, 0xd2, 0xd4, 0x7c, 0xa1, - 0x6b, 0x59, 0xd8, 0xb0, 0x81, 0x74, 0x7c, 0x3f, 0x9b, 0x81, 0xe9, 0x88, 0x84, 0x1f, 0xd6, 0x2b, - 0x30, 0xc4, 0x7e, 0x88, 0xcb, 0xef, 0xa5, 0x04, 0x63, 0x9e, 0x66, 0x32, 0xfc, 0x4b, 0x28, 0xde, - 0xf4, 0x1c, 0x6e, 0xc8, 0x61, 0xe1, 0xb3, 0x30, 0x16, 0xb1, 0x3d, 0x4d, 0x7a, 0xc9, 0xdf, 0xc8, - 0x40, 0x21, 0xde, 0x12, 0x72, 0x0f, 0x46, 0x19, 0x27, 0x87, 0xca, 0x7b, 0xf9, 0xcb, 0x3d, 0xda, - 0x7c, 0x4d, 0xa0, 0xf1, 0xcf, 0xc3, 0xce, 0xa7, 0x1c, 0x62, 0x4a, 0x0e, 0x0b, 0x26, 0x4c, 0xa8, - 0x58, 0x29, 0x5f, 0xf7, 0xba, 0x2e, 0xa1, 0x9c, 0x4d, 0xef, 0x07, 0x2d, 0x29, 0xa6, 0xf6, 0xd5, - 0x42, 0xf8, 0xb8, 0xac, 0x4d, 0xae, 0xd4, 0x55, 0x85, 0x93, 0x66, 0x31, 0xca, 0x57, 0xa0, 0xce, - 0xb3, 0x94, 0x09, 0x1d, 0xe2, 0x91, 0xd7, 0x61, 0x84, 0xd7, 0xa7, 0x26, 0x74, 0xeb, 0x20, 0x44, - 0x95, 0x93, 0x39, 0x8e, 0xf1, 0x77, 0x73, 0x70, 0x36, 0xfa, 0xbc, 0xcd, 0x4e, 0xc3, 0x0e, 0xe8, - 0xba, 0xed, 0xd9, 0x2d, 0xff, 0x84, 0x15, 0x70, 0x25, 0xf1, 0x69, 0x98, 0x4a, 0x4b, 0x7e, 0x9a, - 0xf2, 0x41, 0x46, 0xec, 0x83, 0x50, 0x07, 0xca, 0x3f, 0x48, 0x7e, 0x06, 0xb9, 0x07, 0xb9, 0x1a, - 0x0d, 0xc4, 0xde, 0x7b, 0x39, 0xd1, 0xab, 0xea, 0x77, 0x5d, 0xab, 0xd1, 0x80, 0x0f, 0x22, 0x8f, - 0x0b, 0xa5, 0x05, 0xe7, 0x63, 0x5c, 0xc8, 0x16, 0x8c, 0x2c, 0x3f, 0xee, 0xd0, 0x7a, 0x20, 0x92, - 0xa3, 0x5e, 0xed, 0xcf, 0x8f, 0xe3, 0x2a, 0xb9, 0x51, 0x29, 0x02, 0xd4, 0xce, 0xe2, 0x28, 0x0b, - 0xb7, 0x20, 0x2f, 0x2b, 0x3f, 0xcd, 0xcc, 0x5d, 0x78, 0x0b, 0xc6, 0x95, 0x4a, 0x4e, 0x35, 0xe9, - 0x7f, 0x91, 0xed, 0xab, 0x6e, 0x53, 0xe6, 0x53, 0x5d, 0x4e, 0xc8, 0x8a, 0x4a, 0x36, 0x2a, 0x2e, - 0x2b, 0x5a, 0xfb, 0xa2, 0xa8, 0x8f, 0xd0, 0x58, 0x85, 0xe9, 0xda, 0xbe, 0xd3, 0x89, 0x02, 0xc5, - 0x6a, 0x27, 0x32, 0x66, 0xbc, 0x11, 0x17, 0xf7, 0xf8, 0x89, 0x1c, 0xa7, 0x33, 0xfe, 0x22, 0x03, - 0x23, 0xec, 0xaf, 0x87, 0xb7, 0x9e, 0xd1, 0x2d, 0xf3, 0xa6, 0xb6, 0x65, 0xce, 0x28, 0xb1, 0xda, - 0x71, 0xe3, 0xb8, 0x75, 0xc2, 0x66, 0x79, 0x24, 0x06, 0x88, 0x23, 0x93, 0x3b, 0x30, 0x2a, 0x4c, - 0x8a, 0x84, 0xed, 0xb7, 0x1a, 0xfc, 0x5d, 0x1a, 0x1b, 0x85, 0x37, 0x7c, 0xb7, 0x13, 0x57, 0x89, - 0x48, 0x6a, 0x26, 0xd7, 0xcb, 0x90, 0xbd, 0x5a, 0xbe, 0x74, 0x17, 0x9d, 0xf5, 0x78, 0xe8, 0x72, - 0x7f, 0xe9, 0x9c, 0xe0, 0xd4, 0xcb, 0xb7, 0xbe, 0x24, 0x5e, 0x43, 0x72, 0xfd, 0x98, 0x9c, 0x95, - 0x49, 0x8a, 0x53, 0x1f, 0x4a, 0x5a, 0x70, 0xb6, 0x56, 0x5b, 0x41, 0xf3, 0xc3, 0x75, 0xd7, 0x0b, - 0x6e, 0xbb, 0xde, 0x81, 0x8d, 0xb6, 0xc5, 0xa8, 0xe1, 0x53, 0x6c, 0x10, 0xd2, 0x8c, 0xc2, 0x5e, - 0x4d, 0x35, 0x0a, 0xeb, 0x63, 0xa7, 0x60, 0xb4, 0xe1, 0x5c, 0xad, 0xb6, 0xc2, 0x03, 0x87, 0xff, - 0x65, 0xd4, 0xf7, 0x1b, 0x19, 0x98, 0xa9, 0xd5, 0x56, 0x62, 0x55, 0xad, 0xca, 0x88, 0xe5, 0x19, - 0x3d, 0xcf, 0x77, 0x6a, 0x47, 0xe0, 0x28, 0x64, 0xb8, 0x84, 0x57, 0xd7, 0x82, 0x53, 0x72, 0x26, - 0x64, 0x3d, 0x8c, 0x91, 0x9e, 0xd5, 0xfc, 0x01, 0x7a, 0x34, 0x14, 0x35, 0xdc, 0xc2, 0x9b, 0x8e, - 0x95, 0xea, 0x1a, 0x6e, 0x06, 0x31, 0xfe, 0xdb, 0xb3, 0x3c, 0x0a, 0xbb, 0x9c, 0x2d, 0xef, 0xc2, - 0x84, 0xa0, 0x47, 0xa3, 0x79, 0x61, 0x13, 0x72, 0x9e, 0x6d, 0x90, 0x3b, 0x1c, 0xce, 0xa3, 0xf3, - 0x7e, 0xe7, 0xa8, 0x38, 0xc4, 0xba, 0xc6, 0xd4, 0xd0, 0xc9, 0x03, 0x98, 0xbc, 0x6f, 0x3f, 0x56, - 0xd4, 0x19, 0xdc, 0x25, 0xea, 0x2a, 0xdb, 0x55, 0x5a, 0xf6, 0xe3, 0x01, 0x8c, 0xee, 0x74, 0x7a, - 0xb2, 0x0f, 0x53, 0x7a, 0x9b, 0xc4, 0x0c, 0x4c, 0x8e, 0xd8, 0x8d, 0xd4, 0x11, 0x3b, 0xdf, 0x71, - 0xbd, 0xc0, 0xda, 0x09, 0xc9, 0xb5, 0x8c, 0x03, 0x31, 0xd6, 0xe4, 0x5d, 0x98, 0x51, 0x42, 0x80, - 0xde, 0x76, 0xbd, 0x96, 0x2d, 0x2f, 0x5c, 0xa8, 0xe3, 0x47, 0x5b, 0xa2, 0x1d, 0x04, 0x9b, 0x49, - 0x4c, 0xf2, 0xe5, 0x34, 0x37, 0xb3, 0xe1, 0xc8, 0xf2, 0x30, 0xc5, 0xcd, 0xac, 0x97, 0xe5, 0x61, - 0xd2, 0xe1, 0x6c, 0xb7, 0x9f, 0x65, 0x72, 0x9e, 0xb7, 0x7e, 0x20, 0xcb, 0xe3, 0x70, 0xe4, 0x7a, - 0x58, 0x20, 0x2f, 0x42, 0x6e, 0x69, 0xfd, 0x36, 0xbe, 0x4c, 0x49, 0x23, 0xaa, 0xf6, 0x9e, 0xdd, - 0xae, 0xe3, 0x45, 0x48, 0x78, 0x03, 0xa8, 0x07, 0xe5, 0xd2, 0xfa, 0x6d, 0x62, 0xc3, 0x2c, 0xe6, - 0x79, 0x0b, 0xbe, 0x74, 0xe3, 0x86, 0x32, 0x54, 0x79, 0xfc, 0xb4, 0xeb, 0xe2, 0xd3, 0x8a, 0x98, - 0x25, 0x2e, 0xb0, 0x1e, 0xdf, 0xb8, 0x91, 0x3a, 0x20, 0xe1, 0x87, 0xa5, 0xf1, 0x62, 0x07, 0xd6, - 0x7d, 0xfb, 0x71, 0xe4, 0xc4, 0xe1, 0x0b, 0x87, 0xdd, 0x0b, 0x72, 0x6a, 0x45, 0x0e, 0x20, 0xda, - 0x81, 0xa5, 0x13, 0xb1, 0x7b, 0x6c, 0x34, 0xc1, 0x7c, 0xe1, 0xea, 0xb4, 0x20, 0xd5, 0x75, 0xd2, - 0xab, 0x5b, 0xbd, 0x8c, 0x29, 0xe8, 0x64, 0x33, 0xbc, 0x8d, 0xf3, 0xdb, 0xac, 0xc8, 0x8c, 0x7c, - 0x5d, 0xbd, 0x8d, 0x73, 0x25, 0x99, 0xd6, 0xac, 0xe9, 0x50, 0x85, 0xc3, 0xbd, 0x5a, 0x4c, 0x9d, - 0x4b, 0xf2, 0x92, 0x3f, 0x71, 0xfa, 0x4b, 0x3e, 0x85, 0xa1, 0x55, 0xb7, 0xbe, 0x2f, 0x82, 0xf3, - 0x7d, 0x91, 0xed, 0xc2, 0x7a, 0x1a, 0xfd, 0x27, 0xb5, 0xb8, 0x46, 0xf6, 0x64, 0x8d, 0x7d, 0x2a, - 0x9b, 0x05, 0xa2, 0x4f, 0x84, 0x15, 0xef, 0x5c, 0x78, 0xcb, 0x55, 0xca, 0xb8, 0x3c, 0xca, 0x27, - 0x8d, 0xec, 0x5a, 0x53, 0x27, 0x27, 0x14, 0x0a, 0x15, 0xea, 0xef, 0x07, 0x6e, 0xa7, 0xdc, 0x74, - 0x3a, 0xdb, 0xae, 0xed, 0xc9, 0x50, 0xce, 0x03, 0xef, 0xc9, 0x0d, 0x4e, 0x6f, 0xd5, 0x25, 0x03, - 0x33, 0xc1, 0x92, 0x7c, 0x19, 0xa6, 0xd8, 0xe4, 0x5e, 0x7e, 0x1c, 0xd0, 0x36, 0x1f, 0xf9, 0x19, - 0x94, 0xe8, 0xe6, 0x94, 0xdc, 0x25, 0x61, 0x21, 0x9f, 0x53, 0xb8, 0xd8, 0x69, 0x48, 0xa0, 0x05, - 0x36, 0xd4, 0x58, 0x91, 0x06, 0xcc, 0xdf, 0xb7, 0x1f, 0x2b, 0x39, 0x98, 0x95, 0x49, 0x4a, 0x70, - 0x82, 0x5d, 0x39, 0x3e, 0x2a, 0xbe, 0xcc, 0x26, 0x58, 0x14, 0x5d, 0xbc, 0xc7, 0x7c, 0xed, 0xc9, - 0x89, 0x7c, 0x13, 0xce, 0x89, 0x66, 0x55, 0x30, 0x6f, 0x98, 0xeb, 0x1d, 0xd6, 0xf6, 0x6c, 0xf4, - 0xdf, 0x9a, 0xed, 0xd1, 0x61, 0xd7, 0xd3, 0xb7, 0x44, 0xd9, 0x61, 0x0d, 0xc9, 0xc7, 0xf2, 0x39, - 0x23, 0xb3, 0x57, 0x0d, 0xe4, 0x43, 0x98, 0xe2, 0xcf, 0x71, 0x2b, 0xae, 0x1f, 0xa0, 0xb2, 0x66, - 0xee, 0x74, 0x6e, 0x09, 0xfc, 0x8d, 0x8f, 0x3b, 0xf2, 0xc4, 0x94, 0x3b, 0x31, 0xce, 0xe4, 0x6d, - 0x18, 0x5f, 0x77, 0xda, 0x3c, 0xf4, 0x68, 0x75, 0x1d, 0xd5, 0xca, 0xe2, 0x04, 0xea, 0x38, 0x6d, - 0x4b, 0x6a, 0x4c, 0x3a, 0xe1, 0x76, 0xa1, 0x62, 0x93, 0x2d, 0x18, 0xaf, 0xd5, 0x56, 0x6e, 0x3b, - 0x4c, 0x2e, 0xe9, 0x1c, 0xce, 0x9f, 0xed, 0xf1, 0x95, 0x2f, 0xa5, 0x7e, 0xe5, 0xa4, 0xef, 0xef, - 0x59, 0x3b, 0x4e, 0x93, 0x5a, 0x75, 0xb7, 0x73, 0x68, 0xaa, 0x9c, 0x52, 0x4c, 0xf5, 0xcf, 0x3d, - 0x65, 0x53, 0xfd, 0x2a, 0x4c, 0x2b, 0xc6, 0xb3, 0x68, 0x38, 0x3b, 0x1f, 0xc5, 0xab, 0x52, 0x4d, - 0xf3, 0xe3, 0xae, 0xa9, 0x71, 0x3a, 0x69, 0xa3, 0x7f, 0xfe, 0xb4, 0x36, 0xfa, 0x0e, 0xcc, 0xf0, - 0xc1, 0x10, 0xf3, 0x00, 0x47, 0x7a, 0xa1, 0x47, 0x1f, 0x5e, 0x4d, 0xed, 0xc3, 0x59, 0x31, 0xd2, - 0x72, 0x92, 0xe1, 0xf3, 0x73, 0x92, 0x2b, 0xd9, 0x01, 0x22, 0x80, 0x76, 0x60, 0x6f, 0xdb, 0x3e, - 0xc5, 0xba, 0x9e, 0xef, 0x51, 0xd7, 0xcb, 0xa9, 0x75, 0x4d, 0xc9, 0xba, 0xb6, 0x79, 0x35, 0x29, - 0x1c, 0x49, 0x5b, 0xd6, 0x23, 0xe7, 0x17, 0x76, 0xec, 0x0b, 0x9a, 0x8e, 0x3b, 0x89, 0xc0, 0x43, - 0x3f, 0xc5, 0x27, 0x6d, 0xbc, 0xdf, 0x53, 0x38, 0x93, 0xc7, 0x70, 0x36, 0xf9, 0x15, 0x58, 0xe7, - 0x05, 0xac, 0xf3, 0x82, 0x56, 0x67, 0x1c, 0x89, 0xcf, 0x1b, 0xbd, 0x59, 0xf1, 0x5a, 0x7b, 0xf0, - 0x27, 0x3f, 0x94, 0x81, 0x73, 0xf7, 0x6f, 0x97, 0x30, 0x9b, 0xa8, 0xc3, 0x23, 0xd1, 0x85, 0x2e, - 0xbd, 0x17, 0xc5, 0x3b, 0x48, 0xfc, 0x6d, 0x46, 0x4a, 0x1c, 0xb8, 0x55, 0x30, 0xd1, 0xfd, 0xa5, - 0xd6, 0x8e, 0xcd, 0x93, 0x94, 0x0a, 0x16, 0x29, 0x7e, 0xbf, 0xdf, 0xfa, 0xe3, 0x62, 0xc6, 0xec, - 0x55, 0x15, 0x69, 0xc2, 0x82, 0xde, 0x2d, 0xd2, 0x8b, 0x62, 0x8f, 0x36, 0x9b, 0xf3, 0x45, 0x9c, - 0xd1, 0xaf, 0x1f, 0x1f, 0x15, 0xaf, 0x24, 0x7a, 0x37, 0xf4, 0xcc, 0x60, 0x98, 0x4a, 0x83, 0xfb, - 0xf0, 0x23, 0xad, 0x14, 0xa1, 0x7b, 0xfe, 0x92, 0x16, 0xfb, 0x27, 0x51, 0xbe, 0xf4, 0x8a, 0x90, - 0x48, 0x2e, 0xb0, 0xf5, 0xde, 0x53, 0x40, 0x34, 0x93, 0x9c, 0xef, 0x0e, 0xe5, 0x27, 0x0b, 0x53, - 0x29, 0x2e, 0x0b, 0xc6, 0xef, 0x64, 0x63, 0x07, 0x23, 0xa9, 0xc2, 0xa8, 0x98, 0xef, 0x3d, 0x2f, - 0x19, 0x17, 0x52, 0x67, 0xf5, 0xa8, 0x58, 0x3a, 0xa6, 0xa4, 0x27, 0x07, 0x8c, 0x15, 0x36, 0x5a, - 0xdc, 0x78, 0xbf, 0xca, 0xcf, 0x3d, 0x04, 0x69, 0x27, 0x7c, 0xe5, 0xf4, 0x8e, 0x78, 0xba, 0x9f, - 0x27, 0x1e, 0xf5, 0xb2, 0x36, 0xb2, 0xcf, 0x53, 0x49, 0xe5, 0x42, 0x6f, 0x2e, 0x3d, 0x6f, 0xd4, - 0x53, 0xab, 0x90, 0xd5, 0x62, 0xfc, 0x76, 0x06, 0x26, 0xb5, 0x93, 0x95, 0xdc, 0x52, 0x5c, 0x15, - 0x23, 0xef, 0x7d, 0x0d, 0x07, 0x37, 0xdb, 0xb8, 0x13, 0xe3, 0x2d, 0xe1, 0x77, 0x90, 0xed, 0x4d, - 0x87, 0x8b, 0x2d, 0xee, 0xb9, 0xda, 0x5f, 0x3f, 0x1c, 0xe6, 0xc1, 0x1c, 0xea, 0x91, 0x07, 0xf3, - 0x97, 0x2f, 0xc0, 0x94, 0x7e, 0x23, 0x26, 0xaf, 0xc3, 0x08, 0xea, 0xe6, 0xa5, 0x7a, 0x05, 0xd5, - 0x42, 0xa8, 0xbe, 0xd7, 0x9c, 0x51, 0x38, 0x0e, 0x79, 0x05, 0x20, 0x34, 0x00, 0x97, 0x2f, 0x53, - 0xc3, 0xc7, 0x47, 0xc5, 0xcc, 0x1b, 0xa6, 0x52, 0x40, 0xbe, 0x06, 0xb0, 0xe6, 0x36, 0x68, 0x98, - 0xdc, 0xb8, 0x8f, 0xf5, 0xc5, 0xab, 0x89, 0x34, 0x2b, 0x67, 0xda, 0x6e, 0x83, 0x26, 0x73, 0xaa, - 0x28, 0x1c, 0xc9, 0xe7, 0x61, 0xd8, 0xec, 0x36, 0xa9, 0x7c, 0xc1, 0x18, 0x97, 0x27, 0x5c, 0xb7, - 0x49, 0x23, 0x3d, 0x81, 0xd7, 0x8d, 0x1b, 0x16, 0x32, 0x00, 0x79, 0x9f, 0xa7, 0x5f, 0x11, 0x31, - 0x42, 0x87, 0xa3, 0xb7, 0x3a, 0x45, 0xf2, 0x49, 0x44, 0x09, 0x55, 0x48, 0xc8, 0x03, 0x18, 0x55, - 0x1f, 0x99, 0x14, 0x9f, 0x77, 0xf5, 0x21, 0x52, 0x51, 0x3a, 0x88, 0xac, 0xc8, 0xf1, 0xf7, 0x27, - 0xc9, 0x85, 0xbc, 0x03, 0x63, 0x8c, 0x3d, 0xdb, 0x39, 0x7c, 0x71, 0xab, 0xc1, 0x17, 0x39, 0xe5, - 0x83, 0xd8, 0xee, 0xa3, 0x45, 0xf2, 0x0c, 0x09, 0xc8, 0x97, 0x31, 0x8f, 0xad, 0xe8, 0xea, 0xbe, - 0x56, 0x39, 0x97, 0x13, 0x5d, 0x8d, 0x89, 0x6d, 0x13, 0x3d, 0x1d, 0xf1, 0x23, 0xbb, 0x61, 0xc8, - 0xb5, 0x41, 0x52, 0xe6, 0xbc, 0x96, 0xa8, 0x60, 0x5e, 0x46, 0x11, 0x4b, 0x26, 0xa9, 0xd6, 0xf8, - 0x92, 0x0e, 0x14, 0x22, 0xa1, 0x52, 0xd4, 0x05, 0xfd, 0xea, 0x7a, 0x23, 0x51, 0x97, 0x3a, 0x80, - 0x89, 0xea, 0x12, 0xdc, 0x49, 0x03, 0xa6, 0xe4, 0x01, 0x25, 0xea, 0x1b, 0xef, 0x57, 0xdf, 0x2b, - 0x89, 0xfa, 0x66, 0x1b, 0xdb, 0xc9, 0x7a, 0x62, 0x3c, 0xc9, 0x3b, 0x30, 0x29, 0x21, 0x3c, 0x65, - 0xf4, 0x44, 0x94, 0x73, 0xb7, 0xb1, 0x9d, 0x48, 0x14, 0xad, 0x23, 0xab, 0xd4, 0x7c, 0x76, 0x4c, - 0x6a, 0xd4, 0xf1, 0x59, 0xa1, 0x23, 0x93, 0x0f, 0x60, 0xbc, 0xda, 0x62, 0x0d, 0x71, 0xdb, 0x76, - 0x40, 0x85, 0x3f, 0xa4, 0xb4, 0x30, 0x52, 0x4a, 0x94, 0xa9, 0xca, 0x93, 0x61, 0x47, 0x45, 0x5a, - 0x32, 0xec, 0x08, 0xcc, 0x3a, 0x8f, 0xbf, 0x2a, 0x8a, 0x39, 0x2c, 0x7d, 0x25, 0x2f, 0xa4, 0x58, - 0xf9, 0x28, 0xec, 0x45, 0x3c, 0x48, 0x06, 0x95, 0xaf, 0x7a, 0xb1, 0x58, 0xbc, 0x2a, 0x4f, 0xf2, - 0x2e, 0x8c, 0x8b, 0x6c, 0x62, 0x25, 0x73, 0xcd, 0x9f, 0x2f, 0x60, 0xe3, 0x31, 0xc2, 0x83, 0x4c, - 0x3c, 0x66, 0xd9, 0x5e, 0xcc, 0x9c, 0x35, 0xc2, 0x27, 0x5f, 0x82, 0xb9, 0x2d, 0xa7, 0xdd, 0x70, - 0x0f, 0x7c, 0x71, 0x4c, 0x89, 0x8d, 0x6e, 0x26, 0x72, 0x26, 0x3b, 0xe0, 0xe5, 0xa1, 0x2c, 0x98, - 0xd8, 0xf8, 0x52, 0x39, 0x90, 0xef, 0x49, 0x70, 0xe6, 0x33, 0x88, 0xf4, 0x9b, 0x41, 0x8b, 0x89, - 0x19, 0x94, 0xac, 0x3e, 0x3e, 0x9d, 0x52, 0xab, 0x21, 0x2e, 0x10, 0xfd, 0x7c, 0xbf, 0xeb, 0x3a, - 0xed, 0xf9, 0x59, 0xdc, 0x0b, 0x9f, 0x8f, 0xc7, 0x54, 0x40, 0x3c, 0x91, 0x54, 0xdc, 0x38, 0x3e, - 0x2a, 0x5e, 0x8c, 0xcb, 0xfc, 0x1f, 0xba, 0xda, 0x73, 0x49, 0x0a, 0x6b, 0xf2, 0x01, 0x4c, 0xb0, - 0xff, 0x43, 0xa5, 0xc4, 0x9c, 0x66, 0x17, 0xaa, 0x60, 0x8a, 0x7a, 0x70, 0x8c, 0x30, 0xdd, 0x59, - 0x8a, 0xbe, 0x42, 0x63, 0x45, 0xde, 0x02, 0x60, 0x62, 0x93, 0xd8, 0x8e, 0xcf, 0x44, 0xa1, 0x8f, - 0x51, 0xea, 0x4a, 0x6e, 0xc4, 0x11, 0x32, 0x79, 0x07, 0xc6, 0xd9, 0xaf, 0x5a, 0xb7, 0xe1, 0xb2, - 0xb5, 0x71, 0x16, 0x69, 0xb9, 0x6b, 0x2a, 0xa3, 0xf5, 0x39, 0x5c, 0x73, 0x4d, 0x8d, 0xd0, 0xc9, - 0x0a, 0x4c, 0x63, 0x88, 0x6a, 0x11, 0x1c, 0xd5, 0xa1, 0xfe, 0xfc, 0x39, 0xc5, 0x1a, 0x82, 0x15, - 0x59, 0x4e, 0x58, 0xa6, 0xde, 0x65, 0x62, 0x64, 0xc4, 0x87, 0xd9, 0xe4, 0x73, 0xb2, 0x3f, 0x3f, - 0x8f, 0x9d, 0x24, 0x25, 0xf8, 0x24, 0x06, 0xdf, 0x8f, 0xd9, 0x88, 0x28, 0x1b, 0x97, 0x7c, 0x54, - 0x52, 0x2b, 0x4c, 0xe3, 0x4e, 0x4c, 0x20, 0x77, 0xca, 0xeb, 0xf1, 0x18, 0xce, 0xe7, 0xb1, 0x05, - 0x38, 0xcc, 0xbb, 0xf5, 0x28, 0x8b, 0x78, 0x4a, 0x1c, 0xe7, 0x14, 0x6a, 0xf2, 0xdd, 0x70, 0x46, - 0xee, 0x20, 0xa2, 0x48, 0xcc, 0xeb, 0x85, 0x53, 0xee, 0xc4, 0x8d, 0xed, 0xb0, 0xea, 0xc4, 0x94, - 0x4e, 0xaf, 0x82, 0xd8, 0x30, 0x8e, 0xc3, 0x2a, 0x6a, 0x7c, 0xbe, 0x5f, 0x8d, 0x57, 0x12, 0x35, - 0x9e, 0xc5, 0x89, 0x92, 0xac, 0x4c, 0xe5, 0x49, 0x96, 0x60, 0x52, 0xac, 0x23, 0x31, 0xdb, 0x5e, - 0xc0, 0xde, 0x42, 0x25, 0x96, 0x5c, 0x81, 0x89, 0x09, 0xa7, 0x93, 0xa8, 0x3b, 0x32, 0x7f, 0x4c, - 0xba, 0xa0, 0xed, 0xc8, 0xf1, 0x37, 0x24, 0x1d, 0x99, 0xed, 0x48, 0x91, 0x14, 0xb3, 0xfc, 0xb8, - 0xe3, 0x09, 0x15, 0xd5, 0xc5, 0x28, 0x2b, 0x92, 0x22, 0xfc, 0x58, 0x34, 0xc4, 0x50, 0xb7, 0x84, - 0x34, 0x0e, 0x64, 0x13, 0x66, 0xc3, 0x53, 0x5b, 0x61, 0x5c, 0x8c, 0xa2, 0x04, 0x47, 0x47, 0x7d, - 0x3a, 0xdf, 0x34, 0x7a, 0x62, 0xc3, 0x39, 0xed, 0x9c, 0x56, 0x58, 0x5f, 0x42, 0xd6, 0x98, 0xb5, - 0x5e, 0x3f, 0xe4, 0xd3, 0xd9, 0xf7, 0xe2, 0x43, 0x3e, 0x84, 0x85, 0xf8, 0xd9, 0xac, 0xd4, 0xf2, - 0x22, 0xd6, 0xf2, 0xda, 0xf1, 0x51, 0xf1, 0x72, 0xe2, 0x78, 0x4f, 0xaf, 0xa8, 0x0f, 0x37, 0xf2, - 0x35, 0x98, 0xd7, 0xcf, 0x67, 0xa5, 0x26, 0x03, 0x6b, 0xc2, 0xa5, 0x13, 0x1e, 0xec, 0xe9, 0x35, - 0xf4, 0xe4, 0x41, 0x02, 0x28, 0xa6, 0xce, 0x6e, 0xa5, 0x9a, 0x97, 0xa2, 0x06, 0x25, 0x56, 0x49, - 0x7a, 0x75, 0x27, 0xb1, 0x24, 0x07, 0x70, 0x31, 0xed, 0x98, 0x50, 0x2a, 0x7d, 0x39, 0x54, 0x02, - 0x7f, 0x2a, 0xfd, 0xc8, 0x49, 0xaf, 0xf9, 0x04, 0xb6, 0xe4, 0xcb, 0x70, 0x46, 0x59, 0x5f, 0x4a, - 0x7d, 0xaf, 0x60, 0x7d, 0xe8, 0x0a, 0xae, 0x2e, 0xcc, 0xf4, 0x5a, 0xd2, 0x79, 0x90, 0x16, 0xcc, - 0xca, 0x86, 0xa3, 0xb6, 0x5d, 0x1c, 0x3d, 0x97, 0xb5, 0x5d, 0x35, 0x89, 0xb1, 0x74, 0x49, 0xec, - 0xaa, 0xf3, 0x8d, 0x6d, 0xab, 0x13, 0x11, 0xaa, 0x33, 0x3d, 0x85, 0x2f, 0x59, 0x81, 0x91, 0xda, - 0x7a, 0xf5, 0xf6, 0xed, 0xe5, 0xf9, 0x57, 0xb1, 0x06, 0xe9, 0x37, 0xc6, 0x81, 0xda, 0xa5, 0x49, - 0x98, 0x2b, 0x76, 0x9c, 0x9d, 0x1d, 0xed, 0xc1, 0x8a, 0xa3, 0x92, 0xef, 0x41, 0x43, 0x41, 0xb6, - 0xa3, 0x96, 0x7c, 0xdf, 0xd9, 0xc5, 0xa8, 0xd3, 0xfe, 0xfc, 0x6b, 0xda, 0x7b, 0xbf, 0x8c, 0xc8, - 0x5d, 0xc6, 0x84, 0x65, 0x09, 0x74, 0x2e, 0x6d, 0xb2, 0xfb, 0xbf, 0xd8, 0xb9, 0x2d, 0x3b, 0x62, - 0xa5, 0x6e, 0xe2, 0xc9, 0x8a, 0x58, 0xbf, 0xed, 0x3a, 0x81, 0xb5, 0xd7, 0xd5, 0x9a, 0x3f, 0xff, - 0x29, 0x2d, 0x02, 0x33, 0x4f, 0xe3, 0xa6, 0xf4, 0xda, 0xcb, 0xa2, 0xc2, 0x17, 0xf8, 0x6d, 0xb9, - 0x47, 0xcf, 0xcd, 0xec, 0xc6, 0xe8, 0xfc, 0xbb, 0x43, 0xf9, 0x2b, 0x85, 0xab, 0x77, 0x87, 0xf2, - 0x57, 0x0b, 0xaf, 0x99, 0x2f, 0xd4, 0x4a, 0xf7, 0x57, 0xab, 0x0d, 0x79, 0xae, 0xc8, 0x70, 0xe3, - 0x7c, 0x68, 0xcd, 0xcb, 0xfd, 0x4a, 0xa3, 0x81, 0x37, 0xfe, 0x76, 0x06, 0x8a, 0x27, 0xf4, 0x0f, - 0xdb, 0xca, 0xa3, 0x8f, 0xa8, 0xd1, 0x40, 0x0d, 0x5a, 0x1e, 0x7d, 0xba, 0xa5, 0x5b, 0x4c, 0xe8, - 0x24, 0xe8, 0x6f, 0x27, 0x32, 0x65, 0x28, 0x6e, 0x97, 0xc9, 0x0c, 0x19, 0x12, 0xcb, 0x58, 0x85, - 0x42, 0xbc, 0xdf, 0xc8, 0xe7, 0x60, 0x52, 0x8d, 0xd3, 0x2f, 0x6f, 0xd1, 0x3c, 0xc6, 0x86, 0xb7, - 0xab, 0x9d, 0x05, 0x1a, 0xa2, 0xf1, 0x8b, 0x19, 0x98, 0x4d, 0x99, 0x5c, 0xe4, 0x32, 0x0c, 0x61, - 0x22, 0x2d, 0xc5, 0x60, 0x26, 0x96, 0x40, 0x0b, 0xcb, 0xc9, 0xa7, 0x61, 0xb4, 0xb2, 0x56, 0xab, - 0x95, 0xd6, 0xe4, 0x3d, 0x9c, 0x9f, 0x41, 0x6d, 0xdf, 0xf2, 0x6d, 0xfd, 0x9d, 0x5d, 0xa0, 0x91, - 0x37, 0x60, 0xa4, 0xba, 0x8e, 0x04, 0xdc, 0xec, 0x13, 0xdb, 0xeb, 0x74, 0xe2, 0xf8, 0x02, 0xc9, - 0xf8, 0xf1, 0x0c, 0x90, 0xe4, 0x4a, 0x21, 0x37, 0x60, 0x5c, 0x5d, 0x8f, 0xbc, 0xbd, 0xf8, 0xf8, - 0xa8, 0xcc, 0x19, 0x53, 0xc5, 0x21, 0x15, 0x18, 0xc6, 0x14, 0xa8, 0xe1, 0x03, 0x7f, 0xea, 0xa9, - 0x7e, 0x2e, 0x71, 0xaa, 0x0f, 0x63, 0x82, 0x55, 0x93, 0x13, 0x1b, 0xbf, 0x97, 0x01, 0x92, 0x6e, - 0xb6, 0x37, 0x90, 0x81, 0xd1, 0x9b, 0x8a, 0xdb, 0xbe, 0x9a, 0x2a, 0x27, 0xcc, 0x73, 0xa6, 0xde, - 0x80, 0x23, 0x07, 0xff, 0xcb, 0x9a, 0xc6, 0xa5, 0xb7, 0xaf, 0xe7, 0x55, 0x18, 0x7e, 0x48, 0xbd, - 0x6d, 0x69, 0xd1, 0x8c, 0x56, 0x90, 0x8f, 0x18, 0x40, 0xd5, 0x40, 0x20, 0x86, 0xf1, 0xa7, 0x19, - 0x98, 0x4b, 0x13, 0xcf, 0x4f, 0x70, 0xc9, 0x34, 0x62, 0xde, 0xa4, 0x68, 0x5c, 0xc4, 0x4d, 0x24, - 0x43, 0x1f, 0xd2, 0x22, 0x0c, 0xb3, 0xc6, 0xca, 0x11, 0x46, 0x0d, 0x10, 0xeb, 0x0d, 0xdf, 0xe4, - 0x70, 0x86, 0xc0, 0xc3, 0xd3, 0x0d, 0x61, 0x64, 0x43, 0x44, 0xc0, 0xd9, 0x6d, 0x72, 0x38, 0x43, - 0xb8, 0xef, 0x36, 0xc2, 0xec, 0xff, 0x88, 0xd0, 0x62, 0x00, 0x93, 0xc3, 0xc9, 0x65, 0x18, 0x7d, - 0xd0, 0x5e, 0xa5, 0xf6, 0x23, 0x99, 0xae, 0x01, 0x8d, 0xa1, 0xdc, 0xb6, 0xd5, 0x64, 0x30, 0x53, - 0x16, 0x1a, 0x3f, 0x9b, 0x81, 0x99, 0xc4, 0xcd, 0xe0, 0x64, 0xaf, 0xd3, 0xfe, 0xee, 0x5f, 0x83, - 0xb4, 0x8f, 0x7f, 0xfe, 0x50, 0xfa, 0xe7, 0x1b, 0xff, 0xfd, 0x08, 0x9c, 0xeb, 0xa1, 0xa8, 0x89, - 0xdc, 0x53, 0x33, 0x27, 0xba, 0xa7, 0x7e, 0x05, 0x26, 0xcb, 0x4d, 0xdb, 0x69, 0xf9, 0x1b, 0x6e, - 0xf4, 0xc5, 0x91, 0x97, 0x0b, 0x96, 0x09, 0x17, 0x80, 0xd0, 0x1d, 0xe2, 0x7c, 0x1d, 0x29, 0xac, - 0xc0, 0x4d, 0xca, 0x89, 0x1a, 0xb3, 0x84, 0x83, 0x68, 0xee, 0xaf, 0x88, 0x83, 0xa8, 0xee, 0xb2, - 0x34, 0xf4, 0x54, 0x5d, 0x96, 0xd2, 0xcd, 0x9d, 0x87, 0x9f, 0xc4, 0xf8, 0xbd, 0x0c, 0x93, 0xdc, - 0x1a, 0xac, 0xe4, 0xf3, 0x41, 0x1a, 0x49, 0x58, 0x90, 0xd9, 0x7e, 0x72, 0x2c, 0x34, 0x1a, 0xb2, - 0xa2, 0xbb, 0xd7, 0x8c, 0xe2, 0x73, 0xe9, 0xe5, 0xde, 0xee, 0x33, 0x9a, 0x99, 0x84, 0xe6, 0x46, - 0xf3, 0x4d, 0x98, 0x4b, 0xbb, 0xe9, 0xcd, 0xe7, 0x35, 0x43, 0xd3, 0x9e, 0x06, 0xca, 0x83, 0xdf, - 0x17, 0xf7, 0x53, 0xef, 0x8b, 0xd2, 0xed, 0x79, 0x4c, 0x8b, 0x66, 0xdc, 0x63, 0x2d, 0x70, 0xdc, - 0xfe, 0xce, 0xd1, 0xc6, 0x57, 0xe0, 0x42, 0x5f, 0x72, 0xf2, 0xb6, 0x16, 0x5e, 0xe7, 0xd5, 0x64, - 0x78, 0x9d, 0xef, 0x1c, 0x15, 0x67, 0x34, 0x97, 0xc5, 0xfb, 0xa1, 0xae, 0xdb, 0xf8, 0xd9, 0xac, - 0xee, 0x6c, 0xfb, 0x57, 0x71, 0xa1, 0x5e, 0x85, 0xe1, 0xad, 0x3d, 0xea, 0xc9, 0xe3, 0x01, 0x3f, - 0xe4, 0x80, 0x01, 0xd4, 0x0f, 0x41, 0x0c, 0x72, 0x1b, 0xa6, 0xd6, 0xf9, 0xc4, 0x95, 0xb3, 0x71, - 0x28, 0x52, 0x37, 0x74, 0x84, 0x52, 0x2c, 0x65, 0x3a, 0xc6, 0xa8, 0x8c, 0x3b, 0xb1, 0x4e, 0x17, - 0xc1, 0x81, 0xb8, 0x53, 0x10, 0x17, 0x20, 0xa6, 0x22, 0x37, 0xa8, 0x68, 0xb3, 0x35, 0x63, 0x50, - 0x63, 0x07, 0x2e, 0xf6, 0x65, 0xc4, 0xce, 0x6d, 0xe8, 0x84, 0xbf, 0x62, 0x46, 0xc7, 0x7d, 0x49, - 0x4d, 0x85, 0xce, 0xf8, 0x26, 0x4c, 0xa8, 0xbd, 0x8c, 0x47, 0x10, 0xfb, 0x2d, 0x66, 0x05, 0x3f, - 0x82, 0x18, 0xc0, 0xe4, 0xf0, 0xe8, 0x19, 0x23, 0x9b, 0xfe, 0x8c, 0x11, 0x0d, 0x7f, 0xee, 0xa4, - 0xe1, 0x67, 0x95, 0xe3, 0x0e, 0xa7, 0x54, 0x8e, 0xbf, 0xd5, 0xca, 0x31, 0xfa, 0x8f, 0xc9, 0xe1, - 0x4f, 0xb5, 0xf2, 0x7f, 0x22, 0xf3, 0x7b, 0xa1, 0xcf, 0x91, 0x5c, 0xee, 0x99, 0x28, 0x49, 0x57, - 0xda, 0xea, 0x8d, 0x30, 0x23, 0x99, 0x22, 0x7b, 0x92, 0x4c, 0x71, 0x9a, 0x89, 0x88, 0x72, 0x2f, - 0x1f, 0xd2, 0xa1, 0x48, 0x0e, 0xb4, 0x13, 0x86, 0x1e, 0x12, 0xcb, 0xf8, 0x56, 0x06, 0xce, 0xa4, - 0xaa, 0x8b, 0x59, 0xad, 0x5c, 0x2f, 0xad, 0xac, 0xc3, 0xb8, 0x52, 0x9a, 0x63, 0x9c, 0x26, 0xf4, - 0xc3, 0xe0, 0x6d, 0x31, 0x5e, 0x84, 0xb1, 0xf0, 0xb1, 0x92, 0xcc, 0xc9, 0xa1, 0x43, 0x93, 0x40, - 0xf9, 0xe6, 0x55, 0x03, 0x60, 0x5f, 0xf0, 0x54, 0xad, 0x8a, 0x8d, 0x7f, 0x92, 0xe5, 0xb9, 0x5f, - 0x9f, 0xd9, 0x28, 0xae, 0xe9, 0xa6, 0xc0, 0xac, 0x49, 0xbd, 0x63, 0xb7, 0x92, 0x65, 0x18, 0xa9, - 0x05, 0x76, 0xd0, 0x95, 0x11, 0x2b, 0x66, 0x55, 0x32, 0x2c, 0x78, 0xb8, 0x18, 0xc5, 0x2c, 0xf0, - 0x11, 0xa2, 0x5d, 0x90, 0x11, 0xa2, 0x58, 0x14, 0xff, 0x61, 0x06, 0x26, 0x54, 0x62, 0xf2, 0x01, - 0x4c, 0xc9, 0xd8, 0x94, 0x3c, 0x8e, 0x87, 0x78, 0x59, 0x95, 0x56, 0x50, 0x32, 0x36, 0xa5, 0x1a, - 0xf7, 0x43, 0xc3, 0x57, 0xb7, 0xea, 0x8e, 0x8a, 0x4c, 0x1a, 0x40, 0x5a, 0x3b, 0xb6, 0x75, 0x40, - 0xed, 0x7d, 0xea, 0x07, 0x16, 0xb7, 0x56, 0x11, 0x0f, 0xb0, 0x92, 0xfd, 0xfd, 0xdb, 0x25, 0x6e, - 0xa8, 0xc2, 0x46, 0x42, 0x04, 0x19, 0x4d, 0xd0, 0xa8, 0xaf, 0x4a, 0xad, 0x1d, 0x7b, 0x8b, 0x17, - 0x72, 0x3a, 0xe3, 0xcf, 0x46, 0xf8, 0x74, 0x13, 0xa1, 0x6c, 0xb7, 0x61, 0xea, 0x41, 0xb5, 0x52, - 0x56, 0x74, 0xcc, 0x7a, 0x26, 0xa4, 0xe5, 0xc7, 0x01, 0xf5, 0xda, 0x76, 0x53, 0xde, 0x77, 0xa3, - 0x23, 0xc8, 0x75, 0x1a, 0xf5, 0x74, 0xfd, 0x73, 0x8c, 0x23, 0xab, 0x83, 0xdf, 0xac, 0xc3, 0x3a, - 0xb2, 0x03, 0xd6, 0xe1, 0xdb, 0xad, 0x66, 0x8f, 0x3a, 0x74, 0x8e, 0x64, 0x0f, 0xaf, 0xbe, 0x7b, - 0xdd, 0x6d, 0xa5, 0x96, 0x5c, 0xff, 0x5a, 0x5e, 0x12, 0xb5, 0x3c, 0x2f, 0x34, 0x0a, 0xa9, 0xf5, - 0x24, 0xb8, 0x46, 0xfb, 0xc4, 0xd0, 0x89, 0xfb, 0xc4, 0xdf, 0xcc, 0xc0, 0x08, 0x17, 0x5f, 0xc5, - 0x34, 0xee, 0x21, 0x20, 0x6f, 0x3d, 0x1d, 0x01, 0xb9, 0x80, 0xe7, 0x84, 0x36, 0xa1, 0x79, 0x19, - 0xa9, 0xc4, 0xd6, 0x85, 0x34, 0x84, 0xc7, 0xd7, 0x22, 0x5e, 0x72, 0xf2, 0xb2, 0x20, 0xd5, 0x28, - 0x8a, 0xc4, 0xe8, 0x89, 0x8e, 0xca, 0x32, 0xf2, 0xc6, 0xa8, 0x88, 0x22, 0xa1, 0xc7, 0x8e, 0x58, - 0x85, 0x31, 0x11, 0x9b, 0x62, 0xe9, 0x50, 0xbc, 0x09, 0x17, 0x34, 0xab, 0x9e, 0xc6, 0xd2, 0x61, - 0x24, 0x9a, 0x8b, 0xe8, 0x16, 0xd6, 0xf6, 0xa1, 0x96, 0x4a, 0x57, 0x22, 0x92, 0x07, 0x3c, 0xc5, - 0x24, 0x0f, 0xf6, 0xab, 0x47, 0xf7, 0x0f, 0xe1, 0x22, 0xea, 0x95, 0x74, 0x70, 0x4f, 0x89, 0xed, - 0x1b, 0xf1, 0x20, 0xab, 0x50, 0x40, 0x4b, 0x30, 0xda, 0xe0, 0xab, 0xa6, 0x5a, 0xe1, 0xf1, 0x0f, - 0x84, 0x35, 0x6f, 0xc0, 0xcb, 0xc4, 0x72, 0x8b, 0xb9, 0x1e, 0x26, 0x28, 0x8d, 0x9f, 0xc9, 0x42, - 0x21, 0x3e, 0xfb, 0xc8, 0x3b, 0x30, 0x1e, 0x06, 0x5b, 0x0e, 0x9d, 0x9f, 0xf1, 0x6d, 0x28, 0x8a, - 0xce, 0xac, 0x27, 0x26, 0x54, 0xd0, 0xc9, 0x22, 0xe4, 0xd9, 0x22, 0x8e, 0x27, 0xf1, 0xed, 0x0a, - 0x98, 0xea, 0x8c, 0x24, 0xf1, 0x48, 0x0d, 0x66, 0xd9, 0xa2, 0xa9, 0x39, 0xed, 0xdd, 0x26, 0x5d, - 0x75, 0x77, 0xdd, 0x6e, 0x10, 0xe5, 0xe9, 0xe3, 0x17, 0x18, 0xbb, 0xd5, 0xd4, 0x8a, 0xf5, 0x2c, - 0x7d, 0x29, 0xd4, 0x4a, 0x8a, 0xf1, 0xa1, 0x01, 0x52, 0x8c, 0x2b, 0x3b, 0xeb, 0x1f, 0x67, 0x61, - 0x5c, 0x99, 0x7e, 0xe4, 0x2a, 0xe4, 0xab, 0xfe, 0xaa, 0x5b, 0xdf, 0x0f, 0xa3, 0x28, 0x4e, 0x1e, - 0x1f, 0x15, 0xc7, 0x1c, 0xdf, 0x6a, 0x22, 0xd0, 0x0c, 0x8b, 0xc9, 0x12, 0x4c, 0xf2, 0xbf, 0x64, - 0xce, 0x8c, 0x6c, 0xa4, 0x5b, 0xe3, 0xc8, 0x32, 0x5b, 0x86, 0xba, 0xd9, 0x6a, 0x24, 0xe4, 0xab, - 0x00, 0x1c, 0x80, 0x7e, 0xf7, 0xb9, 0xc1, 0x23, 0x06, 0x88, 0x0a, 0x52, 0x3c, 0xee, 0x15, 0x86, - 0xe4, 0xeb, 0x3c, 0x96, 0xb3, 0x5c, 0x2e, 0x43, 0x83, 0x87, 0x3c, 0x60, 0xfc, 0xad, 0xf4, 0xc8, - 0x2b, 0x2a, 0x4b, 0x91, 0xe6, 0x66, 0xc1, 0xa4, 0x75, 0xf7, 0x11, 0xf5, 0x0e, 0x4b, 0x01, 0x22, - 0x2a, 0x18, 0xc6, 0xff, 0x9a, 0x51, 0x16, 0x19, 0x59, 0xc3, 0x34, 0xd5, 0x7c, 0x02, 0x09, 0x6b, - 0xaa, 0xf0, 0x8a, 0x21, 0xe1, 0x26, 0xdd, 0x59, 0x7a, 0x5e, 0x18, 0x76, 0xcd, 0x86, 0xd3, 0x30, - 0x96, 0xbe, 0x9a, 0x03, 0xc9, 0x17, 0x60, 0x08, 0xbb, 0x2e, 0x7b, 0x62, 0xd3, 0xe4, 0x29, 0x3f, - 0xc4, 0xfa, 0x0c, 0x1b, 0x82, 0x94, 0xe4, 0xd3, 0xc2, 0x67, 0x99, 0x77, 0xfe, 0x94, 0x72, 0x54, - 0xb3, 0xef, 0x08, 0x8f, 0xf7, 0x28, 0xf8, 0x8e, 0x32, 0x7b, 0xfe, 0x76, 0x16, 0x0a, 0xf1, 0xa5, - 0x4d, 0xde, 0x87, 0x09, 0x79, 0xfc, 0xae, 0xd8, 0x22, 0xe1, 0xc3, 0x84, 0x48, 0xb8, 0x20, 0xcf, - 0xe0, 0x3d, 0x5b, 0xb5, 0xbe, 0x32, 0x35, 0x02, 0x26, 0x0b, 0x6d, 0x88, 0x60, 0x78, 0xca, 0xa2, - 0x0a, 0xdc, 0xa0, 0x13, 0x0b, 0x21, 0x2c, 0xd1, 0xc8, 0x9b, 0x90, 0xbb, 0x7f, 0xbb, 0x24, 0x7c, - 0xdb, 0x0a, 0xf1, 0x43, 0x9a, 0x1b, 0x89, 0xea, 0x26, 0xab, 0x0c, 0x9f, 0xac, 0x2a, 0xd1, 0xb6, - 0x47, 0x34, 0x4b, 0x3b, 0x09, 0x0e, 0x1b, 0x77, 0x72, 0xd8, 0xed, 0xbb, 0x43, 0xf9, 0x5c, 0x61, - 0x48, 0xc4, 0x8f, 0xfd, 0x1f, 0x72, 0x30, 0x16, 0xd6, 0x4f, 0x88, 0xea, 0x31, 0xcc, 0xbd, 0x83, - 0xc9, 0x79, 0xc8, 0x4b, 0xe9, 0x4e, 0xb8, 0xb8, 0x8d, 0xfa, 0x42, 0xb2, 0x9b, 0x07, 0x29, 0xc6, - 0xf1, 0x5d, 0xc1, 0x94, 0x3f, 0xc9, 0x0d, 0x08, 0x65, 0xb4, 0x5e, 0xc2, 0xdc, 0x10, 0x1b, 0x30, - 0x33, 0x44, 0x23, 0x53, 0x90, 0x75, 0x78, 0x4c, 0xb2, 0x31, 0x33, 0xeb, 0x34, 0xc8, 0xfb, 0x90, - 0xb7, 0x1b, 0x0d, 0xda, 0xb0, 0x6c, 0x69, 0x96, 0xd4, 0x6f, 0xd2, 0xe4, 0x19, 0x37, 0x7e, 0x66, - 0x20, 0x55, 0x29, 0x20, 0x25, 0x18, 0x6b, 0xda, 0xdc, 0xd0, 0xb1, 0x31, 0xc0, 0x01, 0x14, 0x71, - 0xc8, 0x33, 0xb2, 0x4d, 0x9f, 0x36, 0xc8, 0xab, 0x30, 0xc4, 0x46, 0x53, 0x9c, 0x38, 0x52, 0xa8, - 0x64, 0x83, 0xc9, 0x3b, 0x6c, 0xe5, 0x39, 0x13, 0x11, 0xc8, 0xcb, 0x90, 0xeb, 0x2e, 0xee, 0x88, - 0xb3, 0xa4, 0x10, 0x45, 0xbe, 0x0f, 0xd1, 0x58, 0x31, 0xb9, 0x09, 0xf9, 0x03, 0x3d, 0x68, 0xfa, - 0x99, 0xd8, 0x30, 0x86, 0xf8, 0x21, 0x22, 0x79, 0x15, 0x72, 0xbe, 0xef, 0x0a, 0x5b, 0x9e, 0xd9, - 0xd0, 0xc0, 0xf2, 0x41, 0x38, 0x6a, 0x8c, 0xbb, 0xef, 0xbb, 0x4b, 0x79, 0x18, 0xe1, 0x07, 0x8c, - 0x71, 0x11, 0x20, 0xfa, 0xc6, 0xa4, 0xcb, 0xa2, 0xf1, 0x55, 0x18, 0x0b, 0xbf, 0x8d, 0x5c, 0x00, - 0xd8, 0xa7, 0x87, 0xd6, 0x9e, 0xdd, 0x6e, 0x34, 0xb9, 0x74, 0x3a, 0x61, 0x8e, 0xed, 0xd3, 0xc3, - 0x15, 0x04, 0x90, 0x73, 0x30, 0xda, 0x61, 0xc3, 0x2f, 0xe6, 0xf8, 0x84, 0x39, 0xd2, 0xe9, 0x6e, - 0xb3, 0xa9, 0x3c, 0x0f, 0xa3, 0xa8, 0x67, 0x15, 0x2b, 0x72, 0xd2, 0x94, 0x3f, 0x8d, 0x3f, 0xcf, - 0x61, 0x66, 0x21, 0xa5, 0x41, 0xe4, 0x25, 0x98, 0xac, 0x7b, 0x14, 0xcf, 0x32, 0x9b, 0x49, 0x68, - 0xa2, 0x9e, 0x89, 0x08, 0x58, 0x6d, 0x90, 0xcb, 0x30, 0xdd, 0xe9, 0x6e, 0x37, 0x9d, 0x3a, 0xab, - 0xcd, 0xaa, 0x6f, 0x8b, 0x54, 0x08, 0x13, 0xe6, 0x24, 0x07, 0xdf, 0xa3, 0x87, 0xe5, 0x6d, 0x0c, - 0xba, 0x57, 0x50, 0x63, 0x26, 0x07, 0x61, 0xce, 0x77, 0x73, 0x5a, 0x81, 0xa3, 0x59, 0xe2, 0x59, - 0x18, 0xb1, 0xed, 0xdd, 0xae, 0xc3, 0x83, 0x63, 0x4d, 0x98, 0xe2, 0x17, 0xf9, 0x14, 0xcc, 0x44, - 0x61, 0xbc, 0x65, 0x33, 0x86, 0xb1, 0x19, 0x85, 0xb0, 0xa0, 0xcc, 0xe1, 0xe4, 0x0d, 0x20, 0x6a, - 0x7d, 0xee, 0xf6, 0x87, 0xb4, 0xce, 0xe7, 0xe4, 0x84, 0x39, 0xa3, 0x94, 0x3c, 0xc0, 0x02, 0xf2, - 0x22, 0x4c, 0x78, 0xd4, 0x47, 0xe9, 0x10, 0xbb, 0x0d, 0x13, 0xef, 0x99, 0xe3, 0x12, 0xc6, 0xfa, - 0xee, 0x0a, 0x14, 0x94, 0xee, 0xc0, 0xb0, 0xd4, 0x3c, 0x0f, 0x80, 0x39, 0x15, 0xc1, 0xcd, 0x4e, - 0xb5, 0x41, 0xbe, 0x04, 0x0b, 0x0a, 0x26, 0xcf, 0x01, 0x68, 0xd1, 0xa6, 0xb3, 0xeb, 0x6c, 0x37, - 0xa9, 0x98, 0x6f, 0xc9, 0x59, 0x1d, 0x5e, 0x21, 0xcd, 0xf9, 0x88, 0x9a, 0x67, 0x07, 0x5c, 0x16, - 0xb4, 0x64, 0x15, 0xe6, 0x62, 0x9c, 0x69, 0xc3, 0xea, 0x76, 0x7a, 0x46, 0xa3, 0x8b, 0x78, 0x12, - 0x9d, 0x27, 0x6d, 0x6c, 0x76, 0x8c, 0x6f, 0xc2, 0x84, 0x3a, 0x27, 0x59, 0x27, 0xa8, 0x72, 0x89, - 0x98, 0x7d, 0xe3, 0x21, 0xac, 0xca, 0xee, 0x85, 0x53, 0x11, 0x4a, 0x10, 0xa6, 0xb7, 0x37, 0x27, - 0x43, 0x28, 0x0e, 0xe1, 0x8b, 0x30, 0xd1, 0x70, 0xfc, 0x4e, 0xd3, 0x3e, 0xb4, 0xa2, 0xe4, 0xd6, - 0xe6, 0xb8, 0x80, 0xa1, 0xe2, 0x67, 0x09, 0x66, 0x12, 0xfb, 0xa0, 0x22, 0x69, 0xf0, 0x7d, 0xbd, - 0xbf, 0xa4, 0x61, 0xb4, 0x61, 0x42, 0x3d, 0xd7, 0x4e, 0xc8, 0xd9, 0x71, 0x16, 0x23, 0xd0, 0xf0, - 0x4d, 0x7f, 0xe4, 0xf8, 0xa8, 0x98, 0x75, 0x1a, 0x18, 0x77, 0xe6, 0x0a, 0xe4, 0xa5, 0xc4, 0x26, - 0x04, 0x25, 0x7c, 0x4c, 0x90, 0x09, 0x8d, 0xcd, 0xb0, 0xd4, 0x78, 0x15, 0x46, 0xc5, 0xd1, 0xd5, - 0xff, 0x09, 0xc1, 0xf8, 0xe1, 0x2c, 0x4c, 0x9b, 0x94, 0x6d, 0xac, 0x94, 0x27, 0xea, 0x79, 0x66, - 0xaf, 0xe8, 0xe9, 0x71, 0x4c, 0xb5, 0xb6, 0xf5, 0x49, 0x91, 0xf3, 0xab, 0x19, 0x98, 0x4d, 0xc1, - 0xfd, 0x48, 0x29, 0x62, 0x6f, 0xc1, 0x58, 0xc5, 0xb1, 0x9b, 0xa5, 0x46, 0x23, 0x0c, 0x47, 0x83, - 0x72, 0x3e, 0xe6, 0x91, 0xb2, 0x19, 0x54, 0x15, 0x62, 0x42, 0x54, 0xf2, 0x9a, 0x98, 0x14, 0x51, - 0x82, 0x75, 0x9c, 0x14, 0xdf, 0x39, 0x2a, 0x02, 0xff, 0xa6, 0x8d, 0x70, 0x8a, 0x60, 0x6c, 0x61, - 0x0e, 0x8c, 0x5c, 0x8a, 0x9e, 0xd9, 0xa1, 0x4b, 0x8f, 0x2d, 0x1c, 0x6f, 0xde, 0x40, 0x59, 0x72, - 0x7e, 0x22, 0x0b, 0x67, 0xd3, 0x09, 0x3f, 0x6a, 0xb6, 0x5f, 0xcc, 0x4f, 0xa4, 0xc4, 0x43, 0xc7, - 0x6c, 0xbf, 0x3c, 0x99, 0x11, 0xe2, 0x47, 0x08, 0x64, 0x07, 0x26, 0x57, 0x6d, 0x3f, 0x58, 0xa1, - 0xb6, 0x17, 0x6c, 0x53, 0x3b, 0x18, 0x40, 0x92, 0x97, 0x86, 0x04, 0xf3, 0x28, 0x4c, 0xec, 0x49, - 0xca, 0x98, 0xac, 0xad, 0xb3, 0x0d, 0x27, 0xca, 0xd0, 0x00, 0x13, 0xe5, 0x1b, 0x30, 0x5d, 0xa3, - 0x2d, 0xbb, 0xb3, 0xe7, 0x7a, 0x32, 0x54, 0xc0, 0x35, 0x98, 0x0c, 0x41, 0xa9, 0xb3, 0x45, 0x2f, - 0xd6, 0xf0, 0x95, 0x8e, 0x88, 0xb6, 0x12, 0xbd, 0xd8, 0xf8, 0x3b, 0x59, 0x38, 0x57, 0xaa, 0x0b, - 0xab, 0x48, 0x51, 0x20, 0x8d, 0xb7, 0x3f, 0xe6, 0xba, 0xc9, 0x75, 0x18, 0xbb, 0x6f, 0x3f, 0x5e, - 0xa5, 0xb6, 0x4f, 0x7d, 0x91, 0x6b, 0x91, 0x8b, 0xbd, 0xf6, 0xe3, 0xe8, 0xf1, 0xc7, 0x8c, 0x70, - 0x54, 0x35, 0xc2, 0xd0, 0x13, 0xaa, 0x11, 0x0c, 0x18, 0x59, 0x71, 0x9b, 0x0d, 0x71, 0xd6, 0x8b, - 0x17, 0xe7, 0x3d, 0x84, 0x98, 0xa2, 0xc4, 0xf8, 0xd3, 0x0c, 0x4c, 0x85, 0x5f, 0x8c, 0x9f, 0xf0, - 0xb1, 0x77, 0xc9, 0x65, 0x18, 0xc5, 0x8a, 0xc2, 0xa4, 0xf0, 0x78, 0x68, 0x34, 0x29, 0x66, 0xcc, - 0x6b, 0x98, 0xb2, 0x50, 0xed, 0x89, 0xe1, 0x27, 0xeb, 0x09, 0xe3, 0x1f, 0xe0, 0x63, 0xb6, 0xda, - 0x4a, 0x76, 0x12, 0x29, 0x1f, 0x92, 0x19, 0xf0, 0x43, 0xb2, 0x4f, 0x6d, 0x48, 0x72, 0x3d, 0x87, - 0xe4, 0x47, 0xb2, 0x30, 0x1e, 0x7e, 0xec, 0x27, 0x2c, 0x28, 0x7f, 0xd8, 0xae, 0x81, 0xc2, 0xfb, - 0xd4, 0x94, 0xbd, 0x42, 0x44, 0xd1, 0xf9, 0x02, 0x8c, 0x88, 0xc5, 0x94, 0x89, 0x19, 0x31, 0xc7, - 0x46, 0x77, 0x69, 0x4a, 0xb0, 0x1e, 0xc1, 0x01, 0xf5, 0x4d, 0x41, 0x87, 0xf1, 0x93, 0xb6, 0xe8, - 0xb6, 0xb0, 0x6d, 0x78, 0x66, 0xcf, 0xa8, 0xf4, 0xf8, 0x49, 0x51, 0xc3, 0x06, 0x3a, 0x9d, 0xfe, - 0x59, 0x1e, 0x0a, 0x71, 0x92, 0x93, 0xd3, 0x1e, 0xac, 0x77, 0xb7, 0xf9, 0x55, 0x85, 0xa7, 0x3d, - 0xe8, 0x74, 0xb7, 0x4d, 0x06, 0x43, 0xd3, 0x27, 0xcf, 0x79, 0x84, 0xad, 0x9e, 0x10, 0xa6, 0x4f, - 0x9e, 0xf3, 0x48, 0x33, 0x7d, 0xf2, 0x9c, 0x47, 0xa8, 0x48, 0x58, 0xad, 0x61, 0x6c, 0x01, 0xbc, - 0xa7, 0x08, 0x45, 0x42, 0xd3, 0x8f, 0xa7, 0x30, 0x93, 0x68, 0xec, 0xa8, 0x5c, 0xa2, 0xb6, 0x27, - 0x42, 0xf4, 0x8b, 0xed, 0x0c, 0x8f, 0xca, 0x6d, 0x04, 0x5b, 0x01, 0x83, 0x9b, 0x2a, 0x12, 0x69, - 0x02, 0x51, 0x7e, 0xca, 0x05, 0x7c, 0xf2, 0xdd, 0x5a, 0x1a, 0x20, 0xce, 0xa9, 0xac, 0x2d, 0x75, - 0x35, 0xa7, 0xf0, 0x7d, 0x9a, 0xda, 0xdf, 0x75, 0x11, 0x77, 0x14, 0x15, 0x48, 0xf9, 0x13, 0x99, - 0xc9, 0x98, 0x28, 0xc0, 0xe3, 0x92, 0x86, 0x6a, 0xa4, 0x88, 0x09, 0x79, 0x0f, 0xc6, 0xd5, 0x88, - 0x11, 0x3c, 0xae, 0xc1, 0x0b, 0x3c, 0x94, 0x64, 0x8f, 0xa4, 0xb7, 0x2a, 0x01, 0xd9, 0x86, 0x73, - 0x65, 0xb7, 0xed, 0x77, 0x5b, 0x32, 0x68, 0x65, 0x14, 0x2a, 0x1b, 0x70, 0x28, 0xd0, 0xfd, 0xbc, - 0x2e, 0x50, 0x44, 0x80, 0x02, 0xe9, 0x21, 0xa2, 0x5f, 0x40, 0x7a, 0x31, 0x22, 0x1b, 0x30, 0x8e, - 0x1a, 0x54, 0x61, 0x82, 0x3a, 0xae, 0x6f, 0x1b, 0x51, 0x49, 0x85, 0x2d, 0x0c, 0x1e, 0x30, 0xcd, - 0x6e, 0x35, 0xa5, 0x83, 0x82, 0xaa, 0x09, 0x56, 0x90, 0xc9, 0x57, 0x61, 0x8a, 0x5f, 0xd1, 0xb6, - 0xe8, 0x36, 0x9f, 0x3b, 0x13, 0x9a, 0x26, 0x42, 0x2f, 0xe4, 0x8f, 0xf9, 0x42, 0x6f, 0x7d, 0x40, - 0xb7, 0xf9, 0xd8, 0x6b, 0xee, 0x41, 0x1a, 0x3e, 0xd9, 0x84, 0xd9, 0x15, 0xdb, 0xe7, 0x40, 0xc5, - 0xf5, 0x7f, 0x12, 0x35, 0xb4, 0x68, 0xb6, 0xbd, 0x67, 0xfb, 0x52, 0x11, 0x9e, 0xea, 0xea, 0x9f, - 0x46, 0x4f, 0x7e, 0x38, 0x03, 0xf3, 0x9a, 0x9e, 0x5c, 0xd8, 0x99, 0xb5, 0x68, 0x3b, 0x40, 0x3f, - 0xa0, 0xa9, 0xc5, 0xa2, 0x14, 0x4a, 0x7b, 0xa0, 0xf1, 0x21, 0x89, 0xa9, 0xe2, 0xbd, 0xa8, 0x5c, - 0xb5, 0x87, 0xee, 0xc5, 0x43, 0x2c, 0x54, 0x5c, 0xd3, 0xd3, 0xfa, 0x42, 0x8d, 0xad, 0x6b, 0x89, - 0x66, 0xdc, 0x8a, 0xf7, 0xb7, 0x50, 0x74, 0x65, 0x42, 0x45, 0xd7, 0x1c, 0x0c, 0x63, 0xaf, 0xca, - 0x00, 0x52, 0xf8, 0xc3, 0xf8, 0xb4, 0xba, 0x0f, 0x09, 0xb1, 0xb0, 0xef, 0x3e, 0x64, 0xfc, 0x4f, - 0x23, 0x30, 0x1d, 0x9b, 0x16, 0xe2, 0x9e, 0x9a, 0x49, 0xdc, 0x53, 0x6b, 0x00, 0x5c, 0xd5, 0x3b, - 0xa0, 0x4e, 0x56, 0xfa, 0x20, 0x8e, 0x0b, 0x0f, 0xe2, 0x70, 0x4d, 0x29, 0x6c, 0x18, 0x53, 0xbe, - 0x62, 0x07, 0xd4, 0x91, 0x87, 0x4c, 0xf9, 0xa2, 0x57, 0x98, 0x46, 0x6c, 0x48, 0x11, 0x86, 0x31, - 0x74, 0xac, 0xea, 0x02, 0xea, 0x30, 0x80, 0xc9, 0xe1, 0xe4, 0x25, 0x18, 0x61, 0x42, 0x54, 0xb5, - 0x22, 0x36, 0x41, 0x3c, 0x5b, 0x98, 0x94, 0xc5, 0x24, 0x16, 0x51, 0x44, 0x6e, 0xc1, 0x04, 0xff, - 0x4b, 0x44, 0x98, 0x19, 0xd1, 0x8d, 0x1f, 0x2d, 0xa7, 0x21, 0x83, 0xcc, 0x68, 0x78, 0xec, 0x76, - 0x51, 0xeb, 0xa2, 0x5a, 0xa7, 0x5a, 0x11, 0xb1, 0xc6, 0xf1, 0x76, 0xe1, 0x73, 0x20, 0xab, 0x22, - 0x42, 0x60, 0xb2, 0x8c, 0x70, 0xc4, 0xc8, 0xe3, 0x9d, 0x12, 0x65, 0x19, 0xee, 0x80, 0x61, 0x8a, - 0x12, 0x72, 0x95, 0xbf, 0xc4, 0xa0, 0x58, 0xc8, 0x53, 0x36, 0xe2, 0xbb, 0x05, 0x2a, 0x26, 0x50, - 0x36, 0x0c, 0x8b, 0x59, 0xe5, 0xec, 0xef, 0xe5, 0x96, 0xed, 0x34, 0xc5, 0xb6, 0x82, 0x95, 0x23, - 0x2e, 0x65, 0x50, 0x33, 0x42, 0x20, 0xef, 0xc0, 0x14, 0xfb, 0x51, 0x76, 0x5b, 0x2d, 0xb7, 0x8d, - 0xec, 0xc7, 0xa3, 0x18, 0x72, 0x48, 0x52, 0xc7, 0x22, 0x5e, 0x4b, 0x0c, 0x97, 0x9d, 0x27, 0xf8, - 0xca, 0xdb, 0xe5, 0x6f, 0x44, 0x13, 0xd1, 0x79, 0x82, 0xa4, 0x3e, 0x87, 0x9b, 0x2a, 0x12, 0x79, - 0x0b, 0x26, 0xd9, 0xcf, 0x3b, 0xce, 0x23, 0xca, 0x2b, 0x9c, 0x8c, 0xcc, 0x1b, 0x90, 0x6a, 0x97, - 0x95, 0xf0, 0xfa, 0x74, 0x4c, 0xf2, 0x45, 0x38, 0x83, 0x9c, 0xea, 0x6e, 0x87, 0x36, 0x4a, 0x3b, - 0x3b, 0x4e, 0xd3, 0xe1, 0xd6, 0x68, 0x3c, 0x96, 0x0a, 0xea, 0xe0, 0x79, 0xc5, 0x88, 0x61, 0xd9, - 0x11, 0x8a, 0x99, 0x4e, 0x49, 0xb6, 0xa0, 0x50, 0xee, 0xfa, 0x81, 0xdb, 0x2a, 0x05, 0x81, 0xe7, - 0x6c, 0x77, 0x03, 0xea, 0xcf, 0x4f, 0x6b, 0x11, 0x47, 0xd8, 0xe2, 0x08, 0x0b, 0xb9, 0x3e, 0xa8, - 0x8e, 0x14, 0x96, 0x1d, 0x92, 0x98, 0x09, 0x26, 0xc6, 0x3f, 0xcf, 0xc0, 0xa4, 0x46, 0x4a, 0xde, - 0x84, 0x89, 0xdb, 0x9e, 0x43, 0xdb, 0x8d, 0xe6, 0xa1, 0x72, 0x51, 0xc5, 0x5b, 0xcc, 0x8e, 0x80, - 0xf3, 0x56, 0x6b, 0x68, 0xa1, 0x9e, 0x27, 0x9b, 0x6a, 0x2a, 0x7a, 0x9d, 0x7b, 0x22, 0x8b, 0x09, - 0x9a, 0x8b, 0x42, 0x20, 0xe1, 0x04, 0x15, 0xb3, 0x53, 0x41, 0x21, 0xef, 0xc2, 0x08, 0x7f, 0x0f, - 0x16, 0x76, 0x8b, 0xe7, 0xd3, 0x9a, 0xc9, 0xbd, 0xde, 0x71, 0x22, 0xa2, 0xd1, 0x8f, 0x6f, 0x0a, - 0x22, 0xe3, 0xe7, 0x32, 0x40, 0x92, 0xa8, 0x27, 0xe8, 0xbd, 0x4e, 0x34, 0x26, 0xfa, 0x42, 0xb8, - 0x1a, 0x73, 0x9a, 0xce, 0x9c, 0xd5, 0xc4, 0x0b, 0x78, 0xc7, 0x8b, 0x55, 0xa7, 0x2a, 0xe2, 0x78, - 0xb1, 0xf1, 0x43, 0x59, 0x80, 0x08, 0x9b, 0x7c, 0x8e, 0x67, 0xe8, 0xfa, 0x62, 0xd7, 0x6e, 0x3a, - 0x3b, 0x8e, 0x1e, 0xb2, 0x16, 0x99, 0x7c, 0x43, 0x96, 0x98, 0x3a, 0x22, 0x79, 0x1f, 0xa6, 0x6b, - 0xeb, 0x3a, 0xad, 0x62, 0x16, 0xef, 0x77, 0xac, 0x18, 0x79, 0x1c, 0x1b, 0xed, 0x93, 0xd5, 0xd1, - 0xe0, 0xf6, 0xc9, 0x7c, 0x20, 0x44, 0x09, 0xdb, 0x58, 0x6a, 0xeb, 0xc2, 0xf2, 0xbf, 0x11, 0xbe, - 0x6a, 0xe2, 0xd7, 0xf9, 0x1d, 0xab, 0x23, 0x5c, 0x02, 0xd8, 0x3e, 0xa1, 0xe1, 0x45, 0x1d, 0x39, - 0xdc, 0xc3, 0xb3, 0xfd, 0xe7, 0x51, 0xed, 0xd7, 0x72, 0x03, 0x2a, 0xb4, 0x1d, 0xcf, 0xec, 0xbd, - 0x27, 0x32, 0x26, 0x18, 0xd6, 0x1c, 0x76, 0xb5, 0xd6, 0x09, 0x83, 0x99, 0x9b, 0xd1, 0x25, 0x85, - 0x9b, 0x15, 0xa4, 0xd8, 0xd8, 0xfc, 0xfd, 0x0c, 0x9c, 0x49, 0xa5, 0x25, 0xd7, 0x00, 0x22, 0x9d, - 0x92, 0xe8, 0x25, 0xdc, 0x31, 0xa3, 0xc0, 0x3f, 0xa6, 0x82, 0x41, 0xbe, 0x12, 0xd7, 0x06, 0x9d, - 0x7c, 0x10, 0x2e, 0xc8, 0x78, 0x7b, 0xba, 0x36, 0x28, 0x45, 0x07, 0x64, 0xfc, 0x6a, 0x0e, 0x66, - 0x94, 0xb8, 0x42, 0xfc, 0x5b, 0x4f, 0xb0, 0x17, 0xdf, 0x87, 0x09, 0xd6, 0x1a, 0xa7, 0x2e, 0xbc, - 0x06, 0xb9, 0xe1, 0xcb, 0x6b, 0x09, 0x97, 0x4b, 0xc1, 0xed, 0x9a, 0x8a, 0xcc, 0xa3, 0x60, 0xe2, - 0xd6, 0x89, 0x0f, 0x12, 0xf5, 0xa4, 0xf7, 0xa0, 0xc6, 0x9c, 0xf8, 0x30, 0x59, 0x39, 0x6c, 0xdb, - 0xad, 0xb0, 0x36, 0x6e, 0x00, 0xf3, 0xa9, 0x9e, 0xb5, 0x69, 0xd8, 0xbc, 0xba, 0xc8, 0x39, 0x89, - 0x97, 0xa5, 0xf8, 0xc5, 0x6b, 0x54, 0x0b, 0xef, 0xc3, 0x4c, 0xe2, 0xa3, 0x4f, 0x15, 0x90, 0x73, - 0x0b, 0x48, 0xf2, 0x3b, 0x52, 0x38, 0x7c, 0x4a, 0x0f, 0xf7, 0x7a, 0x26, 0x7c, 0xbc, 0x6e, 0xb5, - 0xec, 0x76, 0x83, 0x9b, 0xd3, 0x2c, 0xaa, 0xe1, 0x3a, 0x7f, 0x3e, 0xab, 0xba, 0xbd, 0x3e, 0xeb, - 0xab, 0xee, 0x0b, 0xda, 0x6d, 0xf8, 0x62, 0xaf, 0x31, 0x1d, 0x48, 0xeb, 0xf0, 0xed, 0x1c, 0x9c, - 0xeb, 0x41, 0x49, 0x0e, 0xe3, 0x93, 0x88, 0x6b, 0x21, 0x6e, 0xf4, 0xaf, 0xf0, 0x69, 0x4c, 0x25, - 0xf2, 0x39, 0x1e, 0xf8, 0xa2, 0x8e, 0x79, 0xf2, 0xc5, 0xfd, 0x1b, 0xd5, 0xf8, 0xfb, 0x21, 0x34, - 0x1e, 0xf1, 0x82, 0x43, 0xc9, 0xfb, 0x30, 0x8c, 0x3e, 0xcf, 0xb1, 0xc8, 0x86, 0x0c, 0x03, 0xe1, - 0x4a, 0x6c, 0x4e, 0xf6, 0x53, 0x8b, 0xcd, 0xc9, 0x00, 0xe4, 0xb3, 0x90, 0x2b, 0x6d, 0xd5, 0xc4, - 0xb8, 0x4c, 0xa9, 0xe4, 0x5b, 0xb5, 0x28, 0xaf, 0x88, 0xad, 0x25, 0x00, 0x61, 0x14, 0x8c, 0xf0, - 0x4e, 0x79, 0x5d, 0x8c, 0x8a, 0x4a, 0x78, 0xa7, 0xbc, 0x1e, 0x11, 0xee, 0xd6, 0xb5, 0x38, 0x51, - 0x77, 0xca, 0xeb, 0x1f, 0xdf, 0xb4, 0xff, 0xf7, 0xb2, 0x3c, 0x5a, 0x07, 0x6f, 0xd8, 0xfb, 0x30, - 0xa1, 0x85, 0xe3, 0xce, 0x44, 0xf2, 0x58, 0x18, 0x3a, 0x3d, 0x66, 0x31, 0xa4, 0x11, 0xc8, 0x0c, - 0x3d, 0xec, 0x37, 0x4a, 0xbc, 0xaa, 0xb1, 0x4d, 0xc8, 0x01, 0x65, 0xe2, 0x78, 0x86, 0x9e, 0x90, - 0x84, 0xdc, 0x84, 0xfc, 0x06, 0x6d, 0xdb, 0xed, 0x20, 0x54, 0x88, 0xa2, 0x71, 0x71, 0x80, 0x30, - 0x5d, 0x6a, 0x08, 0x11, 0xd1, 0x10, 0xb6, 0xbb, 0xed, 0xd7, 0x3d, 0x07, 0xa3, 0xfa, 0x84, 0x67, - 0x31, 0x37, 0x84, 0x55, 0x4a, 0x74, 0x06, 0x31, 0x22, 0xe3, 0xe7, 0x33, 0x30, 0x2a, 0x06, 0x92, - 0x67, 0x56, 0xdb, 0x8d, 0xce, 0x12, 0xe1, 0x3c, 0xb0, 0xeb, 0xc4, 0x9d, 0x07, 0x76, 0x79, 0xe8, - 0x9c, 0x31, 0xe1, 0x58, 0x17, 0x3e, 0x0d, 0xe2, 0x6c, 0x94, 0x1e, 0x8f, 0x7a, 0xe2, 0xac, 0x10, - 0x75, 0x50, 0x87, 0x2c, 0xe3, 0xef, 0x8a, 0x2f, 0xbb, 0x53, 0x5e, 0x27, 0x8b, 0x90, 0x5f, 0x75, - 0x79, 0x14, 0x28, 0x35, 0x4d, 0x6e, 0x53, 0xc0, 0xd4, 0x0e, 0x92, 0x78, 0xec, 0xfb, 0xd6, 0x3d, - 0x57, 0xdc, 0x65, 0x94, 0xef, 0xeb, 0x70, 0x60, 0xec, 0xfb, 0x42, 0xd4, 0x81, 0xbf, 0x8f, 0xa6, - 0x6c, 0x12, 0x0f, 0x6f, 0x62, 0xea, 0x92, 0xbb, 0xaa, 0xa3, 0x9b, 0x28, 0x92, 0x3b, 0xc5, 0x42, - 0xaf, 0x9d, 0xe2, 0xe1, 0x4d, 0x33, 0x85, 0x0a, 0xdf, 0xd5, 0x22, 0x70, 0x8d, 0x7a, 0x8f, 0x9e, - 0xe1, 0x5d, 0x3a, 0xfd, 0x5d, 0x2d, 0xde, 0xbc, 0x81, 0x36, 0xe9, 0x3f, 0xcc, 0xc2, 0xd9, 0x74, - 0x42, 0xb5, 0x2d, 0x99, 0x3e, 0x6d, 0xb9, 0x02, 0xf9, 0x15, 0xd7, 0x0f, 0x14, 0x23, 0x41, 0x54, - 0xff, 0xef, 0x09, 0x98, 0x19, 0x96, 0xb2, 0x3b, 0x37, 0xfb, 0x3b, 0x5c, 0x9e, 0xc8, 0x0f, 0x63, - 0x54, 0xb0, 0x3b, 0x37, 0x2f, 0x22, 0x77, 0x20, 0x6f, 0x0a, 0x47, 0xab, 0x58, 0xd7, 0x48, 0x70, - 0x28, 0x4d, 0x11, 0x4f, 0x40, 0xb4, 0xa8, 0xe8, 0x02, 0x46, 0x4a, 0x30, 0x2a, 0x46, 0x3f, 0xf6, - 0x74, 0x9c, 0x32, 0x65, 0xf4, 0x44, 0x05, 0x92, 0x8e, 0xed, 0x28, 0xf8, 0x08, 0x58, 0xad, 0x48, - 0x9f, 0x29, 0xdc, 0x51, 0xf8, 0x23, 0xa1, 0x6e, 0x8f, 0x19, 0x22, 0x1a, 0x3f, 0x9c, 0x05, 0x90, - 0x5a, 0x9b, 0x67, 0x76, 0x86, 0x7d, 0x56, 0x9b, 0x61, 0x8a, 0xbd, 0xd1, 0xe0, 0x99, 0x80, 0x1f, - 0xa0, 0x39, 0xcf, 0xe0, 0x79, 0x80, 0x8b, 0x30, 0xbc, 0x11, 0x29, 0xb4, 0x84, 0x4b, 0x0a, 0xaa, - 0xa3, 0x39, 0xdc, 0xd8, 0x86, 0xb9, 0x3b, 0x34, 0x88, 0xd4, 0x5b, 0xf2, 0xe9, 0xb1, 0x3f, 0xdb, - 0xd7, 0x61, 0x4c, 0xe0, 0x87, 0xfb, 0x17, 0xd7, 0xc5, 0x88, 0xb0, 0x2f, 0xa8, 0x8b, 0x91, 0x08, - 0x6c, 0x37, 0xaa, 0xd0, 0x26, 0x0d, 0xe8, 0xc7, 0x5b, 0x4d, 0x0d, 0x08, 0x6f, 0x0a, 0xb6, 0x6c, - 0xb0, 0x1a, 0x4e, 0xec, 0x9f, 0x87, 0x70, 0x26, 0xfc, 0xf6, 0xa7, 0xc9, 0xf7, 0x3a, 0xbb, 0x52, - 0x8a, 0x18, 0xff, 0x11, 0xc7, 0x3e, 0xb6, 0x27, 0x8f, 0x61, 0x41, 0x12, 0x6c, 0x39, 0xa1, 0xe1, - 0xe4, 0x40, 0xb4, 0xe4, 0x1d, 0x18, 0x57, 0x68, 0x44, 0x8c, 0x7a, 0x54, 0x53, 0x1f, 0x38, 0xc1, - 0x9e, 0xe5, 0x73, 0xb8, 0xaa, 0xa6, 0x56, 0xd0, 0x8d, 0x2f, 0xc3, 0xf3, 0xa1, 0xdb, 0x50, 0x4a, - 0xd5, 0x31, 0xe6, 0x99, 0xd3, 0x31, 0x5f, 0x8b, 0x9a, 0x55, 0x6d, 0x87, 0x9e, 0xd1, 0x92, 0x37, - 0x51, 0x9b, 0x25, 0x1a, 0xf3, 0x42, 0xc2, 0xd7, 0x5a, 0x71, 0xa9, 0x36, 0xde, 0x56, 0x3e, 0x36, - 0x85, 0xa1, 0x46, 0x9c, 0x89, 0x13, 0xff, 0x70, 0x16, 0xa6, 0x1f, 0x54, 0x2b, 0xe5, 0xd0, 0xfa, - 0xe8, 0x13, 0x96, 0xa7, 0x58, 0x6b, 0x5b, 0xef, 0xfd, 0xc6, 0xd8, 0x84, 0xd9, 0x58, 0x37, 0xa0, - 0xe8, 0xf0, 0x1e, 0x77, 0x38, 0x09, 0xc1, 0x52, 0x6c, 0x38, 0x9b, 0xc6, 0xfe, 0xe1, 0x4d, 0x33, - 0x86, 0x6d, 0xfc, 0x57, 0x10, 0xe3, 0x2b, 0xb6, 0xb0, 0xd7, 0x61, 0xac, 0xea, 0xfb, 0x5d, 0xea, - 0x6d, 0x9a, 0xab, 0xaa, 0xaa, 0xc0, 0x41, 0xa0, 0xd5, 0xf5, 0x9a, 0x66, 0x84, 0x40, 0xae, 0x42, - 0x5e, 0xc4, 0x07, 0x97, 0x7b, 0x02, 0x6a, 0x6d, 0xc3, 0xf0, 0xe2, 0x66, 0x58, 0x4c, 0xde, 0x84, - 0x09, 0xfe, 0x37, 0x9f, 0x6d, 0xa2, 0xc3, 0x51, 0x39, 0x28, 0xd0, 0xf9, 0xec, 0x34, 0x35, 0x34, - 0xf2, 0x1a, 0xe4, 0x4a, 0x65, 0x53, 0xa8, 0x83, 0x84, 0xdc, 0xe8, 0x59, 0x5c, 0x67, 0xa7, 0x5d, - 0x22, 0xca, 0x26, 0x93, 0xfe, 0x64, 0xb0, 0x09, 0xa1, 0xc9, 0xc6, 0x19, 0x20, 0xb5, 0x4d, 0xb1, - 0xc3, 0x0c, 0x61, 0xe4, 0x3a, 0x8c, 0x56, 0xb8, 0xc9, 0x9c, 0xd0, 0x63, 0xf3, 0x24, 0x7c, 0x1c, - 0xa4, 0x05, 0x57, 0xe0, 0x20, 0x72, 0x55, 0x26, 0x27, 0xcb, 0x47, 0x7e, 0x2b, 0x3d, 0x32, 0x90, - 0xbd, 0x0e, 0x23, 0x22, 0x8a, 0xf6, 0x98, 0x92, 0xb6, 0x24, 0x1e, 0x3d, 0x5b, 0xe0, 0x24, 0x1d, - 0x58, 0xe1, 0x69, 0x3a, 0xb0, 0x6e, 0xc3, 0xb9, 0x3b, 0xa8, 0xbd, 0xd1, 0x63, 0x41, 0x6d, 0x9a, - 0x55, 0xa1, 0x0f, 0xc7, 0x67, 0x20, 0xae, 0xe0, 0x89, 0x87, 0x93, 0xb2, 0xba, 0x9e, 0x9a, 0x53, - 0xb6, 0x17, 0x23, 0xf2, 0x25, 0x98, 0x4b, 0x2b, 0x12, 0x5a, 0x73, 0x8c, 0x7a, 0x94, 0x5e, 0x81, - 0x1a, 0xf5, 0x28, 0x8d, 0x03, 0x59, 0x85, 0x02, 0x87, 0x97, 0x1a, 0x2d, 0xa7, 0xcd, 0x35, 0xff, - 0x5c, 0xab, 0x8e, 0x8e, 0x24, 0x82, 0xab, 0xcd, 0x0a, 0xf9, 0x0b, 0x80, 0xe6, 0x7a, 0x14, 0xa3, - 0x24, 0x3f, 0x95, 0x61, 0xb7, 0x39, 0x1e, 0x73, 0x7a, 0xd3, 0x5c, 0xf5, 0x45, 0xc4, 0xbc, 0xb3, - 0x91, 0x57, 0x51, 0x2d, 0xf0, 0x9c, 0xf6, 0xae, 0x70, 0x2b, 0xda, 0x10, 0x6e, 0x45, 0xef, 0x7c, - 0x24, 0xb7, 0x22, 0xce, 0xca, 0x3f, 0x3e, 0x2a, 0x4e, 0x78, 0xa2, 0x4e, 0x5c, 0x45, 0xda, 0x17, - 0xb0, 0xae, 0x43, 0xdf, 0xda, 0xcd, 0x36, 0x8f, 0x78, 0x4b, 0x1b, 0xbc, 0x91, 0xd3, 0xb8, 0x83, - 0x63, 0xd7, 0x61, 0x3a, 0x0c, 0xab, 0x1b, 0x22, 0x24, 0x1a, 0x9a, 0xca, 0x81, 0x5d, 0x3c, 0xa5, - 0xeb, 0x0a, 0xf7, 0xc6, 0x2d, 0x44, 0x17, 0x4f, 0xe9, 0xe7, 0x62, 0xe1, 0x34, 0x52, 0x27, 0x8f, - 0x46, 0x42, 0xae, 0xc3, 0xc8, 0x7d, 0xfb, 0x71, 0x69, 0x97, 0x8a, 0xa4, 0x93, 0x93, 0x72, 0xfb, - 0x43, 0xe0, 0x52, 0xfe, 0x8f, 0xb8, 0xaf, 0xc3, 0x73, 0xa6, 0x40, 0x23, 0xdf, 0x97, 0x81, 0xb3, - 0x7c, 0x19, 0xcb, 0x56, 0xd6, 0x68, 0x10, 0xb0, 0x7e, 0x10, 0xa1, 0xf3, 0x2e, 0x45, 0x06, 0xdb, - 0xe9, 0x78, 0xe8, 0x79, 0x6f, 0x88, 0x9d, 0x21, 0xec, 0x38, 0x5f, 0x94, 0x6a, 0x31, 0x88, 0x53, - 0xe9, 0xc9, 0x06, 0x8c, 0xdf, 0xbf, 0x5d, 0x0a, 0xab, 0xe5, 0x81, 0xc9, 0x8b, 0x69, 0xbb, 0xa3, - 0x82, 0x96, 0xe6, 0x69, 0xa0, 0xb2, 0x11, 0xde, 0x01, 0x9f, 0x95, 0xfd, 0x41, 0xde, 0x50, 0x5d, - 0x51, 0x73, 0x28, 0x3d, 0x8f, 0xb6, 0xec, 0xc7, 0x96, 0xbd, 0x4b, 0xb5, 0x57, 0x72, 0xa1, 0xbd, - 0xfe, 0xd9, 0x0c, 0x9c, 0xef, 0xd9, 0x64, 0x72, 0x0b, 0xce, 0xd9, 0xdc, 0xc1, 0xda, 0xda, 0x0b, - 0x82, 0x8e, 0x6f, 0xc9, 0x2b, 0x86, 0x70, 0x5e, 0x35, 0xcf, 0x88, 0xe2, 0x15, 0x56, 0x2a, 0x6f, - 0x1d, 0x3e, 0x79, 0x1f, 0x5e, 0x70, 0xda, 0x3e, 0xad, 0x77, 0x3d, 0x6a, 0x49, 0x06, 0x75, 0xa7, - 0xe1, 0x59, 0x9e, 0xdd, 0xde, 0x95, 0x9e, 0xb8, 0xe6, 0x79, 0x89, 0x23, 0x9c, 0xb8, 0xcb, 0x4e, - 0xc3, 0x33, 0x11, 0xc1, 0xf8, 0xe7, 0x19, 0x98, 0xef, 0xd5, 0x25, 0x64, 0x1e, 0x46, 0xa9, 0x92, - 0xa2, 0x24, 0x6f, 0xca, 0x9f, 0xe4, 0x79, 0x88, 0x76, 0x7a, 0x71, 0xfa, 0xe7, 0xeb, 0x22, 0x5d, - 0x04, 0x9a, 0xb6, 0xab, 0xfb, 0xba, 0x30, 0x50, 0x9e, 0xa8, 0xab, 0xbb, 0xfb, 0x05, 0x80, 0x68, - 0x3b, 0xe7, 0x8a, 0x09, 0x73, 0xcc, 0xae, 0x7b, 0x7c, 0xe5, 0x91, 0xb3, 0x30, 0xc2, 0xb7, 0x4b, - 0xe1, 0xff, 0x20, 0x7e, 0xb1, 0x73, 0x5b, 0x74, 0x32, 0xee, 0xf3, 0xb9, 0xa5, 0x09, 0xad, 0xb3, - 0x47, 0x5a, 0x38, 0x38, 0xc6, 0x4f, 0x4f, 0x72, 0x11, 0xa2, 0xd4, 0x0d, 0xf6, 0xa4, 0xd0, 0xb1, - 0x98, 0xe6, 0x2f, 0xc6, 0x6d, 0x29, 0x15, 0xbb, 0x6c, 0xdd, 0x4b, 0x4c, 0xbe, 0xfd, 0x64, 0x53, - 0xdf, 0x7e, 0x5e, 0x87, 0xb1, 0xf2, 0x1e, 0xad, 0xef, 0x87, 0x4e, 0x38, 0x79, 0xa1, 0x5c, 0x67, - 0x40, 0x1e, 0x0d, 0x3c, 0x42, 0x20, 0xd7, 0x01, 0xd0, 0x4d, 0x95, 0x4b, 0xa4, 0x4a, 0x46, 0x0f, - 0xf4, 0x6a, 0x15, 0xe6, 0x29, 0x0a, 0x0a, 0xb2, 0xaf, 0x99, 0xb7, 0x55, 0x7b, 0x16, 0xce, 0xde, - 0xf7, 0x76, 0x04, 0x7a, 0x84, 0xc0, 0x9a, 0xa7, 0xec, 0x2b, 0xe2, 0x14, 0x2c, 0x24, 0x36, 0x1f, - 0x15, 0x89, 0x5c, 0x83, 0xb1, 0x75, 0xe9, 0x48, 0x80, 0x87, 0xe0, 0x04, 0x52, 0x40, 0xe4, 0x74, - 0x30, 0x9f, 0x31, 0x23, 0x14, 0xf2, 0x59, 0x18, 0x2d, 0x53, 0x2f, 0xd8, 0xd8, 0x58, 0x45, 0xa3, - 0x13, 0x9e, 0xf8, 0x22, 0x8f, 0x49, 0x0a, 0x82, 0xa0, 0xf9, 0x9d, 0xa3, 0xe2, 0x64, 0xe0, 0xb4, - 0x68, 0x18, 0xd0, 0xdb, 0x94, 0xd8, 0x64, 0x09, 0x0a, 0xfc, 0x59, 0x3c, 0xba, 0x7b, 0xe0, 0xc9, - 0x98, 0xe7, 0xe7, 0xb4, 0x78, 0x43, 0x3f, 0xa0, 0xdb, 0x61, 0x8a, 0x86, 0x04, 0x3e, 0x59, 0x96, - 0x99, 0x4d, 0xd4, 0x66, 0x42, 0xa4, 0x0c, 0x8b, 0xef, 0x18, 0xac, 0xb5, 0x49, 0x0a, 0x52, 0x82, - 0xc9, 0xb2, 0xdb, 0xea, 0xd8, 0x81, 0x83, 0x29, 0x20, 0x0f, 0xc5, 0x21, 0x88, 0x0a, 0xbd, 0xba, - 0x5a, 0xa0, 0x9d, 0xa8, 0x6a, 0x01, 0xb9, 0x0d, 0x53, 0xa6, 0xdb, 0x65, 0xc3, 0x24, 0x6f, 0xe1, - 0xfc, 0x9c, 0x43, 0xd3, 0x10, 0x8f, 0x95, 0xb0, 0x63, 0x59, 0x5c, 0xb9, 0xb5, 0xe0, 0xa7, 0x1a, - 0x15, 0x59, 0x4b, 0x79, 0x0e, 0x51, 0x0f, 0x37, 0x35, 0x51, 0x43, 0x82, 0x59, 0xca, 0x4b, 0xca, - 0x4d, 0x18, 0xaf, 0xd5, 0x1e, 0x6c, 0x50, 0x3f, 0xb8, 0xdd, 0x74, 0x0f, 0xf0, 0x6c, 0xcb, 0x8b, - 0xbc, 0x62, 0xbe, 0x6b, 0x05, 0xd4, 0x0f, 0xac, 0x9d, 0xa6, 0x7b, 0x60, 0xaa, 0x58, 0xe4, 0x6b, - 0xac, 0x3f, 0x14, 0x49, 0x50, 0x84, 0x79, 0xed, 0x27, 0xac, 0xe2, 0x09, 0x12, 0x2d, 0x1a, 0x26, - 0xb2, 0xea, 0x9d, 0xa5, 0xa0, 0xa3, 0x4f, 0x99, 0xe7, 0x3e, 0x3e, 0x2c, 0x35, 0x1a, 0x1e, 0xf5, - 0x7d, 0x71, 0x08, 0x71, 0x9f, 0x32, 0x54, 0x36, 0xd8, 0xbc, 0x40, 0xf3, 0x29, 0x53, 0x08, 0xc8, - 0x8f, 0x66, 0xe0, 0x8c, 0xea, 0x6d, 0x82, 0xcb, 0x05, 0xcd, 0x5c, 0xf8, 0x91, 0xf4, 0xc6, 0x35, - 0x79, 0x08, 0x5f, 0x53, 0xd0, 0xae, 0x3d, 0xba, 0x71, 0xad, 0x14, 0xfd, 0xac, 0x49, 0x22, 0x0c, - 0x59, 0x57, 0x4c, 0xe5, 0xa7, 0xa5, 0xe5, 0x99, 0xb3, 0x53, 0x88, 0x49, 0x99, 0x49, 0x6a, 0x6c, - 0x46, 0xa1, 0xe1, 0x54, 0x75, 0x1d, 0xcf, 0x34, 0xa1, 0x51, 0x15, 0xf3, 0x8f, 0x9b, 0x58, 0x39, - 0x1d, 0x5d, 0x20, 0x53, 0x68, 0x48, 0x15, 0xa6, 0x39, 0x80, 0x6d, 0x0b, 0x3c, 0xc3, 0xd1, 0x6c, - 0x94, 0x63, 0x41, 0xb0, 0xc1, 0xb7, 0x7e, 0xcc, 0x72, 0xa4, 0xc6, 0x25, 0x8d, 0xd1, 0x91, 0xf7, - 0x61, 0x0a, 0xc3, 0xc7, 0x47, 0xeb, 0x75, 0x0e, 0x57, 0x31, 0x86, 0x57, 0x15, 0x25, 0x31, 0xcf, - 0xbb, 0x09, 0xdf, 0xdf, 0x8b, 0x56, 0xf4, 0xfb, 0x30, 0x85, 0xb6, 0x3a, 0x11, 0x83, 0x33, 0x11, - 0x03, 0x51, 0x12, 0x67, 0x10, 0x34, 0xfd, 0x88, 0xc1, 0xcf, 0x64, 0xe0, 0x3c, 0xab, 0x28, 0x7d, - 0x84, 0xce, 0x7e, 0x94, 0x11, 0xc2, 0x80, 0x93, 0x3d, 0x79, 0xaa, 0xe2, 0xa8, 0xef, 0xef, 0xa5, - 0x71, 0xc0, 0x8f, 0x62, 0x1f, 0x9f, 0xfe, 0x51, 0xe7, 0x3e, 0xf2, 0x47, 0xf5, 0xe4, 0xa9, 0x7e, - 0x54, 0xd0, 0xf4, 0xd3, 0x38, 0xe0, 0xb5, 0xb6, 0x56, 0xba, 0xbf, 0x1a, 0xdd, 0xcd, 0x3e, 0x59, - 0x6e, 0x2b, 0x5a, 0xdb, 0xfa, 0xb8, 0xad, 0x6c, 0x72, 0x2f, 0x6a, 0xa5, 0x1b, 0xe4, 0xb5, 0x56, - 0x03, 0xc7, 0xaf, 0xb5, 0x31, 0x1a, 0x33, 0x86, 0x6d, 0xfc, 0x32, 0xc4, 0xf8, 0x0a, 0x53, 0x55, - 0x03, 0x46, 0xf8, 0xad, 0x55, 0x74, 0x32, 0xda, 0x2c, 0xf0, 0x3b, 0xad, 0x29, 0x4a, 0xc8, 0x79, - 0xc8, 0xd5, 0x6a, 0x0f, 0x44, 0x27, 0xa3, 0xc1, 0xaa, 0xef, 0xbb, 0x26, 0x83, 0xb1, 0x11, 0x42, - 0x2b, 0x54, 0x25, 0x1c, 0x3f, 0x3b, 0xef, 0x4c, 0x84, 0xb2, 0xfe, 0x96, 0x77, 0xc8, 0xa1, 0xa8, - 0xbf, 0xc5, 0x1d, 0x32, 0xba, 0x39, 0x96, 0x61, 0xbe, 0xe4, 0xfb, 0xd4, 0x63, 0x13, 0x42, 0x18, - 0x37, 0x7a, 0xe2, 0x9e, 0x23, 0x0e, 0x76, 0xac, 0xd4, 0xae, 0xfb, 0x66, 0x4f, 0x44, 0x72, 0x05, - 0xf2, 0xa5, 0x6e, 0xc3, 0xa1, 0xed, 0xba, 0x16, 0x96, 0xcd, 0x16, 0x30, 0x33, 0x2c, 0x25, 0x5f, - 0x84, 0x33, 0xb1, 0x08, 0x8c, 0xa2, 0x07, 0x46, 0xa3, 0xbd, 0x57, 0xde, 0xc3, 0x22, 0x83, 0x0c, - 0xde, 0x25, 0xe9, 0x94, 0xa4, 0x04, 0x85, 0x65, 0x74, 0xd3, 0xaa, 0x50, 0xfe, 0x36, 0xe4, 0x7a, - 0xdc, 0x3f, 0x8f, 0xdf, 0x9a, 0xb9, 0x0b, 0x97, 0xd5, 0x08, 0x0b, 0xcd, 0x04, 0x3a, 0xb9, 0x07, - 0xb3, 0x71, 0x18, 0x3b, 0xc1, 0xf9, 0x05, 0x19, 0xf7, 0x9b, 0x04, 0x17, 0x3c, 0xc3, 0xd3, 0xa8, - 0xc8, 0x36, 0xcc, 0x44, 0x06, 0x49, 0xfa, 0xb5, 0x59, 0xda, 0x39, 0x87, 0xe5, 0xf2, 0xea, 0xfc, - 0xbc, 0x98, 0x8c, 0xb3, 0x91, 0x71, 0x53, 0x78, 0x7d, 0x36, 0x93, 0xec, 0x48, 0x03, 0xa6, 0x6a, - 0xce, 0x6e, 0xdb, 0x69, 0xef, 0xde, 0xa3, 0x87, 0xeb, 0xb6, 0xe3, 0x09, 0x8b, 0x53, 0x69, 0x4f, - 0x5e, 0xf2, 0x0f, 0x5b, 0x2d, 0x1a, 0x78, 0xb8, 0x11, 0xb2, 0x72, 0xf4, 0x41, 0x67, 0xd7, 0xa1, - 0x05, 0x9f, 0xd3, 0xa1, 0xdb, 0x66, 0xc7, 0x76, 0x34, 0x21, 0x40, 0xe7, 0xa9, 0xa9, 0x2e, 0x26, - 0x06, 0x54, 0x5d, 0x34, 0x61, 0x66, 0xb9, 0x5d, 0xf7, 0x0e, 0xf1, 0x89, 0x4e, 0x7e, 0xdc, 0xe4, - 0x09, 0x1f, 0xf7, 0xb2, 0xf8, 0xb8, 0x17, 0x6c, 0x39, 0xc3, 0xd2, 0x3e, 0x2f, 0xc9, 0x98, 0xd4, - 0x60, 0x06, 0x2f, 0x0e, 0xd5, 0xca, 0x7a, 0xb5, 0xed, 0x04, 0x8e, 0x1d, 0xd0, 0x86, 0x10, 0x2e, - 0xc2, 0x24, 0x26, 0xfc, 0x8a, 0xea, 0x34, 0x3a, 0x96, 0x23, 0x51, 0x54, 0xa6, 0x09, 0xfa, 0x7e, - 0xf7, 0xc4, 0xe9, 0xbf, 0xa4, 0x7b, 0x62, 0x15, 0xa6, 0xe3, 0xa1, 0x1c, 0x0a, 0xd1, 0x39, 0xec, - 0x63, 0x11, 0x3b, 0xce, 0xdd, 0x2e, 0x0a, 0x93, 0x5a, 0xde, 0xd0, 0x58, 0x10, 0x87, 0xd8, 0x95, - 0x73, 0x46, 0xbb, 0x72, 0x6a, 0xbb, 0xd2, 0x29, 0xae, 0x9c, 0x64, 0x1d, 0xe0, 0xb6, 0xeb, 0xd5, - 0x69, 0x09, 0xfd, 0xa3, 0x89, 0x96, 0xea, 0x89, 0x31, 0x8d, 0x0a, 0xf9, 0xfa, 0xd9, 0x61, 0xbf, - 0xad, 0xb8, 0x9b, 0xbb, 0xc2, 0xc3, 0xf8, 0xb1, 0x2c, 0xcc, 0xf7, 0xfa, 0x9c, 0x3e, 0xd7, 0xbd, - 0x4f, 0x41, 0x72, 0x85, 0x8b, 0x6b, 0x5f, 0x81, 0xc6, 0xd7, 0xf9, 0x22, 0xa4, 0x2f, 0x64, 0x71, - 0x0d, 0x9c, 0x8d, 0x13, 0x6c, 0x7a, 0x4d, 0x72, 0x0b, 0xc6, 0x95, 0x8f, 0xc7, 0xbd, 0xb4, 0x57, - 0x53, 0x4d, 0xd8, 0x09, 0xff, 0x66, 0xd7, 0x44, 0xbe, 0x6f, 0xc9, 0x6b, 0x22, 0xff, 0x45, 0x0a, - 0xdc, 0x45, 0x7c, 0x84, 0x5b, 0x01, 0xf8, 0xbe, 0x4b, 0x08, 0xe0, 0xbe, 0xcd, 0xb7, 0x40, 0x13, - 0xff, 0x36, 0x7e, 0x73, 0x82, 0x9f, 0xc8, 0xea, 0x2d, 0xb1, 0x97, 0x7d, 0x70, 0xec, 0xf6, 0x98, - 0x3d, 0xcd, 0xed, 0x31, 0x77, 0xf2, 0xed, 0x71, 0xe8, 0xa4, 0xdb, 0x63, 0xec, 0x7a, 0x37, 0x7c, - 0xea, 0xeb, 0xdd, 0xc8, 0xa9, 0xae, 0x77, 0xa3, 0xa7, 0xba, 0xde, 0x69, 0x37, 0xd5, 0xfc, 0x49, - 0x37, 0xd5, 0xbf, 0xbe, 0x0c, 0x3e, 0xab, 0x97, 0xc1, 0x34, 0x11, 0xef, 0x54, 0x97, 0xc1, 0x1f, - 0xe9, 0x79, 0x97, 0x2b, 0x7c, 0x14, 0xa1, 0xfc, 0xa5, 0x01, 0xee, 0x72, 0x83, 0xde, 0xe4, 0x66, - 0x9e, 0xce, 0x4d, 0x8e, 0x3c, 0xb5, 0x9b, 0xdc, 0xec, 0x93, 0xde, 0xe4, 0xe6, 0x9e, 0xe6, 0x4d, - 0xee, 0xcc, 0x5f, 0xc5, 0x9b, 0xdc, 0xd9, 0x7f, 0x3b, 0x37, 0xb9, 0xbf, 0x01, 0x85, 0xb8, 0x70, - 0x79, 0x72, 0xd4, 0xe3, 0xa7, 0x16, 0x72, 0x92, 0x89, 0xbe, 0x71, 0xe1, 0x8e, 0x5c, 0x07, 0x58, - 0xf7, 0x9c, 0x47, 0x76, 0x40, 0xef, 0x49, 0xeb, 0x37, 0x11, 0xb1, 0x9b, 0x43, 0xd9, 0xc8, 0x9b, - 0x0a, 0x4a, 0x78, 0xaf, 0xc9, 0xa6, 0xdd, 0x6b, 0x8c, 0x1f, 0xcd, 0xc2, 0x0c, 0x8f, 0xdb, 0xf6, - 0xec, 0x3f, 0xc2, 0xbe, 0xa7, 0xdd, 0x56, 0x5f, 0x88, 0xc2, 0xe3, 0xab, 0xad, 0xeb, 0xf3, 0x0c, - 0xfb, 0x55, 0x38, 0x93, 0xe8, 0x0a, 0xbc, 0xb1, 0x56, 0x64, 0xc4, 0xbc, 0xc4, 0x9d, 0x75, 0x3e, - 0xbd, 0x92, 0x87, 0x37, 0xcd, 0x04, 0x85, 0xf1, 0xe7, 0x43, 0x09, 0xfe, 0xe2, 0x41, 0x56, 0x7d, - 0x62, 0xcd, 0x9c, 0xee, 0x89, 0x35, 0x3b, 0xd8, 0x13, 0x6b, 0x4c, 0xa8, 0xc8, 0x0d, 0x22, 0x54, - 0x7c, 0x11, 0x26, 0x37, 0xa8, 0xdd, 0xf2, 0x37, 0x5c, 0x91, 0x6b, 0x89, 0xfb, 0x5a, 0xc8, 0x80, - 0x78, 0xac, 0x4c, 0x5e, 0xb8, 0x42, 0x9b, 0xd1, 0x80, 0x11, 0xb0, 0x63, 0x90, 0x27, 0x5f, 0x32, - 0x75, 0x0e, 0xea, 0x2d, 0x7a, 0xb8, 0xcf, 0x2d, 0xba, 0x06, 0x13, 0x82, 0x2e, 0x0a, 0xf5, 0x1c, - 0x5d, 0xf7, 0x58, 0x11, 0xc2, 0x65, 0xed, 0x61, 0x22, 0xf8, 0xb0, 0x76, 0x7e, 0xd3, 0xd3, 0x98, - 0xb0, 0x2e, 0x58, 0x6e, 0x37, 0x3a, 0xae, 0xd3, 0xc6, 0x2e, 0x18, 0x8d, 0xba, 0x80, 0x0a, 0x30, - 0xef, 0x02, 0x05, 0x89, 0xbc, 0x03, 0x53, 0xa5, 0xf5, 0xaa, 0x4a, 0x96, 0x8f, 0x5e, 0x79, 0xed, - 0x8e, 0x63, 0x69, 0xa4, 0x31, 0xdc, 0x7e, 0x37, 0x9f, 0xb1, 0xbf, 0x9c, 0x9b, 0x8f, 0xf1, 0x4f, - 0x27, 0xe5, 0xf2, 0xfe, 0x78, 0x1f, 0x48, 0xf4, 0x27, 0x8f, 0xdc, 0x29, 0x9f, 0x3c, 0x86, 0x4e, - 0x12, 0x24, 0x35, 0xf9, 0x76, 0xf8, 0x54, 0xf2, 0xed, 0xc8, 0x13, 0x3f, 0x5f, 0x8c, 0x9e, 0x52, - 0x62, 0x8d, 0xad, 0xb5, 0xfc, 0x20, 0x6b, 0x2d, 0x55, 0xca, 0x1d, 0x7b, 0x72, 0x29, 0x17, 0x4e, - 0x2d, 0xe5, 0xd6, 0x22, 0xdf, 0xe5, 0xf1, 0x13, 0x5d, 0x42, 0x2e, 0x08, 0xad, 0xc0, 0x4c, 0x7a, - 0x14, 0xbe, 0xd0, 0x8b, 0xf9, 0x13, 0x25, 0x3a, 0x7f, 0x3d, 0x5d, 0x74, 0xee, 0x7f, 0xde, 0x9c, - 0x4a, 0x78, 0xfe, 0xd1, 0xa7, 0x2b, 0x3c, 0x3f, 0xdd, 0x87, 0x90, 0xbf, 0x16, 0x9f, 0xff, 0x5a, - 0x7c, 0x1e, 0x4c, 0x7c, 0x26, 0x0f, 0x80, 0xd8, 0xdd, 0x60, 0x8f, 0xb6, 0x03, 0xa7, 0x8e, 0x51, - 0x69, 0xd9, 0x10, 0xe3, 0xab, 0x8c, 0x58, 0xaf, 0xc9, 0x52, 0x75, 0xbd, 0x6a, 0xa5, 0xe8, 0xe7, - 0xed, 0xe1, 0x7a, 0xdd, 0xb2, 0xbd, 0x36, 0xea, 0xb1, 0xae, 0xc3, 0xa8, 0x8c, 0x6b, 0x9a, 0x89, - 0x54, 0xd4, 0xc9, 0x80, 0xa6, 0x12, 0x8b, 0x2c, 0x42, 0x5e, 0x12, 0xab, 0x89, 0x76, 0x0e, 0x04, - 0x4c, 0x0b, 0x19, 0x29, 0x60, 0xc6, 0x7f, 0x34, 0x24, 0xcf, 0x04, 0xf6, 0x09, 0xeb, 0xb6, 0x67, - 0xb7, 0x30, 0xfd, 0x5c, 0xb8, 0x64, 0x95, 0xdb, 0x40, 0x6c, 0x95, 0xc7, 0x7c, 0x05, 0x74, 0x92, - 0x8f, 0x14, 0x98, 0x36, 0xca, 0xf0, 0x9b, 0x1b, 0x20, 0xc3, 0xef, 0x5b, 0x5a, 0x7a, 0xdc, 0xa1, - 0x28, 0x1f, 0x23, 0xdb, 0x27, 0xfb, 0x27, 0xc6, 0xbd, 0xa5, 0xe6, 0xb1, 0x1d, 0x8e, 0xc2, 0x84, - 0x21, 0x65, 0x9f, 0x0c, 0xb6, 0xe1, 0xf5, 0x66, 0xe4, 0x34, 0x21, 0x9f, 0x47, 0xff, 0xad, 0x86, - 0x7c, 0x5e, 0x06, 0x10, 0x67, 0x77, 0x64, 0xef, 0xf0, 0x0a, 0x6e, 0x27, 0xc2, 0xee, 0x39, 0x08, - 0x9a, 0x3d, 0x72, 0x82, 0x28, 0x84, 0xc6, 0x1f, 0x10, 0x98, 0xa9, 0xd5, 0x1e, 0x54, 0x1c, 0x7b, - 0xb7, 0xed, 0xfa, 0x81, 0x53, 0xaf, 0xb6, 0x77, 0x5c, 0x26, 0xdb, 0x87, 0xe7, 0x8b, 0x12, 0xac, - 0x37, 0x3a, 0x5b, 0xc2, 0x62, 0x76, 0x77, 0x5c, 0xf6, 0x3c, 0xa9, 0x70, 0xe5, 0x77, 0x47, 0xca, - 0x00, 0x26, 0x87, 0x33, 0xf1, 0xb9, 0xd6, 0xc5, 0x50, 0x19, 0xc2, 0x08, 0x05, 0xc5, 0x67, 0x9f, - 0x83, 0x4c, 0x59, 0x46, 0x68, 0x72, 0xc2, 0x8a, 0xeb, 0xd4, 0x39, 0x2d, 0x70, 0x74, 0x54, 0xcc, - 0x57, 0xa3, 0x90, 0x6e, 0x70, 0x1f, 0xee, 0x20, 0x5c, 0x35, 0xb1, 0x4b, 0xac, 0x81, 0x43, 0x38, - 0xa3, 0x39, 0x51, 0x0f, 0xfa, 0x3a, 0xf3, 0x9a, 0x10, 0xd7, 0x0d, 0x8c, 0xd9, 0x91, 0xf2, 0x44, - 0xa3, 0xe6, 0x93, 0x4b, 0xad, 0x81, 0x1d, 0x90, 0x17, 0x52, 0x4b, 0xc2, 0xd5, 0x3d, 0xae, 0x05, - 0xef, 0x56, 0x36, 0x0d, 0x9e, 0x39, 0xaf, 0x57, 0xd5, 0x56, 0xca, 0x56, 0xd0, 0xbf, 0x26, 0xf2, - 0x5b, 0x19, 0x38, 0xa7, 0x61, 0x84, 0xfb, 0x9f, 0x1f, 0xc6, 0x17, 0x49, 0x9d, 0xd7, 0x1f, 0x3e, - 0x9d, 0x79, 0xfd, 0x92, 0xde, 0x96, 0x68, 0x87, 0x56, 0xdb, 0xd0, 0xeb, 0x0b, 0xc9, 0x23, 0x98, - 0xc1, 0x22, 0xf9, 0x52, 0xc4, 0xe6, 0xac, 0x78, 0x60, 0x9a, 0x8b, 0x3e, 0x9b, 0x07, 0x06, 0xc0, - 0xec, 0xe7, 0x8b, 0xdf, 0x3e, 0x2a, 0x4e, 0x6a, 0xe8, 0x32, 0x1c, 0xb6, 0x15, 0x3d, 0x37, 0x39, - 0xed, 0x1d, 0x57, 0x4b, 0x6d, 0x1f, 0xaf, 0x82, 0xfc, 0x37, 0x19, 0xfe, 0x3e, 0xc1, 0x9b, 0x71, - 0xdb, 0x73, 0x5b, 0x61, 0xb9, 0xb4, 0xd5, 0xec, 0xd1, 0x6d, 0xcd, 0xa7, 0xd3, 0x6d, 0xaf, 0xe0, - 0x27, 0xf3, 0x3d, 0xc1, 0xda, 0xf1, 0xdc, 0x56, 0xf4, 0xf9, 0x6a, 0xc7, 0xf5, 0xfc, 0x48, 0xf2, - 0xfd, 0x19, 0x38, 0xaf, 0xa9, 0x49, 0xd5, 0xdc, 0x24, 0x22, 0xfc, 0xc2, 0x6c, 0x18, 0x98, 0x25, - 0x2a, 0x5a, 0xba, 0x26, 0xe6, 0xff, 0x65, 0xfc, 0x02, 0x25, 0x0e, 0x28, 0x43, 0xb2, 0x5a, 0x1c, - 0x4b, 0xf9, 0x84, 0xde, 0xb5, 0x10, 0x07, 0x66, 0xd0, 0x6c, 0x47, 0xb3, 0x29, 0x9e, 0xeb, 0x6d, - 0x53, 0x1c, 0x66, 0x1d, 0xc2, 0x8c, 0x04, 0xbd, 0x0d, 0x8b, 0x93, 0x5c, 0xc9, 0xf7, 0xc0, 0xf9, - 0x04, 0x30, 0x5c, 0x6d, 0x67, 0x7a, 0xae, 0xb6, 0x4f, 0x1d, 0x1f, 0x15, 0x5f, 0x4d, 0xab, 0x2d, - 0x6d, 0xa5, 0xf5, 0xae, 0x81, 0xd8, 0x00, 0x51, 0xa1, 0x90, 0x67, 0xd2, 0x27, 0xe8, 0xa7, 0xc4, - 0xfc, 0x50, 0xf0, 0xd9, 0x5e, 0xae, 0x7c, 0x83, 0x7a, 0xe4, 0x45, 0x48, 0x84, 0xc2, 0x84, 0x92, - 0x8d, 0xe1, 0x50, 0x58, 0x8f, 0xf4, 0xa8, 0xe4, 0xdb, 0x47, 0x45, 0x0d, 0x9b, 0xdd, 0xb0, 0xd4, - 0x34, 0x0f, 0x9a, 0xf8, 0xa8, 0x22, 0x92, 0xdf, 0xc8, 0xc0, 0x1c, 0x03, 0x44, 0x93, 0x4a, 0x34, - 0x6a, 0xbe, 0xdf, 0xac, 0xdf, 0x7b, 0x3a, 0xb3, 0xfe, 0x45, 0xfc, 0x46, 0x75, 0xd6, 0x27, 0xba, - 0x24, 0xf5, 0xe3, 0x70, 0xb6, 0x6b, 0x16, 0x62, 0xda, 0x6c, 0x3f, 0x3f, 0xc0, 0x6c, 0xe7, 0x03, - 0x70, 0xf2, 0x6c, 0xef, 0x59, 0x0b, 0xd9, 0x80, 0x09, 0x71, 0xb9, 0xe2, 0x1d, 0x76, 0x51, 0x8b, - 0x0b, 0xad, 0x16, 0xf1, 0x1b, 0xaf, 0x48, 0x56, 0x91, 0x68, 0xa1, 0xc6, 0x85, 0xb4, 0x61, 0x96, - 0xff, 0xd6, 0x95, 0x5d, 0xc5, 0x9e, 0xca, 0xae, 0x2b, 0xa2, 0x45, 0x97, 0x04, 0xff, 0x98, 0xce, - 0x4b, 0x8d, 0xe7, 0x94, 0xc2, 0x98, 0x74, 0x80, 0x68, 0x60, 0xbe, 0x68, 0x2f, 0xf5, 0x57, 0x71, - 0xbd, 0x2a, 0xea, 0x2c, 0xc6, 0xeb, 0x8c, 0xaf, 0xdc, 0x14, 0xde, 0xc4, 0x86, 0x69, 0x01, 0x75, - 0xf7, 0x29, 0xdf, 0xe1, 0x5f, 0xd4, 0x22, 0x6a, 0xc5, 0x4a, 0xf9, 0xad, 0x4c, 0xd6, 0x84, 0x11, - 0xcf, 0x62, 0x1b, 0x7a, 0x9c, 0x1f, 0x79, 0x00, 0x33, 0xa5, 0x4e, 0xa7, 0xe9, 0xd0, 0x06, 0xb6, - 0xd2, 0xec, 0xb2, 0x36, 0x19, 0x51, 0xbe, 0x37, 0x9b, 0x17, 0x8a, 0xab, 0xa2, 0xd7, 0x8d, 0x6d, - 0x37, 0x09, 0x5a, 0xe3, 0x47, 0x32, 0x89, 0x8f, 0x26, 0xaf, 0xc3, 0x18, 0xfe, 0x50, 0x82, 0xb4, - 0xa0, 0xce, 0x88, 0x7f, 0x22, 0x6a, 0xa3, 0x22, 0x04, 0x26, 0x2c, 0xa9, 0x81, 0x1a, 0x73, 0x5c, - 0x58, 0x12, 0x8a, 0x8a, 0x48, 0x35, 0x51, 0x94, 0xbe, 0x1e, 0xb9, 0x48, 0xe8, 0x42, 0x5f, 0x0f, - 0xe1, 0xe1, 0x61, 0xfc, 0xc3, 0xac, 0x3e, 0xed, 0xc8, 0x15, 0x45, 0x6e, 0x57, 0x42, 0x45, 0x4a, - 0xb9, 0x5d, 0x91, 0xd6, 0xff, 0x7e, 0x06, 0x66, 0x1f, 0x28, 0x89, 0x42, 0x37, 0x5c, 0x1c, 0x97, - 0xfe, 0xa9, 0x33, 0x9f, 0x56, 0x0a, 0x40, 0x35, 0x43, 0x29, 0x9b, 0x29, 0x38, 0x65, 0xcc, 0xb4, - 0xef, 0x41, 0xef, 0x39, 0xfc, 0x30, 0x25, 0x13, 0x23, 0x47, 0xe7, 0xf0, 0x53, 0xa6, 0xae, 0x30, - 0x7e, 0x22, 0x0b, 0xe3, 0xca, 0x8a, 0x21, 0x9f, 0x81, 0x09, 0xb5, 0x5a, 0x55, 0xe1, 0xa8, 0x7e, - 0xa5, 0xa9, 0x61, 0xa1, 0xc6, 0x91, 0xda, 0x2d, 0x4d, 0xe3, 0xc8, 0xd6, 0x05, 0x42, 0x4f, 0x79, - 0x13, 0x7a, 0x3f, 0xe5, 0x26, 0x84, 0xb3, 0x5c, 0xd1, 0x18, 0xf5, 0xbd, 0x0f, 0xbd, 0x93, 0xbc, - 0x0f, 0xa1, 0xf2, 0x4a, 0xa1, 0xef, 0x7d, 0x2b, 0x32, 0x7e, 0x3a, 0x03, 0x85, 0xf8, 0x9a, 0xfe, - 0x58, 0x7a, 0xe5, 0x14, 0xaf, 0x4b, 0x3f, 0x9e, 0x0d, 0x33, 0xb7, 0x48, 0x17, 0xe2, 0x67, 0xd5, - 0x4c, 0xf1, 0x5d, 0xed, 0xe1, 0xe7, 0x79, 0x3d, 0x1a, 0x9e, 0x1a, 0x7c, 0x23, 0x3d, 0x04, 0xe6, - 0xd0, 0xb7, 0x7e, 0xa9, 0xf8, 0x9c, 0xf1, 0x01, 0xcc, 0xc5, 0xbb, 0x03, 0x1f, 0x7f, 0x4a, 0x30, - 0xad, 0xc3, 0xe3, 0x79, 0x9f, 0xe2, 0x54, 0x66, 0x1c, 0xdf, 0xf8, 0xa3, 0x6c, 0x9c, 0xb7, 0x30, - 0x59, 0x64, 0x7b, 0x94, 0x6a, 0x88, 0x23, 0xf6, 0x28, 0x0e, 0x32, 0x65, 0xd9, 0x69, 0xf2, 0xad, - 0x85, 0x8e, 0xb0, 0xb9, 0x74, 0x47, 0x58, 0x72, 0x2b, 0x66, 0xa5, 0xad, 0x44, 0x6d, 0x3a, 0xa0, - 0xdb, 0x56, 0x64, 0xa9, 0x1d, 0x33, 0xce, 0x2e, 0xc3, 0x9c, 0x16, 0x82, 0x5c, 0xd2, 0x0f, 0x47, - 0xba, 0xfe, 0x00, 0x0b, 0x38, 0x71, 0x2a, 0x32, 0x59, 0x81, 0x51, 0xf6, 0x99, 0xf7, 0xed, 0x8e, - 0x78, 0xd3, 0x21, 0xa1, 0x5b, 0x7c, 0x33, 0xbc, 0x1f, 0x2a, 0x9e, 0xf1, 0x4d, 0xca, 0x24, 0x04, - 0x75, 0x62, 0x09, 0x44, 0xe3, 0x5f, 0x66, 0xd8, 0xfa, 0xaf, 0xef, 0x7f, 0xc2, 0x92, 0xb6, 0xb1, - 0x26, 0xf5, 0xb1, 0xa8, 0xfd, 0x93, 0x2c, 0xcf, 0xc5, 0x23, 0xa6, 0xcf, 0x5b, 0x30, 0xb2, 0x61, - 0x7b, 0xbb, 0x22, 0x65, 0xb6, 0xce, 0x85, 0x17, 0x44, 0x31, 0xa5, 0x02, 0xfc, 0x6d, 0x0a, 0x02, - 0x55, 0x75, 0x96, 0x1d, 0x48, 0x75, 0xa6, 0xbc, 0x0b, 0xe4, 0x9e, 0xda, 0xbb, 0xc0, 0x77, 0x85, - 0x69, 0x77, 0x4a, 0xc1, 0x00, 0x11, 0xae, 0x2f, 0xc5, 0xb3, 0x5c, 0x25, 0x62, 0x91, 0x47, 0xec, - 0xc8, 0x2d, 0x35, 0x6f, 0x96, 0xe2, 0x5b, 0x7a, 0x42, 0x86, 0x2c, 0xe3, 0x4f, 0x72, 0xbc, 0x8f, - 0x45, 0x47, 0x5d, 0xd6, 0xfc, 0xce, 0x71, 0x9d, 0xc4, 0xf4, 0x94, 0xdc, 0x03, 0xfd, 0x32, 0x0c, - 0xb1, 0xb9, 0x29, 0x7a, 0x13, 0xf1, 0xd8, 0xfc, 0x55, 0xf1, 0x58, 0x39, 0x5b, 0xcb, 0x78, 0x26, - 0xa9, 0x09, 0x11, 0xf1, 0xd8, 0x52, 0xd7, 0x32, 0x62, 0x90, 0x2b, 0x30, 0xb4, 0xe6, 0x36, 0x64, - 0x24, 0xf5, 0x39, 0x8c, 0x3e, 0xa2, 0x65, 0x5c, 0x9d, 0xcf, 0x98, 0x88, 0xc1, 0xda, 0x1a, 0xe6, - 0x9f, 0x50, 0xdb, 0xda, 0xda, 0xb1, 0x93, 0x89, 0xee, 0x94, 0xa4, 0x37, 0xcb, 0x30, 0xb5, 0xe5, - 0xb4, 0x1b, 0xee, 0x81, 0x5f, 0xa1, 0xfe, 0x7e, 0xe0, 0x76, 0x84, 0xbd, 0x31, 0x6a, 0xf7, 0x0f, - 0x78, 0x89, 0xd5, 0xe0, 0x45, 0xea, 0xb3, 0x8c, 0x4e, 0x44, 0x96, 0x60, 0x52, 0x8b, 0xe0, 0x2a, - 0x1e, 0x57, 0x51, 0x1b, 0xaa, 0xc7, 0x7f, 0x55, 0xb5, 0xa1, 0x1a, 0x09, 0x3b, 0xcf, 0xc5, 0xf7, - 0x2b, 0x4f, 0xac, 0x89, 0x6f, 0x17, 0x38, 0xe4, 0x26, 0xe4, 0x79, 0x98, 0x8f, 0x6a, 0x45, 0x7d, - 0x26, 0xf3, 0x11, 0x16, 0x0b, 0x93, 0x23, 0x11, 0x95, 0xb0, 0x0e, 0x9f, 0x86, 0x82, 0xd8, 0x92, - 0xa2, 0x5c, 0xed, 0x2f, 0xc0, 0x50, 0xb9, 0x5a, 0x31, 0xd5, 0x6d, 0xa4, 0xee, 0x34, 0x3c, 0x13, - 0xa1, 0xe8, 0xd5, 0xb7, 0x46, 0x83, 0x03, 0xd7, 0xdb, 0x37, 0xa9, 0x1f, 0x78, 0x0e, 0xcf, 0xa7, - 0x89, 0x0b, 0xf1, 0x33, 0xe4, 0x1d, 0x18, 0x46, 0xc3, 0xd7, 0xd8, 0xc9, 0x10, 0xaf, 0x63, 0x69, - 0x52, 0x4c, 0xe0, 0x61, 0xb4, 0xa2, 0x35, 0x39, 0x11, 0x79, 0x0b, 0x86, 0x2a, 0xb4, 0x7d, 0x18, - 0x4b, 0xf5, 0x97, 0x20, 0x0e, 0x37, 0x84, 0x06, 0x6d, 0x1f, 0x9a, 0x48, 0x62, 0xfc, 0x74, 0x16, - 0xce, 0xa4, 0x7c, 0xd6, 0xc3, 0xcf, 0x3c, 0xa3, 0xbb, 0xe2, 0x92, 0xb6, 0x2b, 0xca, 0xf7, 0xf1, - 0x9e, 0x1d, 0x9f, 0xba, 0x49, 0xfe, 0x42, 0x06, 0xce, 0xe9, 0x13, 0x54, 0x58, 0xba, 0x3f, 0xbc, - 0x49, 0xde, 0x86, 0x91, 0x15, 0x6a, 0x37, 0xa8, 0xcc, 0xeb, 0x75, 0x26, 0x0c, 0xc8, 0xc7, 0x63, - 0x18, 0xf0, 0x42, 0xce, 0x36, 0xf2, 0x78, 0xe5, 0x50, 0x52, 0x11, 0x1f, 0xc7, 0xc5, 0x77, 0x43, - 0xc6, 0x13, 0x49, 0xab, 0xaa, 0x8f, 0x95, 0xc9, 0xb7, 0x33, 0xf0, 0x7c, 0x1f, 0x1a, 0x36, 0x70, - 0x6c, 0xe8, 0xd5, 0x81, 0xc3, 0x13, 0x15, 0xa1, 0xe4, 0x3d, 0x98, 0xde, 0x10, 0xe2, 0xbf, 0x1c, - 0x8e, 0x6c, 0xb4, 0x5e, 0xe4, 0xcd, 0xc0, 0x92, 0xe3, 0x12, 0x47, 0xd6, 0x02, 0xdd, 0xe4, 0xfa, - 0x06, 0xba, 0x51, 0xe3, 0xc6, 0x0c, 0x0d, 0x1a, 0x37, 0xe6, 0x03, 0x98, 0xd3, 0xdb, 0x26, 0xc2, - 0xf7, 0x46, 0x51, 0x73, 0x32, 0xbd, 0xa3, 0xe6, 0xf4, 0x0d, 0x12, 0x6a, 0xfc, 0x44, 0x06, 0x0a, - 0x3a, 0xef, 0x27, 0x1d, 0xcf, 0x77, 0xb5, 0xf1, 0x7c, 0x3e, 0x7d, 0x3c, 0x7b, 0x0f, 0xe4, 0xff, - 0x9d, 0x89, 0x37, 0x76, 0xa0, 0x11, 0x34, 0x60, 0xa4, 0xe2, 0xb6, 0x6c, 0xa7, 0xad, 0xa6, 0xfe, - 0x6f, 0x20, 0xc4, 0x14, 0x25, 0x83, 0x05, 0x19, 0xba, 0x04, 0xc3, 0x6b, 0x6e, 0xbb, 0x54, 0x11, - 0x26, 0xc5, 0xc8, 0xa7, 0xed, 0xb6, 0x2d, 0xbb, 0x61, 0xf2, 0x02, 0xb2, 0x0a, 0x50, 0xab, 0x7b, - 0x94, 0xb6, 0x6b, 0xce, 0x77, 0xd3, 0x98, 0xa4, 0xc1, 0x7a, 0xa8, 0xd9, 0xc5, 0x8d, 0x85, 0x3f, - 0x9d, 0x22, 0xa2, 0xe5, 0x3b, 0xdf, 0xad, 0xee, 0xb7, 0x0a, 0x3d, 0xae, 0x2b, 0x11, 0x87, 0x2d, - 0x36, 0x0e, 0x37, 0x3e, 0x8e, 0x75, 0x95, 0x5a, 0x15, 0xf6, 0xf0, 0x8d, 0xd4, 0xe1, 0xf8, 0xc3, - 0x0c, 0x3c, 0xdf, 0x87, 0xe6, 0x29, 0x8c, 0xca, 0x5f, 0x76, 0x87, 0x53, 0x80, 0x88, 0x08, 0x33, - 0x29, 0x3b, 0x8d, 0x80, 0xe7, 0xea, 0x9b, 0x14, 0x99, 0x94, 0x19, 0x40, 0xcb, 0xa4, 0xcc, 0x00, - 0xec, 0x2c, 0x5d, 0xa1, 0xce, 0xee, 0x1e, 0x37, 0x0f, 0x9b, 0xe4, 0x7b, 0xc3, 0x1e, 0x42, 0xd4, - 0xb3, 0x94, 0xe3, 0x18, 0xff, 0x6a, 0x18, 0xce, 0x9b, 0x74, 0xd7, 0x61, 0xf7, 0x92, 0x4d, 0xdf, - 0x69, 0xef, 0x6a, 0x71, 0x77, 0x8c, 0xd8, 0xca, 0x15, 0x49, 0x2a, 0x18, 0x24, 0x9c, 0x89, 0x57, - 0x21, 0xcf, 0xc4, 0x10, 0x65, 0xf1, 0xe2, 0x1b, 0x17, 0x13, 0x56, 0x44, 0x60, 0x67, 0x59, 0x4c, - 0x5e, 0x13, 0x62, 0x92, 0x92, 0x46, 0x88, 0x89, 0x49, 0xdf, 0x39, 0x2a, 0x42, 0xed, 0xd0, 0x0f, - 0x28, 0x5e, 0x91, 0x85, 0xa8, 0x14, 0xde, 0x65, 0x86, 0x7a, 0xdc, 0x65, 0xee, 0xc3, 0x5c, 0xa9, - 0xc1, 0x4f, 0x47, 0xbb, 0xb9, 0xee, 0x39, 0xed, 0xba, 0xd3, 0xb1, 0x9b, 0xf2, 0x7e, 0x8e, 0xbd, - 0x6c, 0x87, 0xe5, 0x56, 0x27, 0x44, 0x30, 0x53, 0xc9, 0x58, 0x33, 0x2a, 0x6b, 0x35, 0x0c, 0x4f, - 0x23, 0x9e, 0x2f, 0xb1, 0x19, 0x8d, 0xb6, 0x8f, 0xad, 0xf0, 0xcd, 0xb0, 0x18, 0x6f, 0x51, 0x68, - 0x10, 0xb0, 0xb1, 0x5a, 0x8b, 0x5c, 0xaa, 0x79, 0x96, 0x03, 0x6e, 0x58, 0x10, 0x34, 0x7d, 0x34, - 0xc5, 0xd4, 0xf0, 0x22, 0xba, 0x5a, 0x6d, 0x85, 0xd1, 0xe5, 0x13, 0x74, 0xbe, 0xbf, 0xa7, 0xd2, - 0x71, 0x3c, 0x72, 0x9d, 0x4d, 0x85, 0x96, 0x1b, 0x50, 0x9c, 0xc2, 0x63, 0xd1, 0x9d, 0xcb, 0x43, - 0x28, 0xbf, 0x73, 0x29, 0x28, 0xe4, 0x1d, 0x98, 0x5d, 0x2e, 0x2f, 0x4a, 0xa5, 0x73, 0xc5, 0xad, - 0x77, 0xd1, 0x10, 0x00, 0xb0, 0x3e, 0x1c, 0x43, 0x5a, 0x5f, 0x64, 0xbb, 0x49, 0x1a, 0x1a, 0xb9, - 0x0c, 0xa3, 0xd5, 0x0a, 0xef, 0xfb, 0x71, 0x35, 0x95, 0x97, 0xb0, 0xcc, 0x92, 0x85, 0xe4, 0x41, - 0x74, 0x29, 0x98, 0x38, 0x51, 0x7a, 0x3f, 0x3f, 0xc0, 0x85, 0xe0, 0x2d, 0x98, 0x5c, 0x72, 0x83, - 0x6a, 0xdb, 0x0f, 0xec, 0x76, 0x9d, 0x56, 0x2b, 0x6a, 0x5c, 0xed, 0x6d, 0x37, 0xb0, 0x1c, 0x51, - 0xc2, 0xbe, 0x5c, 0xc7, 0x24, 0x9f, 0x43, 0xd2, 0x3b, 0xb4, 0x4d, 0xbd, 0x28, 0x9e, 0xf6, 0x30, - 0xef, 0x5b, 0x46, 0xba, 0x1b, 0x96, 0x98, 0x3a, 0xa2, 0x48, 0x33, 0xc6, 0x93, 0x83, 0x96, 0xdd, - 0x06, 0xf5, 0xf9, 0x6e, 0xf1, 0x09, 0x4a, 0x33, 0xa6, 0xb4, 0xad, 0xcf, 0x0e, 0xfa, 0xef, 0x63, - 0x9a, 0xb1, 0x04, 0x2e, 0xf9, 0x1c, 0x0c, 0xe3, 0x4f, 0x21, 0xdd, 0xce, 0xa6, 0xb0, 0x8d, 0x24, - 0xdb, 0x3a, 0xc3, 0x34, 0x39, 0x01, 0xa9, 0xc2, 0xa8, 0xb8, 0x58, 0x9d, 0x26, 0x59, 0x8e, 0xb8, - 0xa1, 0xf1, 0x99, 0x21, 0xe8, 0x8d, 0x06, 0x4c, 0xa8, 0x15, 0xb2, 0x15, 0xb1, 0x62, 0xfb, 0x7b, - 0xb4, 0xc1, 0x7e, 0x89, 0x3c, 0x77, 0xb8, 0x22, 0xf6, 0x10, 0x6a, 0xb1, 0xef, 0x30, 0x15, 0x14, - 0x76, 0xa6, 0x56, 0xfd, 0x4d, 0x5f, 0x7c, 0x8a, 0x50, 0xb5, 0x38, 0xa8, 0xb6, 0x6b, 0x98, 0xa2, - 0xc8, 0xf8, 0x2e, 0x98, 0x5b, 0xeb, 0x36, 0x9b, 0xf6, 0x76, 0x93, 0xca, 0x3c, 0x28, 0x98, 0x70, - 0x7c, 0x09, 0x86, 0x6b, 0x4a, 0x0a, 0xf3, 0x30, 0x17, 0xa5, 0x82, 0x83, 0x46, 0xb0, 0x19, 0x0c, - 0x15, 0x14, 0x4b, 0x5e, 0xce, 0x49, 0x8d, 0xdf, 0xcf, 0xc0, 0x9c, 0x34, 0x17, 0xf0, 0xec, 0xfa, - 0x7e, 0x98, 0xc7, 0xfe, 0xb2, 0x36, 0xd7, 0x70, 0xc2, 0xc6, 0xa6, 0x11, 0x9f, 0x75, 0x77, 0xe5, - 0x47, 0xe8, 0x02, 0x4b, 0xda, 0x07, 0x9f, 0xf4, 0x31, 0xe4, 0x1d, 0x18, 0x17, 0xc7, 0xa3, 0x12, - 0xe0, 0x12, 0xa3, 0x88, 0x89, 0xeb, 0x5e, 0xdc, 0x78, 0x45, 0x45, 0x47, 0x59, 0x4c, 0x6f, 0xca, - 0x93, 0xca, 0x00, 0xe9, 0xb2, 0x98, 0x5e, 0x47, 0x9f, 0xa9, 0xfb, 0x3b, 0xe3, 0xf1, 0xbe, 0x15, - 0x73, 0xf7, 0x96, 0x1a, 0xd2, 0x2e, 0x13, 0xdd, 0x8c, 0xa3, 0x90, 0x76, 0xea, 0xcd, 0x38, 0x44, - 0x0d, 0xc7, 0x24, 0x7b, 0xc2, 0x98, 0xbc, 0x27, 0xc7, 0x24, 0xd7, 0x7b, 0x62, 0xcc, 0xf6, 0x19, - 0x87, 0x5a, 0xb4, 0x42, 0x86, 0x06, 0x52, 0xab, 0x3c, 0x87, 0xb1, 0xfb, 0x39, 0x49, 0x7c, 0x17, - 0x15, 0x9c, 0x54, 0x5d, 0xcd, 0xf0, 0xe0, 0x4c, 0x4f, 0xd8, 0x9a, 0x3f, 0x0f, 0x13, 0xa5, 0x20, - 0xb0, 0xeb, 0x7b, 0xb4, 0x51, 0x61, 0xdb, 0x93, 0x12, 0x7d, 0xcb, 0x16, 0x70, 0xf5, 0x8d, 0x4d, - 0xc5, 0xe5, 0xd1, 0x64, 0x6d, 0x5f, 0x18, 0xd3, 0x86, 0xd1, 0x64, 0x19, 0x44, 0x8f, 0x26, 0xcb, - 0x20, 0xe4, 0x3a, 0x8c, 0x56, 0xdb, 0x8f, 0x1c, 0xd6, 0x27, 0x3c, 0x00, 0x17, 0xea, 0xa6, 0x1c, - 0x0e, 0x52, 0x37, 0x57, 0x81, 0x45, 0xde, 0x52, 0x2e, 0x35, 0x63, 0x91, 0x02, 0x83, 0xab, 0xbc, - 0xc2, 0x08, 0x3b, 0xea, 0x85, 0x25, 0xbc, 0xe5, 0xdc, 0x82, 0x51, 0xa9, 0xc9, 0x84, 0x48, 0x69, - 0x21, 0x28, 0x93, 0x01, 0x2b, 0x24, 0x32, 0xe6, 0x24, 0x57, 0xf2, 0xf5, 0x8d, 0x2b, 0x39, 0xc9, - 0x95, 0x7c, 0x7d, 0x5a, 0x4e, 0x72, 0x25, 0x73, 0x5f, 0xa8, 0x04, 0x9a, 0x38, 0x51, 0x09, 0xf4, - 0x10, 0x26, 0xd6, 0x6d, 0x2f, 0x70, 0x98, 0x8c, 0xd2, 0x0e, 0xfc, 0xf9, 0x49, 0x4d, 0x6f, 0xaa, - 0x14, 0x2d, 0x5d, 0x94, 0x79, 0xb1, 0x3b, 0x0a, 0xbe, 0x9e, 0xc0, 0x39, 0x82, 0xa7, 0x9b, 0xd2, - 0x4e, 0x3d, 0x89, 0x29, 0x2d, 0x76, 0x2a, 0xea, 0xca, 0xa6, 0x23, 0x8d, 0x0c, 0x5e, 0x5a, 0x62, - 0x0a, 0xb3, 0x10, 0x91, 0x7c, 0x05, 0x26, 0xd8, 0xdf, 0xeb, 0x6e, 0xd3, 0xa9, 0x3b, 0xd4, 0x9f, - 0x2f, 0x60, 0xe3, 0x2e, 0xa6, 0xae, 0x7e, 0x44, 0x3a, 0xac, 0xd1, 0x80, 0x2f, 0x60, 0x64, 0x1c, - 0x57, 0x82, 0x6b, 0xdc, 0xc8, 0xfb, 0x30, 0xc1, 0x66, 0xdf, 0xb6, 0xed, 0x73, 0xd1, 0x74, 0x26, - 0x32, 0x86, 0x6e, 0x08, 0x78, 0x22, 0xa0, 0xb3, 0x4a, 0xc0, 0x8e, 0xf9, 0x52, 0x87, 0x6f, 0x90, - 0x44, 0x99, 0xed, 0x9d, 0xc4, 0xe6, 0x28, 0xd1, 0xc8, 0x17, 0x60, 0xa2, 0xd4, 0xe9, 0x44, 0x3b, - 0xce, 0xac, 0xa2, 0x08, 0xeb, 0x74, 0xac, 0xd4, 0x5d, 0x47, 0xa3, 0x88, 0x6f, 0xcc, 0x73, 0xa7, - 0xda, 0x98, 0xc9, 0x1b, 0xa1, 0xb4, 0x7e, 0x26, 0xd2, 0xea, 0x8a, 0x8b, 0xa3, 0x26, 0xfa, 0x73, - 0xc1, 0xbd, 0x0c, 0x93, 0x5c, 0xcd, 0x29, 0xa5, 0x99, 0xb3, 0x89, 0xd5, 0x93, 0x22, 0xd4, 0xe8, - 0x34, 0x64, 0x19, 0xa6, 0xb8, 0xb7, 0x77, 0x53, 0x44, 0xda, 0x9e, 0x3f, 0x87, 0xab, 0x16, 0xb9, - 0x70, 0x27, 0xf1, 0x26, 0x26, 0x60, 0xb1, 0x35, 0x2e, 0x31, 0x22, 0xe3, 0x4f, 0x33, 0x70, 0xae, - 0xc7, 0x88, 0x87, 0x71, 0x98, 0x33, 0xfd, 0xe3, 0x30, 0xb3, 0x9d, 0x43, 0xd7, 0x8a, 0x60, 0xfb, - 0x85, 0x94, 0xa5, 0x8e, 0x97, 0x94, 0xb7, 0x5c, 0x20, 0x22, 0xc7, 0x91, 0xa8, 0xfa, 0xae, 0x8b, - 0xaa, 0xd9, 0x5c, 0xf2, 0x10, 0x12, 0x78, 0xfc, 0xa3, 0x96, 0x8c, 0xe3, 0xa3, 0xe2, 0x45, 0x91, - 0x42, 0x29, 0x1c, 0xd6, 0x0f, 0x5d, 0x6d, 0x05, 0xa7, 0xb0, 0x36, 0x8e, 0x32, 0x30, 0xae, 0xac, - 0x43, 0x72, 0x49, 0xf1, 0x42, 0x2e, 0xf0, 0x24, 0x5c, 0x0a, 0x87, 0x2c, 0x3f, 0x89, 0x70, 0x51, - 0x65, 0x4f, 0x56, 0x40, 0xdf, 0x67, 0xa2, 0x90, 0x12, 0xab, 0xba, 0xa5, 0x69, 0x8b, 0x4d, 0x2c, - 0xc7, 0x74, 0xfe, 0xb6, 0x1f, 0x94, 0xea, 0x81, 0xf3, 0x88, 0x0e, 0x70, 0xe8, 0x44, 0xe9, 0xfc, - 0x6d, 0x3f, 0xb0, 0x6c, 0x24, 0x4b, 0xa4, 0xf3, 0x0f, 0x19, 0x1a, 0x3f, 0x90, 0x01, 0xd8, 0xac, - 0x96, 0x31, 0xd8, 0xfc, 0x93, 0x0a, 0x05, 0xe9, 0x01, 0x7c, 0x25, 0xf7, 0x3e, 0xe2, 0xc0, 0xff, - 0x9c, 0x81, 0x29, 0x1d, 0x8d, 0xbc, 0x07, 0xd3, 0xb5, 0xba, 0xe7, 0x36, 0x9b, 0xdb, 0x76, 0x7d, - 0x7f, 0xd5, 0x69, 0x53, 0x1e, 0x3a, 0x75, 0x98, 0x9f, 0x45, 0x7e, 0x58, 0x64, 0x35, 0x59, 0x99, - 0x19, 0x47, 0x26, 0x3f, 0x98, 0x81, 0xc9, 0xda, 0x9e, 0x7b, 0x10, 0x46, 0x3b, 0x15, 0x03, 0xf2, - 0x55, 0xb6, 0xb6, 0xfd, 0x3d, 0xf7, 0x20, 0xca, 0xe0, 0xa9, 0xd9, 0x8a, 0xbe, 0x3b, 0xd8, 0x33, - 0x7e, 0xdd, 0xc5, 0x9b, 0x4c, 0xe0, 0x5f, 0xd3, 0x2a, 0x31, 0xf5, 0x3a, 0x8d, 0xbf, 0xc8, 0xc0, - 0x38, 0xde, 0x79, 0x9a, 0x4d, 0x94, 0xb9, 0x3e, 0x49, 0xe9, 0x20, 0xc3, 0x76, 0xf5, 0x19, 0xd8, - 0x37, 0x61, 0x3a, 0x86, 0x46, 0x0c, 0x18, 0xa9, 0x61, 0x80, 0x01, 0x55, 0x41, 0xc1, 0x43, 0x0e, - 0x98, 0xa2, 0xc4, 0x58, 0x56, 0xc8, 0x1e, 0xde, 0xc0, 0x67, 0xdd, 0x45, 0x00, 0x47, 0x82, 0xe4, - 0xcd, 0x86, 0xc4, 0xbf, 0xe4, 0xe1, 0x0d, 0x53, 0xc1, 0x32, 0xd6, 0x60, 0xa4, 0xe6, 0x7a, 0xc1, - 0xd2, 0x21, 0xbf, 0x4c, 0x54, 0xa8, 0x5f, 0x57, 0xdf, 0x6d, 0x1d, 0x7c, 0x2b, 0xa9, 0x9b, 0xa2, - 0x88, 0x14, 0x61, 0xf8, 0xb6, 0x43, 0x9b, 0x0d, 0xd5, 0x9e, 0x77, 0x87, 0x01, 0x4c, 0x0e, 0x67, - 0x17, 0xae, 0xb3, 0x51, 0x4e, 0x96, 0xc8, 0x70, 0xf8, 0x49, 0xd7, 0x4d, 0x59, 0xeb, 0xdf, 0x17, - 0xc3, 0x3c, 0x08, 0xc9, 0x9a, 0xfa, 0x74, 0xf5, 0x3f, 0xcc, 0xc0, 0x42, 0x6f, 0x12, 0xd5, 0x16, - 0x39, 0xd3, 0xc7, 0x16, 0xf9, 0x95, 0xf8, 0x3b, 0x23, 0xa2, 0x89, 0x77, 0xc6, 0xe8, 0x75, 0xb1, - 0x82, 0xa6, 0xe0, 0x75, 0x2a, 0x13, 0xb1, 0x5c, 0xea, 0xf3, 0xcd, 0x88, 0xc8, 0x87, 0x39, 0x40, - 0x1a, 0x53, 0xd0, 0x1a, 0xbf, 0x3d, 0x04, 0xe7, 0x7b, 0x52, 0x90, 0x15, 0x25, 0xbd, 0xd3, 0x54, - 0x98, 0x58, 0xa6, 0x27, 0xfe, 0x35, 0xfc, 0x17, 0xad, 0xfd, 0xe2, 0xde, 0x6e, 0x0f, 0xc2, 0xb4, - 0x3e, 0x59, 0xe4, 0xf5, 0xa9, 0x13, 0x79, 0x71, 0x74, 0x64, 0x06, 0xc9, 0x0c, 0x3f, 0xe8, 0x17, - 0x49, 0x03, 0xdb, 0x69, 0xfa, 0xea, 0xb2, 0x6b, 0x70, 0x90, 0x29, 0xcb, 0x22, 0x03, 0xf1, 0xa1, - 0x74, 0x03, 0x71, 0xe3, 0x5f, 0x65, 0x60, 0x2c, 0xfc, 0x6c, 0xb2, 0x00, 0x67, 0x37, 0xcc, 0x52, - 0x79, 0xd9, 0xda, 0xf8, 0x60, 0x7d, 0xd9, 0xda, 0x5c, 0xab, 0xad, 0x2f, 0x97, 0xab, 0xb7, 0xab, - 0xcb, 0x95, 0xc2, 0x73, 0x64, 0x06, 0x26, 0x37, 0xd7, 0xee, 0xad, 0x3d, 0xd8, 0x5a, 0xb3, 0x96, - 0x4d, 0xf3, 0x81, 0x59, 0xc8, 0x90, 0x49, 0x18, 0x33, 0x97, 0x4a, 0x65, 0x6b, 0xed, 0x41, 0x65, - 0xb9, 0x90, 0x25, 0x05, 0x98, 0x28, 0x3f, 0x58, 0x5b, 0x5b, 0x2e, 0x6f, 0x54, 0x1f, 0x56, 0x37, - 0x3e, 0x28, 0xe4, 0x08, 0x81, 0x29, 0x44, 0x58, 0x37, 0xab, 0x6b, 0xe5, 0xea, 0x7a, 0x69, 0xb5, - 0x30, 0xc4, 0x60, 0x0c, 0x5f, 0x81, 0x0d, 0x87, 0x8c, 0xee, 0x6d, 0x2e, 0x2d, 0x17, 0x46, 0x18, - 0x0a, 0xfb, 0x4b, 0x41, 0x19, 0x65, 0xd5, 0x23, 0x4a, 0xa5, 0xb4, 0x51, 0x5a, 0x2a, 0xd5, 0x96, - 0x0b, 0x79, 0x72, 0x0e, 0x66, 0x35, 0x90, 0xb5, 0xfa, 0xe0, 0x4e, 0x75, 0xad, 0x30, 0x46, 0xe6, - 0xa0, 0x10, 0xc2, 0x2a, 0x4b, 0xd6, 0x66, 0x6d, 0xd9, 0x2c, 0x40, 0x1c, 0xba, 0x56, 0xba, 0xbf, - 0x5c, 0x18, 0x37, 0xde, 0xe5, 0x7e, 0x88, 0xbc, 0xab, 0xc9, 0x59, 0x20, 0xb5, 0x8d, 0xd2, 0xc6, - 0x66, 0x2d, 0xd6, 0xf8, 0x71, 0x18, 0xad, 0x6d, 0x96, 0xcb, 0xcb, 0xb5, 0x5a, 0x21, 0x43, 0x00, - 0x46, 0x6e, 0x97, 0xaa, 0xab, 0xcb, 0x95, 0x42, 0xd6, 0xf8, 0xa9, 0x0c, 0xcc, 0x48, 0x09, 0x50, - 0x3e, 0x1a, 0x3d, 0xe1, 0x5a, 0x7c, 0x4f, 0xbb, 0xd8, 0x4a, 0x27, 0xb1, 0x58, 0x25, 0x7d, 0x96, - 0xe1, 0x2f, 0x64, 0xe0, 0x4c, 0x2a, 0x36, 0xf9, 0x00, 0x0a, 0xf2, 0x0b, 0xee, 0xdb, 0x41, 0x7d, - 0x2f, 0xda, 0xc7, 0x2e, 0xc6, 0x6a, 0x89, 0xa1, 0x71, 0xb5, 0x66, 0x94, 0x70, 0x3a, 0xc1, 0x66, - 0xf0, 0x74, 0x08, 0xc6, 0xb7, 0x32, 0x70, 0xae, 0x47, 0x35, 0xa4, 0x0c, 0x23, 0x61, 0x62, 0x9c, - 0x3e, 0x06, 0x6f, 0x73, 0xdf, 0x3e, 0x2a, 0x0a, 0x44, 0xcc, 0xd0, 0x8b, 0x7f, 0x99, 0x23, 0x61, - 0xa6, 0x1b, 0x4c, 0x37, 0xc3, 0xbb, 0xef, 0x7c, 0xac, 0xe7, 0x45, 0x4d, 0xa5, 0xad, 0xda, 0xd2, - 0xb8, 0xe8, 0xbb, 0x9c, 0x7d, 0xe0, 0x63, 0xbe, 0x19, 0xe3, 0x67, 0x33, 0x4c, 0xb8, 0x8b, 0x23, - 0x32, 0x99, 0xb7, 0xe4, 0xfb, 0xdd, 0x16, 0x35, 0xdd, 0x26, 0x2d, 0x99, 0x6b, 0xe2, 0xd8, 0x40, - 0x69, 0xd5, 0xc6, 0x02, 0xbc, 0x56, 0x58, 0xb6, 0xd7, 0xd6, 0x5e, 0xab, 0x55, 0x1a, 0xf2, 0x16, - 0xc0, 0xf2, 0xe3, 0x80, 0x7a, 0x6d, 0xbb, 0x19, 0xc6, 0x88, 0xe1, 0x91, 0xad, 0x04, 0x54, 0x97, - 0xb7, 0x15, 0x64, 0xe3, 0x6f, 0x66, 0x60, 0x42, 0x5c, 0x9a, 0x4a, 0x4d, 0xea, 0x05, 0x4f, 0x36, - 0xbd, 0xde, 0xd2, 0xa6, 0x57, 0xe8, 0xdf, 0xa1, 0xf0, 0x67, 0xc5, 0xa9, 0x33, 0xeb, 0x9f, 0x65, - 0xa0, 0x10, 0x47, 0x24, 0xef, 0x41, 0xbe, 0x46, 0x1f, 0x51, 0xcf, 0x09, 0x0e, 0xc5, 0x46, 0x29, - 0x53, 0x08, 0x72, 0x1c, 0x51, 0xc6, 0xe7, 0x83, 0x2f, 0x7e, 0x99, 0x21, 0xcd, 0xa0, 0xfb, 0xbd, - 0xa2, 0xf6, 0xc8, 0x3d, 0x2d, 0xb5, 0x87, 0xf1, 0xbf, 0x67, 0xe1, 0xdc, 0x1d, 0x1a, 0xa8, 0x6d, - 0x0a, 0xcd, 0x0b, 0x3e, 0x3d, 0x58, 0xbb, 0x94, 0x96, 0xcc, 0xc3, 0x28, 0x16, 0xc9, 0xf1, 0x35, - 0xe5, 0x4f, 0xb2, 0x14, 0xce, 0xeb, 0x9c, 0x96, 0xa3, 0xac, 0x47, 0xdd, 0xd7, 0x94, 0xac, 0x45, - 0xe1, 0xb4, 0xbe, 0x0c, 0x53, 0x18, 0x96, 0xbf, 0xcb, 0x96, 0x03, 0x6d, 0x08, 0xf5, 0x4f, 0xde, - 0x8c, 0x41, 0xc9, 0x6b, 0x50, 0x60, 0x90, 0x52, 0x7d, 0xbf, 0xed, 0x1e, 0x34, 0x69, 0x63, 0x97, - 0x36, 0xf0, 0x58, 0xcf, 0x9b, 0x09, 0xb8, 0xe4, 0xb9, 0xd9, 0xe6, 0x57, 0x37, 0xda, 0x40, 0x1d, - 0x8d, 0xe0, 0x19, 0x41, 0x17, 0xde, 0x82, 0xf1, 0x8f, 0x98, 0x81, 0xcc, 0xf8, 0xdf, 0x32, 0x30, - 0x87, 0x8d, 0x53, 0x2a, 0x96, 0xd9, 0x61, 0x65, 0x6f, 0x29, 0x49, 0x79, 0x6c, 0x06, 0xd2, 0x97, - 0x42, 0xd8, 0x8b, 0x91, 0x4e, 0x28, 0x3b, 0x80, 0x4e, 0xa8, 0x76, 0x9a, 0x4c, 0xf8, 0x03, 0xaa, - 0xb4, 0xee, 0x0e, 0xe5, 0x73, 0x85, 0xa1, 0x68, 0xc8, 0x8d, 0x1f, 0xcc, 0xc2, 0xa8, 0x49, 0x31, - 0x45, 0x38, 0xb9, 0x0c, 0xa3, 0x6b, 0x6e, 0x40, 0xfd, 0xfb, 0x5a, 0x3e, 0xf8, 0x36, 0x03, 0x59, - 0xad, 0x86, 0x29, 0x0b, 0xd9, 0x84, 0x5f, 0xf7, 0xdc, 0x46, 0xb7, 0x1e, 0xa8, 0x13, 0xbe, 0xc3, - 0x41, 0xa6, 0x2c, 0x23, 0xaf, 0xc3, 0x98, 0xe0, 0x1c, 0x3e, 0xea, 0xa2, 0xed, 0xb2, 0x47, 0xc3, - 0x14, 0xf3, 0x11, 0x02, 0xca, 0xb4, 0x5c, 0xc0, 0x18, 0x52, 0x64, 0xda, 0x84, 0xcc, 0x20, 0x45, - 0xf5, 0xe1, 0x3e, 0xa2, 0xfa, 0xa7, 0x61, 0xa4, 0xe4, 0xfb, 0x34, 0x90, 0x51, 0x14, 0x26, 0xc2, - 0xb0, 0x71, 0x3e, 0x0d, 0x38, 0x63, 0x1b, 0xcb, 0x4d, 0x81, 0x67, 0xfc, 0xcb, 0x2c, 0x0c, 0xe3, - 0x9f, 0xf8, 0x64, 0xea, 0xd5, 0xf7, 0xb4, 0x27, 0x53, 0xaf, 0xbe, 0x67, 0x22, 0x94, 0xdc, 0x40, - 0x4d, 0x85, 0xcc, 0x1f, 0x25, 0x5a, 0x8f, 0x2a, 0xf8, 0x46, 0x04, 0x36, 0x55, 0x9c, 0xf0, 0x85, - 0x3f, 0x97, 0x1a, 0x3b, 0xe5, 0x2c, 0x64, 0x1f, 0xd4, 0x44, 0x8b, 0x31, 0x22, 0x97, 0xeb, 0x9b, - 0xd9, 0x07, 0x35, 0xec, 0x8d, 0x95, 0xd2, 0xe2, 0x9b, 0xb7, 0x44, 0x43, 0x79, 0x6f, 0xec, 0xd9, - 0x8b, 0x6f, 0xde, 0x32, 0x45, 0x09, 0xeb, 0x5f, 0xfc, 0x66, 0x7c, 0x78, 0xe5, 0x3e, 0xff, 0xd8, - 0xbf, 0xd8, 0x36, 0x7c, 0x64, 0x35, 0x23, 0x04, 0xb2, 0x08, 0xe3, 0x22, 0xd6, 0x04, 0xe2, 0x2b, - 0xb1, 0x20, 0x44, 0x2c, 0x0a, 0x4e, 0xa1, 0x22, 0xf1, 0x27, 0x38, 0x31, 0x40, 0x32, 0xcb, 0xad, - 0x78, 0x82, 0x93, 0x43, 0xe8, 0x9b, 0x0a, 0x0a, 0xfb, 0x24, 0xfe, 0x86, 0x17, 0xf9, 0xf2, 0x4f, - 0x29, 0x41, 0x0b, 0x30, 0xcd, 0x42, 0x88, 0x60, 0xfc, 0x4a, 0x16, 0xf2, 0xeb, 0xcd, 0xee, 0xae, - 0xd3, 0x7e, 0x78, 0x83, 0x10, 0xc0, 0x6b, 0x9c, 0xcc, 0xc3, 0xc1, 0xfe, 0x26, 0xe7, 0x21, 0x2f, - 0x6f, 0x6e, 0x72, 0x43, 0xf2, 0xc5, 0xad, 0x6d, 0x1e, 0xe4, 0xb8, 0x8b, 0xd0, 0x6b, 0xf2, 0x27, - 0xb9, 0x01, 0xe1, 0xfd, 0xab, 0xd7, 0x45, 0x6d, 0x88, 0x2d, 0x16, 0x33, 0x44, 0x23, 0x6f, 0x00, - 0x1e, 0x12, 0xe2, 0xf2, 0x20, 0x15, 0xda, 0xfc, 0xd3, 0x84, 0x9c, 0xc2, 0x49, 0x10, 0x8d, 0xdc, - 0x04, 0x31, 0x31, 0x45, 0x36, 0xf5, 0x33, 0x3a, 0x01, 0xcf, 0x4f, 0x29, 0x49, 0x04, 0x2a, 0x79, - 0x07, 0xc6, 0xeb, 0x1e, 0xc5, 0x57, 0x47, 0xbb, 0x19, 0x25, 0x49, 0x57, 0x29, 0xcb, 0x51, 0xf9, - 0xc3, 0x1b, 0xa6, 0x8a, 0x6e, 0xfc, 0x4a, 0x1e, 0x26, 0xd4, 0xef, 0x21, 0x26, 0xcc, 0xfa, 0x4d, - 0x76, 0x77, 0x17, 0xc6, 0x66, 0x1d, 0x2c, 0x14, 0xc7, 0xe9, 0x25, 0xfd, 0x83, 0x18, 0x1e, 0xb7, - 0x3c, 0x93, 0x41, 0x32, 0x56, 0x9e, 0x33, 0x67, 0xfc, 0x08, 0xcc, 0xf1, 0x48, 0x09, 0xf2, 0x6e, - 0xc7, 0xdf, 0xa5, 0x6d, 0x47, 0xbe, 0xb7, 0xbc, 0xa4, 0x31, 0x7a, 0x20, 0x0a, 0x13, 0xbc, 0x42, - 0x32, 0xf2, 0x26, 0x8c, 0xb8, 0x1d, 0xda, 0xb6, 0x1d, 0x71, 0xc6, 0x3d, 0x1f, 0x63, 0x40, 0xdb, - 0xa5, 0xaa, 0x42, 0x28, 0x90, 0xc9, 0x75, 0x18, 0x72, 0xf7, 0xc3, 0xf1, 0x3a, 0xaf, 0x13, 0xed, - 0x07, 0xb6, 0x42, 0x82, 0x88, 0x8c, 0xe0, 0x43, 0xbb, 0xb5, 0x23, 0x46, 0x4c, 0x27, 0xb8, 0x6b, - 0xb7, 0x76, 0x54, 0x02, 0x86, 0x48, 0xde, 0x07, 0xe8, 0xd8, 0xbb, 0xd4, 0xb3, 0x1a, 0xdd, 0xe0, - 0x50, 0x8c, 0xdb, 0x45, 0x8d, 0x6c, 0x9d, 0x15, 0x57, 0xba, 0xc1, 0xa1, 0x42, 0x3b, 0xd6, 0x91, - 0x40, 0x52, 0x02, 0x68, 0xd9, 0x41, 0x40, 0xbd, 0x96, 0x2b, 0xac, 0xfd, 0xa2, 0x20, 0x88, 0x9c, - 0xc1, 0xfd, 0xb0, 0x58, 0xe1, 0xa0, 0x10, 0xe1, 0x47, 0x3b, 0x9e, 0x2d, 0x72, 0xda, 0xc7, 0x3e, - 0xda, 0xf1, 0xb4, 0x56, 0x32, 0x44, 0xf2, 0x39, 0x18, 0x6d, 0x38, 0x7e, 0xdd, 0xf5, 0x1a, 0x22, - 0x7a, 0xca, 0x0b, 0x1a, 0x4d, 0x85, 0x97, 0x29, 0x64, 0x12, 0x9d, 0x7d, 0xad, 0x08, 0x82, 0xba, - 0xe6, 0x1e, 0xa0, 0x9a, 0x3f, 0xfe, 0xb5, 0xb5, 0xb0, 0x58, 0xfd, 0xda, 0x88, 0x88, 0x0d, 0xe5, - 0xae, 0x13, 0x34, 0xed, 0x6d, 0xf1, 0xce, 0xad, 0x0f, 0xe5, 0x1d, 0x2c, 0x52, 0x87, 0x92, 0x23, - 0x93, 0xb7, 0x20, 0x4f, 0xdb, 0x81, 0x67, 0x5b, 0x4e, 0x43, 0x38, 0x55, 0xea, 0x1f, 0xcd, 0x0e, - 0x60, 0xbb, 0x5a, 0x51, 0x3f, 0x1a, 0xf1, 0xab, 0x0d, 0xd6, 0x3f, 0x7e, 0xdd, 0x69, 0x09, 0x5f, - 0x48, 0xbd, 0x7f, 0x6a, 0xe5, 0xea, 0x7d, 0xb5, 0x7f, 0x18, 0x22, 0x79, 0x0f, 0x46, 0xd9, 0xfa, - 0x6d, 0xb8, 0xbb, 0x22, 0x20, 0x85, 0xa1, 0xf7, 0x0f, 0x2f, 0x4b, 0x4c, 0x57, 0x49, 0xc4, 0x16, - 0xb2, 0x7d, 0xe0, 0x5b, 0x4e, 0x5d, 0x04, 0x99, 0xd0, 0x97, 0x63, 0x69, 0xab, 0x56, 0x2d, 0x2b, - 0x64, 0xc3, 0xf6, 0x81, 0x5f, 0xad, 0x93, 0x45, 0x18, 0xc6, 0x14, 0x15, 0x22, 0x10, 0xa6, 0x4e, - 0x83, 0xc9, 0x29, 0x54, 0x1a, 0x44, 0x65, 0x03, 0xd9, 0xf2, 0xd1, 0xbd, 0x44, 0x24, 0x8a, 0xd0, - 0xfb, 0xe4, 0x7e, 0x0d, 0x7d, 0x4e, 0xd4, 0x4f, 0x14, 0xe8, 0xe4, 0x22, 0x40, 0xf4, 0x8a, 0xcf, - 0xdf, 0x5c, 0x4c, 0x05, 0xf2, 0xf9, 0xa1, 0xff, 0xeb, 0x97, 0x8a, 0x99, 0x25, 0x80, 0xbc, 0x8c, - 0x90, 0x63, 0xac, 0xc2, 0xf9, 0x9e, 0xeb, 0x9e, 0x5c, 0x85, 0xc2, 0x8e, 0x2d, 0xb4, 0x7e, 0xf5, - 0x3d, 0xbb, 0xdd, 0xa6, 0x4d, 0xb1, 0xe3, 0x4e, 0x4b, 0x78, 0x99, 0x83, 0x39, 0x67, 0xe3, 0x7d, - 0x98, 0x4b, 0x1b, 0x70, 0xf2, 0x22, 0x4c, 0xa8, 0xc1, 0x80, 0x04, 0x93, 0x71, 0xbb, 0xe3, 0xc8, - 0x70, 0x40, 0x82, 0xc1, 0x6f, 0x65, 0xe0, 0x85, 0x7e, 0xdb, 0x07, 0x59, 0x80, 0x7c, 0xc7, 0x73, - 0x5c, 0x14, 0x53, 0x45, 0xb6, 0x05, 0xf9, 0x1b, 0x13, 0x29, 0xa0, 0x3c, 0x15, 0xd8, 0xbb, 0xff, - 0x86, 0xbd, 0x67, 0x89, 0x71, 0x23, 0xb9, 0x4e, 0x4d, 0x72, 0x66, 0x38, 0x8f, 0xf3, 0xe9, 0x29, - 0x7d, 0x66, 0x56, 0xdf, 0x55, 0xaf, 0x24, 0x4b, 0x5c, 0xef, 0xda, 0xd2, 0x66, 0xbd, 0xbb, 0xb6, - 0xd7, 0x76, 0x0f, 0xa7, 0x67, 0x48, 0x89, 0x3f, 0x77, 0x93, 0x23, 0xcb, 0xb2, 0xdd, 0x6e, 0x91, - 0x3d, 0x33, 0x6d, 0x73, 0xd8, 0x34, 0x9b, 0x5c, 0x59, 0x46, 0x80, 0xd8, 0x08, 0x60, 0x03, 0xf9, - 0x39, 0x71, 0x12, 0x64, 0x91, 0x8b, 0x0f, 0x31, 0x82, 0x1c, 0x72, 0x0d, 0x12, 0x24, 0xb9, 0xf8, - 0x66, 0xc0, 0x30, 0x60, 0x20, 0x37, 0x27, 0x58, 0x24, 0x0b, 0x24, 0x40, 0x3e, 0xb7, 0x20, 0x39, - 0xf8, 0x14, 0xd4, 0xab, 0xaa, 0xee, 0xea, 0x0f, 0xa9, 0x91, 0x77, 0x9d, 0xc4, 0x80, 0x4f, 0x33, - 0x7c, 0xf5, 0xde, 0xeb, 0xfa, 0xd7, 0xab, 0x57, 0xef, 0xc3, 0x1d, 0x3c, 0xcc, 0x65, 0x84, 0x74, - 0x9c, 0xc3, 0x80, 0xbc, 0x08, 0x1b, 0x7d, 0xf7, 0xc0, 0x99, 0x0e, 0x26, 0x76, 0xd0, 0x3b, 0x72, - 0xfb, 0xe8, 0x82, 0x85, 0x86, 0x7b, 0xa6, 0xca, 0x0b, 0x2c, 0x01, 0x4f, 0xd5, 0x78, 0x61, 0x46, - 0x8d, 0xef, 0x16, 0x8a, 0x8a, 0x9a, 0x33, 0xd1, 0x52, 0x4a, 0xfb, 0x7a, 0x0e, 0xb6, 0x66, 0xad, - 0x17, 0xf2, 0x66, 0x56, 0x1f, 0xb0, 0x87, 0x0b, 0x19, 0x2e, 0x3f, 0x5c, 0x48, 0x5f, 0x23, 0x77, - 0x20, 0x74, 0xa0, 0x7a, 0x5a, 0x30, 0x04, 0x01, 0xa3, 0x34, 0x23, 0x27, 0x08, 0x1e, 0xd3, 0x2d, - 0x21, 0x2f, 0x05, 0xd4, 0xe5, 0x30, 0x99, 0x46, 0xc0, 0xc8, 0x6b, 0x00, 0xbd, 0x81, 0x1f, 0xb8, - 0x68, 0x1f, 0xc0, 0x65, 0x0d, 0x66, 0x16, 0x1e, 0x42, 0xe5, 0x07, 0x61, 0x84, 0x56, 0xfc, 0xbe, - 0xcb, 0x07, 0xd0, 0x81, 0xcd, 0x19, 0x1b, 0x24, 0x1d, 0x9e, 0x28, 0x3b, 0xbd, 0xc8, 0x75, 0x35, - 0x0d, 0x73, 0xd4, 0x27, 0x7b, 0x3c, 0x37, 0x6b, 0x8e, 0x3c, 0x01, 0x92, 0xde, 0x05, 0x29, 0x77, - 0x6e, 0xdc, 0x3c, 0x1d, 0x87, 0xdc, 0x19, 0xa4, 0x3b, 0x1e, 0x90, 0x2b, 0x50, 0x12, 0xb9, 0x2c, - 0xa9, 0x2c, 0xcf, 0x98, 0x03, 0x07, 0xdd, 0x73, 0x71, 0xf2, 0x60, 0xc4, 0x54, 0x74, 0x93, 0xe3, - 0x52, 0xc2, 0x32, 0x42, 0x3a, 0x4f, 0x46, 0xa2, 0x75, 0x17, 0xc5, 0xfc, 0x8e, 0x9f, 0x4d, 0xbc, - 0xf4, 0x0f, 0x15, 0x31, 0xfc, 0xe9, 0xcd, 0xfd, 0x69, 0xf5, 0x23, 0x80, 0x5e, 0x4a, 0xbc, 0x62, - 0xf8, 0x3f, 0x95, 0x5a, 0xc4, 0xaa, 0xe3, 0x52, 0x0b, 0xff, 0x49, 0x6e, 0xc0, 0xfa, 0x98, 0xd9, - 0xb1, 0x4e, 0x7c, 0xde, 0x9f, 0x2c, 0x6f, 0xc8, 0x2a, 0x03, 0x77, 0x7c, 0xec, 0x53, 0x5e, 0xaf, - 0xbb, 0x61, 0x87, 0x49, 0x67, 0x1d, 0x79, 0x19, 0x96, 0xe9, 0x59, 0x87, 0x91, 0x76, 0x12, 0xee, - 0x11, 0x88, 0x87, 0x92, 0x83, 0x59, 0xfc, 0x12, 0xff, 0x9f, 0xf3, 0x7a, 0x3b, 0x27, 0x98, 0xc9, - 0x27, 0x2d, 0xd9, 0x84, 0x25, 0x7f, 0x7c, 0x28, 0x35, 0x6d, 0xd1, 0x1f, 0x1f, 0xd2, 0x76, 0xdd, - 0x04, 0x95, 0x79, 0xeb, 0xb0, 0xa8, 0x09, 0xc1, 0x93, 0x21, 0xbb, 0x8a, 0x17, 0xcd, 0x35, 0x06, - 0xc7, 0x84, 0xfd, 0x4f, 0x86, 0x3d, 0x8a, 0x19, 0x04, 0xbe, 0x2d, 0x07, 0xd8, 0xe2, 0xcd, 0x5e, - 0x0b, 0x02, 0x3f, 0x8a, 0xb4, 0xd5, 0x27, 0xdb, 0xb0, 0x4a, 0xf9, 0x84, 0x61, 0xbe, 0xb8, 0x20, - 0x70, 0x29, 0x2d, 0x08, 0x3c, 0x19, 0xf6, 0x44, 0x15, 0xcd, 0x95, 0x40, 0xfa, 0x45, 0xee, 0x81, - 0x2a, 0x49, 0x4c, 0xe8, 0xbe, 0x99, 0xb0, 0xa9, 0x8e, 0xd8, 0x48, 0x92, 0x56, 0x6d, 0x78, 0xe0, - 0x9b, 0xeb, 0xbd, 0x38, 0x80, 0x77, 0xcd, 0x77, 0x15, 0xb1, 0x97, 0x66, 0x10, 0x11, 0x0d, 0x56, - 0x8f, 0x9c, 0xc0, 0x0e, 0x82, 0x63, 0x66, 0x23, 0xc6, 0x03, 0x0b, 0x97, 0x8e, 0x9c, 0xc0, 0x0a, - 0x8e, 0x45, 0xe2, 0x92, 0xb3, 0x14, 0xc7, 0x77, 0xa6, 0x93, 0x23, 0x5b, 0x96, 0xff, 0x58, 0x8f, - 0x9d, 0x3e, 0x72, 0x82, 0x16, 0x2d, 0x93, 0x78, 0x93, 0x6b, 0xb0, 0x86, 0x7c, 0x7b, 0x9e, 0x60, - 0x8c, 0x91, 0x2f, 0xcc, 0x15, 0xca, 0xb8, 0xe7, 0x31, 0xce, 0xbc, 0x86, 0xff, 0x9a, 0x83, 0x73, - 0xd9, 0xbd, 0x83, 0xd3, 0x93, 0xf6, 0x29, 0xfa, 0xe8, 0xf1, 0xba, 0x2d, 0x53, 0x08, 0x8b, 0x5a, - 0x92, 0x35, 0x38, 0xb9, 0xcc, 0xc1, 0x29, 0xc3, 0x06, 0x32, 0xe2, 0x92, 0xe6, 0xc0, 0x0b, 0x26, - 0x3c, 0x18, 0x87, 0xb9, 0x4e, 0x0b, 0xd8, 0x7e, 0x5e, 0xa7, 0x60, 0x72, 0x1d, 0xd6, 0xc4, 0x8e, - 0xec, 0x3f, 0x1e, 0xd2, 0x0f, 0xb3, 0xed, 0x78, 0x95, 0x43, 0x5b, 0x08, 0x24, 0x67, 0x61, 0xd1, - 0x19, 0x8d, 0xe8, 0x27, 0xd9, 0x2e, 0xbc, 0xe0, 0x8c, 0x46, 0x2c, 0xb9, 0x0e, 0x7a, 0x24, 0xda, - 0x07, 0x68, 0x25, 0xc4, 0x4d, 0x12, 0xcd, 0x15, 0x04, 0x32, 0xcb, 0xa1, 0x80, 0xae, 0x7b, 0x4a, - 0x2b, 0x50, 0x96, 0x10, 0x05, 0x9c, 0x51, 0x88, 0xf0, 0x1c, 0x14, 0xc5, 0x7b, 0x35, 0x73, 0xac, - 0x30, 0x97, 0x1c, 0xfe, 0x56, 0xfd, 0x2a, 0x6c, 0xf6, 0xbd, 0x00, 0x27, 0x2f, 0x6b, 0xd2, 0x68, - 0xc4, 0x7d, 0x20, 0x59, 0x90, 0x5e, 0xf3, 0x0c, 0x2f, 0xa6, 0x3d, 0xa9, 0x8f, 0x46, 0xcc, 0x13, - 0x92, 0xf7, 0xf5, 0xeb, 0xb0, 0xce, 0x25, 0x2e, 0x7e, 0x44, 0x62, 0x5d, 0xf8, 0x02, 0xa6, 0x57, - 0x21, 0x9e, 0xce, 0x08, 0x38, 0xa8, 0xd6, 0x17, 0x94, 0xff, 0xa0, 0xc0, 0xd9, 0x4c, 0x91, 0x8d, - 0x7c, 0x11, 0x98, 0xcb, 0xd7, 0xc4, 0xb7, 0xc7, 0x6e, 0xcf, 0x1b, 0x79, 0x18, 0x43, 0x83, 0xa9, - 0x34, 0xef, 0xcc, 0x13, 0xf6, 0xd0, 0x7d, 0xac, 0xe3, 0x9b, 0x21, 0x11, 0xd3, 0xb5, 0xa8, 0xe3, - 0x04, 0xf8, 0xfc, 0x43, 0x38, 0x9b, 0x89, 0x9a, 0xa1, 0x03, 0xf9, 0x60, 0x3c, 0x99, 0xb4, 0x78, - 0xa4, 0x4a, 0x34, 0x5a, 0xd2, 0x8d, 0xf0, 0xe6, 0x7d, 0x3f, 0x6c, 0x5e, 0x42, 0xb8, 0x23, 0x46, - 0x72, 0x5d, 0x67, 0xdd, 0x4f, 0x04, 0xd1, 0xec, 0xa5, 0xfd, 0x10, 0xce, 0xf2, 0xc9, 0x77, 0x38, - 0x76, 0x46, 0x47, 0x11, 0x3b, 0x56, 0xd1, 0x0f, 0x64, 0xb1, 0x63, 0xb3, 0x72, 0x8f, 0xe2, 0x87, - 0x5c, 0x4f, 0x3b, 0x69, 0x20, 0x6f, 0xc3, 0x37, 0x72, 0x62, 0xa9, 0x67, 0x54, 0x27, 0x63, 0x5a, - 0x2b, 0x59, 0xd3, 0xfa, 0xe4, 0x6b, 0xaa, 0x09, 0x44, 0xde, 0xac, 0x98, 0xd6, 0x93, 0x1b, 0x54, - 0x09, 0x39, 0x9d, 0x57, 0x44, 0xda, 0x1a, 0x2c, 0x96, 0xcc, 0x73, 0xa3, 0x97, 0x04, 0x91, 0x0b, - 0xb0, 0x1c, 0xe6, 0xcb, 0xe6, 0x07, 0x47, 0x91, 0x01, 0x6a, 0x7d, 0xf2, 0x3c, 0xac, 0x30, 0x91, - 0x3c, 0xb6, 0xe6, 0x00, 0x61, 0x3a, 0x5d, 0x78, 0xa2, 0x0f, 0x14, 0x78, 0xfe, 0x69, 0x7d, 0x48, - 0xee, 0xc3, 0x39, 0x34, 0xeb, 0x08, 0xfc, 0x70, 0x18, 0xec, 0x9e, 0xd3, 0x3b, 0x72, 0xf9, 0xac, - 0xd5, 0x32, 0x07, 0x63, 0x34, 0xb2, 0xac, 0x96, 0x34, 0x0e, 0xa3, 0x91, 0x15, 0xf8, 0xe2, 0x77, - 0x85, 0x92, 0xf3, 0x3a, 0xf4, 0xe1, 0xc2, 0x1c, 0x4a, 0x69, 0xe3, 0x50, 0xe4, 0x8d, 0xe3, 0x26, - 0xa8, 0x07, 0x6e, 0x9f, 0xca, 0xc4, 0x6e, 0x1f, 0xab, 0xf6, 0xd6, 0x1d, 0x96, 0x21, 0xde, 0x5c, - 0x0b, 0xe1, 0x56, 0xe0, 0xef, 0xdf, 0xe1, 0x5f, 0x39, 0x16, 0x47, 0x9e, 0x7c, 0xad, 0x20, 0x2f, - 0xc3, 0xe9, 0x44, 0x7c, 0x92, 0xc8, 0xe1, 0xdd, 0xdc, 0xa0, 0x45, 0xf1, 0x68, 0x56, 0x57, 0x61, - 0x45, 0xcc, 0x8a, 0x71, 0xe8, 0x07, 0x67, 0x96, 0x38, 0x8c, 0xae, 0x3a, 0xfe, 0xb9, 0xa9, 0x68, - 0x54, 0xe6, 0x8d, 0xe4, 0x04, 0xb2, 0x34, 0x79, 0x09, 0x48, 0x28, 0xb7, 0x87, 0x1b, 0x05, 0xff, - 0xe0, 0x86, 0x28, 0x09, 0x57, 0x38, 0xff, 0xec, 0xdf, 0xe6, 0xe0, 0x74, 0xc6, 0x55, 0x86, 0x5e, - 0x02, 0xbc, 0xe1, 0xc4, 0x3d, 0x64, 0x57, 0x08, 0xb9, 0x91, 0xeb, 0x12, 0x9c, 0xeb, 0xa7, 0x16, - 0x59, 0x06, 0x74, 0xfe, 0x2d, 0xfe, 0x8b, 0x6e, 0x1e, 0xce, 0x58, 0xa8, 0x5e, 0xe8, 0xbf, 0xa4, - 0x06, 0x1b, 0x98, 0xd6, 0x21, 0xf0, 0x7c, 0xcc, 0x0e, 0x81, 0x42, 0x48, 0x21, 0x76, 0xd9, 0xc1, - 0x5a, 0xb4, 0x25, 0x24, 0x2a, 0x85, 0x98, 0xea, 0x28, 0x01, 0x21, 0x1f, 0x83, 0xf3, 0xd2, 0x59, - 0x63, 0x27, 0x56, 0x1e, 0x5a, 0xba, 0x9b, 0x9b, 0x4e, 0x78, 0xea, 0xec, 0xc4, 0xd6, 0xe0, 0x36, - 0x5c, 0xc6, 0x41, 0xf4, 0xfa, 0x23, 0x3b, 0x95, 0x07, 0x04, 0x9b, 0xca, 0x02, 0xe7, 0x9f, 0xa7, - 0x58, 0xb5, 0xfe, 0x28, 0x91, 0x12, 0x84, 0xb6, 0x9a, 0x77, 0xdf, 0x43, 0x38, 0x9b, 0x59, 0x63, - 0x7a, 0xc0, 0xa0, 0x21, 0x55, 0x24, 0x1b, 0x2d, 0xd1, 0xdf, 0x54, 0x38, 0xba, 0x0a, 0x2b, 0x8f, - 0x5c, 0x67, 0xec, 0x8e, 0xf9, 0xc9, 0xcd, 0xa7, 0x04, 0x83, 0xc9, 0x07, 0x77, 0x3f, 0x3e, 0x34, - 0x5c, 0x67, 0x44, 0x1a, 0x70, 0x9a, 0x9d, 0x80, 0xde, 0x31, 0x0a, 0x83, 0x5c, 0xcf, 0xa4, 0xc4, - 0xc4, 0x21, 0x24, 0xc1, 0xa3, 0xa9, 0x86, 0x58, 0x8c, 0xda, 0xdc, 0x38, 0x4c, 0x82, 0xe8, 0x8a, - 0x3e, 0x97, 0x8d, 0x4d, 0xb6, 0xa1, 0xc4, 0x98, 0xb3, 0x6b, 0x01, 0x7b, 0x20, 0xb8, 0x3a, 0xf7, - 0x0b, 0x15, 0xb4, 0x2f, 0x0e, 0xc2, 0xff, 0xe9, 0x79, 0x8d, 0x6f, 0xb1, 0xf6, 0xb1, 0xfc, 0xfe, - 0x61, 0xae, 0x20, 0x90, 0xbf, 0x7b, 0x68, 0x7f, 0xa7, 0x88, 0xa6, 0xc6, 0x2e, 0xc7, 0x74, 0x6a, - 0x05, 0xee, 0x50, 0xbc, 0x01, 0x2d, 0x9b, 0xfc, 0xd7, 0x33, 0x4e, 0x75, 0xf2, 0x1a, 0xac, 0x50, - 0xb6, 0x87, 0xd3, 0x21, 0x9b, 0x72, 0xf9, 0x58, 0x5c, 0x9e, 0x06, 0x2b, 0xa2, 0xc3, 0x56, 0x3d, - 0x65, 0x96, 0x8e, 0xa3, 0x9f, 0x54, 0x5a, 0x0e, 0x8e, 0x27, 0x23, 0x79, 0xa2, 0x0a, 0x45, 0xa1, - 0xd5, 0xe8, 0xb4, 0x39, 0x49, 0x91, 0xe2, 0x44, 0xd2, 0xf2, 0xf6, 0x22, 0x53, 0x15, 0x6a, 0x2f, - 0x42, 0x49, 0xe2, 0x4d, 0x1b, 0xc3, 0x3c, 0x67, 0x44, 0x63, 0xd8, 0x2f, 0x3e, 0xd8, 0x8f, 0xa0, - 0x28, 0x58, 0xd2, 0x6b, 0xc1, 0x91, 0x1f, 0x88, 0x45, 0x8e, 0xff, 0x53, 0x18, 0xed, 0x65, 0x6c, - 0xe4, 0x82, 0x89, 0xff, 0xe3, 0x59, 0x32, 0x71, 0xe8, 0x7d, 0x60, 0x10, 0xd8, 0x23, 0xb4, 0xc0, - 0x0a, 0x85, 0x67, 0x0a, 0xef, 0x0c, 0x02, 0x66, 0x97, 0xc5, 0xbf, 0xf1, 0x57, 0xe1, 0x21, 0x9c, - 0xd0, 0x26, 0xcc, 0xda, 0x33, 0x63, 0x47, 0x46, 0x2e, 0x7d, 0x64, 0xb0, 0x78, 0x2b, 0x9c, 0x92, - 0x7d, 0x19, 0x10, 0x86, 0x47, 0x86, 0xb4, 0x33, 0x14, 0x62, 0x3b, 0x83, 0x74, 0x27, 0x8f, 0x46, - 0x8f, 0x9d, 0x38, 0xe2, 0x4e, 0x9e, 0xdc, 0xa7, 0xfe, 0x34, 0x27, 0x54, 0x04, 0xdb, 0xbe, 0x3f, - 0x09, 0x26, 0x63, 0x67, 0x14, 0x53, 0x85, 0x92, 0x63, 0x78, 0x0e, 0x25, 0xe8, 0x3b, 0x98, 0x42, - 0xc3, 0x1f, 0x8b, 0x10, 0x1f, 0xe1, 0xcc, 0x2d, 0xdd, 0xf9, 0x50, 0x5c, 0xc6, 0xd7, 0x29, 0xb6, - 0x2e, 0x23, 0xd3, 0x09, 0x2b, 0x71, 0xad, 0x9e, 0x32, 0x37, 0x19, 0xcf, 0x14, 0x16, 0xa9, 0x66, - 0x2c, 0xe2, 0xa4, 0x2e, 0x74, 0x3b, 0x5a, 0xd1, 0x71, 0xae, 0xf2, 0x5a, 0x27, 0x9f, 0x80, 0x65, - 0xaf, 0x2f, 0x67, 0x8a, 0x4c, 0x6a, 0xe1, 0x6a, 0x7d, 0x16, 0xad, 0x3a, 0xe2, 0x41, 0xe7, 0x9c, - 0xc7, 0xa1, 0xdb, 0xab, 0x31, 0xa5, 0xb1, 0xb6, 0x2d, 0x6e, 0xa3, 0x69, 0x32, 0xb2, 0x06, 0xb9, - 0x70, 0x84, 0x73, 0x5e, 0x9f, 0x2d, 0xaf, 0x28, 0x5e, 0xb6, 0xc9, 0x7f, 0x69, 0xbf, 0x0a, 0x37, - 0x4f, 0xda, 0x47, 0x74, 0x29, 0xce, 0xe8, 0xf0, 0x65, 0x16, 0xaa, 0x32, 0xde, 0x6f, 0x57, 0x41, - 0x0e, 0xf7, 0xeb, 0x89, 0xcd, 0x4f, 0xc0, 0xba, 0x63, 0x4f, 0xfb, 0xcb, 0x3c, 0xac, 0xc5, 0xd5, - 0xe4, 0xe4, 0x45, 0x28, 0x48, 0x3b, 0xd0, 0x66, 0x86, 0x2e, 0x1d, 0xf7, 0x1d, 0x44, 0x3a, 0xd1, - 0x8e, 0x43, 0xee, 0xc2, 0x1a, 0x1a, 0xee, 0xa1, 0xe8, 0x39, 0xf1, 0xf8, 0xe3, 0xcb, 0xfc, 0xf7, - 0xb3, 0xe2, 0x0f, 0xde, 0xb9, 0x72, 0x0a, 0x9f, 0xca, 0x56, 0x28, 0x2d, 0x95, 0xfe, 0x68, 0xa1, - 0xa4, 0x05, 0x2d, 0xcc, 0xd6, 0x82, 0xf2, 0xa6, 0xcc, 0xd0, 0x82, 0x2e, 0xcc, 0xd1, 0x82, 0x46, - 0x94, 0xb2, 0x16, 0x14, 0x75, 0xe1, 0x4b, 0xb3, 0x74, 0xe1, 0x11, 0x0d, 0xd3, 0x85, 0x47, 0x5a, - 0xcc, 0xe2, 0x4c, 0x2d, 0x66, 0x44, 0xc3, 0xb5, 0x98, 0xd7, 0x78, 0x1f, 0x8d, 0x9d, 0xc7, 0x36, - 0x76, 0x1e, 0x3f, 0x16, 0xb1, 0xf5, 0xa6, 0xf3, 0x18, 0x8d, 0x6b, 0xb6, 0x97, 0x41, 0x58, 0xe4, - 0x68, 0xbf, 0xaf, 0x24, 0x34, 0x81, 0x62, 0xfc, 0xae, 0xc3, 0x1a, 0x3b, 0xac, 0x78, 0x38, 0x53, - 0x76, 0x5a, 0xad, 0x9a, 0xab, 0x02, 0xca, 0xee, 0x9b, 0x1f, 0x80, 0xf5, 0x10, 0x8d, 0x5f, 0xb9, - 0xd0, 0x53, 0xcf, 0x0c, 0xa9, 0x79, 0xd8, 0x99, 0x17, 0x61, 0x23, 0x44, 0xe4, 0xda, 0x1c, 0x76, - 0xdd, 0x5c, 0x35, 0x55, 0x51, 0xd0, 0xe6, 0x70, 0xed, 0x30, 0x79, 0xf3, 0xf8, 0x39, 0xd5, 0x4a, - 0xfb, 0x7e, 0x3e, 0xa6, 0x25, 0x11, 0x9f, 0xa1, 0xa7, 0x68, 0xe0, 0xdb, 0xbc, 0x93, 0xf8, 0x5e, - 0x74, 0x75, 0xc6, 0x98, 0x71, 0x9b, 0x26, 0xcb, 0x6a, 0x99, 0x10, 0x04, 0xbe, 0x30, 0x71, 0xb2, - 0x99, 0x44, 0xcd, 0xce, 0x7d, 0x9c, 0xb3, 0x82, 0x1d, 0xdb, 0x78, 0xca, 0xf3, 0xd9, 0x89, 0x6b, - 0x2a, 0x9d, 0xb2, 0x28, 0x59, 0x87, 0xbf, 0xc4, 0x07, 0xba, 0x80, 0x4a, 0xc5, 0x20, 0xce, 0x3c, - 0x9f, 0x71, 0x77, 0x4a, 0x31, 0xc7, 0x5e, 0x42, 0xce, 0xea, 0x54, 0xfc, 0x2b, 0xd8, 0x1a, 0xb0, - 0x82, 0x3a, 0x0a, 0xc1, 0xb0, 0x90, 0xa1, 0x82, 0x4f, 0x37, 0xbe, 0x52, 0x6b, 0x98, 0x25, 0x4a, - 0x27, 0xd8, 0x1c, 0xc1, 0x73, 0xb2, 0x66, 0x21, 0x5e, 0xc9, 0x05, 0x11, 0xc5, 0x77, 0x6e, 0x0f, - 0x44, 0x0a, 0x08, 0xac, 0xea, 0x39, 0x27, 0x0e, 0xe0, 0x68, 0xda, 0x11, 0x9c, 0x9f, 0x3d, 0x24, - 0x73, 0x32, 0x44, 0x45, 0x07, 0x68, 0x4e, 0x3e, 0x40, 0x65, 0x3d, 0x43, 0x3e, 0xa6, 0x67, 0xd0, - 0xfe, 0x24, 0x0f, 0x2f, 0x9c, 0x60, 0xb8, 0xe6, 0x7c, 0xf3, 0x53, 0x71, 0xf1, 0x2c, 0x17, 0xbb, - 0x19, 0x52, 0xa6, 0x7c, 0x83, 0xa4, 0xb7, 0xd4, 0x6c, 0xe1, 0xec, 0x8b, 0xb0, 0xce, 0x76, 0x41, - 0x66, 0x96, 0x78, 0x30, 0x1d, 0x9c, 0x60, 0x1b, 0xbc, 0x20, 0x7c, 0xa8, 0x12, 0xa4, 0xb8, 0x33, - 0xe2, 0x8e, 0x61, 0x85, 0x30, 0xd2, 0x81, 0x12, 0xa2, 0x1d, 0x38, 0xde, 0xe0, 0x44, 0xce, 0x3c, - 0xc2, 0x43, 0x4b, 0x26, 0x63, 0xd6, 0xd4, 0x14, 0xb0, 0x8b, 0xbf, 0xc9, 0x0d, 0x58, 0x1f, 0x4e, - 0x8f, 0xa9, 0xe0, 0xc1, 0xe6, 0x02, 0xb7, 0xfe, 0x58, 0x30, 0x57, 0x87, 0xd3, 0x63, 0x7d, 0x34, - 0xc2, 0x21, 0x45, 0x33, 0x91, 0x0d, 0x8a, 0xc7, 0x56, 0xad, 0xc0, 0x5c, 0x44, 0x4c, 0xca, 0x80, - 0xad, 0x5b, 0x8e, 0x7b, 0x06, 0x98, 0xd1, 0x20, 0xcf, 0x90, 0xc5, 0x7e, 0x68, 0xff, 0x9d, 0x13, - 0xf7, 0xdd, 0xd9, 0xf3, 0xfe, 0x97, 0x43, 0x94, 0x31, 0x44, 0x37, 0x41, 0xa5, 0x5d, 0x1f, 0x6d, - 0x2a, 0xe1, 0x18, 0xad, 0x0d, 0xa7, 0xc7, 0x61, 0xdf, 0xc9, 0x1d, 0xbf, 0x28, 0x77, 0xfc, 0x6b, - 0xe2, 0x3e, 0x9c, 0xb9, 0x3d, 0xcc, 0xee, 0x72, 0xed, 0x3f, 0xf2, 0x70, 0xe3, 0x64, 0x9b, 0xc0, - 0x2f, 0xc7, 0x2d, 0x63, 0xdc, 0x12, 0xaa, 0xd3, 0x85, 0x94, 0xea, 0x34, 0x63, 0xed, 0x2d, 0x66, - 0xad, 0xbd, 0x94, 0xa2, 0x76, 0x29, 0x43, 0x51, 0x9b, 0xb9, 0x40, 0x8b, 0x4f, 0x59, 0xa0, 0xcb, - 0xf2, 0x3c, 0xf9, 0x97, 0x50, 0x81, 0x11, 0xbf, 0x0f, 0x3c, 0x84, 0xd3, 0xe2, 0x3e, 0xc0, 0x4e, - 0x8e, 0x48, 0xff, 0x5e, 0xba, 0x73, 0x2b, 0xeb, 0x26, 0x80, 0x68, 0x19, 0xd2, 0xfa, 0x06, 0xbf, - 0x03, 0x44, 0xe5, 0xff, 0x7f, 0xa4, 0x7f, 0xf2, 0x00, 0xce, 0x61, 0x7c, 0xf9, 0x9e, 0xfc, 0x72, - 0x60, 0x8f, 0xdd, 0x03, 0x3e, 0x1f, 0xae, 0xa6, 0x64, 0x65, 0xaf, 0x27, 0x55, 0xc7, 0x74, 0x0f, - 0xaa, 0xa7, 0xcc, 0x33, 0x41, 0x06, 0x3c, 0x79, 0xb1, 0xf8, 0x73, 0x05, 0xb4, 0xa7, 0xf7, 0x17, - 0x2a, 0xaa, 0x92, 0x1d, 0xbe, 0x6c, 0x96, 0x1c, 0xa9, 0xf7, 0x5e, 0x80, 0xd5, 0xb1, 0x7b, 0x30, - 0x76, 0x83, 0xa3, 0x98, 0x06, 0x64, 0x85, 0x03, 0x45, 0xc7, 0x88, 0xa0, 0x94, 0xcf, 0x24, 0x99, - 0x0b, 0x22, 0x6d, 0x37, 0xbc, 0x2f, 0x66, 0x8e, 0x03, 0x9d, 0x4d, 0x72, 0x05, 0xd9, 0x8f, 0xbb, - 0x85, 0x62, 0x4e, 0xcd, 0x9b, 0x3c, 0x74, 0xe6, 0x81, 0x37, 0x70, 0xb5, 0xbf, 0x56, 0x84, 0x44, - 0x90, 0xd5, 0x79, 0xe4, 0xa1, 0x64, 0xcc, 0x9b, 0x4f, 0x89, 0x21, 0x59, 0x24, 0xb2, 0xdd, 0x23, - 0x0f, 0xcf, 0x88, 0x80, 0x58, 0x78, 0x46, 0x84, 0xbc, 0x07, 0x8b, 0x44, 0x7e, 0x6b, 0x7e, 0x43, - 0x58, 0x04, 0xd1, 0x3d, 0x6f, 0xff, 0x36, 0xb9, 0x05, 0x4b, 0xcc, 0x08, 0x48, 0x54, 0x77, 0x3d, - 0x56, 0xdd, 0xfd, 0xdb, 0xa6, 0x28, 0xd7, 0xde, 0x0e, 0xdf, 0xb5, 0x52, 0x8d, 0xd8, 0xbf, 0x4d, - 0x5e, 0x3b, 0x99, 0x71, 0x6e, 0x51, 0x18, 0xe7, 0x86, 0x86, 0xb9, 0xaf, 0xc7, 0x0c, 0x73, 0xaf, - 0xcd, 0xef, 0x2d, 0xfe, 0x1a, 0xc9, 0xc2, 0x11, 0x46, 0x61, 0xaa, 0x7e, 0x92, 0x83, 0x4b, 0x73, - 0x29, 0xc8, 0x45, 0x28, 0xea, 0xed, 0x5a, 0x27, 0x1a, 0x5f, 0xba, 0x66, 0x04, 0x84, 0xec, 0xc1, - 0xf2, 0xb6, 0x13, 0x78, 0x3d, 0x3a, 0x8d, 0x33, 0x9f, 0x07, 0x52, 0x6c, 0x43, 0xf4, 0xea, 0x29, - 0x33, 0xa2, 0x25, 0x36, 0x6c, 0xe0, 0x5a, 0x88, 0xa5, 0x9e, 0xca, 0x67, 0xe8, 0x1a, 0x52, 0x0c, - 0x53, 0x64, 0x74, 0x9f, 0x49, 0x01, 0xc9, 0x23, 0x20, 0x96, 0x55, 0xad, 0xb8, 0xe3, 0x09, 0xbf, - 0x83, 0x4f, 0xbc, 0xd0, 0xd2, 0xf3, 0xc3, 0x4f, 0xe9, 0xbb, 0x14, 0x5d, 0xf5, 0x94, 0x99, 0xc1, - 0x2d, 0xb9, 0xcc, 0xdf, 0x12, 0xf2, 0xce, 0xec, 0x4e, 0x78, 0x86, 0x50, 0xaf, 0x37, 0xa1, 0xd8, - 0x16, 0xb6, 0x08, 0x92, 0xc5, 0xbc, 0xb0, 0x3b, 0x30, 0xc3, 0x52, 0xed, 0xb7, 0x14, 0xa1, 0x74, - 0x78, 0x7a, 0x67, 0x49, 0x99, 0xc1, 0xfa, 0xf3, 0x33, 0x83, 0xf5, 0x7f, 0xc6, 0xcc, 0x60, 0x9a, - 0x07, 0xb7, 0x4e, 0xdc, 0xb1, 0xe4, 0xe3, 0xa0, 0x62, 0x12, 0x25, 0x47, 0x1a, 0x24, 0xb6, 0xbe, - 0x36, 0xc2, 0xd8, 0xdf, 0x55, 0x9e, 0xa9, 0xce, 0x5c, 0xef, 0xc5, 0xa9, 0xb5, 0x3f, 0xe3, 0x31, - 0xdf, 0x6b, 0xfd, 0x76, 0x42, 0xd1, 0xfc, 0x5e, 0x9d, 0x2c, 0x8c, 0xd8, 0x62, 0x7b, 0x41, 0x4a, - 0x62, 0x99, 0xfe, 0xd6, 0x6c, 0x5f, 0x0b, 0x69, 0xe5, 0xfd, 0x51, 0x1e, 0x2e, 0xce, 0x23, 0xcf, - 0x4c, 0x93, 0xad, 0x3c, 0x5b, 0x9a, 0xec, 0x5b, 0x50, 0x64, 0xb0, 0xd0, 0x83, 0x00, 0xc7, 0x96, - 0x93, 0xd2, 0xb1, 0x15, 0xc5, 0xe4, 0x05, 0x58, 0xd4, 0x2b, 0x56, 0x94, 0xb9, 0x0d, 0x4d, 0x7d, - 0x9d, 0x5e, 0x80, 0x46, 0xa4, 0xbc, 0x88, 0x7c, 0x21, 0x9d, 0xac, 0x90, 0xa7, 0x6c, 0xbb, 0x20, - 0x75, 0x48, 0x2a, 0x1d, 0x03, 0xd6, 0x37, 0x4a, 0x1f, 0xc0, 0x23, 0x72, 0x9b, 0xe9, 0xc4, 0x87, - 0x1a, 0x2c, 0xb6, 0xc7, 0x6e, 0xe0, 0x4e, 0x64, 0x33, 0xdc, 0x11, 0x42, 0x4c, 0x5e, 0xc2, 0x8d, - 0x64, 0x9d, 0x27, 0x2c, 0x26, 0xc2, 0xa2, 0x1c, 0xa7, 0x06, 0xad, 0x6a, 0x29, 0xd8, 0x94, 0x50, - 0x28, 0x41, 0xdd, 0x99, 0x0e, 0x7b, 0x47, 0x5d, 0xb3, 0xce, 0x25, 0x27, 0x46, 0x30, 0x40, 0x28, - 0x6d, 0x60, 0x60, 0x4a, 0x28, 0xda, 0xb7, 0x14, 0x38, 0x93, 0xd5, 0x0e, 0x72, 0x11, 0x0a, 0xc3, - 0xcc, 0xbc, 0x8c, 0x43, 0xe6, 0xca, 0x5d, 0xa2, 0x7f, 0xed, 0x03, 0x7f, 0x7c, 0xec, 0x4c, 0x64, - 0x63, 0x65, 0x09, 0x6c, 0x02, 0xfd, 0xb1, 0x8b, 0xff, 0x93, 0x2b, 0xe2, 0xc8, 0xc9, 0xa7, 0x32, - 0x39, 0xe2, 0x1f, 0x4d, 0x07, 0xa8, 0xf5, 0xdb, 0xad, 0x11, 0x4b, 0x07, 0xf0, 0x0a, 0x14, 0x68, - 0xb5, 0x12, 0xb3, 0x97, 0xce, 0x1f, 0xbd, 0x51, 0xe7, 0x48, 0xac, 0x56, 0x81, 0x73, 0x3c, 0x30, - 0x11, 0x59, 0xbb, 0x0f, 0x6b, 0x71, 0x0c, 0x62, 0xc4, 0x23, 0xc2, 0x96, 0xee, 0xa8, 0x9c, 0xd3, - 0xb6, 0xef, 0x33, 0x87, 0x99, 0xed, 0xe7, 0x7e, 0xf2, 0xce, 0x15, 0xa0, 0x3f, 0x19, 0x4d, 0x56, - 0xc4, 0x58, 0xed, 0xdb, 0x39, 0x38, 0x13, 0xf9, 0xe8, 0x8b, 0x35, 0xf4, 0x0b, 0xeb, 0x30, 0xaa, - 0xc7, 0x1c, 0x1a, 0x85, 0xdc, 0x98, 0x6e, 0xe0, 0x1c, 0x3f, 0xaa, 0x3d, 0xd8, 0x9a, 0x85, 0x4f, - 0x5e, 0x84, 0x65, 0x0c, 0xeb, 0x34, 0x72, 0x7a, 0xae, 0xbc, 0xcd, 0x0e, 0x05, 0xd0, 0x8c, 0xca, - 0xb5, 0x1f, 0x29, 0x70, 0x9e, 0xbb, 0x79, 0x34, 0x1c, 0x6f, 0x88, 0xaf, 0x04, 0x3d, 0xf7, 0xfd, - 0x71, 0x78, 0xde, 0x8b, 0xed, 0x63, 0xd7, 0xe3, 0xde, 0x3c, 0xa9, 0xaf, 0xcd, 0x6e, 0x2d, 0xb9, - 0x85, 0xa1, 0xca, 0xf8, 0x2b, 0x7a, 0x81, 0x05, 0x98, 0x18, 0x52, 0x80, 0x1c, 0x60, 0x02, 0x31, - 0xb4, 0x5f, 0x83, 0xcb, 0xf3, 0x3f, 0x40, 0x3e, 0x0f, 0xab, 0x98, 0x7b, 0xab, 0x3b, 0x3a, 0x1c, - 0x3b, 0x7d, 0x57, 0x68, 0xf6, 0x84, 0x36, 0x56, 0x2e, 0x63, 0x91, 0xd7, 0x78, 0xc0, 0x83, 0x43, - 0xcc, 0xea, 0xc5, 0x89, 0x62, 0xbe, 0x54, 0x32, 0x37, 0xed, 0xeb, 0x0a, 0x90, 0x34, 0x0f, 0xf2, - 0x11, 0x58, 0xe9, 0x76, 0x2a, 0xd6, 0xc4, 0x19, 0x4f, 0xaa, 0xfe, 0x74, 0xcc, 0xc3, 0x9e, 0x31, - 0xff, 0xf7, 0x49, 0xcf, 0x66, 0xef, 0x41, 0x47, 0xfe, 0x74, 0x6c, 0xc6, 0xf0, 0x30, 0xc7, 0x93, - 0xeb, 0x7e, 0xb9, 0xef, 0x3c, 0x89, 0xe7, 0x78, 0xe2, 0xb0, 0x58, 0x8e, 0x27, 0x0e, 0xd3, 0xbe, - 0xa7, 0xc0, 0x05, 0x61, 0x1c, 0xd9, 0xcf, 0xa8, 0x4b, 0x05, 0xa3, 0xbc, 0x8c, 0x45, 0x9c, 0xdd, - 0x79, 0x12, 0xfa, 0x86, 0x08, 0x84, 0x84, 0x15, 0x44, 0x51, 0x9d, 0xd1, 0x92, 0x4f, 0x41, 0xc1, - 0x9a, 0xf8, 0xa3, 0x13, 0x44, 0x42, 0x52, 0xc3, 0x11, 0x9d, 0xf8, 0x23, 0x64, 0x81, 0x94, 0x9a, - 0x0b, 0x67, 0xe4, 0xca, 0x89, 0x1a, 0x93, 0x06, 0x2c, 0xf1, 0x90, 0x77, 0x09, 0xbb, 0x83, 0x39, - 0x6d, 0xda, 0x5e, 0x17, 0xe1, 0x96, 0x78, 0x9c, 0x57, 0x53, 0xf0, 0xd0, 0x7e, 0x47, 0x81, 0x12, - 0x15, 0x6c, 0xf0, 0x52, 0xfa, 0x5e, 0xa7, 0x74, 0x5c, 0x0e, 0x16, 0x66, 0x34, 0x21, 0xfb, 0x13, - 0x9d, 0xc6, 0xaf, 0xc2, 0x7a, 0x82, 0x80, 0x68, 0x18, 0x68, 0x63, 0xe0, 0xf5, 0x1c, 0x96, 0x32, - 0x86, 0x99, 0xa0, 0xc4, 0x60, 0xda, 0x6f, 0x28, 0x70, 0xa6, 0xf5, 0xe5, 0x89, 0xc3, 0x9e, 0x6d, - 0xcd, 0xe9, 0x40, 0xac, 0x77, 0x2a, 0xac, 0x09, 0x2b, 0x5b, 0x16, 0x04, 0x80, 0x09, 0x6b, 0x1c, - 0x66, 0x86, 0xa5, 0xa4, 0x0a, 0x45, 0x7e, 0xbe, 0x04, 0x3c, 0x3c, 0xeb, 0x65, 0x49, 0x37, 0x12, - 0x31, 0xe6, 0x48, 0xb4, 0x25, 0xb8, 0x85, 0x71, 0x1a, 0x33, 0xa4, 0xd6, 0xfe, 0x53, 0x81, 0xcd, - 0x19, 0x34, 0xe4, 0x4d, 0x58, 0x40, 0x07, 0x45, 0x3e, 0x7a, 0x17, 0x67, 0x7c, 0x62, 0xd2, 0x3b, - 0xda, 0xbf, 0xcd, 0x0e, 0xa2, 0x63, 0xfa, 0xc3, 0x64, 0x54, 0xe4, 0x21, 0x2c, 0xeb, 0xfd, 0x3e, - 0xbf, 0x9d, 0xe5, 0x62, 0xb7, 0xb3, 0x19, 0x5f, 0x7c, 0x39, 0xc4, 0x67, 0xb7, 0x33, 0xe6, 0x2a, - 0xd3, 0xef, 0xdb, 0xdc, 0xf9, 0x32, 0xe2, 0x77, 0xfe, 0xe3, 0xb0, 0x16, 0x47, 0x7e, 0x26, 0x7f, - 0xb1, 0xb7, 0x15, 0x50, 0xe3, 0x75, 0xf8, 0xf9, 0x04, 0x8a, 0xca, 0x1a, 0xe6, 0xa7, 0x4c, 0xaa, - 0xdf, 0xcb, 0xc1, 0xd9, 0xcc, 0x1e, 0x26, 0x2f, 0xc1, 0xa2, 0x3e, 0x1a, 0xd5, 0x76, 0xf8, 0xac, - 0xe2, 0x12, 0x12, 0x2a, 0xbd, 0x63, 0x97, 0x57, 0x86, 0x44, 0x5e, 0x81, 0x22, 0xb3, 0x0e, 0xd8, - 0x11, 0x1b, 0x0e, 0x46, 0xbe, 0xe1, 0xa6, 0x0b, 0xf1, 0x40, 0xa9, 0x02, 0x91, 0xec, 0xc2, 0x1a, - 0x8f, 0x19, 0x63, 0xba, 0x87, 0xee, 0x57, 0xc3, 0x88, 0xfd, 0x98, 0x54, 0x40, 0x68, 0xd2, 0xed, - 0x31, 0x2b, 0x93, 0xa3, 0xa6, 0xc4, 0xa9, 0x48, 0x1d, 0x54, 0xe4, 0x29, 0x73, 0x62, 0xd1, 0x5a, - 0x31, 0x8a, 0x0f, 0xab, 0xc4, 0x0c, 0x5e, 0x29, 0xca, 0x70, 0xb8, 0xf4, 0x20, 0xf0, 0x0e, 0x87, - 0xc7, 0xee, 0x70, 0xf2, 0xf3, 0x1b, 0xae, 0xe8, 0x1b, 0x27, 0x1a, 0xae, 0x3f, 0x28, 0xb0, 0xc5, - 0x9c, 0x24, 0xa3, 0x12, 0x8d, 0x14, 0xa0, 0x1b, 0x25, 0x1a, 0x7a, 0x3f, 0xe3, 0x51, 0x51, 0x76, - 0x60, 0x89, 0x45, 0xab, 0x11, 0x2b, 0xe3, 0x52, 0x66, 0x15, 0x18, 0xce, 0xfe, 0x6d, 0x26, 0xbe, - 0x30, 0x4f, 0xc9, 0xc0, 0x14, 0xa4, 0x64, 0x1f, 0x4a, 0x95, 0x81, 0xeb, 0x0c, 0xa7, 0xa3, 0xce, - 0xc9, 0x5e, 0x50, 0xb7, 0x78, 0x5b, 0x56, 0x7a, 0x8c, 0x0c, 0x5f, 0x5e, 0x71, 0x27, 0x97, 0x19, - 0x91, 0x4e, 0xe8, 0x3c, 0x55, 0x40, 0xc5, 0xeb, 0x87, 0xe7, 0xf4, 0x4f, 0x12, 0x88, 0x74, 0x71, - 0xcf, 0x40, 0xee, 0x5d, 0x65, 0xc3, 0x5a, 0xdd, 0x09, 0x26, 0x9d, 0xb1, 0x33, 0x0c, 0x30, 0xca, - 0xe5, 0x09, 0xa2, 0x80, 0x5d, 0x10, 0x19, 0x9c, 0x51, 0x65, 0x3a, 0x09, 0x49, 0x99, 0x42, 0x36, - 0xce, 0x8e, 0xca, 0x4b, 0xbb, 0xde, 0xd0, 0x19, 0x78, 0x5f, 0x13, 0x3e, 0xa6, 0x4c, 0x5e, 0x3a, - 0x10, 0x40, 0x33, 0x2a, 0xd7, 0x3e, 0x97, 0x1a, 0x37, 0x56, 0xcb, 0x12, 0x2c, 0xf1, 0x08, 0x04, - 0xcc, 0x23, 0xbf, 0x6d, 0x34, 0x77, 0x6a, 0xcd, 0x3d, 0x55, 0x21, 0x6b, 0x00, 0x6d, 0xb3, 0x55, - 0x31, 0x2c, 0x8b, 0xfe, 0xce, 0xd1, 0xdf, 0xdc, 0x5d, 0x7f, 0xb7, 0x5b, 0x57, 0xf3, 0x92, 0xc7, - 0x7e, 0x41, 0xfb, 0xa1, 0x02, 0xe7, 0xb2, 0x87, 0x92, 0x74, 0x00, 0x63, 0x36, 0xf0, 0xb7, 0xf4, - 0x8f, 0xcc, 0x1d, 0xf7, 0x4c, 0x70, 0x32, 0xf6, 0xc3, 0x84, 0xc5, 0x14, 0xc8, 0x89, 0xb7, 0x2f, - 0xe6, 0xa4, 0xe8, 0xf5, 0xcd, 0x9c, 0xd7, 0xd7, 0x2a, 0xb0, 0x35, 0x8b, 0x47, 0xbc, 0xa9, 0xeb, - 0x50, 0xd2, 0xdb, 0xed, 0x7a, 0xad, 0xa2, 0x77, 0x6a, 0xad, 0xa6, 0xaa, 0x90, 0x65, 0x58, 0xd8, - 0x33, 0x5b, 0xdd, 0xb6, 0x9a, 0xd3, 0xbe, 0xa3, 0xc0, 0x6a, 0x2d, 0xb2, 0x3a, 0x7b, 0xaf, 0x8b, - 0xef, 0xa3, 0xb1, 0xc5, 0xb7, 0x15, 0x46, 0x37, 0x09, 0x3f, 0x70, 0xa2, 0x95, 0xf7, 0x6e, 0x0e, - 0x36, 0x52, 0x34, 0xc4, 0x82, 0x25, 0xfd, 0xbe, 0xd5, 0xaa, 0xed, 0x54, 0x78, 0xcd, 0xae, 0x44, - 0xe6, 0x52, 0x98, 0xef, 0x2a, 0xf5, 0x15, 0xe6, 0x11, 0xfc, 0x38, 0xb0, 0x7d, 0xaf, 0x2f, 0x25, - 0xbf, 0xad, 0x9e, 0x32, 0x05, 0x27, 0x3c, 0xc9, 0xbe, 0x36, 0x1d, 0xbb, 0xc8, 0x36, 0x17, 0xd3, - 0xeb, 0x86, 0xf0, 0x34, 0x63, 0xf4, 0xdf, 0x70, 0x68, 0x79, 0x9a, 0x75, 0xc4, 0x8f, 0x34, 0x61, - 0x71, 0xcf, 0x9b, 0x54, 0xa7, 0x8f, 0xf8, 0xfa, 0xbd, 0x1c, 0x65, 0x3f, 0xaa, 0x4e, 0x1f, 0xa5, - 0xd9, 0xa2, 0xca, 0x92, 0x45, 0xef, 0x89, 0xb1, 0xe4, 0x5c, 0x92, 0x4e, 0x8c, 0x85, 0x67, 0x72, - 0x62, 0xdc, 0x5e, 0x85, 0x12, 0xbf, 0x43, 0xe1, 0xf5, 0xe4, 0xfb, 0x0a, 0x6c, 0xcd, 0xea, 0x39, - 0x7a, 0x2d, 0x8b, 0x07, 0x2b, 0x38, 0x17, 0xa6, 0xc7, 0x88, 0x47, 0x29, 0x10, 0x68, 0xe4, 0x93, - 0x50, 0xaa, 0x05, 0xc1, 0xd4, 0x1d, 0x5b, 0xaf, 0x74, 0xcd, 0x1a, 0x9f, 0xae, 0x97, 0xfe, 0xed, - 0x9d, 0x2b, 0x9b, 0xe8, 0xf3, 0x31, 0xb6, 0x83, 0x57, 0xec, 0xe9, 0xd8, 0x8b, 0xa5, 0x12, 0x90, - 0x29, 0xa8, 0x14, 0xed, 0x4c, 0xfb, 0x9e, 0x2b, 0xee, 0x10, 0xc2, 0xa1, 0x9b, 0xc3, 0xe4, 0x33, - 0x4d, 0xc0, 0xb4, 0x6f, 0x2a, 0x70, 0x7e, 0xf6, 0x30, 0xd1, 0x73, 0xb2, 0xc3, 0x4c, 0xaa, 0x84, - 0x4b, 0x35, 0x9e, 0x93, 0xa1, 0xdd, 0x95, 0xcc, 0x53, 0x20, 0x52, 0xa2, 0x30, 0x35, 0x7e, 0x2e, - 0x95, 0x0f, 0x3b, 0x4e, 0x24, 0x10, 0xb5, 0x07, 0xb0, 0x39, 0x63, 0x50, 0xc9, 0x27, 0x32, 0x93, - 0xee, 0xa0, 0x9b, 0x92, 0x9c, 0x74, 0x27, 0x96, 0xbd, 0x4d, 0x82, 0x6b, 0xff, 0x9e, 0x83, 0x73, - 0x74, 0x75, 0x0d, 0xdc, 0x20, 0xd0, 0xa3, 0xfc, 0xb4, 0x74, 0x57, 0x7c, 0x0d, 0x16, 0x8f, 0x9e, - 0x4d, 0x55, 0xcc, 0xd0, 0x09, 0x01, 0x3c, 0xb1, 0x84, 0x73, 0x0c, 0xfd, 0x9f, 0x5c, 0x05, 0x39, - 0xb9, 0x79, 0x1e, 0xc3, 0x9b, 0xe6, 0xb6, 0x14, 0x73, 0x79, 0x14, 0xe6, 0x21, 0x7e, 0x1d, 0x16, - 0x50, 0x9f, 0xc2, 0xcf, 0x0e, 0x21, 0xf3, 0x67, 0xd7, 0x0e, 0xb5, 0x2d, 0x26, 0x23, 0x20, 0x1f, - 0x02, 0x88, 0x32, 0x43, 0xf0, 0xc3, 0x41, 0xe8, 0x19, 0xc2, 0xe4, 0x10, 0xe6, 0xf2, 0xf1, 0x81, - 0xc3, 0xd3, 0x2d, 0x94, 0x61, 0x43, 0xf4, 0xf8, 0x48, 0x44, 0x45, 0xe4, 0xaf, 0x98, 0xeb, 0xac, - 0xa0, 0x36, 0x12, 0x91, 0x11, 0xaf, 0xa5, 0x12, 0x34, 0x63, 0x70, 0xe4, 0x44, 0x16, 0xe6, 0x6b, - 0xa9, 0x2c, 0xcc, 0x45, 0x86, 0x25, 0xa7, 0x5a, 0xd6, 0xfe, 0x39, 0x07, 0xcb, 0xf7, 0xa9, 0x54, - 0x86, 0xba, 0x86, 0xf9, 0xba, 0x8b, 0x3b, 0x50, 0xaa, 0xfb, 0x0e, 0x7f, 0x2e, 0xe2, 0x3e, 0x25, - 0xcc, 0xa7, 0x7b, 0xe0, 0x3b, 0xe2, 0xe5, 0x29, 0x30, 0x65, 0xa4, 0xa7, 0xf8, 0xa3, 0xdf, 0x85, - 0x45, 0xf6, 0x7c, 0xc7, 0xd5, 0x68, 0x42, 0x2e, 0x0f, 0x6b, 0xf4, 0x32, 0x2b, 0x96, 0x5e, 0x38, - 0xd8, 0x13, 0xa0, 0x2c, 0x24, 0xf2, 0x18, 0xaf, 0x92, 0x66, 0x65, 0xe1, 0x64, 0x9a, 0x15, 0x29, - 0x96, 0xdd, 0xe2, 0x49, 0x62, 0xd9, 0x9d, 0x7f, 0x03, 0x4a, 0x52, 0x7d, 0x9e, 0x49, 0x4c, 0xff, - 0x46, 0x0e, 0x56, 0xb1, 0x55, 0xa1, 0x2d, 0xcf, 0x2f, 0xa6, 0x9e, 0xe8, 0xa3, 0x31, 0x3d, 0xd1, - 0x96, 0x3c, 0x5e, 0xac, 0x65, 0x73, 0x14, 0x44, 0x77, 0x61, 0x23, 0x85, 0x48, 0x5e, 0x85, 0x05, - 0x5a, 0x7d, 0x71, 0xaf, 0x56, 0x93, 0x33, 0x20, 0x8a, 0x7b, 0x4c, 0x1b, 0x1e, 0x98, 0x0c, 0x5b, - 0xfb, 0x2f, 0x05, 0x56, 0x78, 0xda, 0x91, 0xe1, 0x81, 0xff, 0xd4, 0xee, 0xbc, 0x91, 0xec, 0x4e, - 0x16, 0x5d, 0x85, 0x77, 0xe7, 0xff, 0x76, 0x27, 0xbe, 0x11, 0xeb, 0xc4, 0xcd, 0x30, 0x0a, 0xa2, - 0x68, 0xce, 0x9c, 0x3e, 0xfc, 0x1b, 0x8c, 0x0b, 0x1c, 0x47, 0x24, 0x5f, 0x80, 0xe5, 0xa6, 0xfb, - 0x38, 0x76, 0x3d, 0xbd, 0x31, 0x83, 0xe9, 0xcb, 0x21, 0x22, 0x5b, 0x53, 0x78, 0xb2, 0x0f, 0xdd, - 0xc7, 0x76, 0xea, 0xe5, 0x30, 0x62, 0x49, 0x6f, 0xa8, 0x71, 0xb2, 0x67, 0x99, 0xfa, 0xdc, 0xc1, - 0x15, 0x03, 0x06, 0x7d, 0x2b, 0x0f, 0x10, 0xf9, 0x06, 0xd2, 0x05, 0x18, 0x33, 0x9a, 0x10, 0x9a, - 0x7d, 0x04, 0xc9, 0x73, 0x5c, 0xd8, 0x52, 0xdc, 0xe0, 0x1a, 0xe8, 0xdc, 0xec, 0x28, 0x95, 0xa8, - 0x8b, 0xae, 0x70, 0x67, 0xb4, 0xbe, 0x3b, 0x70, 0xd8, 0xde, 0x9e, 0xdf, 0xbe, 0x86, 0x41, 0x89, - 0x43, 0xe8, 0x8c, 0x74, 0xd3, 0xe8, 0xb2, 0xb6, 0x43, 0x11, 0x52, 0xfe, 0xb6, 0x85, 0x67, 0xf3, - 0xb7, 0x6d, 0xc3, 0xb2, 0x37, 0x7c, 0xcb, 0x1d, 0x4e, 0xfc, 0xf1, 0x13, 0x54, 0xbb, 0x47, 0xfa, - 0x3c, 0xda, 0x05, 0x35, 0x51, 0xc6, 0xc6, 0x01, 0xcf, 0xdc, 0x10, 0x5f, 0x1e, 0x86, 0x10, 0x18, - 0xfa, 0x0b, 0x2f, 0xa8, 0x8b, 0x77, 0x0b, 0xc5, 0x45, 0x75, 0xe9, 0x6e, 0xa1, 0x58, 0x54, 0x97, - 0xef, 0x16, 0x8a, 0xcb, 0x2a, 0x98, 0xd2, 0x9b, 0x59, 0xf8, 0x26, 0x26, 0x3d, 0x63, 0xc5, 0x9f, - 0xa8, 0xb4, 0x9f, 0xe6, 0x80, 0xa4, 0xab, 0x41, 0x3e, 0x0a, 0x25, 0xb6, 0xc1, 0xda, 0xe3, 0xe0, - 0x2b, 0xdc, 0xdd, 0x80, 0x85, 0x5d, 0x92, 0xc0, 0x72, 0xd8, 0x25, 0x06, 0x36, 0x83, 0xaf, 0x0c, - 0xc8, 0xe7, 0xe1, 0x34, 0x76, 0xef, 0xc8, 0x1d, 0x7b, 0x7e, 0xdf, 0xc6, 0x18, 0xb9, 0xce, 0x80, - 0xa7, 0x86, 0x7c, 0x09, 0x73, 0x18, 0xa7, 0x8b, 0x67, 0x0c, 0x03, 0xba, 0x00, 0xb6, 0x11, 0xb3, - 0xcd, 0x10, 0x49, 0x07, 0x54, 0x99, 0xfe, 0x60, 0x3a, 0x18, 0xf0, 0x91, 0x2d, 0xd3, 0x1b, 0x7d, - 0xb2, 0x6c, 0x06, 0xe3, 0xb5, 0x88, 0xf1, 0xee, 0x74, 0x30, 0x20, 0xaf, 0x01, 0xf8, 0x43, 0xfb, - 0xd8, 0x0b, 0x02, 0xf6, 0x98, 0x13, 0x7a, 0x2b, 0x47, 0x50, 0x79, 0x30, 0xfc, 0x61, 0x83, 0x01, - 0xc9, 0xaf, 0x00, 0x46, 0x6b, 0xc0, 0x30, 0x26, 0xcc, 0x1a, 0x89, 0x67, 0x6f, 0x11, 0xc0, 0xb8, - 0x73, 0xf4, 0xa1, 0x6b, 0x79, 0x5f, 0x13, 0xae, 0x1e, 0x9f, 0x85, 0x0d, 0x6e, 0x3c, 0x7c, 0xdf, - 0x9b, 0x1c, 0xf1, 0xab, 0xc4, 0x7b, 0xb9, 0x87, 0x48, 0x77, 0x89, 0xbf, 0x2f, 0x00, 0xe8, 0xf7, - 0x2d, 0x11, 0x21, 0xec, 0x16, 0x2c, 0xd0, 0x0b, 0x92, 0x50, 0xb4, 0xa0, 0x9a, 0x1a, 0xf9, 0xca, - 0x6a, 0x6a, 0xc4, 0xa0, 0xab, 0xd1, 0x44, 0xa3, 0x7a, 0xa1, 0x64, 0xc1, 0xd5, 0xc8, 0xec, 0xec, - 0x63, 0x11, 0x9a, 0x39, 0x16, 0xa9, 0x03, 0x44, 0x31, 0xbb, 0xb8, 0xc8, 0xbf, 0x11, 0x05, 0xbf, - 0xe1, 0x05, 0x3c, 0x4b, 0x44, 0x14, 0xf7, 0x4b, 0x9e, 0x3e, 0x11, 0x1a, 0xb9, 0x07, 0x85, 0x8e, - 0x13, 0xfa, 0xe2, 0xce, 0x88, 0x64, 0xf6, 0x3c, 0x4f, 0xdd, 0x19, 0x45, 0x33, 0x5b, 0x9b, 0x38, - 0xb1, 0x0c, 0xc7, 0xc8, 0x84, 0x18, 0xb0, 0xc8, 0xd3, 0xb2, 0xcf, 0x88, 0x80, 0xc9, 0xb3, 0xb2, - 0xf3, 0xb8, 0xd7, 0x08, 0x94, 0x65, 0x0a, 0x9e, 0x80, 0xfd, 0x0e, 0xe4, 0x2d, 0xab, 0xc1, 0xe3, - 0x77, 0xac, 0x46, 0xd7, 0x2f, 0xcb, 0x6a, 0xb0, 0x77, 0xdf, 0x20, 0x38, 0x96, 0xc8, 0x28, 0x32, - 0xf9, 0x18, 0x94, 0x24, 0xa1, 0x98, 0x47, 0xbe, 0xc1, 0x3e, 0x90, 0xbc, 0x9d, 0xe4, 0x4d, 0x43, - 0xc2, 0x26, 0x75, 0x50, 0xef, 0x4d, 0x1f, 0xb9, 0xfa, 0x68, 0x84, 0x6e, 0x90, 0x6f, 0xb9, 0x63, - 0x26, 0xb6, 0x15, 0xa3, 0x90, 0xd1, 0xe8, 0x23, 0xd1, 0x17, 0xa5, 0xb2, 0xb2, 0x29, 0x49, 0x49, - 0xda, 0xb0, 0x61, 0xb9, 0x93, 0xe9, 0x88, 0xd9, 0xd7, 0xec, 0xfa, 0x63, 0x7a, 0xbf, 0x61, 0x71, - 0x72, 0x30, 0xba, 0x6e, 0x40, 0x0b, 0x85, 0x51, 0xd3, 0x81, 0x3f, 0x4e, 0xdc, 0x75, 0xd2, 0xc4, - 0x9a, 0x2b, 0x0f, 0x39, 0x3d, 0x55, 0xe3, 0xb7, 0x26, 0x3c, 0x55, 0xc5, 0xad, 0x29, 0xba, 0x2b, - 0x7d, 0x28, 0x23, 0x96, 0x1b, 0xbe, 0x0c, 0x4a, 0xb1, 0xdc, 0x62, 0x11, 0xdc, 0xbe, 0x57, 0x90, - 0xc2, 0x89, 0xf2, 0xb1, 0x78, 0x13, 0xe0, 0xae, 0xef, 0x0d, 0x1b, 0xee, 0xe4, 0xc8, 0xef, 0x4b, - 0x21, 0xe5, 0x4a, 0x5f, 0xf2, 0xbd, 0xa1, 0x7d, 0x8c, 0xe0, 0x9f, 0xbe, 0x73, 0x45, 0x42, 0x32, - 0xa5, 0xff, 0xc9, 0x07, 0x61, 0x99, 0xfe, 0xea, 0x44, 0x56, 0x42, 0x4c, 0x27, 0x8b, 0xd4, 0x2c, - 0xe9, 0x46, 0x84, 0x40, 0xde, 0xc0, 0x34, 0x33, 0xde, 0x68, 0x22, 0x09, 0xaf, 0x22, 0xa7, 0x8c, - 0x37, 0x9a, 0x24, 0x23, 0x44, 0x4b, 0xc8, 0xa4, 0x1a, 0x56, 0x5d, 0x64, 0x86, 0xe2, 0xd9, 0x6c, - 0x50, 0xf1, 0xc8, 0xe7, 0x9a, 0x2d, 0x42, 0xd3, 0xca, 0x29, 0x7f, 0x13, 0x64, 0x58, 0x09, 0xab, - 0xba, 0xc3, 0x5e, 0x8a, 0xb8, 0x50, 0xcb, 0x2a, 0x11, 0x1c, 0xf5, 0xed, 0x1e, 0x82, 0x63, 0x95, - 0x08, 0x91, 0xc9, 0x36, 0xac, 0x33, 0x19, 0x3f, 0xcc, 0x30, 0xc9, 0x45, 0x5c, 0xdc, 0xdb, 0xa2, - 0x14, 0x94, 0xf2, 0xe7, 0x13, 0x04, 0x64, 0x17, 0x16, 0xf0, 0xae, 0xc9, 0x5d, 0x03, 0x2e, 0xc8, - 0x6a, 0x82, 0xe4, 0x3a, 0xc2, 0x7d, 0x05, 0x15, 0x04, 0xf2, 0xbe, 0x82, 0xa8, 0xe4, 0x33, 0x00, - 0xc6, 0x70, 0xec, 0x0f, 0x06, 0x18, 0x3c, 0xb9, 0x88, 0x57, 0xa9, 0x4b, 0xf1, 0xf5, 0x88, 0x5c, - 0x22, 0x24, 0x1e, 0xe8, 0x0f, 0x7f, 0xdb, 0x89, 0x10, 0xcb, 0x12, 0x2f, 0xad, 0x06, 0x8b, 0x6c, - 0x31, 0x62, 0x20, 0x72, 0x9e, 0x5a, 0x45, 0x0a, 0x63, 0xcd, 0x02, 0x91, 0x73, 0x78, 0x3a, 0x10, - 0xb9, 0x44, 0xa0, 0xdd, 0x83, 0x33, 0x59, 0x0d, 0x8b, 0xdd, 0x8e, 0x95, 0x93, 0xde, 0x8e, 0xbf, - 0x9b, 0x87, 0x15, 0xe4, 0x26, 0x76, 0x61, 0x1d, 0x56, 0xad, 0xe9, 0xa3, 0x30, 0x4a, 0x97, 0xd8, - 0x8d, 0xb1, 0x7e, 0x81, 0x5c, 0x20, 0xbf, 0xe1, 0xc5, 0x28, 0x88, 0x01, 0x6b, 0xe2, 0x24, 0xd8, - 0x13, 0x9e, 0x03, 0x61, 0x0c, 0x70, 0x11, 0x69, 0x32, 0x9d, 0x61, 0x37, 0x41, 0x14, 0x9d, 0x07, - 0xf9, 0x67, 0x39, 0x0f, 0x0a, 0x27, 0x3a, 0x0f, 0x1e, 0xc2, 0x8a, 0xf8, 0x1a, 0xee, 0xe4, 0x0b, - 0xef, 0x6d, 0x27, 0x8f, 0x31, 0x23, 0xf5, 0x70, 0x47, 0x5f, 0x9c, 0xbb, 0xa3, 0xe3, 0xc3, 0xa8, - 0x58, 0x65, 0x23, 0x84, 0xa5, 0x37, 0x76, 0x4c, 0x41, 0xb9, 0x57, 0x69, 0xff, 0x0c, 0xa7, 0xe4, - 0xab, 0xb0, 0x5c, 0xf7, 0xc5, 0x9b, 0x98, 0xf4, 0x18, 0x31, 0x10, 0x40, 0x59, 0x5c, 0x08, 0x31, - 0xc3, 0xd3, 0x2d, 0xff, 0x7e, 0x9c, 0x6e, 0x6f, 0x00, 0x70, 0x97, 0x94, 0x28, 0x75, 0x1c, 0x2e, - 0x19, 0x11, 0xa1, 0x24, 0xfe, 0x26, 0x22, 0x21, 0xd3, 0xdd, 0x89, 0x9b, 0xdb, 0xe8, 0xbd, 0x9e, - 0x3f, 0x1d, 0x4e, 0x62, 0xb9, 0x96, 0x85, 0x07, 0xab, 0xc3, 0xcb, 0xe4, 0xed, 0x21, 0x41, 0xf6, - 0xfe, 0x0e, 0x08, 0xf9, 0x74, 0x68, 0xfc, 0xb8, 0x34, 0xaf, 0x87, 0xb4, 0x54, 0x0f, 0xcd, 0x34, - 0x79, 0xd4, 0x7e, 0xa8, 0xc8, 0x09, 0x18, 0x7e, 0x86, 0xa1, 0x7e, 0x1d, 0x20, 0x34, 0x4a, 0x10, - 0x63, 0xcd, 0xee, 0x4b, 0x21, 0x54, 0xee, 0xe5, 0x08, 0x57, 0x6a, 0x4d, 0xfe, 0xfd, 0x6a, 0x4d, - 0x07, 0x4a, 0xad, 0x2f, 0x4f, 0x9c, 0xc8, 0x8a, 0x05, 0xac, 0x50, 0x92, 0xc5, 0x9d, 0x29, 0xbf, - 0x7d, 0x1d, 0xcf, 0x86, 0x48, 0x0e, 0x9e, 0x21, 0x02, 0x4b, 0x84, 0xda, 0x5f, 0x28, 0xb0, 0x2e, - 0xbb, 0xdd, 0x3f, 0x19, 0xf6, 0xc8, 0x27, 0x58, 0x3c, 0x58, 0x25, 0x76, 0x65, 0x91, 0x90, 0xe8, - 0x96, 0xfb, 0x64, 0xd8, 0x63, 0x02, 0x90, 0xf3, 0x58, 0xae, 0x2c, 0x25, 0x24, 0x8f, 0x60, 0xa5, - 0xed, 0x0f, 0x06, 0x54, 0xac, 0x19, 0xbf, 0xc5, 0x2f, 0x00, 0x94, 0x51, 0xf2, 0x69, 0x44, 0x54, - 0x68, 0xfb, 0x05, 0x7e, 0xcf, 0xdd, 0x1c, 0xd1, 0xfd, 0xde, 0xe3, 0x74, 0x11, 0xdb, 0xb7, 0xd1, - 0x4f, 0x4e, 0xe6, 0xa9, 0xfd, 0x58, 0x01, 0x92, 0xae, 0x92, 0xbc, 0x65, 0x29, 0xff, 0x07, 0x22, - 0x6c, 0x42, 0xf4, 0x2b, 0x3c, 0x8b, 0xe8, 0x57, 0xfe, 0x5d, 0x05, 0xd6, 0x6b, 0x7a, 0x83, 0xa7, - 0x64, 0x60, 0x2f, 0x38, 0x57, 0xe1, 0x52, 0x4d, 0x6f, 0xd8, 0xed, 0x56, 0xbd, 0x56, 0x79, 0x60, - 0x67, 0x46, 0x5a, 0xbe, 0x04, 0xcf, 0xa5, 0x51, 0xa2, 0x97, 0x9e, 0x8b, 0xb0, 0x95, 0x2e, 0x16, - 0xd1, 0x98, 0xb3, 0x89, 0x45, 0xe0, 0xe6, 0x7c, 0xf9, 0x93, 0xb0, 0x2e, 0x22, 0x0f, 0x77, 0xea, - 0x16, 0xe6, 0x36, 0x58, 0x87, 0xd2, 0xbe, 0x61, 0xd6, 0x76, 0x1f, 0xd8, 0xbb, 0xdd, 0x7a, 0x5d, - 0x3d, 0x45, 0x56, 0x61, 0x99, 0x03, 0x2a, 0xba, 0xaa, 0x90, 0x15, 0x28, 0xd6, 0x9a, 0x96, 0x51, - 0xe9, 0x9a, 0x86, 0x9a, 0x2b, 0x7f, 0x12, 0xd6, 0xda, 0x63, 0xef, 0x2d, 0x67, 0xe2, 0xde, 0x73, - 0x9f, 0xe0, 0x43, 0xcd, 0x12, 0xe4, 0x4d, 0xfd, 0xbe, 0x7a, 0x8a, 0x00, 0x2c, 0xb6, 0xef, 0x55, - 0xac, 0xdb, 0xb7, 0x55, 0x85, 0x94, 0x60, 0x69, 0xaf, 0xd2, 0xb6, 0xef, 0x35, 0x2c, 0x35, 0x47, - 0x7f, 0xe8, 0xf7, 0x2d, 0xfc, 0x91, 0x2f, 0x7f, 0x18, 0x36, 0x50, 0x20, 0xa9, 0x7b, 0xc1, 0xc4, - 0x1d, 0xba, 0x63, 0xac, 0xc3, 0x0a, 0x14, 0x2d, 0x97, 0xee, 0x24, 0x13, 0x97, 0x55, 0xa0, 0x31, - 0x1d, 0x4c, 0xbc, 0xd1, 0xc0, 0xfd, 0xaa, 0xaa, 0x94, 0xdf, 0x80, 0x75, 0xd3, 0x9f, 0x4e, 0xbc, - 0xe1, 0xa1, 0x35, 0xa1, 0x18, 0x87, 0x4f, 0xc8, 0x59, 0xd8, 0xe8, 0x36, 0xf5, 0xc6, 0x76, 0x6d, - 0xaf, 0xdb, 0xea, 0x5a, 0x76, 0x43, 0xef, 0x54, 0xaa, 0xec, 0x99, 0xa8, 0xd1, 0xb2, 0x3a, 0xb6, - 0x69, 0x54, 0x8c, 0x66, 0x47, 0x55, 0xca, 0xdf, 0x46, 0xdd, 0x4a, 0xcf, 0x1f, 0xf6, 0x77, 0x9d, - 0xde, 0xc4, 0x1f, 0x63, 0x85, 0x35, 0xb8, 0x6c, 0x19, 0x95, 0x56, 0x73, 0xc7, 0xde, 0xd5, 0x2b, - 0x9d, 0x96, 0x99, 0x15, 0xea, 0xfb, 0x3c, 0x9c, 0xcb, 0xc0, 0x69, 0x75, 0xda, 0xaa, 0x42, 0xae, - 0xc0, 0x85, 0x8c, 0xb2, 0xfb, 0xc6, 0xb6, 0xde, 0xed, 0x54, 0x9b, 0x6a, 0x6e, 0x06, 0xb1, 0x65, - 0xb5, 0xd4, 0x7c, 0xf9, 0x37, 0x15, 0x58, 0xeb, 0x06, 0xdc, 0xe4, 0xbc, 0x8b, 0xde, 0xa6, 0xcf, - 0xc3, 0xc5, 0xae, 0x65, 0x98, 0x76, 0xa7, 0x75, 0xcf, 0x68, 0xda, 0x5d, 0x4b, 0xdf, 0x4b, 0xd6, - 0xe6, 0x0a, 0x5c, 0x90, 0x30, 0x4c, 0xa3, 0xd2, 0xda, 0x37, 0x4c, 0xbb, 0xad, 0x5b, 0xd6, 0xfd, - 0x96, 0xb9, 0xa3, 0x2a, 0xf4, 0x8b, 0x19, 0x08, 0x8d, 0x5d, 0x9d, 0xd5, 0x26, 0x56, 0xd6, 0x34, - 0xee, 0xeb, 0x75, 0x7b, 0xbb, 0xd5, 0x51, 0xf3, 0xe5, 0x06, 0x3d, 0xdf, 0x31, 0xe0, 0x2e, 0xb3, - 0x2c, 0x2c, 0x42, 0xa1, 0xd9, 0x6a, 0x1a, 0xc9, 0xc7, 0xc5, 0x15, 0x28, 0xea, 0xed, 0xb6, 0xd9, - 0xda, 0xc7, 0x29, 0x06, 0xb0, 0xb8, 0x63, 0x34, 0x69, 0xcd, 0xf2, 0xb4, 0xa4, 0x6d, 0xb6, 0x1a, - 0xad, 0x8e, 0xb1, 0xa3, 0x16, 0xca, 0xa6, 0x58, 0xc2, 0x82, 0x69, 0xcf, 0x67, 0x2f, 0x79, 0x3b, - 0xc6, 0xae, 0xde, 0xad, 0x77, 0xf8, 0x10, 0x3d, 0xb0, 0x4d, 0xe3, 0xd3, 0x5d, 0xc3, 0xea, 0x58, - 0xaa, 0x42, 0x54, 0x58, 0x69, 0x1a, 0xc6, 0x8e, 0x65, 0x9b, 0xc6, 0x7e, 0xcd, 0xb8, 0xaf, 0xe6, - 0x28, 0x4f, 0xf6, 0x3f, 0xfd, 0x42, 0xf9, 0x7b, 0x0a, 0x10, 0x16, 0xac, 0x58, 0x64, 0xc0, 0xc1, - 0x19, 0x73, 0x19, 0xce, 0x57, 0xe9, 0x50, 0x63, 0xd3, 0x1a, 0xad, 0x9d, 0x64, 0x97, 0x9d, 0x03, - 0x92, 0x28, 0x6f, 0xed, 0xee, 0xaa, 0x0a, 0xb9, 0x00, 0xa7, 0x13, 0xf0, 0x1d, 0xb3, 0xd5, 0x56, - 0x73, 0xe7, 0x73, 0x45, 0x85, 0x6c, 0xa6, 0x0a, 0xef, 0x19, 0x46, 0x5b, 0xcd, 0xd3, 0x21, 0x4a, - 0x14, 0x88, 0x25, 0xc1, 0xc8, 0x0b, 0xe5, 0x6f, 0x2a, 0x70, 0x8e, 0x55, 0x53, 0xac, 0xaf, 0xb0, - 0xaa, 0x17, 0x61, 0x8b, 0x87, 0x60, 0xcf, 0xaa, 0xe8, 0x19, 0x50, 0x63, 0xa5, 0xac, 0x9a, 0x67, - 0x61, 0x23, 0x06, 0xc5, 0x7a, 0xe4, 0xe8, 0xee, 0x11, 0x03, 0x6f, 0x1b, 0x56, 0xc7, 0x36, 0x76, - 0x77, 0x5b, 0x66, 0x87, 0x55, 0x24, 0x5f, 0xd6, 0x60, 0xa3, 0xe2, 0x8e, 0x27, 0xf4, 0xea, 0x35, - 0x0c, 0x3c, 0x7f, 0x88, 0x55, 0x58, 0x85, 0x65, 0xe3, 0x33, 0x1d, 0xa3, 0x69, 0xd5, 0x5a, 0x4d, - 0xf5, 0x54, 0xf9, 0x62, 0x02, 0x47, 0xac, 0x63, 0xcb, 0xaa, 0xaa, 0xa7, 0xca, 0x0e, 0xac, 0x0a, - 0xc3, 0x6b, 0x36, 0x2b, 0x2e, 0xc3, 0x79, 0x31, 0xd7, 0x70, 0x47, 0x49, 0x36, 0x61, 0x0b, 0xce, - 0xa4, 0xcb, 0x8d, 0x8e, 0xaa, 0xd0, 0x51, 0x48, 0x94, 0x50, 0x78, 0xae, 0xfc, 0xeb, 0x0a, 0xac, - 0x86, 0x8f, 0x26, 0xa8, 0xa6, 0xbd, 0x02, 0x17, 0x1a, 0xbb, 0xba, 0xbd, 0x63, 0xec, 0xd7, 0x2a, - 0x86, 0x7d, 0xaf, 0xd6, 0xdc, 0x49, 0x7c, 0xe4, 0x39, 0x38, 0x9b, 0x81, 0x80, 0x5f, 0xd9, 0x82, - 0x33, 0xc9, 0xa2, 0x0e, 0x5d, 0xaa, 0x39, 0xda, 0xf5, 0xc9, 0x92, 0x70, 0x9d, 0xe6, 0xcb, 0xfb, - 0xb0, 0x66, 0xe9, 0x8d, 0xfa, 0xae, 0x3f, 0xee, 0xb9, 0xfa, 0x74, 0x72, 0x34, 0x24, 0x17, 0x60, - 0x73, 0xb7, 0x65, 0x56, 0x0c, 0x1b, 0x51, 0x12, 0x35, 0x38, 0x0d, 0xeb, 0x72, 0xe1, 0x03, 0x83, - 0x4e, 0x5f, 0x02, 0x6b, 0x32, 0xb0, 0xd9, 0x52, 0x73, 0xe5, 0xcf, 0xc1, 0x4a, 0x2c, 0x11, 0xde, - 0x26, 0x9c, 0x96, 0x7f, 0xb7, 0xdd, 0x61, 0xdf, 0x1b, 0x1e, 0xaa, 0xa7, 0x92, 0x05, 0xe6, 0x74, - 0x38, 0xa4, 0x05, 0xb8, 0x9e, 0xe5, 0x82, 0x8e, 0x3b, 0x3e, 0xf6, 0x86, 0xce, 0xc4, 0xed, 0xab, - 0xb9, 0xf2, 0xcb, 0xb0, 0x1a, 0x0b, 0xbf, 0x4d, 0x07, 0xae, 0xde, 0xe2, 0x1b, 0x70, 0xc3, 0xd8, - 0xa9, 0x75, 0x1b, 0xea, 0x02, 0x5d, 0xc9, 0xd5, 0xda, 0x5e, 0x55, 0x85, 0xf2, 0x77, 0x14, 0x7a, - 0xcf, 0xc0, 0xa4, 0x3a, 0x8d, 0x5d, 0x5d, 0x0c, 0x35, 0x9d, 0x66, 0x2c, 0xa8, 0xbf, 0x61, 0x59, - 0xec, 0x4d, 0xfd, 0x22, 0x6c, 0xf1, 0x1f, 0xb6, 0xde, 0xdc, 0xb1, 0xab, 0xba, 0xb9, 0x73, 0x5f, - 0x37, 0xe9, 0xdc, 0x7b, 0xa0, 0xe6, 0x70, 0x41, 0x49, 0x10, 0xbb, 0xd3, 0xea, 0x56, 0xaa, 0x6a, - 0x9e, 0xce, 0xdf, 0x18, 0xbc, 0x5d, 0x6b, 0xaa, 0x05, 0x5c, 0x9e, 0x29, 0x6c, 0x64, 0x4b, 0xcb, - 0x17, 0xca, 0xef, 0x2a, 0xb0, 0x69, 0x79, 0x87, 0x43, 0x67, 0x32, 0x1d, 0xbb, 0xfa, 0xe0, 0xd0, - 0x1f, 0x7b, 0x93, 0xa3, 0x63, 0x6b, 0xea, 0x4d, 0x5c, 0x72, 0x0b, 0xae, 0x5b, 0xb5, 0xbd, 0xa6, - 0xde, 0xa1, 0xcb, 0x4b, 0xaf, 0xef, 0xb5, 0xcc, 0x5a, 0xa7, 0xda, 0xb0, 0xad, 0x6e, 0x2d, 0x35, - 0xf3, 0xae, 0xc1, 0xf3, 0xb3, 0x51, 0xeb, 0xc6, 0x9e, 0x5e, 0x79, 0xa0, 0x2a, 0xf3, 0x19, 0x6e, - 0xeb, 0x75, 0xbd, 0x59, 0x31, 0x76, 0xec, 0xfd, 0xdb, 0x6a, 0x8e, 0x5c, 0x87, 0xab, 0xb3, 0x51, - 0x77, 0x6b, 0x6d, 0x8b, 0xa2, 0xe5, 0xe7, 0x7f, 0xb7, 0x6a, 0x35, 0x28, 0x56, 0xa1, 0xfc, 0xc7, - 0x0a, 0x6c, 0xcd, 0x8a, 0xc1, 0x44, 0x6e, 0x80, 0x66, 0x34, 0x3b, 0xa6, 0x5e, 0xdb, 0xb1, 0x2b, - 0xa6, 0xb1, 0x63, 0x34, 0x3b, 0x35, 0xbd, 0x6e, 0xd9, 0x56, 0xab, 0x4b, 0x67, 0x53, 0x64, 0xfa, - 0xf0, 0x02, 0x5c, 0x99, 0x83, 0xd7, 0xaa, 0xed, 0x54, 0x54, 0x85, 0xdc, 0x86, 0x97, 0xe6, 0x20, - 0x59, 0x0f, 0xac, 0x8e, 0xd1, 0x90, 0x4b, 0xd4, 0x5c, 0xb9, 0x02, 0xe7, 0x67, 0x07, 0x69, 0xa1, - 0xdb, 0x74, 0xbc, 0xa7, 0x8b, 0x50, 0xd8, 0xa1, 0x27, 0x43, 0x2c, 0xf7, 0x43, 0xd9, 0x03, 0x35, - 0x19, 0x67, 0x21, 0x65, 0xa3, 0x62, 0x76, 0x9b, 0x4d, 0x76, 0x8c, 0xac, 0x43, 0xa9, 0xd5, 0xa9, - 0x1a, 0x26, 0xcf, 0x9e, 0x81, 0xe9, 0x32, 0xba, 0x4d, 0xba, 0x70, 0x5a, 0x66, 0xed, 0xb3, 0x78, - 0x9e, 0x6c, 0xc1, 0x19, 0xab, 0xae, 0x57, 0xee, 0xd9, 0xcd, 0x56, 0xc7, 0xae, 0x35, 0xed, 0x4a, - 0x55, 0x6f, 0x36, 0x8d, 0xba, 0x0a, 0xd8, 0x99, 0xb3, 0x7c, 0x2b, 0xc9, 0x07, 0xe1, 0x66, 0xeb, - 0x5e, 0x47, 0xb7, 0xdb, 0xf5, 0xee, 0x5e, 0xad, 0x69, 0x5b, 0x0f, 0x9a, 0x15, 0x21, 0xfb, 0x54, - 0xd2, 0x5b, 0xee, 0x4d, 0xb8, 0x36, 0x17, 0x3b, 0xca, 0x73, 0x71, 0x03, 0xb4, 0xb9, 0x98, 0xbc, - 0x21, 0xe5, 0x1f, 0x29, 0x70, 0x61, 0xce, 0x1b, 0x32, 0x79, 0x09, 0x6e, 0x55, 0x0d, 0x7d, 0xa7, - 0x6e, 0x58, 0x16, 0x6e, 0x14, 0x74, 0x18, 0x98, 0x2d, 0x4b, 0xe6, 0x86, 0x7a, 0x0b, 0xae, 0xcf, - 0x47, 0x8f, 0x8e, 0xe6, 0x9b, 0x70, 0x6d, 0x3e, 0x2a, 0x3f, 0xaa, 0x73, 0xa4, 0x0c, 0x37, 0xe6, - 0x63, 0x86, 0x47, 0x7c, 0xbe, 0xfc, 0xdb, 0x0a, 0x9c, 0xcb, 0x56, 0xe4, 0xd0, 0xba, 0xd5, 0x9a, - 0x56, 0x47, 0xaf, 0xd7, 0xed, 0xb6, 0x6e, 0xea, 0x0d, 0xdb, 0x68, 0x9a, 0xad, 0x7a, 0x3d, 0xeb, - 0x68, 0xbb, 0x06, 0xcf, 0xcf, 0x46, 0xb5, 0x2a, 0x66, 0xad, 0x4d, 0x77, 0x6f, 0x0d, 0x2e, 0xcf, - 0xc6, 0x32, 0x6a, 0x15, 0x43, 0xcd, 0x6d, 0xbf, 0xf9, 0x83, 0x7f, 0xba, 0x7c, 0xea, 0x07, 0xef, - 0x5e, 0x56, 0x7e, 0xfc, 0xee, 0x65, 0xe5, 0x1f, 0xdf, 0xbd, 0xac, 0x7c, 0xf6, 0xc5, 0x93, 0xa5, - 0x88, 0x42, 0xb9, 0xff, 0xd1, 0x22, 0xde, 0x50, 0x5e, 0xf9, 0x9f, 0x00, 0x00, 0x00, 0xff, 0xff, - 0x68, 0xd6, 0xc5, 0x87, 0x29, 0xbe, 0x01, 0x00, + 0x76, 0x20, 0x36, 0xdd, 0x8d, 0x8f, 0xc6, 0xc3, 0x57, 0x23, 0x01, 0x92, 0x20, 0x66, 0x86, 0xcd, + 0xa9, 0x99, 0xe1, 0x90, 0xb3, 0x33, 0xe4, 0x12, 0xdc, 0xe1, 0xee, 0xec, 0x7c, 0x6d, 0xa3, 0x1b, + 0x24, 0x9a, 0x04, 0x40, 0x6c, 0x35, 0x40, 0xec, 0x68, 0x3f, 0x6a, 0x0b, 0xdd, 0x09, 0xa0, 0x06, + 0xdd, 0x5d, 0xbd, 0x55, 0xd5, 0x04, 0xa1, 0x3d, 0xf9, 0xee, 0xf4, 0x71, 0xb2, 0x42, 0xd6, 0xe7, + 0x49, 0xa7, 0x3d, 0x87, 0x4e, 0x56, 0xc8, 0x77, 0x3e, 0xc5, 0x39, 0xa4, 0x38, 0x4b, 0x96, 0x7d, + 0xf6, 0x85, 0x65, 0xe9, 0xe2, 0x2c, 0xcb, 0x8a, 0x8b, 0x93, 0xc2, 0x3e, 0xdb, 0xe1, 0xf5, 0x05, + 0x64, 0x59, 0xfe, 0xe1, 0x40, 0x84, 0x23, 0x24, 0x5f, 0x84, 0x23, 0xbc, 0x0e, 0xdd, 0x39, 0xf2, + 0x65, 0x66, 0x55, 0x66, 0x55, 0x75, 0xa3, 0x31, 0xe4, 0xe8, 0xc4, 0x0d, 0xfd, 0x21, 0xd1, 0x2f, + 0xdf, 0x7b, 0x59, 0xf9, 0xfd, 0xf2, 0xe5, 0xfb, 0x80, 0x97, 0x02, 0xda, 0xa4, 0x1d, 0xd7, 0x0b, + 0x6e, 0x34, 0xe9, 0x9e, 0x5d, 0x3f, 0xba, 0x11, 0x1c, 0x75, 0xa8, 0xcf, 0xff, 0xbd, 0xde, 0xf1, + 0xdc, 0xc0, 0x25, 0xc3, 0xf8, 0x63, 0x61, 0x6e, 0xcf, 0xdd, 0x73, 0x11, 0x72, 0x83, 0xfd, 0xc5, + 0x0b, 0x17, 0x2e, 0xed, 0xb9, 0xee, 0x5e, 0x93, 0xde, 0xc0, 0x5f, 0x3b, 0xdd, 0xdd, 0x1b, 0x8d, + 0xae, 0x67, 0x07, 0x8e, 0xdb, 0x16, 0xe5, 0xc5, 0x78, 0x79, 0xe0, 0xb4, 0xa8, 0x1f, 0xd8, 0xad, + 0x4e, 0x2f, 0x06, 0x87, 0x9e, 0xdd, 0xe9, 0x50, 0x4f, 0xd4, 0xbe, 0x70, 0x2d, 0xfc, 0x40, 0x3b, + 0x08, 0x18, 0x25, 0x63, 0x7e, 0xe3, 0xd1, 0x4d, 0xf5, 0xa7, 0x40, 0xbd, 0xdd, 0xa3, 0x2d, 0x5e, + 0xd7, 0x0f, 0x68, 0xc3, 0x6a, 0xd0, 0x47, 0x4e, 0x9d, 0x5a, 0x1e, 0xfd, 0x46, 0xd7, 0xf1, 0x68, + 0x8b, 0xb6, 0x03, 0x41, 0xf7, 0x66, 0x3a, 0x9d, 0xfc, 0x90, 0xd8, 0x17, 0x19, 0xbf, 0x90, 0x83, + 0xb1, 0xfb, 0x94, 0x76, 0x4a, 0x4d, 0xe7, 0x11, 0x25, 0x2f, 0xc3, 0xd0, 0xba, 0xdd, 0xa2, 0xf3, + 0x99, 0xcb, 0x99, 0xab, 0x63, 0x4b, 0xd3, 0x27, 0xc7, 0xc5, 0x71, 0x9f, 0x7a, 0x8f, 0xa8, 0x67, + 0xb5, 0xed, 0x16, 0x35, 0xb1, 0x90, 0x7c, 0x0a, 0xc6, 0xd8, 0xff, 0x7e, 0xc7, 0xae, 0xd3, 0xf9, + 0x2c, 0x62, 0x4e, 0x9e, 0x1c, 0x17, 0xc7, 0xda, 0x12, 0x68, 0x46, 0xe5, 0xa4, 0x0a, 0xa3, 0xcb, + 0x8f, 0x3b, 0x8e, 0x47, 0xfd, 0xf9, 0xa1, 0xcb, 0x99, 0xab, 0xe3, 0x8b, 0x0b, 0xd7, 0x79, 0x1f, + 0x5d, 0x97, 0x7d, 0x74, 0x7d, 0x53, 0x76, 0xe2, 0xd2, 0xec, 0xef, 0x1e, 0x17, 0x9f, 0x3b, 0x39, + 0x2e, 0x8e, 0x52, 0x4e, 0xf2, 0x93, 0x7f, 0x58, 0xcc, 0x98, 0x92, 0x9e, 0xbc, 0x0b, 0x43, 0x9b, + 0x47, 0x1d, 0x3a, 0x3f, 0x76, 0x39, 0x73, 0x75, 0x6a, 0xf1, 0xd2, 0x75, 0x3e, 0xac, 0xe1, 0xc7, + 0x47, 0x7f, 0x31, 0xac, 0xa5, 0xfc, 0xc9, 0x71, 0x71, 0x88, 0xa1, 0x98, 0x48, 0x45, 0xde, 0x84, + 0x91, 0x15, 0xd7, 0x0f, 0xaa, 0x95, 0x79, 0xc0, 0x4f, 0x3e, 0x77, 0x72, 0x5c, 0x9c, 0xd9, 0x77, + 0xfd, 0xc0, 0x72, 0x1a, 0x6f, 0xb8, 0x2d, 0x27, 0xa0, 0xad, 0x4e, 0x70, 0x64, 0x0a, 0x24, 0xe3, + 0x31, 0x4c, 0x6a, 0xfc, 0xc8, 0x38, 0x8c, 0x6e, 0xad, 0xdf, 0x5f, 0x7f, 0xb0, 0xbd, 0x5e, 0x78, + 0x8e, 0xe4, 0x61, 0x68, 0xfd, 0x41, 0x65, 0xb9, 0x90, 0x21, 0xa3, 0x90, 0x2b, 0x6d, 0x6c, 0x14, + 0xb2, 0x64, 0x02, 0xf2, 0x95, 0xd2, 0x66, 0x69, 0xa9, 0x54, 0x5b, 0x2e, 0xe4, 0xc8, 0x2c, 0x4c, + 0x6f, 0x57, 0xd7, 0x2b, 0x0f, 0xb6, 0x6b, 0x56, 0x65, 0xb9, 0x76, 0x7f, 0xf3, 0xc1, 0x46, 0x61, + 0x88, 0x4c, 0x01, 0xdc, 0xdf, 0x5a, 0x5a, 0x36, 0xd7, 0x97, 0x37, 0x97, 0x6b, 0x85, 0x61, 0x32, + 0x07, 0x05, 0x49, 0x62, 0xd5, 0x96, 0xcd, 0x87, 0xd5, 0xf2, 0x72, 0x61, 0xe4, 0xde, 0x50, 0x3e, + 0x57, 0x18, 0x32, 0x47, 0x57, 0xa9, 0xed, 0xd3, 0x6a, 0xc5, 0xf8, 0x0f, 0x73, 0x90, 0x5f, 0xa3, + 0x81, 0xdd, 0xb0, 0x03, 0x9b, 0xbc, 0xa0, 0x8d, 0x0f, 0x36, 0x51, 0x19, 0x98, 0x97, 0x93, 0x03, + 0x33, 0x7c, 0x72, 0x5c, 0xcc, 0xbc, 0xa9, 0x0e, 0xc8, 0x3b, 0x30, 0x5e, 0xa1, 0x7e, 0xdd, 0x73, + 0x3a, 0x6c, 0xb2, 0xcd, 0xe7, 0x10, 0xed, 0xe2, 0xc9, 0x71, 0xf1, 0x5c, 0x23, 0x02, 0x2b, 0x1d, + 0xa2, 0x62, 0x93, 0x2a, 0x8c, 0xac, 0xda, 0x3b, 0xb4, 0xe9, 0xcf, 0x0f, 0x5f, 0xce, 0x5d, 0x1d, + 0x5f, 0x7c, 0x5e, 0x0c, 0x82, 0xfc, 0xc0, 0xeb, 0xbc, 0x74, 0xb9, 0x1d, 0x78, 0x47, 0x4b, 0x73, + 0x27, 0xc7, 0xc5, 0x42, 0x13, 0x01, 0x6a, 0x07, 0x73, 0x14, 0x52, 0x8b, 0x26, 0xc6, 0xc8, 0xa9, + 0x13, 0xe3, 0xc5, 0xdf, 0x3d, 0x2e, 0x66, 0xd8, 0x80, 0x89, 0x89, 0x11, 0xf1, 0xd3, 0xa7, 0xc8, + 0x22, 0xe4, 0x4d, 0xfa, 0xc8, 0xf1, 0x59, 0xcb, 0xf2, 0xd8, 0xb2, 0xf3, 0x27, 0xc7, 0x45, 0xe2, + 0x09, 0x98, 0xf2, 0x19, 0x21, 0xde, 0xc2, 0xdb, 0x30, 0xae, 0x7c, 0x35, 0x29, 0x40, 0xee, 0x80, + 0x1e, 0xf1, 0x1e, 0x36, 0xd9, 0x9f, 0x64, 0x0e, 0x86, 0x1f, 0xd9, 0xcd, 0xae, 0xe8, 0x52, 0x93, + 0xff, 0xf8, 0x7c, 0xf6, 0x73, 0x99, 0x7b, 0x43, 0xf9, 0xd1, 0x42, 0xde, 0xcc, 0x56, 0x2b, 0xc6, + 0x4f, 0x0f, 0x41, 0xde, 0x74, 0xf9, 0x02, 0x26, 0xd7, 0x60, 0xb8, 0x16, 0xd8, 0x81, 0x1c, 0xa6, + 0xd9, 0x93, 0xe3, 0xe2, 0x34, 0x5b, 0xdc, 0x54, 0xa9, 0x9f, 0x63, 0x30, 0xd4, 0x8d, 0x7d, 0xdb, + 0x97, 0xc3, 0x85, 0xa8, 0x1d, 0x06, 0x50, 0x51, 0x11, 0x83, 0x5c, 0x81, 0xa1, 0x35, 0xb7, 0x41, + 0xc5, 0x88, 0x91, 0x93, 0xe3, 0xe2, 0x54, 0xcb, 0x6d, 0xa8, 0x88, 0x58, 0x4e, 0xde, 0x80, 0xb1, + 0x72, 0xd7, 0xf3, 0x68, 0x9b, 0xcd, 0xf5, 0x21, 0x44, 0x9e, 0x3a, 0x39, 0x2e, 0x42, 0x9d, 0x03, + 0x2d, 0xa7, 0x61, 0x46, 0x08, 0x6c, 0x18, 0x6a, 0x81, 0xed, 0x05, 0xb4, 0x31, 0x3f, 0x3c, 0xd0, + 0x30, 0xb0, 0xf5, 0x39, 0xe3, 0x73, 0x92, 0xf8, 0x30, 0x08, 0x4e, 0x64, 0x05, 0xc6, 0xef, 0x7a, + 0x76, 0x9d, 0x6e, 0x50, 0xcf, 0x71, 0x1b, 0x38, 0xbe, 0xb9, 0xa5, 0x2b, 0x27, 0xc7, 0xc5, 0xf3, + 0x7b, 0x0c, 0x6c, 0x75, 0x10, 0x1e, 0x51, 0x7f, 0xe7, 0xb8, 0x98, 0xaf, 0x88, 0xad, 0xd6, 0x54, + 0x49, 0xc9, 0xd7, 0xd9, 0xe0, 0xf8, 0x01, 0x76, 0x2d, 0x6d, 0xcc, 0x8f, 0x9e, 0xfa, 0x89, 0x86, + 0xf8, 0xc4, 0xf3, 0x4d, 0xdb, 0x0f, 0x2c, 0x8f, 0xd3, 0xc5, 0xbe, 0x53, 0x65, 0x49, 0x1e, 0x40, + 0xbe, 0x56, 0xdf, 0xa7, 0x8d, 0x6e, 0x93, 0xe2, 0x94, 0x19, 0x5f, 0xbc, 0x20, 0x26, 0xb5, 0x1c, + 0x4f, 0x59, 0xbc, 0xb4, 0x20, 0x78, 0x13, 0x5f, 0x40, 0xd4, 0xf9, 0x24, 0xb1, 0x3e, 0x9f, 0xff, + 0xd6, 0x2f, 0x16, 0x9f, 0xfb, 0x6b, 0xff, 0xf2, 0xf2, 0x73, 0xc6, 0x7f, 0x9e, 0x85, 0x42, 0x9c, + 0x09, 0xd9, 0x85, 0xc9, 0xad, 0x4e, 0xc3, 0x0e, 0x68, 0xb9, 0xe9, 0xd0, 0x76, 0xe0, 0xe3, 0x24, + 0xe9, 0xdf, 0xa6, 0x57, 0x44, 0xbd, 0xf3, 0x5d, 0x24, 0xb4, 0xea, 0x9c, 0x32, 0xd6, 0x2a, 0x9d, + 0x6d, 0x54, 0x4f, 0x0d, 0x37, 0x70, 0x1f, 0x67, 0xd8, 0xd9, 0xea, 0xe1, 0x5b, 0x7f, 0x8f, 0x7a, + 0x04, 0x5b, 0x31, 0x81, 0xda, 0x8d, 0x9d, 0x23, 0x9c, 0x99, 0x83, 0x4f, 0x20, 0x46, 0x92, 0x32, + 0x81, 0x18, 0xd8, 0xf8, 0x3f, 0x32, 0x30, 0x65, 0x52, 0xdf, 0xed, 0x7a, 0x75, 0xba, 0x42, 0xed, + 0x06, 0xf5, 0xd8, 0xf4, 0xbf, 0xef, 0xb4, 0x1b, 0x62, 0x4d, 0xe1, 0xf4, 0x3f, 0x70, 0xda, 0xea, + 0xd6, 0x8d, 0xe5, 0xe4, 0xd3, 0x30, 0x5a, 0xeb, 0xee, 0x20, 0x6a, 0x36, 0xda, 0x01, 0xfc, 0xee, + 0x8e, 0x15, 0x43, 0x97, 0x68, 0xe4, 0x06, 0x8c, 0x3e, 0xa4, 0x9e, 0x1f, 0xed, 0x86, 0x78, 0x34, + 0x3c, 0xe2, 0x20, 0x95, 0x40, 0x60, 0x91, 0xbb, 0xd1, 0x8e, 0x2c, 0x0e, 0xb5, 0xe9, 0xd8, 0x3e, + 0x18, 0x4d, 0x95, 0x96, 0x80, 0xa8, 0x53, 0x45, 0x62, 0x19, 0x3f, 0x95, 0x85, 0x42, 0xc5, 0x0e, + 0xec, 0x1d, 0xdb, 0x17, 0xfd, 0xf9, 0xf0, 0x16, 0xdb, 0xe3, 0x95, 0x86, 0xe2, 0x1e, 0xcf, 0xbe, + 0xfc, 0x63, 0x37, 0xef, 0xd5, 0x78, 0xf3, 0xc6, 0xd9, 0x09, 0x2b, 0x9a, 0x17, 0x35, 0xea, 0xbd, + 0xd3, 0x1b, 0x55, 0x10, 0x8d, 0xca, 0xcb, 0x46, 0x45, 0x4d, 0x21, 0xef, 0xc1, 0x50, 0xad, 0x43, + 0xeb, 0x62, 0x13, 0x91, 0xe7, 0x82, 0xde, 0x38, 0x86, 0xf0, 0xf0, 0xd6, 0xd2, 0x84, 0x60, 0x33, + 0xe4, 0x77, 0x68, 0xdd, 0x44, 0x32, 0x65, 0xd1, 0xfc, 0xa3, 0x1c, 0xcc, 0xa5, 0x91, 0xa9, 0xed, + 0x18, 0xe9, 0xd3, 0x8e, 0xab, 0x90, 0x67, 0x47, 0x38, 0x3b, 0x16, 0x71, 0xbb, 0x18, 0x5b, 0x9a, + 0x60, 0x9f, 0xbc, 0x2f, 0x60, 0x66, 0x58, 0x4a, 0x5e, 0x0e, 0x25, 0x82, 0x7c, 0xc4, 0x4f, 0x48, + 0x04, 0x52, 0x0e, 0x60, 0x63, 0x2d, 0x97, 0x30, 0x0a, 0x0e, 0x51, 0xb7, 0x48, 0x70, 0x34, 0xd6, + 0x9e, 0x80, 0x68, 0xc7, 0x8c, 0x3c, 0x14, 0x96, 0x21, 0x2f, 0x9b, 0x35, 0x3f, 0x81, 0x8c, 0x66, + 0x62, 0x9d, 0xf4, 0xf0, 0x16, 0x1f, 0xcc, 0x86, 0xf8, 0xad, 0xb2, 0x91, 0x38, 0xe4, 0x16, 0xe4, + 0x37, 0x3c, 0xf7, 0xf1, 0x51, 0xb5, 0xe2, 0xcf, 0x4f, 0x5e, 0xce, 0x5d, 0x1d, 0x5b, 0xba, 0x70, + 0x72, 0x5c, 0x9c, 0xed, 0x30, 0x98, 0xe5, 0x34, 0xd4, 0x93, 0x36, 0x44, 0xbc, 0x37, 0x94, 0xcf, + 0x14, 0xb2, 0xf7, 0x86, 0xf2, 0xd9, 0x42, 0x8e, 0x8b, 0x17, 0xf7, 0x86, 0xf2, 0x43, 0x85, 0xe1, + 0x7b, 0x43, 0xf9, 0x61, 0x14, 0x38, 0xc6, 0x0a, 0x70, 0x6f, 0x28, 0x3f, 0x5e, 0x98, 0xd0, 0x4e, + 0x7b, 0x64, 0x10, 0xb8, 0x75, 0xb7, 0x69, 0xe6, 0xb6, 0xcc, 0xaa, 0x39, 0x52, 0x2e, 0x95, 0xa9, + 0x17, 0x98, 0xb9, 0xd2, 0x76, 0xcd, 0x9c, 0xac, 0x1c, 0xb5, 0xed, 0x96, 0x53, 0xe7, 0x47, 0xa7, + 0x99, 0xbb, 0x5b, 0xde, 0x30, 0x4a, 0x30, 0x15, 0xb5, 0x65, 0xd5, 0xf1, 0x03, 0x72, 0x03, 0xc6, + 0x24, 0x84, 0x6d, 0x74, 0xb9, 0xd4, 0x56, 0x9b, 0x11, 0x8e, 0xf1, 0x3b, 0x59, 0x80, 0xa8, 0xe4, + 0x19, 0x5d, 0x0b, 0x9f, 0xd5, 0xd6, 0xc2, 0xb9, 0xf8, 0x5a, 0xe8, 0xb9, 0x0a, 0xc8, 0x07, 0x30, + 0xc2, 0xc4, 0x82, 0xae, 0x14, 0x89, 0x2e, 0xc4, 0x49, 0xb1, 0xf0, 0xe1, 0xad, 0xa5, 0x29, 0x41, + 0x3c, 0xe2, 0x23, 0xc4, 0x14, 0x64, 0xca, 0x32, 0xfa, 0x85, 0xd1, 0x68, 0x30, 0xc4, 0x02, 0xba, + 0x0a, 0xe1, 0x80, 0x8a, 0x0e, 0xc5, 0x95, 0xd1, 0x91, 0x83, 0x1c, 0x96, 0x92, 0x8b, 0xc0, 0x06, + 0x5c, 0x74, 0xea, 0xe8, 0xc9, 0x71, 0x31, 0xd7, 0xf5, 0x1c, 0x9c, 0x04, 0xe4, 0x06, 0x88, 0x69, + 0x20, 0x3a, 0x90, 0xcd, 0xbe, 0x99, 0xba, 0x6d, 0xd5, 0xa9, 0x17, 0x44, 0x3d, 0x3e, 0x9f, 0x91, + 0xb3, 0x85, 0x74, 0x40, 0x9f, 0x2a, 0xf3, 0x43, 0x38, 0x0d, 0xae, 0xa6, 0xf6, 0xca, 0x75, 0x0d, + 0x95, 0x8b, 0x91, 0x97, 0xe5, 0xa9, 0xd4, 0xe0, 0x65, 0x56, 0x42, 0xa4, 0xd4, 0x2b, 0x20, 0xb7, + 0x80, 0xcd, 0x50, 0xd1, 0xfb, 0x20, 0xea, 0x29, 0x6d, 0xd7, 0x96, 0xce, 0x09, 0x4e, 0x93, 0xf6, + 0xa1, 0x4a, 0xce, 0xb0, 0xc9, 0x3b, 0xc0, 0xa6, 0xb0, 0xe8, 0x77, 0x22, 0x88, 0xee, 0x96, 0x37, + 0xca, 0x4d, 0xb7, 0xdb, 0xa8, 0x7d, 0x71, 0x35, 0x22, 0xde, 0xab, 0x77, 0x54, 0xe2, 0xbb, 0xe5, + 0x0d, 0xf2, 0x0e, 0x0c, 0x97, 0xbe, 0xb7, 0xeb, 0x51, 0x21, 0x9f, 0x4c, 0xc8, 0x3a, 0x19, 0x6c, + 0xe9, 0x82, 0x20, 0x9c, 0xb6, 0xd9, 0x4f, 0x55, 0xae, 0xc3, 0x72, 0x56, 0xf3, 0xe6, 0x6a, 0x4d, + 0xc8, 0x1e, 0x24, 0xd6, 0x2d, 0x9b, 0xab, 0xca, 0x67, 0x07, 0x5a, 0xab, 0x19, 0x15, 0xb9, 0x01, + 0xd9, 0x52, 0x05, 0x6f, 0x44, 0xe3, 0x8b, 0x63, 0xb2, 0xda, 0xca, 0xd2, 0x9c, 0x20, 0x99, 0xb0, + 0xd5, 0x65, 0x90, 0x2d, 0x55, 0xc8, 0x12, 0x0c, 0xaf, 0x1d, 0xd5, 0xbe, 0xb8, 0x2a, 0x36, 0xb3, + 0x59, 0x39, 0xaf, 0x19, 0xec, 0x01, 0x2e, 0x7b, 0x3f, 0xfa, 0xe2, 0xd6, 0x91, 0xff, 0x8d, 0xa6, + 0xfa, 0xc5, 0x88, 0x46, 0x36, 0x60, 0xac, 0xd4, 0x68, 0x39, 0xed, 0x2d, 0x9f, 0x7a, 0xf3, 0xe3, + 0xc8, 0x67, 0x3e, 0xf6, 0xdd, 0x61, 0xf9, 0xd2, 0xfc, 0xc9, 0x71, 0x71, 0xce, 0x66, 0x3f, 0xad, + 0xae, 0x4f, 0x3d, 0x85, 0x5b, 0xc4, 0x84, 0x6c, 0x00, 0xac, 0xb9, 0xed, 0x3d, 0xb7, 0x14, 0x34, + 0x6d, 0x3f, 0xb6, 0x3d, 0x46, 0x05, 0xa1, 0xf8, 0x70, 0xae, 0xc5, 0x60, 0x96, 0xcd, 0x80, 0x0a, + 0x43, 0x85, 0x07, 0xb9, 0x03, 0x23, 0x0f, 0x3c, 0xbb, 0xde, 0xa4, 0xf3, 0x93, 0xc8, 0x6d, 0x4e, + 0x70, 0xe3, 0x40, 0xd9, 0xd2, 0x79, 0xc1, 0xb0, 0xe0, 0x22, 0x58, 0xbd, 0xa6, 0x70, 0xc4, 0x85, + 0x6d, 0x20, 0xc9, 0x39, 0x99, 0x72, 0x49, 0xf8, 0x94, 0x7a, 0x49, 0x88, 0x16, 0x7d, 0xd9, 0x6d, + 0xb5, 0xec, 0x76, 0x03, 0x69, 0x1f, 0x2e, 0x2a, 0x77, 0x07, 0xe3, 0x1b, 0x30, 0x93, 0xe8, 0xac, + 0x53, 0xee, 0x77, 0xef, 0xc3, 0x74, 0x85, 0xee, 0xda, 0xdd, 0x66, 0x10, 0x9e, 0x24, 0x7c, 0x89, + 0xe2, 0x4d, 0xab, 0xc1, 0x8b, 0x2c, 0x79, 0x7c, 0x98, 0x71, 0x64, 0xe3, 0x3d, 0x98, 0xd4, 0x9a, + 0xcf, 0xae, 0x0a, 0xa5, 0x6e, 0xc3, 0x09, 0x70, 0x20, 0x33, 0xd1, 0x55, 0xc1, 0x66, 0x40, 0x1c, + 0x2e, 0x33, 0x42, 0x30, 0xfe, 0xae, 0x2a, 0xad, 0x88, 0x9d, 0x88, 0x5d, 0xab, 0xc5, 0x7e, 0x90, + 0x89, 0x64, 0xa7, 0xc4, 0x7e, 0x10, 0xee, 0x06, 0xd7, 0xf8, 0xda, 0xcc, 0x26, 0xd6, 0xe6, 0xb8, + 0x18, 0x89, 0x9c, 0x7d, 0xe8, 0xf3, 0x15, 0x19, 0xce, 0xd4, 0xdc, 0xc7, 0x9f, 0xa9, 0x1f, 0xc0, + 0xc4, 0x9a, 0xdd, 0xb6, 0xf7, 0x68, 0x83, 0xb5, 0x80, 0xef, 0x3d, 0x63, 0x4b, 0xcf, 0x9f, 0x1c, + 0x17, 0x2f, 0xb4, 0x38, 0x1c, 0x5b, 0xa9, 0x4e, 0x22, 0x8d, 0x80, 0xdc, 0x94, 0x2b, 0x7b, 0x38, + 0x65, 0x65, 0x4f, 0x8a, 0xda, 0x87, 0x71, 0x65, 0x8b, 0xf5, 0x6c, 0xfc, 0xd6, 0x18, 0xb6, 0x91, + 0xbc, 0x01, 0x23, 0x26, 0xdd, 0x63, 0x47, 0x4d, 0x26, 0x1a, 0x24, 0x0f, 0x21, 0x6a, 0xc7, 0x70, + 0x1c, 0x94, 0x33, 0x68, 0xc3, 0xdf, 0x77, 0x76, 0x03, 0xd1, 0x3b, 0xa1, 0x9c, 0x21, 0xc0, 0x8a, + 0x9c, 0x21, 0x20, 0xfa, 0x75, 0x96, 0xc3, 0xd8, 0xee, 0x67, 0x56, 0x6a, 0xa2, 0xd3, 0x64, 0x0f, + 0x9b, 0x15, 0x65, 0x1b, 0xf1, 0x34, 0x29, 0x81, 0x61, 0x93, 0xdb, 0x30, 0x56, 0xaa, 0xd7, 0xdd, + 0xae, 0x72, 0x67, 0xe4, 0xeb, 0x96, 0x03, 0x75, 0x15, 0x49, 0x84, 0x4a, 0x6a, 0x30, 0xbe, 0xcc, + 0x2e, 0x5a, 0x4e, 0xd9, 0xae, 0xef, 0xcb, 0x4e, 0x92, 0x7b, 0x98, 0x52, 0x12, 0xad, 0x5c, 0x8a, + 0xc0, 0x3a, 0x03, 0xaa, 0x4a, 0x06, 0x05, 0x97, 0x6c, 0xc2, 0x78, 0x8d, 0xd6, 0x3d, 0x1a, 0xd4, + 0x02, 0xd7, 0xa3, 0xb1, 0x2d, 0x59, 0x29, 0x59, 0xba, 0x24, 0xef, 0x7a, 0x3e, 0x02, 0x2d, 0x9f, + 0x41, 0x55, 0xae, 0x0a, 0x32, 0x17, 0xda, 0x5b, 0xae, 0x77, 0x54, 0x59, 0x12, 0xdb, 0x74, 0x74, + 0xa6, 0x73, 0xb0, 0x2a, 0xb4, 0x33, 0x48, 0x63, 0x47, 0x17, 0xda, 0x39, 0x16, 0x8e, 0x54, 0xa5, + 0x86, 0xb2, 0x95, 0xd8, 0xb4, 0xa7, 0xa3, 0x5e, 0x46, 0xb0, 0x32, 0x52, 0x0d, 0x1f, 0x25, 0x33, + 0x6d, 0xa4, 0x04, 0x16, 0xe9, 0x00, 0x91, 0xa3, 0xc6, 0x05, 0xdd, 0x26, 0xf5, 0x7d, 0xb1, 0x97, + 0x5f, 0x8c, 0x0d, 0x7e, 0x84, 0xb0, 0xf4, 0xaa, 0x60, 0xfe, 0xa2, 0x9c, 0x06, 0xe2, 0x9e, 0xc6, + 0x0a, 0x95, 0x7a, 0x52, 0x78, 0x93, 0xb7, 0x01, 0x96, 0x1f, 0x07, 0xd4, 0x6b, 0xdb, 0xcd, 0x50, + 0x0f, 0x86, 0xaa, 0x1f, 0x2a, 0xa0, 0xfa, 0x40, 0x2b, 0xc8, 0xa4, 0x0c, 0x93, 0x25, 0xdf, 0xef, + 0xb6, 0xa8, 0xe9, 0x36, 0x69, 0xc9, 0x5c, 0xc7, 0x7d, 0x7f, 0x6c, 0xe9, 0xc5, 0x93, 0xe3, 0xe2, + 0x45, 0x1b, 0x0b, 0x2c, 0xcf, 0x6d, 0x52, 0xcb, 0xf6, 0xd4, 0xd9, 0xad, 0xd3, 0x90, 0x07, 0x00, + 0x0f, 0x3a, 0xb4, 0x5d, 0xa3, 0xb6, 0x57, 0xdf, 0x8f, 0x6d, 0xf3, 0x51, 0xc1, 0xd2, 0x0b, 0xa2, + 0x85, 0x73, 0x6e, 0x87, 0xb6, 0x7d, 0x84, 0xa9, 0x5f, 0x15, 0x61, 0x92, 0x6d, 0x98, 0xae, 0x96, + 0xd6, 0x36, 0xdc, 0xa6, 0x53, 0x3f, 0x12, 0x92, 0xd3, 0x14, 0x6a, 0x07, 0xcf, 0x0b, 0xae, 0xb1, + 0x52, 0xbe, 0x3d, 0x39, 0x76, 0xcb, 0xea, 0x20, 0xd4, 0x12, 0xf2, 0x53, 0x9c, 0x0b, 0xf9, 0x90, + 0xcd, 0x41, 0x9f, 0x09, 0x83, 0x9b, 0xf6, 0x9e, 0x3f, 0x3f, 0xad, 0x69, 0xbb, 0x4a, 0xdb, 0xb5, + 0xeb, 0x4a, 0x29, 0x17, 0x53, 0x16, 0xf8, 0x44, 0x44, 0xa8, 0x15, 0xd8, 0x7b, 0xbe, 0x3e, 0x11, + 0x43, 0x6c, 0x72, 0x0f, 0xa0, 0xe2, 0xd6, 0xbb, 0x2d, 0xda, 0x0e, 0x2a, 0x4b, 0xf3, 0x05, 0xfd, + 0x2a, 0x10, 0x16, 0x44, 0x5b, 0x5b, 0xc3, 0xad, 0x6b, 0x33, 0x51, 0xa1, 0x5e, 0x78, 0x1f, 0x0a, + 0xf1, 0x0f, 0x39, 0xa3, 0x02, 0x6b, 0xb2, 0x30, 0xa5, 0xb4, 0x7e, 0xf9, 0xb1, 0xe3, 0x07, 0xbe, + 0xf1, 0x4d, 0x6d, 0x05, 0xb2, 0xdd, 0xe1, 0x3e, 0x3d, 0xda, 0xf0, 0xe8, 0xae, 0xf3, 0x58, 0x6c, + 0x66, 0xb8, 0x3b, 0x1c, 0xd0, 0x23, 0xab, 0x83, 0x50, 0x75, 0x77, 0x08, 0x51, 0xc9, 0x67, 0x20, + 0x7f, 0x7f, 0xad, 0x76, 0x9f, 0x1e, 0x55, 0x2b, 0xe2, 0xa0, 0xe2, 0x64, 0x2d, 0xdf, 0x62, 0xa4, + 0xda, 0x5c, 0x0b, 0x31, 0x8d, 0xa5, 0x68, 0x27, 0x64, 0x35, 0x97, 0x9b, 0x5d, 0x3f, 0xa0, 0x5e, + 0xb5, 0xa2, 0xd6, 0x5c, 0xe7, 0xc0, 0xd8, 0xbe, 0x14, 0xa2, 0x1a, 0xff, 0x26, 0x8b, 0xbb, 0x20, + 0x9b, 0xf0, 0xd5, 0xb6, 0x1f, 0xd8, 0xed, 0x3a, 0x0d, 0x19, 0xe0, 0x84, 0x77, 0x04, 0x34, 0x36, + 0xe1, 0x23, 0x64, 0xbd, 0xea, 0xec, 0xc0, 0x55, 0xb3, 0x2a, 0xa5, 0xe6, 0xa2, 0x5a, 0x51, 0xd5, + 0xab, 0x9e, 0x80, 0xc6, 0xaa, 0x8c, 0x90, 0xc9, 0x15, 0x18, 0xad, 0x96, 0xd6, 0x4a, 0xdd, 0x60, + 0x1f, 0xf7, 0xe0, 0x3c, 0x97, 0xcf, 0xd9, 0x6c, 0xb5, 0xbb, 0xc1, 0xbe, 0x29, 0x0b, 0xc9, 0x0d, + 0xbc, 0xf7, 0xb4, 0x69, 0xc0, 0xd5, 0xb0, 0xe2, 0xd0, 0xf5, 0x39, 0x28, 0x76, 0xed, 0x61, 0x20, + 0xf2, 0x3a, 0x0c, 0x3f, 0xdc, 0x28, 0x57, 0x2b, 0xe2, 0xe2, 0x8c, 0x27, 0xd1, 0xa3, 0x4e, 0x5d, + 0xff, 0x12, 0x8e, 0x42, 0x96, 0x61, 0xaa, 0x46, 0xeb, 0x5d, 0xcf, 0x09, 0x8e, 0xee, 0x7a, 0x6e, + 0xb7, 0xe3, 0xcf, 0x8f, 0x62, 0x1d, 0xb8, 0xd2, 0x7d, 0x51, 0x62, 0xed, 0x61, 0x91, 0x42, 0x1d, + 0x23, 0x32, 0x7e, 0x3b, 0x13, 0x6d, 0x93, 0xe4, 0x8a, 0x26, 0xd6, 0xa0, 0xee, 0x86, 0x89, 0x35, + 0xaa, 0xee, 0x06, 0x05, 0x1c, 0x13, 0x48, 0xb9, 0xeb, 0x07, 0x6e, 0x6b, 0xb9, 0xdd, 0xe8, 0xb8, + 0x4e, 0x3b, 0x40, 0x2a, 0xde, 0xf9, 0xc6, 0xc9, 0x71, 0xf1, 0x52, 0x1d, 0x4b, 0x2d, 0x2a, 0x8a, + 0xad, 0x18, 0x97, 0x14, 0xea, 0x27, 0x18, 0x0f, 0xe3, 0xf7, 0xb2, 0xda, 0xf1, 0xc6, 0x3e, 0xcf, + 0xa4, 0x9d, 0xa6, 0x53, 0xc7, 0x1b, 0x3d, 0x36, 0x34, 0x9c, 0x55, 0xf8, 0x79, 0x5e, 0x54, 0xca, + 0x7b, 0x48, 0xe7, 0x9d, 0x42, 0x4d, 0xbe, 0x00, 0x13, 0x4c, 0xd2, 0x10, 0x3f, 0xfd, 0xf9, 0x2c, + 0x76, 0xf6, 0x0b, 0xa8, 0x85, 0xf3, 0xa9, 0x17, 0xb2, 0xd1, 0x44, 0x14, 0x95, 0x82, 0x34, 0x60, + 0x7e, 0xd3, 0xb3, 0xdb, 0xbe, 0x13, 0x2c, 0xb7, 0xeb, 0xde, 0x11, 0x4a, 0x46, 0xcb, 0x6d, 0x7b, + 0xa7, 0x49, 0x1b, 0xd8, 0xdc, 0xfc, 0xd2, 0xd5, 0x93, 0xe3, 0xe2, 0x2b, 0x01, 0xc7, 0xb1, 0x68, + 0x88, 0x64, 0x51, 0x8e, 0xa5, 0x70, 0xee, 0xc9, 0x89, 0x49, 0x52, 0xb2, 0x5b, 0xf1, 0x11, 0x86, + 0x0b, 0x09, 0x28, 0x49, 0x85, 0xa3, 0xc1, 0xf6, 0x30, 0xf5, 0x33, 0x55, 0x02, 0xe3, 0xff, 0xc9, + 0x44, 0x07, 0x30, 0x79, 0x17, 0xc6, 0xc5, 0x8a, 0x51, 0xe6, 0x05, 0xee, 0xa0, 0x72, 0x79, 0xc5, + 0x46, 0x56, 0x45, 0x67, 0xf7, 0xfe, 0x52, 0x79, 0x55, 0x99, 0x1b, 0x78, 0xef, 0xb7, 0xeb, 0xcd, + 0x38, 0x95, 0x44, 0x63, 0x93, 0x60, 0x73, 0xb5, 0xa6, 0xf7, 0x0a, 0x4e, 0x82, 0xa0, 0xe9, 0xa7, + 0x74, 0x83, 0x82, 0xfc, 0xe4, 0x0d, 0xff, 0x9f, 0x33, 0x69, 0xe7, 0x3c, 0x59, 0x82, 0xc9, 0x6d, + 0xd7, 0x3b, 0xc0, 0xf1, 0x55, 0x3a, 0x01, 0x47, 0xfe, 0x50, 0x16, 0xc4, 0x1b, 0xa4, 0x93, 0xa8, + 0xdf, 0xa6, 0xf4, 0x86, 0xfe, 0x6d, 0x31, 0x0e, 0x1a, 0x01, 0x1b, 0x87, 0x90, 0x63, 0xb8, 0x3a, + 0x70, 0x1c, 0xa2, 0x4f, 0xd0, 0xa6, 0xb0, 0x8a, 0x6e, 0xfc, 0x57, 0x19, 0xf5, 0x3c, 0x67, 0x9d, + 0x5c, 0x71, 0x5b, 0xb6, 0xd3, 0x56, 0x9a, 0xc3, 0x1f, 0x96, 0x10, 0x1a, 0xff, 0x12, 0x05, 0x99, + 0xdc, 0x82, 0x3c, 0xff, 0x15, 0xee, 0xb5, 0xa8, 0xd5, 0x12, 0x84, 0xfa, 0x41, 0x21, 0x11, 0x13, + 0x23, 0x93, 0x3b, 0xeb, 0xc8, 0xfc, 0x56, 0x46, 0x3d, 0x8a, 0x3f, 0xee, 0x61, 0x13, 0x3b, 0x64, + 0xb2, 0x67, 0x39, 0x64, 0x9e, 0xb8, 0x09, 0x7f, 0x2d, 0x03, 0xe3, 0x8a, 0x96, 0x82, 0xb5, 0x61, + 0xc3, 0x73, 0x3f, 0xa2, 0xf5, 0x40, 0x6f, 0x43, 0x87, 0x03, 0x63, 0x6d, 0x08, 0x51, 0x9f, 0xa0, + 0x0d, 0xc6, 0x9f, 0x66, 0xc4, 0x1d, 0x69, 0xe0, 0x6d, 0x5e, 0xdf, 0x92, 0xb3, 0x67, 0x39, 0x22, + 0xbf, 0x00, 0xc3, 0x26, 0x6d, 0x38, 0xbe, 0xb8, 0xdf, 0xcc, 0xa8, 0xf7, 0x31, 0x2c, 0x88, 0xe4, + 0x26, 0x8f, 0xfd, 0x54, 0xcf, 0x37, 0x2c, 0x67, 0x82, 0x6c, 0xd5, 0xbf, 0xd3, 0xa4, 0x8f, 0x1d, + 0xbe, 0x18, 0xc5, 0x51, 0x8b, 0xc7, 0x9b, 0xe3, 0x5b, 0xbb, 0xac, 0x44, 0x48, 0xd4, 0xea, 0xc2, + 0xd3, 0x68, 0x8c, 0x0f, 0x01, 0xa2, 0x2a, 0xc9, 0x7d, 0x28, 0x88, 0xd9, 0xe0, 0xb4, 0xf7, 0xb8, + 0x20, 0x25, 0xfa, 0xa0, 0x78, 0x72, 0x5c, 0x7c, 0xbe, 0x1e, 0x96, 0x09, 0xa9, 0x53, 0xe1, 0x9b, + 0x20, 0x34, 0xfe, 0x7e, 0x16, 0xb2, 0x25, 0x1c, 0x90, 0xfb, 0xf4, 0x28, 0xb0, 0x77, 0xee, 0x38, + 0x4d, 0x6d, 0x31, 0x1d, 0x20, 0xd4, 0xda, 0x75, 0x34, 0x75, 0x85, 0x82, 0xcc, 0x16, 0xd3, 0x7d, + 0x6f, 0xe7, 0x2d, 0x24, 0x54, 0x16, 0xd3, 0x81, 0xb7, 0xf3, 0x56, 0x9c, 0x2c, 0x44, 0x24, 0x06, + 0x8c, 0xf0, 0x85, 0x25, 0xe6, 0x20, 0x9c, 0x1c, 0x17, 0x47, 0xf8, 0xfa, 0x33, 0x45, 0x09, 0xb9, + 0x08, 0xb9, 0xda, 0xc6, 0xba, 0xd8, 0x01, 0x51, 0x2d, 0xe8, 0x77, 0xda, 0x26, 0x83, 0xb1, 0x3a, + 0x57, 0x2b, 0xa5, 0x0d, 0x54, 0x04, 0x0c, 0x47, 0x75, 0x36, 0x1b, 0x76, 0x27, 0xae, 0x0a, 0x08, + 0x11, 0xc9, 0x7b, 0x30, 0x7e, 0xbf, 0x52, 0x5e, 0x71, 0x7d, 0xbe, 0x7b, 0x8d, 0x44, 0x93, 0xff, + 0xa0, 0x51, 0xb7, 0x50, 0x13, 0x1f, 0x3f, 0x06, 0x14, 0x7c, 0xe3, 0x87, 0xb2, 0x30, 0xae, 0xe8, + 0xc9, 0xc8, 0x67, 0xc4, 0x03, 0x69, 0x46, 0xbb, 0x01, 0x28, 0x18, 0xac, 0x94, 0x2b, 0x55, 0x5a, + 0x6e, 0x83, 0x8a, 0xe7, 0xd2, 0x48, 0x81, 0x91, 0x1d, 0x44, 0x81, 0xf1, 0x36, 0x00, 0x9f, 0x03, + 0xf8, 0xc9, 0x8a, 0x38, 0xa1, 0xd8, 0x49, 0xa8, 0xe3, 0x12, 0x21, 0x93, 0x87, 0x30, 0xbb, 0xe9, + 0x75, 0xfd, 0xa0, 0x76, 0xe4, 0x07, 0xb4, 0xc5, 0xb8, 0x6d, 0xb8, 0x6e, 0x53, 0xcc, 0xbf, 0x57, + 0x4e, 0x8e, 0x8b, 0x97, 0xd1, 0xb8, 0xc3, 0xf2, 0xb1, 0x1c, 0x3f, 0xc0, 0xea, 0xb8, 0xae, 0xaa, + 0xd6, 0x48, 0x63, 0x60, 0x98, 0x30, 0xa1, 0x2a, 0x45, 0xd8, 0xc9, 0x22, 0x1e, 0x93, 0x84, 0xaa, + 0x5b, 0x39, 0x59, 0xc4, 0x57, 0x26, 0x1f, 0xb7, 0x74, 0x12, 0xe3, 0x33, 0xaa, 0x42, 0x6e, 0xd0, + 0x85, 0x6d, 0x7c, 0x7f, 0x26, 0xda, 0x46, 0x1e, 0xde, 0x24, 0xef, 0xc0, 0x08, 0x7f, 0xbc, 0x13, + 0x6f, 0x9c, 0xe7, 0xc2, 0x4b, 0xad, 0xfa, 0xb2, 0xc7, 0x35, 0xe1, 0x7f, 0xc0, 0x1f, 0xf8, 0x9f, + 0x33, 0x05, 0x49, 0xa8, 0x44, 0xd7, 0xf5, 0x69, 0x92, 0x3b, 0xaa, 0x8b, 0x6f, 0xa6, 0x29, 0xd1, + 0x8d, 0x1f, 0x1b, 0x86, 0x29, 0x1d, 0x4d, 0x7d, 0xe1, 0xcb, 0x0c, 0xf4, 0xc2, 0xf7, 0x05, 0xc8, + 0xb3, 0xfe, 0x70, 0xea, 0x54, 0x4a, 0x64, 0xaf, 0xe0, 0xd3, 0x82, 0x80, 0x69, 0x2f, 0xd7, 0xc0, + 0x87, 0x83, 0xdd, 0x71, 0xcd, 0x90, 0x8a, 0x2c, 0x2a, 0xcf, 0x50, 0xb9, 0x48, 0x48, 0x91, 0xcf, + 0x50, 0xea, 0x7a, 0x08, 0x1f, 0xa4, 0xde, 0x84, 0x11, 0x26, 0xdf, 0x87, 0x2a, 0x18, 0xfc, 0x4a, + 0x26, 0xfa, 0xc7, 0x4c, 0x54, 0x38, 0x12, 0xd9, 0x86, 0xfc, 0xaa, 0xed, 0x07, 0x35, 0x4a, 0xdb, + 0x03, 0xbc, 0xdd, 0x17, 0x45, 0x57, 0xcd, 0xe2, 0xc3, 0xb8, 0x4f, 0x69, 0x3b, 0xf6, 0xf8, 0x1a, + 0x32, 0x23, 0x5f, 0x05, 0x28, 0xbb, 0xed, 0xc0, 0x73, 0x9b, 0xab, 0xee, 0xde, 0xfc, 0x08, 0xde, + 0x7d, 0x2f, 0xc5, 0x06, 0x20, 0x42, 0xe0, 0xd7, 0xdf, 0x50, 0xc1, 0x53, 0xe7, 0x05, 0x56, 0xd3, + 0xdd, 0x53, 0xd7, 0x41, 0x84, 0x4f, 0xee, 0x40, 0x41, 0x2a, 0x16, 0xb6, 0x3a, 0x7b, 0x1e, 0x4e, + 0x90, 0xd1, 0x48, 0xf2, 0xa0, 0x8f, 0x03, 0xab, 0x2b, 0xe0, 0xea, 0x4e, 0x19, 0xa7, 0x21, 0x5f, + 0x81, 0x0b, 0x71, 0x98, 0x1c, 0xe5, 0x7c, 0x24, 0x93, 0xab, 0xec, 0x52, 0xe6, 0x7d, 0x2f, 0x16, + 0xe4, 0x2e, 0x4c, 0xb3, 0x0e, 0x59, 0xa3, 0xb6, 0xdf, 0xe5, 0x06, 0x56, 0x42, 0x35, 0xf3, 0xa2, + 0xd4, 0x44, 0xf1, 0x55, 0xd8, 0x74, 0xeb, 0x07, 0x0a, 0x92, 0x19, 0xa7, 0x32, 0x8e, 0xb3, 0x70, + 0x3e, 0x1d, 0x97, 0xfc, 0x55, 0x38, 0x27, 0xfa, 0xa5, 0x49, 0x3d, 0x05, 0x67, 0x00, 0x9b, 0x80, + 0x37, 0x45, 0x7f, 0xbf, 0x54, 0x0f, 0x19, 0x84, 0x1b, 0x07, 0x63, 0x11, 0x1b, 0xdc, 0xf4, 0x7a, + 0xc8, 0xd7, 0x61, 0x5c, 0xad, 0x36, 0x3b, 0xb8, 0x79, 0x45, 0x9f, 0xba, 0x54, 0x96, 0xc4, 0x86, + 0x69, 0x93, 0x7e, 0xa3, 0x4b, 0xfd, 0x40, 0x1a, 0x78, 0x88, 0xa3, 0xfb, 0x62, 0xa2, 0x16, 0x89, + 0x10, 0xea, 0x7f, 0x0a, 0x1e, 0xa7, 0xb4, 0xa4, 0x19, 0xde, 0xb7, 0x18, 0xfb, 0x38, 0x3f, 0xe3, + 0x3b, 0x59, 0xb8, 0xd0, 0x63, 0x5a, 0xb2, 0x9d, 0x0b, 0x05, 0x2b, 0x65, 0xe7, 0x8a, 0xc9, 0x53, + 0xdc, 0x3a, 0xec, 0x32, 0x64, 0x85, 0x28, 0x32, 0xb4, 0x54, 0x38, 0x39, 0x2e, 0x4e, 0x68, 0x2b, + 0x2e, 0x5b, 0xad, 0x90, 0x7b, 0x30, 0xc4, 0xba, 0x61, 0x00, 0x23, 0x07, 0xa9, 0xfd, 0x9b, 0x0a, + 0x1c, 0x75, 0xa1, 0x63, 0xdf, 0x20, 0x0f, 0xf2, 0x19, 0xc8, 0x6d, 0x6e, 0xae, 0xe2, 0x2a, 0xcf, + 0xe1, 0x2c, 0x9d, 0x0c, 0x82, 0xa6, 0xb6, 0xa9, 0x4c, 0x32, 0xda, 0xb0, 0x47, 0x4c, 0x86, 0x4e, + 0xbe, 0x14, 0x33, 0xbe, 0x7a, 0xbd, 0xff, 0x92, 0x1c, 0xdc, 0x16, 0xeb, 0x09, 0x4c, 0xa0, 0x8c, + 0x9f, 0xcf, 0x46, 0xbb, 0xed, 0x1d, 0xa7, 0x19, 0x50, 0x8f, 0x2c, 0xf0, 0xcd, 0x33, 0x12, 0xa3, + 0xcd, 0xf0, 0x37, 0x99, 0x8f, 0x76, 0x62, 0xce, 0x2a, 0xdc, 0x72, 0x5f, 0x57, 0xb6, 0xdc, 0x1c, + 0x6e, 0xb9, 0x53, 0x3d, 0x37, 0xd7, 0xd7, 0x53, 0x76, 0x10, 0xdc, 0x32, 0x53, 0x76, 0x89, 0x57, + 0x60, 0x72, 0xdd, 0x5d, 0x7e, 0x1c, 0x84, 0x88, 0x6c, 0xab, 0xcc, 0x9b, 0x3a, 0x90, 0x71, 0x7c, + 0xd0, 0x6c, 0x50, 0x6f, 0x73, 0xdf, 0x6e, 0x6b, 0x56, 0x06, 0x66, 0x02, 0xce, 0x70, 0xd7, 0xe9, + 0xa1, 0x8e, 0x3b, 0xca, 0x71, 0xe3, 0x70, 0xe3, 0xaf, 0x67, 0x65, 0x67, 0x3c, 0x5c, 0x7c, 0x46, + 0x5f, 0xb3, 0xdf, 0xd2, 0x5e, 0xb3, 0x67, 0x43, 0x3d, 0x7c, 0x68, 0x9a, 0xb1, 0x78, 0x8a, 0x45, + 0xc7, 0xdf, 0x1d, 0x81, 0x09, 0x15, 0x9d, 0xf5, 0x43, 0xa9, 0xd1, 0xf0, 0xd4, 0x7e, 0xb0, 0x1b, + 0x0d, 0xcf, 0x44, 0xa8, 0x66, 0xc0, 0x91, 0xeb, 0x6b, 0xc0, 0xf1, 0x35, 0x18, 0x2b, 0xb7, 0x1a, + 0xda, 0xb3, 0xb2, 0x91, 0xf2, 0x79, 0xd7, 0x43, 0x24, 0xbe, 0x16, 0x42, 0xf5, 0x72, 0xbd, 0xd5, + 0x48, 0x3e, 0x26, 0x47, 0x2c, 0x35, 0xdb, 0x8f, 0xe1, 0x27, 0xb1, 0xfd, 0xb8, 0x0d, 0x63, 0x5b, + 0x3e, 0xdd, 0xec, 0xb6, 0xdb, 0xb4, 0x89, 0xd3, 0x2a, 0xcf, 0x6f, 0x65, 0x5d, 0x9f, 0x5a, 0x01, + 0x42, 0xd5, 0x0f, 0x08, 0x51, 0xd5, 0x01, 0x1e, 0xed, 0x33, 0xc0, 0xb7, 0x20, 0xbf, 0x41, 0xa9, + 0x87, 0x7d, 0x3a, 0x1e, 0x09, 0xdf, 0x1d, 0x4a, 0x3d, 0x8b, 0x75, 0xac, 0x66, 0x13, 0x22, 0x10, + 0x35, 0x43, 0x92, 0x89, 0x01, 0x0d, 0x49, 0xc8, 0x4b, 0x30, 0xd1, 0xe9, 0xee, 0x34, 0x9d, 0x3a, + 0xf2, 0x15, 0x16, 0x28, 0xe6, 0x38, 0x87, 0x31, 0xb6, 0x3e, 0xf9, 0x12, 0x4c, 0xe2, 0x6d, 0x34, + 0x9c, 0x72, 0x53, 0xda, 0xfb, 0xab, 0x56, 0xc6, 0x65, 0xd2, 0x3a, 0x03, 0x59, 0x29, 0x86, 0x52, + 0x3a, 0x23, 0x72, 0x0f, 0x46, 0xf7, 0x9c, 0xc0, 0xda, 0xef, 0xee, 0xcc, 0x4f, 0x6b, 0x56, 0x46, + 0x77, 0x9d, 0x60, 0xa5, 0xbb, 0xc3, 0x87, 0x3c, 0x64, 0x8d, 0x3b, 0xde, 0x9e, 0x13, 0xec, 0x77, + 0x55, 0xe5, 0xf9, 0xc8, 0x1e, 0xe2, 0x2e, 0xd4, 0x60, 0x4a, 0x9f, 0x15, 0x4f, 0xe1, 0x49, 0x37, + 0x34, 0xb0, 0xc9, 0x17, 0xc6, 0xee, 0x0d, 0xe5, 0xa1, 0x30, 0xce, 0x4d, 0x6b, 0x4c, 0xd8, 0x08, + 0xfb, 0xc7, 0x24, 0xf7, 0xbb, 0x3b, 0xd4, 0x6b, 0xd3, 0x80, 0xfa, 0xe2, 0xea, 0xe7, 0x9b, 0x43, + 0xa5, 0x4e, 0xc7, 0x37, 0xfe, 0xd3, 0x2c, 0x8c, 0x96, 0xb6, 0x6b, 0xd5, 0xf6, 0xae, 0x8b, 0x0f, + 0xb3, 0xe1, 0x7b, 0x9c, 0xfa, 0x30, 0x1b, 0xbe, 0xc7, 0xa9, 0xaf, 0x70, 0x37, 0x52, 0x2e, 0xef, + 0x68, 0xbb, 0xad, 0x5c, 0xde, 0x35, 0xb5, 0x43, 0xf4, 0x34, 0x99, 0x1b, 0xe0, 0x69, 0x32, 0xd4, + 0x1e, 0x0f, 0x9d, 0xae, 0x3d, 0x7e, 0x07, 0xc6, 0xab, 0xed, 0x80, 0xee, 0x79, 0xd1, 0xaa, 0x09, + 0x15, 0x09, 0x21, 0x58, 0xbd, 0xd0, 0x29, 0xd8, 0x6c, 0x4a, 0x72, 0x8d, 0x75, 0xa8, 0xa9, 0xc6, + 0x29, 0xc9, 0x15, 0xdb, 0x31, 0x2d, 0x90, 0x44, 0x34, 0x2a, 0xb1, 0xf9, 0x26, 0xcd, 0x3f, 0xb8, + 0x08, 0x35, 0x15, 0x3d, 0xd9, 0xb0, 0x8e, 0x5d, 0x9a, 0x49, 0x37, 0xff, 0x30, 0xfe, 0x66, 0x06, + 0xe6, 0xd2, 0xa6, 0x11, 0x79, 0x1f, 0x26, 0x5c, 0x6f, 0xcf, 0x6e, 0x3b, 0xdf, 0xcb, 0x5b, 0xa4, + 0xa8, 0x2a, 0x55, 0xb8, 0xaa, 0xa0, 0x51, 0xe1, 0xac, 0x43, 0x94, 0x96, 0xeb, 0x9a, 0x95, 0xd4, + 0x0e, 0x51, 0xc0, 0xc6, 0x0f, 0x67, 0x61, 0xbc, 0xd4, 0xe9, 0x3c, 0xe3, 0xa6, 0x81, 0x9f, 0xd3, + 0x0e, 0x10, 0x79, 0x2f, 0x0f, 0xdb, 0x35, 0x90, 0x55, 0xe0, 0xaf, 0x66, 0x61, 0x3a, 0x46, 0xa1, + 0x7e, 0x7d, 0x66, 0x40, 0x83, 0xc0, 0xec, 0x80, 0x06, 0x81, 0xb9, 0xc1, 0x0c, 0x02, 0x87, 0x9e, + 0xe4, 0x50, 0x78, 0x0d, 0x72, 0xa5, 0x4e, 0x27, 0x6e, 0x58, 0xd0, 0xe9, 0x3c, 0xbc, 0xc5, 0x75, + 0x2b, 0x76, 0xa7, 0x63, 0x32, 0x0c, 0x6d, 0xa7, 0x1e, 0x19, 0x70, 0xa7, 0x36, 0xde, 0x84, 0x31, + 0xe4, 0x85, 0x66, 0x78, 0x97, 0x01, 0xb7, 0x18, 0x61, 0x81, 0xa7, 0xd5, 0x25, 0x36, 0x9f, 0xff, + 0x2f, 0x03, 0xc3, 0xf8, 0xfb, 0x19, 0x9d, 0x63, 0x8b, 0xda, 0x1c, 0x2b, 0x28, 0x73, 0x6c, 0x90, + 0xd9, 0xf5, 0x0f, 0x72, 0x00, 0xe5, 0x07, 0x66, 0x8d, 0xab, 0xe0, 0xc8, 0x1d, 0x98, 0xb6, 0x9b, + 0x4d, 0xf7, 0x90, 0x36, 0x2c, 0xd7, 0x73, 0xf6, 0x9c, 0x36, 0xef, 0x39, 0xf9, 0xda, 0xad, 0x17, + 0xa9, 0x6f, 0x60, 0xa2, 0xe8, 0x01, 0x2f, 0x51, 0xf9, 0xb4, 0x68, 0xb0, 0xef, 0x36, 0xa4, 0x32, + 0x41, 0xe3, 0x23, 0x8a, 0x52, 0xf8, 0xac, 0xf1, 0x12, 0x95, 0xcf, 0x3e, 0x2a, 0x47, 0xa4, 0x84, + 0xac, 0xf1, 0x11, 0x45, 0x29, 0x7c, 0xb8, 0x46, 0xc5, 0x27, 0xab, 0x30, 0x83, 0x10, 0xab, 0xee, + 0xd1, 0x06, 0x6d, 0x07, 0x8e, 0xdd, 0xf4, 0x85, 0xfa, 0x09, 0x15, 0x95, 0x89, 0x42, 0xf5, 0xfa, + 0x8d, 0x85, 0xe5, 0xa8, 0x8c, 0x5c, 0x87, 0xd1, 0x96, 0xfd, 0xd8, 0xb2, 0xf7, 0xb8, 0xdd, 0xc7, + 0x24, 0x57, 0x57, 0x08, 0x90, 0x7a, 0x8c, 0xb4, 0xec, 0xc7, 0xa5, 0x3d, 0xca, 0x5a, 0x41, 0x1f, + 0x77, 0x5c, 0x5f, 0x69, 0xc5, 0x48, 0xd4, 0x8a, 0x58, 0x91, 0xda, 0x0a, 0x51, 0x24, 0x5a, 0x61, + 0xfc, 0x4a, 0x06, 0x9e, 0xaf, 0xe2, 0x57, 0x04, 0x47, 0x65, 0xda, 0x0e, 0xa8, 0xb7, 0x41, 0xbd, + 0x96, 0x83, 0xaf, 0xe0, 0x35, 0x1a, 0x90, 0x97, 0x21, 0x57, 0x32, 0xd7, 0xc5, 0xfc, 0xe5, 0xfb, + 0xbd, 0x66, 0x93, 0xc0, 0x4a, 0x43, 0x8d, 0x56, 0xf6, 0x14, 0x55, 0x75, 0x09, 0x26, 0x4a, 0xbe, + 0xef, 0xec, 0xb5, 0x5b, 0xdc, 0x9f, 0x22, 0xa7, 0x59, 0x3d, 0x08, 0x78, 0xe2, 0x8d, 0x45, 0x25, + 0x31, 0xfe, 0xb3, 0x0c, 0xcc, 0x94, 0x3a, 0x1d, 0xfd, 0x93, 0x75, 0x8b, 0x9b, 0xcc, 0xe0, 0x16, + 0x37, 0x0e, 0x4c, 0x69, 0xcd, 0xe5, 0x53, 0x2a, 0x12, 0x7c, 0xfb, 0xf4, 0x0c, 0xff, 0xec, 0x4e, + 0x08, 0xb2, 0x7c, 0xfd, 0xb9, 0x38, 0xc6, 0xd8, 0xf8, 0x0f, 0x46, 0x71, 0x0f, 0x11, 0xbb, 0xad, + 0xb0, 0x09, 0xcd, 0xa4, 0xd8, 0x84, 0xbe, 0x0d, 0x8a, 0x84, 0xa3, 0x1e, 0x71, 0x8a, 0xac, 0xa8, + 0xea, 0x82, 0x22, 0x64, 0x72, 0x10, 0xb7, 0x0e, 0xcd, 0x61, 0x6b, 0x5e, 0x8e, 0x2f, 0xe0, 0xa7, + 0x62, 0x18, 0xba, 0x02, 0xa4, 0xda, 0xc6, 0x27, 0x6c, 0x5a, 0x3b, 0x70, 0x3a, 0x0f, 0xa9, 0xe7, + 0xec, 0x1e, 0x89, 0x05, 0x80, 0x9d, 0xef, 0x88, 0x52, 0xcb, 0x3f, 0x70, 0x3a, 0xd6, 0x23, 0x2c, + 0x37, 0x53, 0x68, 0xc8, 0x07, 0x30, 0x6a, 0xd2, 0x43, 0xcf, 0x09, 0xa4, 0xcd, 0xd3, 0x54, 0xa8, + 0xda, 0x44, 0x28, 0x5f, 0x0b, 0x1e, 0xff, 0xa1, 0xee, 0x8a, 0xa2, 0x9c, 0x2c, 0x72, 0x21, 0x85, + 0xdb, 0x36, 0x4d, 0x46, 0xad, 0x2d, 0x6d, 0xd7, 0x7a, 0xc9, 0x28, 0xe4, 0x1a, 0x0c, 0xa3, 0xa4, + 0x23, 0xee, 0x02, 0xe8, 0x2b, 0x84, 0xb2, 0xb3, 0x2a, 0x86, 0x21, 0x06, 0xb9, 0x04, 0x10, 0xbe, + 0x11, 0xfb, 0xf3, 0x79, 0x94, 0xd2, 0x15, 0x48, 0x5c, 0x4c, 0x1b, 0x3b, 0x93, 0x98, 0xb6, 0x0a, + 0x05, 0x93, 0xbb, 0x1d, 0x36, 0x4a, 0x1d, 0x7c, 0x88, 0xf4, 0xe7, 0x01, 0x57, 0xf2, 0xe5, 0x93, + 0xe3, 0xe2, 0x0b, 0xc2, 0x25, 0xb1, 0x61, 0xd9, 0x1d, 0xfe, 0x7e, 0xa9, 0x6d, 0x23, 0x71, 0x4a, + 0xf2, 0x36, 0x0c, 0xb1, 0xad, 0x57, 0xd8, 0x91, 0xca, 0x07, 0x9d, 0x68, 0x37, 0xe6, 0x8b, 0xb3, + 0xee, 0x6a, 0x7b, 0x02, 0x92, 0x10, 0x0b, 0xa6, 0xf4, 0xe9, 0x2e, 0x4c, 0x8a, 0xe6, 0xa3, 0xfe, + 0xd4, 0xcb, 0xc5, 0x2b, 0x8f, 0x80, 0x59, 0x75, 0x04, 0xaa, 0x2b, 0x20, 0xb6, 0x48, 0x97, 0x21, + 0xbf, 0x59, 0xde, 0xd8, 0x70, 0xbd, 0x80, 0x5f, 0x75, 0xa2, 0x93, 0x85, 0xc1, 0x4c, 0xbb, 0xbd, + 0x47, 0xf9, 0x59, 0x1c, 0xd4, 0x3b, 0x56, 0x87, 0xa1, 0xa9, 0x67, 0xb1, 0x24, 0xfd, 0xe4, 0x6c, + 0x48, 0x7f, 0x35, 0x0b, 0x2f, 0x87, 0x52, 0xd1, 0x03, 0xaf, 0x56, 0x5a, 0x5b, 0xad, 0x36, 0x36, + 0x84, 0x9a, 0x64, 0xc3, 0x73, 0x1f, 0x39, 0x0d, 0xea, 0x3d, 0xbc, 0x79, 0xca, 0x99, 0xbe, 0xca, + 0x97, 0x39, 0x7f, 0x0d, 0xcb, 0x6a, 0xd6, 0x76, 0x8a, 0xf0, 0x29, 0xb6, 0xa7, 0x4e, 0x27, 0xf1, + 0x38, 0xb6, 0xf2, 0x9c, 0x19, 0x31, 0x20, 0xdf, 0x9f, 0x81, 0xf3, 0xe9, 0x1f, 0x22, 0x54, 0x67, + 0x45, 0x79, 0x45, 0xef, 0xf1, 0xb5, 0x4b, 0xaf, 0x9d, 0x1c, 0x17, 0x5f, 0xf6, 0xed, 0x56, 0xd3, + 0x72, 0x1a, 0xbc, 0x36, 0xa7, 0x4e, 0xad, 0x8e, 0x40, 0xd0, 0xea, 0xed, 0x51, 0xd3, 0xe7, 0x41, + 0x1e, 0xed, 0xf3, 0x99, 0x25, 0x80, 0xbc, 0x7c, 0x70, 0x30, 0x7e, 0x23, 0x03, 0xca, 0x12, 0xcc, + 0x9b, 0xb4, 0xe1, 0x78, 0xb4, 0x1e, 0x88, 0xe3, 0x5d, 0xf8, 0x0a, 0x72, 0x58, 0xcc, 0xb8, 0x12, + 0x61, 0xe4, 0x7d, 0x18, 0x15, 0xc7, 0x90, 0xd8, 0x76, 0xe5, 0xd2, 0x15, 0x4f, 0x19, 0xdc, 0xa9, + 0x34, 0x71, 0x84, 0x49, 0x22, 0xb6, 0xeb, 0xdf, 0xdb, 0xde, 0x2c, 0x37, 0x6d, 0xa7, 0xe5, 0x8b, + 0xb3, 0x04, 0xbb, 0xf5, 0xa3, 0xc3, 0xc0, 0xaa, 0x23, 0x54, 0xdd, 0xf5, 0x43, 0x54, 0xe3, 0xae, + 0x7c, 0x49, 0x39, 0xc5, 0x42, 0xb8, 0x08, 0xc3, 0x0f, 0x23, 0x3d, 0xdd, 0xd2, 0xd8, 0xc9, 0x71, + 0x91, 0x4f, 0x17, 0x93, 0xc3, 0x0d, 0x0a, 0x63, 0xe1, 0xd4, 0x65, 0xbc, 0xd8, 0x0f, 0xe4, 0x35, + 0xc9, 0x79, 0xb1, 0x49, 0x6c, 0x22, 0x94, 0x89, 0x7a, 0xcb, 0xed, 0x06, 0x22, 0x64, 0x11, 0x01, + 0xbb, 0x87, 0xb6, 0x1b, 0x38, 0xd3, 0xd5, 0xd6, 0x09, 0x34, 0x45, 0xa0, 0xfa, 0xd1, 0x0c, 0x4c, + 0xe9, 0xd3, 0x96, 0x5c, 0x87, 0x11, 0xe1, 0x0e, 0x98, 0x41, 0xb5, 0x27, 0xe3, 0x36, 0xc2, 0x1d, + 0x01, 0x35, 0xf7, 0x3f, 0x81, 0xc5, 0xe4, 0x46, 0xc1, 0x41, 0x08, 0x4d, 0x28, 0x37, 0xd6, 0x39, + 0xc8, 0x94, 0x65, 0xc4, 0x60, 0x57, 0x59, 0xbf, 0xdb, 0x0c, 0xd4, 0x77, 0x4b, 0x0f, 0x21, 0xa6, + 0x28, 0x31, 0xca, 0x30, 0xc2, 0xb7, 0xd6, 0x98, 0x01, 0x64, 0xe6, 0x0c, 0x06, 0x90, 0xc6, 0x71, + 0x06, 0xa0, 0x56, 0x5b, 0xb9, 0x4f, 0x8f, 0x36, 0x6c, 0x07, 0xcf, 0x6f, 0x7e, 0x8c, 0xdd, 0x17, + 0x6b, 0x78, 0x42, 0x3c, 0xb4, 0xf3, 0x23, 0xef, 0x80, 0x1e, 0x69, 0x0f, 0xed, 0x12, 0x15, 0xcf, + 0x4a, 0xcf, 0x79, 0x64, 0x07, 0x94, 0x11, 0x66, 0x91, 0x90, 0x9f, 0x95, 0x1c, 0x1a, 0xa3, 0x54, + 0x90, 0xc9, 0x57, 0x61, 0x2a, 0xfa, 0x15, 0x9a, 0x0b, 0x4c, 0x85, 0xfb, 0x84, 0x5e, 0xb8, 0x74, + 0xe9, 0xe4, 0xb8, 0xb8, 0xa0, 0x70, 0x8d, 0x1b, 0x12, 0xc4, 0x98, 0x19, 0xbf, 0x94, 0x41, 0x23, + 0x19, 0xd9, 0xc0, 0x2b, 0x30, 0x14, 0x9a, 0x75, 0x4f, 0x88, 0x4d, 0x58, 0x7f, 0x12, 0xc5, 0x72, + 0x26, 0x6e, 0x45, 0x2d, 0xc1, 0xa3, 0x4b, 0x6f, 0x01, 0x2b, 0x25, 0x77, 0x61, 0x74, 0xa0, 0x6f, + 0xc6, 0x29, 0x96, 0xf2, 0xad, 0x92, 0x1a, 0x47, 0xe1, 0xde, 0xf6, 0xe6, 0x77, 0xef, 0x28, 0xfc, + 0x44, 0x16, 0xa6, 0x59, 0xbf, 0x96, 0xba, 0xc1, 0xbe, 0xeb, 0x39, 0xc1, 0xd1, 0x33, 0xab, 0x37, + 0x7e, 0x57, 0xbb, 0x92, 0x2d, 0xc8, 0xc3, 0x4c, 0x6d, 0xdb, 0x40, 0xea, 0xe3, 0x7f, 0x36, 0x0c, + 0xb3, 0x29, 0x54, 0xe4, 0x0d, 0xed, 0x69, 0x67, 0x5e, 0xba, 0xfb, 0x7f, 0xe7, 0xb8, 0x38, 0x21, + 0xd1, 0x37, 0x23, 0xf7, 0xff, 0x45, 0xdd, 0xe2, 0x8c, 0xf7, 0x14, 0xbe, 0xf4, 0xa8, 0x16, 0x67, + 0xba, 0x9d, 0xd9, 0x35, 0x18, 0x36, 0xdd, 0x26, 0x95, 0x56, 0x96, 0x28, 0x70, 0x79, 0x0c, 0xa0, + 0x59, 0x95, 0x30, 0x00, 0x59, 0x81, 0x51, 0xf6, 0xc7, 0x9a, 0xdd, 0x11, 0xef, 0xa5, 0x24, 0x54, + 0x0a, 0x20, 0xb4, 0xe3, 0xb4, 0xf7, 0x54, 0xbd, 0x40, 0x93, 0x5a, 0x2d, 0xbb, 0xa3, 0x49, 0x86, + 0x1c, 0x51, 0xd3, 0x2f, 0xe4, 0x7b, 0xeb, 0x17, 0x32, 0xa7, 0xea, 0x17, 0x76, 0x01, 0x6a, 0xce, + 0x5e, 0xdb, 0x69, 0xef, 0x95, 0x9a, 0x7b, 0x22, 0x68, 0xc2, 0xb5, 0xde, 0xa3, 0x70, 0x3d, 0x42, + 0xc6, 0x89, 0xfb, 0x3c, 0x1a, 0x35, 0x70, 0x98, 0x65, 0x37, 0xf7, 0x34, 0xe7, 0x2e, 0x85, 0x33, + 0x59, 0x07, 0x28, 0xd5, 0x03, 0xe7, 0x11, 0x9b, 0xc2, 0xbe, 0x10, 0xe3, 0xe4, 0x27, 0x97, 0x4b, + 0xf7, 0xe9, 0x11, 0x5e, 0x3d, 0xe4, 0xf3, 0xb0, 0x8d, 0xa8, 0x6c, 0x25, 0x68, 0x9e, 0x3b, 0x11, + 0x07, 0xd2, 0x81, 0x73, 0xa5, 0x46, 0xc3, 0x61, 0x6d, 0xb0, 0x9b, 0x9b, 0x3c, 0xdc, 0x05, 0xb2, + 0x9e, 0x48, 0x67, 0x7d, 0x4d, 0xbe, 0x84, 0xda, 0x21, 0x95, 0x25, 0xa3, 0x64, 0xc4, 0xaa, 0x49, + 0x67, 0x6c, 0xd4, 0x60, 0x4a, 0x6f, 0xbc, 0x1e, 0xec, 0x61, 0x02, 0xf2, 0x66, 0xad, 0x64, 0xd5, + 0x56, 0x4a, 0x37, 0x0b, 0x19, 0x52, 0x80, 0x09, 0xf1, 0x6b, 0xd1, 0x5a, 0x7c, 0xeb, 0x76, 0x21, + 0xab, 0x41, 0xde, 0xba, 0xb9, 0x58, 0xc8, 0x2d, 0x64, 0xe7, 0x33, 0x31, 0x3f, 0xcb, 0xd1, 0x42, + 0x9e, 0xab, 0x84, 0x8d, 0x5f, 0xcb, 0x40, 0x5e, 0x7e, 0x3b, 0xb9, 0x0d, 0xb9, 0x5a, 0x6d, 0x25, + 0xe6, 0x19, 0x19, 0x9d, 0x32, 0x7c, 0x3f, 0xf5, 0x7d, 0xd5, 0xfc, 0x9d, 0x11, 0x30, 0xba, 0xcd, + 0xd5, 0x9a, 0x90, 0x41, 0x24, 0x5d, 0xb4, 0x79, 0x73, 0xba, 0x14, 0x77, 0xb1, 0xdb, 0x90, 0xbb, + 0xb7, 0xbd, 0x29, 0x2e, 0x59, 0x92, 0x2e, 0xda, 0x4f, 0x39, 0xdd, 0x47, 0x87, 0xea, 0x2e, 0xcf, + 0x08, 0x0c, 0x13, 0xc6, 0x95, 0x89, 0xcc, 0x0f, 0xdd, 0x96, 0x1b, 0x46, 0x38, 0x10, 0x87, 0x2e, + 0x83, 0x98, 0xa2, 0x84, 0x89, 0x22, 0xab, 0x6e, 0xdd, 0x6e, 0x8a, 0xd3, 0x1b, 0x45, 0x91, 0x26, + 0x03, 0x98, 0x1c, 0x6e, 0xfc, 0x76, 0x06, 0x0a, 0x28, 0xb0, 0xa1, 0xf9, 0xba, 0x7b, 0x40, 0xdb, + 0x0f, 0x6f, 0x92, 0x37, 0xe5, 0x92, 0xcb, 0x84, 0x8a, 0xae, 0x61, 0x5c, 0x72, 0xb1, 0xb7, 0x40, + 0xb1, 0xec, 0x94, 0x20, 0x12, 0xd9, 0xc1, 0x9d, 0xcf, 0x4f, 0x09, 0x22, 0x51, 0x84, 0x61, 0xfc, + 0x1c, 0xb1, 0x39, 0xe2, 0x97, 0x07, 0x0c, 0x60, 0x72, 0xb8, 0xb2, 0x37, 0xfd, 0x54, 0x36, 0xd1, + 0x86, 0xc5, 0xef, 0x2a, 0x07, 0x6e, 0xbd, 0x71, 0x03, 0xed, 0xd7, 0x1f, 0xc2, 0x5c, 0xbc, 0x4b, + 0x50, 0x09, 0x59, 0x82, 0x69, 0x1d, 0x2e, 0xf5, 0x91, 0x17, 0x52, 0xeb, 0x7a, 0xb8, 0x68, 0xc6, + 0xf1, 0x8d, 0xff, 0x3d, 0x03, 0x63, 0xf8, 0xa7, 0xd9, 0x6d, 0xa2, 0x19, 0x61, 0x69, 0xbb, 0x26, + 0x54, 0x23, 0xaa, 0x30, 0x67, 0x1f, 0xfa, 0x96, 0xd0, 0xa3, 0x68, 0x7b, 0x4c, 0x88, 0x2c, 0x48, + 0xf9, 0xfb, 0x86, 0x54, 0xca, 0x85, 0xa4, 0xfc, 0x21, 0xc4, 0x8f, 0x91, 0x0a, 0x64, 0x34, 0x3e, + 0xde, 0xae, 0xb1, 0xe9, 0xa7, 0xda, 0xf5, 0x20, 0x9d, 0xdb, 0xd4, 0x8d, 0x8f, 0x39, 0x1a, 0x9a, + 0xf5, 0x6c, 0xd7, 0x4a, 0xe6, 0xba, 0x66, 0xd6, 0xc3, 0xbe, 0x51, 0xd3, 0x4b, 0x09, 0x24, 0xe3, + 0xe7, 0xc7, 0xe3, 0x1d, 0x28, 0x0e, 0xbc, 0x33, 0xae, 0x8d, 0x77, 0x60, 0xb8, 0xd4, 0x6c, 0xba, + 0x87, 0x62, 0x97, 0x90, 0x37, 0xd7, 0xb0, 0xff, 0xf8, 0x79, 0x86, 0x6a, 0x3d, 0xcd, 0x29, 0x95, + 0x01, 0x48, 0x19, 0xc6, 0x4a, 0xdb, 0xb5, 0x6a, 0xb5, 0xb2, 0xb9, 0xc9, 0x1d, 0xf0, 0x72, 0x4b, + 0xaf, 0xca, 0xfe, 0x71, 0x9c, 0x86, 0x15, 0xb7, 0x57, 0x88, 0xe4, 0xf7, 0x88, 0x8e, 0xbc, 0x07, + 0x70, 0xcf, 0x75, 0xda, 0x5c, 0x8d, 0x29, 0x1a, 0xcf, 0x6e, 0xe0, 0xe3, 0x1f, 0xb9, 0x4e, 0x5b, + 0xe8, 0x3d, 0xd9, 0xb7, 0x47, 0x48, 0xa6, 0xf2, 0x37, 0xeb, 0xe9, 0x25, 0x97, 0x9b, 0x06, 0x0e, + 0x47, 0x3d, 0xbd, 0xe3, 0x26, 0xf4, 0x6d, 0x12, 0x8d, 0xb4, 0x60, 0xba, 0xd6, 0xdd, 0xdb, 0xa3, + 0x6c, 0x67, 0x17, 0xfa, 0xa4, 0x11, 0x71, 0x95, 0x0e, 0xc3, 0x1e, 0xf1, 0xfb, 0x08, 0xbb, 0x0c, + 0xf9, 0x4b, 0x6f, 0xb0, 0x89, 0xfc, 0xed, 0xe3, 0xa2, 0xb0, 0x83, 0x60, 0xa2, 0x9a, 0x2f, 0xe9, + 0x93, 0xda, 0xa4, 0x38, 0x6f, 0xf2, 0x00, 0x46, 0xf8, 0x9b, 0x91, 0x70, 0x28, 0x7b, 0xa9, 0xcf, + 0xa2, 0xe1, 0x88, 0xbd, 0x5e, 0x25, 0x79, 0x29, 0xd9, 0x86, 0x7c, 0xd9, 0xf1, 0xea, 0x4d, 0x5a, + 0xae, 0x8a, 0xb3, 0xff, 0xe5, 0x3e, 0x2c, 0x25, 0x2a, 0xef, 0x97, 0x3a, 0xfe, 0xaa, 0x3b, 0xaa, + 0x2c, 0x20, 0x31, 0xc8, 0xdf, 0xcc, 0xc0, 0xf3, 0xe1, 0xd7, 0x97, 0xf6, 0x68, 0x3b, 0x58, 0xb3, + 0x83, 0xfa, 0x3e, 0xf5, 0x44, 0x2f, 0x8d, 0xf5, 0xeb, 0xa5, 0xcf, 0x27, 0x7a, 0xe9, 0x6a, 0xd4, + 0x4b, 0x36, 0x63, 0x66, 0xb5, 0x38, 0xb7, 0x64, 0x9f, 0xf5, 0xab, 0x95, 0x58, 0x00, 0xd1, 0x6b, + 0xa8, 0x70, 0x48, 0x7e, 0xb5, 0x4f, 0x83, 0x23, 0x64, 0xe1, 0x48, 0x14, 0xfe, 0xd6, 0x2c, 0x61, + 0x43, 0x28, 0xb9, 0x2f, 0xbd, 0x37, 0xb9, 0x54, 0x72, 0xb9, 0x0f, 0x6f, 0xee, 0xd1, 0x39, 0xdb, + 0xc7, 0x4f, 0x9b, 0x8f, 0xf6, 0xaa, 0xbd, 0x23, 0x04, 0x91, 0x53, 0x46, 0x7b, 0xd5, 0x8e, 0x46, + 0xbb, 0x69, 0xc7, 0x47, 0x7b, 0xd5, 0xde, 0x21, 0x65, 0xee, 0x72, 0xce, 0xfd, 0x93, 0x2f, 0xf5, + 0xe3, 0x56, 0xde, 0xe0, 0x27, 0x73, 0x8a, 0xeb, 0xf9, 0x97, 0x61, 0xac, 0xd6, 0xb1, 0xeb, 0xb4, + 0xe9, 0xec, 0x06, 0xe2, 0xa9, 0xfd, 0x95, 0x3e, 0xac, 0x42, 0x5c, 0xf1, 0xb4, 0x2a, 0x7f, 0xaa, + 0xd7, 0xa4, 0x10, 0x87, 0x7d, 0xe1, 0xe6, 0xc6, 0x9a, 0x78, 0x6d, 0xef, 0xf7, 0x85, 0x9b, 0x1b, + 0x6b, 0x42, 0xe6, 0xe8, 0xb4, 0x34, 0x99, 0x63, 0x63, 0x8d, 0x74, 0x60, 0x6a, 0x93, 0x7a, 0x9e, + 0xbd, 0xeb, 0x7a, 0x2d, 0xae, 0xbf, 0xe4, 0x3e, 0x6f, 0xd7, 0xfa, 0xf1, 0xd3, 0x08, 0xb8, 0xda, + 0x2e, 0x90, 0x30, 0x2b, 0xae, 0xf4, 0x8c, 0xf1, 0x67, 0x7d, 0xb2, 0xe4, 0x04, 0x3b, 0xdd, 0xfa, + 0x01, 0x0d, 0xe6, 0x67, 0x4e, 0xed, 0x93, 0x10, 0x97, 0xf7, 0xc9, 0x8e, 0xfc, 0xa9, 0xf6, 0x49, + 0x88, 0x63, 0xfc, 0xe3, 0x1c, 0x5c, 0xe8, 0xd1, 0x05, 0x64, 0x5d, 0x6e, 0xb9, 0x19, 0x4d, 0x8b, + 0xdd, 0x03, 0xfd, 0xfa, 0xa9, 0xbb, 0xf0, 0x2a, 0x14, 0x96, 0xef, 0xa3, 0xac, 0xce, 0x1f, 0x72, + 0xca, 0x25, 0x79, 0x58, 0xa1, 0xa6, 0x95, 0x1e, 0xa0, 0x8d, 0xb0, 0x7c, 0x00, 0xaa, 0x6b, 0xce, + 0xf0, 0x09, 0xca, 0x85, 0xbf, 0x9e, 0x85, 0x21, 0x3c, 0x38, 0x63, 0x21, 0xc0, 0x32, 0x67, 0x0a, + 0x01, 0xf6, 0x05, 0x98, 0x58, 0xbe, 0xcf, 0x6f, 0xd2, 0x2b, 0xb6, 0xbf, 0x2f, 0xb6, 0x75, 0x34, + 0xe4, 0xa0, 0x07, 0x96, 0xb8, 0x78, 0xef, 0xdb, 0x9a, 0xcc, 0xaa, 0x51, 0x90, 0x2d, 0x98, 0xe5, + 0xdf, 0xe6, 0xec, 0x3a, 0x75, 0x1e, 0x49, 0xc8, 0xb1, 0x9b, 0x62, 0x8f, 0x7f, 0xf9, 0xe4, 0xb8, + 0x58, 0xa4, 0x07, 0x68, 0xfd, 0x2c, 0xca, 0x2d, 0x1f, 0x11, 0x54, 0x33, 0xe8, 0x14, 0x7a, 0x35, + 0xbc, 0x89, 0x39, 0x86, 0x15, 0xb2, 0xda, 0x58, 0xdd, 0x0c, 0x97, 0x23, 0x19, 0x7f, 0x32, 0x0c, + 0x0b, 0xbd, 0xb7, 0x67, 0xf2, 0x45, 0x7d, 0x00, 0xaf, 0x9c, 0xba, 0xa1, 0x9f, 0x3e, 0x86, 0x5f, + 0x82, 0xb9, 0xe5, 0x76, 0x40, 0xbd, 0x8e, 0xe7, 0xc8, 0x80, 0x36, 0x2b, 0xae, 0x2f, 0xad, 0xcd, + 0xd1, 0xec, 0x9b, 0x86, 0xe5, 0x42, 0xb7, 0x8a, 0xb6, 0xef, 0x0a, 0xab, 0x54, 0x0e, 0x64, 0x19, + 0xa6, 0x14, 0x78, 0xb3, 0xbb, 0xa7, 0xbe, 0x4e, 0xa9, 0x3c, 0x9b, 0x5d, 0xd5, 0x14, 0x37, 0x46, + 0x84, 0x16, 0xed, 0xec, 0xca, 0x58, 0xbf, 0xb7, 0x7d, 0xbf, 0x26, 0x86, 0x93, 0x5b, 0xb4, 0x23, + 0xd4, 0xfa, 0xe8, 0xf0, 0x40, 0xdb, 0x5f, 0x23, 0xe4, 0x85, 0x5f, 0xca, 0x89, 0x19, 0xf5, 0x32, + 0xe4, 0x6a, 0xdd, 0x1d, 0xf5, 0xcd, 0xcd, 0xd7, 0x0e, 0x38, 0x56, 0x4a, 0x3e, 0x07, 0x60, 0xd2, + 0x8e, 0xeb, 0x3b, 0x81, 0xeb, 0x1d, 0xa9, 0x2e, 0x95, 0x5e, 0x08, 0xd5, 0xbd, 0x3e, 0x24, 0x94, + 0xac, 0xc0, 0x74, 0xf4, 0xeb, 0xc1, 0x61, 0x5b, 0xe8, 0x92, 0xc7, 0xb8, 0x76, 0x25, 0x22, 0xb7, + 0x5c, 0x56, 0xa6, 0x1e, 0xd9, 0x31, 0x32, 0xb2, 0x08, 0xf9, 0x6d, 0xd7, 0x3b, 0xd8, 0x65, 0x63, + 0x3c, 0x14, 0x09, 0x15, 0x87, 0x02, 0xa6, 0x1e, 0x9e, 0x12, 0x8f, 0x2d, 0x97, 0xe5, 0xf6, 0x23, + 0xc7, 0x73, 0xf1, 0x45, 0x4f, 0xb5, 0x69, 0xa1, 0x11, 0x58, 0x73, 0x66, 0x8f, 0xc0, 0xe4, 0x1a, + 0x0c, 0x97, 0xea, 0x81, 0xeb, 0x09, 0x83, 0x16, 0x3e, 0x53, 0x18, 0x40, 0x9b, 0x29, 0x0c, 0xc0, + 0x3a, 0xd1, 0xa4, 0xbb, 0xe2, 0x75, 0x07, 0x3b, 0xd1, 0xa3, 0xbb, 0x9a, 0xa7, 0x3e, 0xdd, 0x65, + 0x42, 0x91, 0x49, 0x77, 0x51, 0xf1, 0xa1, 0x05, 0xb8, 0xdb, 0x4d, 0xa8, 0xcc, 0x04, 0x9a, 0xf1, + 0xbb, 0x63, 0x3d, 0xa7, 0x3c, 0x3b, 0x85, 0xce, 0x36, 0xe5, 0x57, 0xed, 0x01, 0xa6, 0xfc, 0x1b, + 0xa1, 0x2f, 0x89, 0x1a, 0x9e, 0x02, 0x21, 0xea, 0x31, 0xc8, 0x71, 0x16, 0x7e, 0x39, 0x7f, 0x96, + 0x49, 0x24, 0x3a, 0x29, 0x3b, 0x68, 0x27, 0xe5, 0x06, 0xea, 0x24, 0xb2, 0x04, 0x93, 0x61, 0x88, + 0xc4, 0x0d, 0x3b, 0xd0, 0xb6, 0xb5, 0x30, 0xae, 0xa5, 0xd5, 0xb1, 0x03, 0x75, 0x5b, 0xd3, 0x49, + 0xc8, 0xbb, 0x30, 0x2e, 0x1c, 0xaa, 0x90, 0xc3, 0x70, 0x64, 0x29, 0x24, 0xbd, 0xaf, 0x62, 0xf4, + 0x2a, 0x3a, 0x5b, 0xcd, 0x1b, 0x4e, 0x87, 0x36, 0x9d, 0x36, 0xad, 0xe1, 0x63, 0x85, 0x98, 0x31, + 0xfc, 0xd1, 0x56, 0x94, 0x58, 0xfc, 0x1d, 0x43, 0xd3, 0x1f, 0x6a, 0x44, 0xf1, 0xc9, 0x3a, 0x7a, + 0xa6, 0xc9, 0xca, 0xed, 0x14, 0xbd, 0x55, 0x77, 0xcf, 0x91, 0x36, 0xf4, 0xd2, 0x4e, 0xd1, 0xb3, + 0x9a, 0x0c, 0x1a, 0xb3, 0x53, 0xe4, 0xa8, 0xec, 0x86, 0xc3, 0x7e, 0x54, 0x2b, 0xe2, 0x25, 0x11, + 0x6f, 0x38, 0x48, 0xa4, 0x3b, 0x2e, 0x70, 0x24, 0x59, 0xcd, 0x72, 0xcb, 0x76, 0x9a, 0x22, 0x0a, + 0x41, 0x54, 0x0d, 0x65, 0xd0, 0x78, 0x35, 0x88, 0x4a, 0xea, 0x30, 0x61, 0xd2, 0xdd, 0x0d, 0xcf, + 0x0d, 0x68, 0x3d, 0xa0, 0x0d, 0x21, 0xd5, 0xc9, 0x8b, 0xcd, 0x92, 0xeb, 0x72, 0x89, 0x15, 0x6d, + 0xe3, 0x33, 0xdf, 0x3e, 0x2e, 0x02, 0x03, 0x71, 0xaf, 0x98, 0x93, 0xe3, 0xe2, 0x05, 0x36, 0xfe, + 0x1d, 0x49, 0xac, 0x9e, 0x4e, 0x2a, 0x53, 0xf2, 0x4d, 0xb6, 0x5f, 0x87, 0x5d, 0x12, 0x55, 0x36, + 0xd1, 0xa3, 0xb2, 0xb7, 0x52, 0x2b, 0x2b, 0x2a, 0xbd, 0x9d, 0x5a, 0x69, 0x6a, 0x25, 0xe4, 0x3d, + 0x18, 0x2f, 0x57, 0xcb, 0x6e, 0x7b, 0xd7, 0xd9, 0xab, 0xad, 0x94, 0x50, 0x34, 0x14, 0x1e, 0x51, + 0x75, 0xc7, 0xaa, 0x23, 0xdc, 0xf2, 0xf7, 0x6d, 0xcd, 0x31, 0x36, 0xc2, 0x27, 0x77, 0x61, 0x4a, + 0xfe, 0x34, 0xe9, 0xee, 0x96, 0x59, 0x45, 0x89, 0x50, 0xba, 0xa1, 0x85, 0x1c, 0x58, 0x47, 0x74, + 0x3d, 0xf5, 0xa6, 0x10, 0x23, 0x63, 0x93, 0xb1, 0x42, 0x3b, 0x4d, 0xf7, 0x88, 0x7d, 0xde, 0xa6, + 0x43, 0x3d, 0x94, 0x01, 0xc5, 0x64, 0x6c, 0x84, 0x25, 0x56, 0xe0, 0xe8, 0xef, 0xa7, 0x3a, 0x11, + 0x59, 0x87, 0x19, 0x31, 0xc5, 0x1f, 0x3a, 0xbe, 0xb3, 0xe3, 0x34, 0x9d, 0xe0, 0x08, 0xa5, 0x3f, + 0x21, 0xc0, 0xc8, 0x75, 0xf1, 0x28, 0x2c, 0x55, 0x98, 0x25, 0x49, 0x8d, 0x5f, 0xcb, 0xc2, 0x0b, + 0xfd, 0x6e, 0x42, 0xa4, 0xa6, 0x6f, 0x66, 0x57, 0x07, 0xb8, 0x3d, 0x9d, 0xbe, 0x9d, 0x2d, 0xc3, + 0xd4, 0x03, 0xc5, 0xa4, 0x2f, 0x34, 0xb1, 0xc4, 0xce, 0x50, 0x8d, 0xfd, 0xf4, 0xd9, 0x1e, 0x23, + 0x5a, 0x78, 0x24, 0xb6, 0xb9, 0x8f, 0xeb, 0xa2, 0x79, 0x1b, 0xc6, 0xca, 0x6e, 0x3b, 0xa0, 0x8f, + 0x83, 0x58, 0x40, 0x02, 0x0e, 0x8c, 0xbb, 0xa7, 0x4a, 0x54, 0xe3, 0xdf, 0x64, 0xe1, 0xc5, 0xbe, + 0x57, 0x01, 0xb2, 0xa9, 0xf7, 0xda, 0xb5, 0x41, 0xee, 0x0f, 0xa7, 0x77, 0xdb, 0x62, 0xc2, 0xee, + 0xee, 0x54, 0x0f, 0xa8, 0x85, 0xff, 0x21, 0x23, 0x3a, 0xe9, 0xd3, 0x30, 0x8a, 0x55, 0x85, 0x5d, + 0xc4, 0xb5, 0x64, 0xb8, 0x0b, 0x3b, 0xba, 0x96, 0x8c, 0xa3, 0x91, 0x5b, 0x90, 0x2f, 0xdb, 0xcd, + 0xa6, 0x12, 0xae, 0x01, 0xa5, 0xf9, 0x3a, 0xc2, 0x62, 0xc6, 0xa3, 0x12, 0x91, 0xc9, 0x3e, 0xfc, + 0x6f, 0xe5, 0xac, 0xc0, 0xcd, 0x52, 0x90, 0xc5, 0x8e, 0x0b, 0x05, 0x19, 0x83, 0xbc, 0xd6, 0xdd, + 0xd0, 0x21, 0x9c, 0x07, 0x79, 0x65, 0x00, 0x2d, 0xc8, 0x2b, 0x03, 0x18, 0xbf, 0x9e, 0x83, 0x4b, + 0xfd, 0xef, 0xb3, 0x64, 0x4b, 0x1f, 0x82, 0xd7, 0x07, 0xba, 0x05, 0x9f, 0x3e, 0x06, 0x32, 0x64, + 0x32, 0xef, 0x90, 0xab, 0x49, 0xf7, 0x97, 0xef, 0x1c, 0x17, 0x15, 0x8b, 0xe4, 0x7b, 0xae, 0xd3, + 0x56, 0xde, 0x4c, 0xbe, 0xa1, 0x49, 0x86, 0xfc, 0xf5, 0xfe, 0xf6, 0x60, 0x5f, 0x16, 0xd1, 0xf1, + 0x7d, 0x65, 0x50, 0x89, 0xf2, 0xf3, 0x50, 0x88, 0x93, 0x92, 0x2b, 0x30, 0x84, 0x1f, 0xa0, 0xf8, + 0xf0, 0xc4, 0x38, 0x60, 0xf9, 0xc2, 0x9a, 0x98, 0x3b, 0x18, 0xc1, 0x02, 0xed, 0x01, 0x74, 0xdd, + 0xa0, 0x88, 0x60, 0xc1, 0xcd, 0x09, 0x92, 0xfa, 0xc1, 0x18, 0x91, 0xf1, 0x67, 0x19, 0xb8, 0xd8, + 0x53, 0x53, 0x40, 0x36, 0xf4, 0x01, 0x7b, 0xf5, 0x34, 0xd5, 0xc2, 0xa9, 0x63, 0xb5, 0xf0, 0x63, + 0x72, 0xee, 0xbf, 0x0f, 0x13, 0xb5, 0xee, 0x4e, 0xfc, 0x7e, 0xc6, 0xe3, 0xcb, 0x28, 0x70, 0xf5, + 0x04, 0x53, 0xf1, 0x59, 0xfb, 0xa5, 0xc1, 0x83, 0x30, 0x00, 0x52, 0xac, 0x0e, 0x43, 0x17, 0xeb, + 0x64, 0x04, 0x0f, 0x9d, 0xc8, 0xf8, 0xd5, 0x6c, 0xfa, 0x45, 0xf7, 0x6e, 0x79, 0xe3, 0x2c, 0x17, + 0xdd, 0xbb, 0xe5, 0x8d, 0xd3, 0xdb, 0xfe, 0x4f, 0x64, 0xdb, 0xf1, 0x61, 0x56, 0xec, 0x78, 0x52, + 0xd1, 0x29, 0x1e, 0x66, 0xe5, 0xee, 0xe8, 0xeb, 0x0f, 0xb3, 0x12, 0x99, 0xbc, 0x05, 0x63, 0xab, + 0x2e, 0x0f, 0xae, 0x21, 0x5b, 0xcc, 0x7d, 0x90, 0x25, 0x50, 0xdd, 0x1e, 0x43, 0x4c, 0x76, 0xb7, + 0xd0, 0x07, 0x5e, 0x1a, 0x57, 0xe2, 0xdd, 0x22, 0x36, 0x5d, 0x74, 0x75, 0xa0, 0x4e, 0x66, 0xfc, + 0x27, 0xc3, 0x60, 0x9c, 0xae, 0xcc, 0x20, 0x1f, 0xea, 0x7d, 0x77, 0x7d, 0x60, 0x35, 0xc8, 0x40, + 0x5b, 0x6e, 0xa9, 0xdb, 0x70, 0x68, 0xbb, 0xae, 0x47, 0xc6, 0x10, 0x30, 0x75, 0x0b, 0x94, 0x78, + 0x1f, 0xc7, 0x51, 0x75, 0xe1, 0xbf, 0xcd, 0x45, 0x4b, 0x2d, 0x76, 0x34, 0x66, 0x3e, 0xc6, 0xd1, + 0x48, 0xee, 0x43, 0x41, 0x85, 0x28, 0x2f, 0xb4, 0x28, 0xb9, 0x68, 0x8c, 0x62, 0x1f, 0x95, 0x20, + 0xd4, 0xcf, 0xd7, 0xdc, 0xe0, 0xe7, 0x6b, 0x24, 0xbe, 0x63, 0xfd, 0x43, 0x49, 0xf1, 0x3d, 0xee, + 0x8c, 0xae, 0xa0, 0xcb, 0x48, 0x1a, 0xbe, 0x38, 0xb4, 0x86, 0xf5, 0x48, 0x1a, 0x29, 0x07, 0x97, + 0x8a, 0x2e, 0x83, 0x81, 0xe0, 0x4f, 0xc5, 0x17, 0x3e, 0x0c, 0x06, 0xc2, 0xe9, 0xd3, 0x82, 0x81, + 0x84, 0x24, 0xec, 0x00, 0x34, 0xbb, 0x6d, 0x1e, 0x4d, 0x7c, 0x34, 0x3a, 0x00, 0xbd, 0x6e, 0xdb, + 0x8a, 0x47, 0x14, 0x0f, 0x11, 0x8d, 0x7f, 0x34, 0x94, 0x2e, 0x1c, 0x84, 0xfa, 0xae, 0xb3, 0x08, + 0x07, 0x21, 0xd1, 0x27, 0x33, 0x53, 0xb7, 0x60, 0x56, 0xda, 0xe7, 0x49, 0x43, 0xaf, 0x2d, 0x73, + 0x55, 0x0c, 0x31, 0xea, 0x8d, 0x42, 0xcb, 0x3e, 0x69, 0x2c, 0x66, 0x75, 0x3d, 0x4d, 0x6f, 0x94, + 0x42, 0xbf, 0xf0, 0x1b, 0x52, 0x2d, 0xa6, 0x0e, 0xc2, 0xd6, 0x56, 0x38, 0x97, 0x63, 0x83, 0xd0, + 0xed, 0x6a, 0xc3, 0xa8, 0x93, 0xf0, 0xbd, 0x57, 0xaa, 0x1c, 0x90, 0x89, 0x22, 0x2b, 0x2a, 0x8a, + 0x8a, 0x18, 0x97, 0x18, 0x11, 0xd9, 0x83, 0x8b, 0x91, 0x28, 0xad, 0xdc, 0x14, 0x90, 0x23, 0x6f, + 0xf0, 0xb5, 0x93, 0xe3, 0xe2, 0xab, 0x8a, 0x28, 0xae, 0x5e, 0x38, 0x62, 0xdc, 0x7b, 0xf3, 0x62, + 0xfb, 0xed, 0x92, 0x67, 0xb7, 0xeb, 0xfb, 0xca, 0x9c, 0xc7, 0xfd, 0x76, 0x07, 0xa1, 0x89, 0x70, + 0x06, 0x11, 0xb2, 0xf1, 0x63, 0x59, 0x98, 0xe2, 0x67, 0x35, 0x7f, 0x9d, 0x7b, 0x66, 0x5f, 0x3e, + 0xdf, 0xd1, 0x5e, 0x3e, 0x65, 0xe4, 0x3d, 0xb5, 0x69, 0x03, 0xbd, 0x7b, 0xee, 0x03, 0x49, 0xd2, + 0x10, 0x13, 0x26, 0x54, 0x68, 0xff, 0x27, 0xcf, 0x9b, 0x51, 0x90, 0x46, 0x21, 0x2a, 0xe1, 0xbb, + 0xb3, 0x6f, 0x6a, 0x3c, 0x8c, 0x1f, 0xcd, 0xc2, 0xa4, 0x62, 0xa7, 0xf2, 0xcc, 0x76, 0xfc, 0xe7, + 0xb5, 0x8e, 0x9f, 0x0f, 0x3d, 0x04, 0xc3, 0x96, 0x0d, 0xd4, 0xef, 0x5d, 0x98, 0x49, 0x90, 0xc4, + 0xcd, 0x7d, 0x32, 0x83, 0x98, 0xfb, 0xbc, 0x91, 0x8c, 0xf8, 0xc6, 0x13, 0x27, 0x84, 0xf1, 0x7f, + 0xd4, 0x10, 0x73, 0x3f, 0x91, 0x85, 0x39, 0xf1, 0x0b, 0x43, 0xa4, 0x72, 0x61, 0xf5, 0x99, 0x1d, + 0x8b, 0x92, 0x36, 0x16, 0x45, 0x7d, 0x2c, 0x94, 0x06, 0xf6, 0x1e, 0x12, 0xe3, 0x07, 0x01, 0xe6, + 0x7b, 0x11, 0x0c, 0xec, 0x88, 0x1f, 0xb9, 0x26, 0x66, 0x07, 0x70, 0x4d, 0x5c, 0x85, 0x02, 0x56, + 0x25, 0x82, 0x20, 0xfa, 0x5b, 0x66, 0x55, 0x74, 0x12, 0xea, 0x17, 0x78, 0x1c, 0x5b, 0x11, 0x94, + 0xd1, 0x8f, 0xe9, 0x3c, 0x12, 0x94, 0xe4, 0x97, 0x32, 0x30, 0x85, 0xc0, 0xe5, 0x47, 0xb4, 0x1d, + 0x20, 0xb3, 0x21, 0xe1, 0xb3, 0x16, 0x3e, 0x8c, 0xd6, 0x02, 0xcf, 0x69, 0xef, 0x89, 0x97, 0xd1, + 0x1d, 0xf1, 0x32, 0xfa, 0x2e, 0x7f, 0xd1, 0xbd, 0x5e, 0x77, 0x5b, 0x37, 0xf6, 0x3c, 0xfb, 0x91, + 0xc3, 0x4d, 0xb0, 0xec, 0xe6, 0x8d, 0x28, 0xdf, 0x4f, 0xc7, 0x89, 0x65, 0xe2, 0x11, 0xac, 0xf0, + 0xd5, 0x99, 0x7f, 0x28, 0xc5, 0x6a, 0xe3, 0xaa, 0x19, 0xfd, 0x8b, 0xc8, 0xf7, 0xc0, 0x05, 0x1e, + 0x9a, 0x8c, 0xdd, 0xf0, 0x9d, 0x76, 0xd7, 0xed, 0xfa, 0x4b, 0x76, 0xfd, 0x80, 0x89, 0xf9, 0xdc, + 0xb3, 0x18, 0x5b, 0x5e, 0x0f, 0x0b, 0xad, 0x1d, 0x5e, 0xaa, 0xc5, 0xbc, 0x48, 0x67, 0x40, 0x56, + 0x60, 0x86, 0x17, 0x95, 0xba, 0x81, 0x5b, 0xab, 0xdb, 0x4d, 0xa7, 0xbd, 0x87, 0xb2, 0x44, 0x9e, + 0x8b, 0x32, 0x76, 0x37, 0x70, 0x2d, 0x9f, 0xc3, 0x55, 0x4d, 0x4d, 0x82, 0x88, 0x54, 0x61, 0xda, + 0xa4, 0x76, 0x63, 0xcd, 0x7e, 0x5c, 0xb6, 0x3b, 0x76, 0xdd, 0x09, 0x78, 0xac, 0xd4, 0x1c, 0x17, + 0xe8, 0x3c, 0x6a, 0x37, 0xac, 0x96, 0xfd, 0xd8, 0xaa, 0x8b, 0x42, 0x5d, 0x65, 0xaf, 0xd1, 0x85, + 0xac, 0x9c, 0x76, 0xc8, 0x6a, 0x2c, 0xce, 0xca, 0x69, 0xf7, 0x66, 0x15, 0xd1, 0x49, 0x56, 0x9b, + 0xb6, 0xb7, 0x47, 0x03, 0x6e, 0x28, 0x0d, 0x97, 0x33, 0x57, 0x33, 0x0a, 0xab, 0x00, 0xcb, 0x2c, + 0x34, 0x9a, 0x8e, 0xb3, 0x52, 0xe8, 0xd8, 0xcc, 0xdb, 0xf6, 0x9c, 0x80, 0xaa, 0x2d, 0x1c, 0xc7, + 0xcf, 0xc2, 0xfe, 0x47, 0x13, 0xf3, 0x5e, 0x4d, 0x4c, 0x50, 0x46, 0xdc, 0x94, 0x46, 0x4e, 0x24, + 0xb8, 0xa5, 0xb7, 0x32, 0x41, 0x19, 0x72, 0x53, 0xdb, 0x39, 0x89, 0xed, 0x54, 0xb8, 0xf5, 0x68, + 0x68, 0x82, 0x92, 0xac, 0xb3, 0x4e, 0x0b, 0x98, 0xdc, 0xe4, 0xb6, 0x85, 0x05, 0xf7, 0x14, 0x7e, + 0xda, 0x2b, 0xc2, 0x0c, 0xb1, 0xe0, 0xc9, 0x62, 0x2b, 0xc5, 0x9e, 0x3b, 0x4e, 0x4c, 0xfe, 0x0a, + 0x4c, 0x6f, 0xf9, 0xf4, 0x4e, 0x75, 0xa3, 0x26, 0x23, 0x99, 0xa1, 0x72, 0x71, 0x6a, 0xf1, 0xe6, + 0x29, 0x9b, 0xce, 0x75, 0x95, 0x06, 0xd3, 0xe7, 0xf0, 0x71, 0xeb, 0xfa, 0xd4, 0xda, 0x75, 0x3a, + 0x7e, 0x18, 0x16, 0x52, 0x1d, 0xb7, 0x58, 0x55, 0xc6, 0x0a, 0xcc, 0x24, 0xd8, 0x90, 0x29, 0x00, + 0x06, 0xb4, 0xb6, 0xd6, 0x6b, 0xcb, 0x9b, 0x85, 0xe7, 0x48, 0x01, 0x26, 0xf0, 0xf7, 0xf2, 0x7a, + 0x69, 0x69, 0x75, 0xb9, 0x52, 0xc8, 0x90, 0x19, 0x98, 0x44, 0x48, 0xa5, 0x5a, 0xe3, 0xa0, 0x2c, + 0x4f, 0x9e, 0x60, 0x16, 0xf8, 0xd2, 0x0d, 0xd8, 0x02, 0xc0, 0x33, 0xc5, 0xf8, 0xdb, 0x59, 0xb8, + 0x28, 0x8f, 0x15, 0x1a, 0x30, 0xc1, 0xd1, 0x69, 0xef, 0x3d, 0xe3, 0xa7, 0xc3, 0x1d, 0xed, 0x74, + 0x78, 0x25, 0x76, 0x52, 0xc7, 0x5a, 0xd9, 0xe7, 0x88, 0xf8, 0xad, 0x31, 0x78, 0xb1, 0x2f, 0x15, + 0xf9, 0x22, 0x3b, 0xcd, 0x1d, 0xda, 0x0e, 0xaa, 0x8d, 0x26, 0xdd, 0x74, 0x5a, 0xd4, 0xed, 0x06, + 0xc2, 0x63, 0xe0, 0x65, 0xd4, 0xe7, 0x61, 0xa1, 0xe5, 0x34, 0x9a, 0xd4, 0x0a, 0x78, 0xb1, 0x36, + 0xdd, 0x92, 0xd4, 0x8c, 0x65, 0x98, 0xca, 0xab, 0xda, 0x0e, 0xa8, 0xf7, 0x08, 0xad, 0x12, 0x43, + 0x96, 0x07, 0x94, 0x76, 0x2c, 0x9b, 0x95, 0x5a, 0x8e, 0x28, 0xd6, 0x59, 0x26, 0xa8, 0xc9, 0x1d, + 0x85, 0x65, 0x99, 0xdd, 0xfe, 0xd7, 0xec, 0xc7, 0xc2, 0x4c, 0x4a, 0x44, 0xc6, 0x0d, 0x59, 0x72, + 0x77, 0xbe, 0x96, 0xfd, 0xd8, 0x4c, 0x92, 0x90, 0xaf, 0xc2, 0x39, 0x71, 0x00, 0x89, 0xe0, 0x2d, + 0xb2, 0xc5, 0x3c, 0x34, 0xcc, 0x6b, 0x27, 0xc7, 0xc5, 0x0b, 0x32, 0xa6, 0xb0, 0x0c, 0xac, 0x94, + 0xd6, 0xea, 0x74, 0x2e, 0x64, 0x93, 0x1d, 0xc8, 0xb1, 0xee, 0x58, 0xa3, 0xbe, 0x2f, 0x7d, 0x36, + 0xc5, 0xcd, 0x58, 0xed, 0x4c, 0xab, 0xc5, 0xcb, 0xcd, 0x9e, 0x94, 0x64, 0x05, 0xa6, 0xb6, 0xe9, + 0x8e, 0x3a, 0x3e, 0x23, 0xe1, 0x56, 0x55, 0x38, 0xa4, 0x3b, 0xbd, 0x07, 0x27, 0x46, 0x47, 0x1c, + 0x7c, 0x1f, 0x78, 0x7c, 0xb4, 0xea, 0xf8, 0x01, 0x6d, 0x53, 0x0f, 0xc3, 0xb7, 0x8d, 0xe2, 0x66, + 0x30, 0x1f, 0x49, 0xc8, 0x7a, 0xf9, 0xd2, 0x4b, 0x27, 0xc7, 0xc5, 0x17, 0xb9, 0xf3, 0x73, 0x53, + 0xc0, 0xad, 0x58, 0x22, 0xac, 0x24, 0x57, 0xf2, 0x75, 0x98, 0x36, 0xdd, 0x6e, 0xe0, 0xb4, 0xf7, + 0x6a, 0x81, 0x67, 0x07, 0x74, 0x8f, 0x1f, 0x48, 0x51, 0x9c, 0xb8, 0x58, 0xa9, 0x78, 0x5a, 0xe6, + 0x40, 0xcb, 0x17, 0x50, 0xed, 0x44, 0xd0, 0x09, 0xc8, 0xd7, 0x60, 0x8a, 0x87, 0xed, 0x08, 0x2b, + 0x18, 0xd3, 0x92, 0x78, 0xe8, 0x85, 0x0f, 0x6f, 0x0a, 0xab, 0x16, 0x84, 0xa6, 0x55, 0x10, 0xe3, + 0x46, 0xbe, 0x2c, 0x3a, 0x6b, 0xc3, 0x69, 0xef, 0x85, 0xd3, 0x18, 0xb0, 0xe7, 0xdf, 0x8c, 0xba, + 0xa4, 0xc3, 0x3e, 0x57, 0x4e, 0xe3, 0x1e, 0x26, 0x7a, 0x49, 0x3e, 0x24, 0x80, 0x17, 0x4b, 0xbe, + 0xef, 0xf8, 0x81, 0xf0, 0xab, 0x59, 0x7e, 0x4c, 0xeb, 0x5d, 0x86, 0xcc, 0xae, 0xb7, 0xd4, 0xe3, + 0x76, 0xdd, 0xc3, 0x4b, 0xd7, 0x4f, 0x8e, 0x8b, 0xaf, 0xdb, 0x88, 0x68, 0x09, 0x57, 0x1c, 0x8b, + 0x4a, 0x54, 0xeb, 0x90, 0xe3, 0x2a, 0x6d, 0xe8, 0xcf, 0x94, 0x7c, 0x0d, 0xce, 0x97, 0x6d, 0x9f, + 0x56, 0xdb, 0x3e, 0x6d, 0xfb, 0x4e, 0xe0, 0x3c, 0xa2, 0xa2, 0x53, 0xf1, 0xf0, 0xcb, 0x63, 0xca, + 0x30, 0xa3, 0x6e, 0xfb, 0x6c, 0x61, 0x86, 0x28, 0x96, 0x18, 0x14, 0xa5, 0x9a, 0x1e, 0x5c, 0x88, + 0x09, 0x53, 0xb5, 0xda, 0x4a, 0xc5, 0xb1, 0xc3, 0x75, 0x35, 0x89, 0xfd, 0xf5, 0x3a, 0xaa, 0xf6, + 0xfc, 0x7d, 0xab, 0xe1, 0xd8, 0xe1, 0x82, 0xea, 0xd1, 0x59, 0x31, 0x0e, 0xc6, 0x71, 0x06, 0x0a, + 0xf1, 0xa1, 0x24, 0x5f, 0x82, 0x31, 0x6e, 0xdf, 0x46, 0xfd, 0x7d, 0x11, 0x79, 0x42, 0x9a, 0x4b, + 0x85, 0x70, 0x9d, 0x48, 0xb8, 0xd3, 0x71, 0xeb, 0x39, 0xaa, 0x5a, 0xcb, 0xa0, 0x3b, 0x9d, 0x24, + 0x22, 0x0d, 0x98, 0xe0, 0xa3, 0x45, 0x31, 0x48, 0xa4, 0x30, 0x73, 0x7e, 0x49, 0x5d, 0x1d, 0xa2, + 0x28, 0xc6, 0x1f, 0x5f, 0x0d, 0xc5, 0x9c, 0xe0, 0x08, 0x5a, 0x15, 0x1a, 0xd7, 0x25, 0x80, 0xbc, + 0x24, 0x34, 0x2e, 0xc2, 0x85, 0x1e, 0xdf, 0x6c, 0x3c, 0x42, 0x4b, 0x82, 0x1e, 0x35, 0x92, 0x2f, + 0xc1, 0x1c, 0x12, 0x96, 0xdd, 0x76, 0x9b, 0xd6, 0x03, 0xdc, 0x8e, 0xa4, 0xf6, 0x3d, 0xc7, 0x2d, + 0x5d, 0x78, 0x7b, 0xeb, 0x21, 0x82, 0x15, 0x57, 0xc2, 0xa7, 0x72, 0x30, 0x7e, 0x2e, 0x0b, 0xf3, + 0x62, 0x87, 0x33, 0x69, 0xdd, 0xf5, 0x1a, 0xcf, 0xfe, 0x89, 0xba, 0xac, 0x9d, 0xa8, 0x2f, 0x87, + 0x61, 0x8b, 0xd2, 0x1a, 0xd9, 0xe7, 0x40, 0xfd, 0xd5, 0x0c, 0xbc, 0xd0, 0x8f, 0x88, 0xf5, 0x4e, + 0x18, 0x14, 0x73, 0x2c, 0x11, 0xfc, 0xb2, 0x03, 0xb3, 0x38, 0xa0, 0xe5, 0x7d, 0x5a, 0x3f, 0xf0, + 0x57, 0x5c, 0x3f, 0x40, 0x4f, 0x8b, 0x6c, 0x8f, 0xb7, 0xee, 0x37, 0x52, 0xdf, 0xba, 0xcf, 0xf3, + 0x59, 0x56, 0x47, 0x1e, 0x3c, 0x6c, 0xe7, 0x01, 0x3d, 0xf2, 0xcd, 0x34, 0xd6, 0x68, 0x31, 0x5f, + 0xea, 0x06, 0xfb, 0x1b, 0x1e, 0xdd, 0xa5, 0x1e, 0x6d, 0xd7, 0xe9, 0x77, 0x99, 0xc5, 0xbc, 0xde, + 0xb8, 0x81, 0x34, 0x18, 0xff, 0x64, 0x12, 0xe6, 0xd2, 0xc8, 0x58, 0xbf, 0x28, 0x97, 0xe6, 0x78, + 0x46, 0xd3, 0x1f, 0xc8, 0xc0, 0x44, 0x8d, 0xd6, 0xdd, 0x76, 0xe3, 0x0e, 0x5a, 0x14, 0x89, 0xde, + 0xb1, 0xb8, 0xd0, 0xc0, 0xe0, 0xd6, 0x6e, 0xcc, 0xd4, 0xe8, 0x3b, 0xc7, 0xc5, 0x2f, 0x0c, 0x76, + 0x57, 0xad, 0xbb, 0x18, 0x2e, 0x28, 0xc0, 0x8c, 0x1b, 0x61, 0x15, 0xf8, 0x38, 0xa8, 0x55, 0x4a, + 0x96, 0x60, 0x52, 0x2c, 0x57, 0x57, 0x8d, 0x89, 0xca, 0x23, 0x3b, 0xc9, 0x82, 0x84, 0xea, 0x5a, + 0x23, 0x21, 0xb7, 0x20, 0xb7, 0xb5, 0x78, 0x47, 0x8c, 0x81, 0xcc, 0x59, 0xb2, 0xb5, 0x78, 0x07, + 0xd5, 0x61, 0xec, 0x8a, 0x31, 0xd9, 0x5d, 0xd4, 0x8c, 0x7c, 0xb6, 0x16, 0xef, 0x90, 0xbf, 0x0a, + 0xe7, 0x2a, 0x8e, 0x2f, 0xaa, 0xe0, 0xbe, 0x1b, 0x0d, 0xf4, 0x58, 0x1c, 0xe9, 0x31, 0x7b, 0x3f, + 0x9b, 0x3a, 0x7b, 0x5f, 0x6a, 0x84, 0x4c, 0x2c, 0xee, 0x18, 0xd2, 0x88, 0xc7, 0x7e, 0x4d, 0xaf, + 0x87, 0x7c, 0x04, 0x53, 0xa8, 0xcc, 0x46, 0x77, 0x16, 0x8c, 0xda, 0x3f, 0xda, 0xa3, 0xe6, 0x4f, + 0xa7, 0xd6, 0xbc, 0xc0, 0xe3, 0x6d, 0xa0, 0x53, 0x0c, 0x46, 0xf8, 0xd7, 0x6e, 0xfd, 0x1a, 0x67, + 0x72, 0x0f, 0xa6, 0x85, 0xf8, 0xf5, 0x60, 0x77, 0x73, 0x9f, 0x56, 0xec, 0x23, 0x61, 0x9f, 0x83, + 0x37, 0x3a, 0x21, 0xb3, 0x59, 0xee, 0xae, 0x15, 0xec, 0x53, 0xab, 0x61, 0x6b, 0x82, 0x4a, 0x8c, + 0x90, 0x7c, 0x13, 0xc6, 0x57, 0xdd, 0x3a, 0x93, 0xbc, 0x71, 0x67, 0xe0, 0x26, 0x3b, 0x1f, 0x62, + 0xce, 0x4c, 0x0e, 0x8e, 0x89, 0x53, 0xdf, 0x39, 0x2e, 0xbe, 0x73, 0xd6, 0x49, 0xa3, 0x54, 0x60, + 0xaa, 0xb5, 0x91, 0x32, 0xe4, 0xb7, 0xe9, 0x0e, 0x6b, 0x6d, 0x3c, 0x9f, 0x9e, 0x04, 0x0b, 0x8b, + 0x3c, 0xf1, 0x4b, 0xb3, 0xc8, 0x13, 0x30, 0xe2, 0xc1, 0x0c, 0xf6, 0xcf, 0x86, 0xed, 0xfb, 0x87, + 0xae, 0xd7, 0xc0, 0xc4, 0x29, 0xbd, 0xac, 0x81, 0x16, 0x53, 0x3b, 0xff, 0x05, 0xde, 0xf9, 0x1d, + 0x85, 0x83, 0x2a, 0x40, 0x26, 0xd8, 0x93, 0xaf, 0xc3, 0x94, 0x88, 0x5d, 0xb0, 0x76, 0xa7, 0x84, + 0xab, 0x72, 0x42, 0xf3, 0xfb, 0xd4, 0x0b, 0xb9, 0x94, 0x2a, 0x42, 0x21, 0x48, 0x0d, 0x94, 0xd5, + 0xda, 0xb5, 0x75, 0xa5, 0xbf, 0x4a, 0x42, 0x36, 0x60, 0xbc, 0x82, 0x59, 0x9d, 0xd1, 0x37, 0x4d, + 0xd8, 0x85, 0x87, 0x09, 0xc1, 0xa2, 0x12, 0xae, 0x8b, 0x11, 0x09, 0xa0, 0xd1, 0xd3, 0x4d, 0xb7, + 0xd5, 0x0d, 0x11, 0xc9, 0x6d, 0xc8, 0x55, 0x2b, 0x1b, 0xc2, 0x2c, 0x7c, 0x26, 0x8c, 0x10, 0xb2, + 0x21, 0xd3, 0x27, 0xa1, 0xfd, 0x9c, 0xd3, 0xd0, 0x8c, 0xca, 0xab, 0x95, 0x0d, 0xb2, 0x0b, 0x93, + 0xd8, 0x01, 0x2b, 0xd4, 0xe6, 0x7d, 0x3b, 0xdd, 0xa3, 0x6f, 0xaf, 0xa7, 0xf6, 0xed, 0x3c, 0xef, + 0xdb, 0x7d, 0x41, 0xad, 0xe5, 0x83, 0x51, 0xd9, 0x32, 0x91, 0x56, 0xe4, 0xa8, 0x92, 0x59, 0x4c, + 0x36, 0x57, 0xd1, 0x3e, 0x48, 0x88, 0xb4, 0x32, 0xa5, 0x55, 0x98, 0x56, 0xa5, 0xa7, 0xd7, 0x49, + 0x92, 0x0f, 0xf9, 0x3c, 0x0c, 0x3d, 0x38, 0x08, 0x6c, 0x61, 0x00, 0x2e, 0xfb, 0x91, 0x81, 0x64, + 0xf3, 0x51, 0x0b, 0xe9, 0x1e, 0x68, 0x31, 0xe7, 0x90, 0x86, 0x0d, 0xc5, 0x8a, 0xed, 0x35, 0x0e, + 0x6d, 0x0f, 0x1d, 0x84, 0x67, 0x35, 0x16, 0x4a, 0x09, 0x1f, 0x8a, 0x7d, 0x01, 0x88, 0x79, 0x0d, + 0xab, 0x2c, 0xc8, 0xf7, 0xc0, 0x45, 0xdf, 0xd9, 0x6b, 0xdb, 0x41, 0xd7, 0xa3, 0x96, 0xdd, 0xdc, + 0x73, 0x3d, 0x27, 0xd8, 0x6f, 0x59, 0x7e, 0xd7, 0x09, 0xe8, 0xfc, 0x9c, 0x96, 0xd1, 0xba, 0x26, + 0xf1, 0x4a, 0x12, 0xad, 0xc6, 0xb0, 0xcc, 0x0b, 0x7e, 0x7a, 0x01, 0xf9, 0x32, 0x4c, 0xaa, 0x5b, + 0xb2, 0x3f, 0x7f, 0xee, 0x72, 0xee, 0xea, 0x54, 0x78, 0xf1, 0x88, 0x6f, 0xe0, 0x32, 0x12, 0xb4, + 0x72, 0x42, 0xf8, 0x7a, 0x24, 0x68, 0x85, 0x57, 0x98, 0x23, 0x92, 0x14, 0x66, 0xcd, 0x19, 0x31, + 0x63, 0x45, 0x2f, 0xaf, 0xdd, 0x29, 0x99, 0xa3, 0x1b, 0xd5, 0x87, 0xb5, 0xa6, 0x1b, 0x18, 0xff, + 0x45, 0x06, 0x37, 0x71, 0xf2, 0x3a, 0x06, 0x92, 0x0a, 0x5f, 0xcf, 0x50, 0x7f, 0x6b, 0x77, 0x62, + 0x69, 0x04, 0x38, 0x0a, 0x79, 0x03, 0x46, 0xee, 0xd8, 0x75, 0x19, 0xc4, 0x46, 0x20, 0xef, 0x22, + 0x44, 0x55, 0xf6, 0x72, 0x1c, 0x26, 0x5f, 0xf2, 0xc9, 0x5d, 0x8a, 0x92, 0xa5, 0x97, 0x4b, 0xf2, + 0xb9, 0x1e, 0xe5, 0x4b, 0xb1, 0x28, 0x94, 0x6c, 0xea, 0x31, 0xab, 0xf8, 0x54, 0x0e, 0xc6, 0x9f, + 0x64, 0xa2, 0x5d, 0x89, 0xbc, 0x06, 0x43, 0xe6, 0x46, 0xf8, 0xfd, 0xdc, 0xe9, 0x37, 0xf6, 0xf9, + 0x88, 0x40, 0xbe, 0x0c, 0xe7, 0x14, 0x3e, 0x09, 0x13, 0xfd, 0x57, 0xd1, 0x27, 0x55, 0xf9, 0x92, + 0x74, 0x3b, 0xfd, 0x74, 0x1e, 0x28, 0x4c, 0x47, 0x05, 0x15, 0xda, 0x76, 0x38, 0x6f, 0xa5, 0xb1, + 0x2a, 0xef, 0x06, 0x22, 0xc4, 0x1b, 0x9b, 0xc6, 0x81, 0xbb, 0xa4, 0x1a, 0xbf, 0x99, 0xd1, 0x76, + 0x9b, 0x30, 0xbb, 0x74, 0xe6, 0x94, 0xec, 0xd2, 0x6f, 0x03, 0x94, 0xba, 0x81, 0xbb, 0xdc, 0xf6, + 0xdc, 0x26, 0xd7, 0xa2, 0x88, 0x4c, 0x1a, 0xa8, 0x1b, 0xa6, 0x08, 0xd6, 0x3c, 0xe7, 0x42, 0xe4, + 0x54, 0x6f, 0x86, 0xdc, 0xc7, 0xf5, 0x66, 0x30, 0x7e, 0x2f, 0xa3, 0xad, 0x51, 0x26, 0x25, 0x8a, + 0xa9, 0xa8, 0x5a, 0x8c, 0x75, 0x9c, 0x47, 0x96, 0xdf, 0x74, 0xb5, 0x70, 0x15, 0x02, 0x8d, 0xfc, + 0xbb, 0x19, 0x38, 0xcf, 0xdd, 0x02, 0xd6, 0xbb, 0xad, 0x1d, 0xea, 0x3d, 0xb4, 0x9b, 0x4e, 0x23, + 0x0a, 0xd3, 0x17, 0x99, 0x0f, 0x2a, 0xd5, 0xa4, 0xe3, 0xf3, 0x8b, 0x2a, 0x77, 0x53, 0xb0, 0xda, + 0x58, 0x68, 0x3d, 0x0a, 0x4b, 0xd5, 0x8b, 0x6a, 0x3a, 0xbd, 0xf1, 0x6b, 0x19, 0x78, 0xe9, 0xd4, + 0x5a, 0xc8, 0x0d, 0x18, 0x95, 0x29, 0x4c, 0x32, 0xd8, 0xf1, 0x68, 0x67, 0x9b, 0x4c, 0x5f, 0x22, + 0xb1, 0xc8, 0x57, 0xe0, 0x9c, 0xca, 0x6a, 0xd3, 0xb3, 0x1d, 0x35, 0x51, 0x48, 0xca, 0x57, 0x07, + 0x0c, 0x25, 0x2e, 0xad, 0xa5, 0x33, 0x31, 0xfe, 0xdf, 0x8c, 0x92, 0x6f, 0xfe, 0x19, 0x95, 0xe1, + 0x6f, 0x6b, 0x32, 0xbc, 0x0c, 0x52, 0x1a, 0xb6, 0x8a, 0x95, 0xa5, 0xde, 0xbb, 0xa6, 0x15, 0x7b, + 0x71, 0x04, 0xfc, 0x70, 0x16, 0xc6, 0xb7, 0x7c, 0xea, 0xf1, 0x87, 0xdc, 0xef, 0xae, 0x50, 0x8d, + 0x61, 0xbb, 0x06, 0x0a, 0xa6, 0xf7, 0x47, 0x19, 0x54, 0xf0, 0xab, 0x14, 0xac, 0x37, 0x94, 0x1c, + 0x93, 0xd8, 0x1b, 0x98, 0x5d, 0x12, 0xa1, 0x3c, 0xb4, 0xd8, 0xaa, 0x9e, 0x6e, 0x16, 0x73, 0x0e, + 0xaf, 0x92, 0x2f, 0xc0, 0xf0, 0x16, 0xaa, 0x2b, 0xf5, 0x20, 0x1b, 0x21, 0x7f, 0x2c, 0xe4, 0x9b, + 0x74, 0xd7, 0xd7, 0xe3, 0xce, 0x71, 0x42, 0x52, 0x83, 0xd1, 0xb2, 0x47, 0x31, 0x7b, 0xfc, 0xd0, + 0xe0, 0x2e, 0xe2, 0x75, 0x4e, 0x12, 0x77, 0x11, 0x17, 0x9c, 0x8c, 0x9f, 0xcd, 0x02, 0x89, 0xda, + 0x88, 0xa9, 0xd2, 0xfc, 0x67, 0x76, 0xd0, 0x3f, 0xd0, 0x06, 0xfd, 0xc5, 0xc4, 0xa0, 0xf3, 0xe6, + 0x0d, 0x34, 0xf6, 0xbf, 0x9d, 0x81, 0xf3, 0xe9, 0x84, 0xe4, 0x65, 0x18, 0x79, 0xb0, 0xb9, 0x21, + 0xe3, 0xb4, 0x88, 0xa6, 0xb8, 0x1d, 0xd4, 0x15, 0x98, 0xa2, 0x88, 0xbc, 0x09, 0x23, 0x5f, 0x34, + 0xcb, 0xec, 0x1c, 0x52, 0x92, 0x71, 0x7c, 0xc3, 0xb3, 0xea, 0xfa, 0x51, 0x24, 0x90, 0xd4, 0xb1, + 0xcd, 0x3d, 0xb5, 0xb1, 0xfd, 0x89, 0x2c, 0x4c, 0x97, 0xea, 0x75, 0xea, 0xfb, 0x22, 0xd0, 0xfc, + 0x33, 0x3b, 0xb0, 0xe9, 0x11, 0x58, 0xb4, 0xb6, 0x0d, 0x34, 0xaa, 0xbf, 0x93, 0x81, 0x73, 0x92, + 0xea, 0x91, 0x43, 0x0f, 0x37, 0xf7, 0x3d, 0xea, 0xef, 0xbb, 0xcd, 0xc6, 0xc0, 0x19, 0x7f, 0x98, + 0xa0, 0x87, 0xc1, 0xe1, 0xd5, 0x57, 0xfd, 0x5d, 0x84, 0x68, 0x82, 0x1e, 0x0f, 0x20, 0x7f, 0x03, + 0x46, 0x4b, 0x9d, 0x8e, 0xe7, 0x3e, 0xe2, 0xcb, 0x5e, 0x44, 0x96, 0xb4, 0x39, 0x48, 0xf3, 0xb0, + 0xe7, 0x20, 0xf6, 0x19, 0x15, 0xda, 0xe6, 0xa1, 0xfc, 0x26, 0xf9, 0x67, 0x34, 0x68, 0x5b, 0x95, + 0xc5, 0xb1, 0xdc, 0xa8, 0x01, 0xd9, 0xf0, 0xdc, 0x96, 0x1b, 0xd0, 0x06, 0x6f, 0x0f, 0x06, 0x26, + 0x38, 0x35, 0xa4, 0xd6, 0xa6, 0x13, 0x34, 0xb5, 0x90, 0x5a, 0x01, 0x03, 0x98, 0x1c, 0x6e, 0xfc, + 0xdf, 0xc3, 0x30, 0xa1, 0xf6, 0x0e, 0x31, 0x78, 0x1a, 0x0f, 0xd7, 0x53, 0xa3, 0x63, 0xd8, 0x08, + 0x31, 0x45, 0x49, 0x14, 0x5a, 0x26, 0x7b, 0x6a, 0x68, 0x99, 0x6d, 0x98, 0xdc, 0xf0, 0x5c, 0x0c, + 0x81, 0x89, 0xaf, 0x95, 0x62, 0x2b, 0x9c, 0x55, 0xee, 0x9d, 0x6c, 0x20, 0xf1, 0x3d, 0x14, 0x25, + 0xfb, 0x8e, 0xc0, 0xc6, 0xe4, 0x96, 0x9a, 0xd6, 0x45, 0xe3, 0xc3, 0x4d, 0x2d, 0x6c, 0x5f, 0xc4, + 0xb1, 0x0d, 0x4d, 0x2d, 0x18, 0x44, 0x37, 0xb5, 0x60, 0x10, 0x75, 0xad, 0x0d, 0x3f, 0xad, 0xb5, + 0x46, 0x7e, 0x36, 0x03, 0xe3, 0xa5, 0x76, 0x5b, 0x84, 0xac, 0x39, 0xc5, 0x5b, 0xff, 0x2b, 0xc2, + 0xda, 0xe2, 0x9d, 0x8f, 0x65, 0x6d, 0x81, 0x72, 0x8b, 0x8f, 0x92, 0x6a, 0x54, 0xa1, 0x7a, 0x5b, + 0x53, 0xbe, 0x83, 0xbc, 0x03, 0x85, 0x70, 0x92, 0x57, 0xdb, 0x0d, 0xfa, 0x98, 0xf2, 0x34, 0x88, + 0x93, 0x22, 0xae, 0xb6, 0x2a, 0x99, 0xc6, 0x11, 0xc9, 0x26, 0x80, 0x1d, 0xce, 0xae, 0x58, 0x3e, + 0xd7, 0xe4, 0xf4, 0x13, 0xd2, 0x33, 0xfe, 0xc6, 0x07, 0x2d, 0x55, 0x7a, 0x8e, 0xf8, 0x90, 0x16, + 0x4c, 0xf3, 0x64, 0xaa, 0xb5, 0xc0, 0xf6, 0x02, 0x4c, 0x45, 0x01, 0xa7, 0x8e, 0xc3, 0x6b, 0x42, + 0x7f, 0xf6, 0xbc, 0x48, 0xd1, 0xea, 0x33, 0x5a, 0x2b, 0x25, 0x2f, 0x45, 0x9c, 0x37, 0x8f, 0x62, + 0x6e, 0x5e, 0x48, 0x7e, 0x2f, 0x9f, 0xf4, 0x3f, 0x91, 0x81, 0xf3, 0xea, 0xa4, 0xaf, 0x75, 0x77, + 0x44, 0xe8, 0x50, 0x72, 0x1d, 0xc6, 0xc4, 0x9c, 0x0c, 0x2f, 0x51, 0xc9, 0x8c, 0x1a, 0x11, 0x0a, + 0x59, 0x66, 0xd3, 0x90, 0xf1, 0x10, 0x52, 0xf7, 0x6c, 0x6c, 0x9f, 0x62, 0x45, 0x51, 0xa2, 0x6e, + 0x0f, 0x7f, 0xeb, 0xf3, 0x93, 0x41, 0x8c, 0xf7, 0x61, 0x46, 0x1f, 0x89, 0x1a, 0x0d, 0xc8, 0x35, + 0x18, 0x95, 0xc3, 0x97, 0x49, 0x1f, 0x3e, 0x59, 0x6e, 0x6c, 0x03, 0x49, 0xd0, 0xfb, 0x68, 0x16, + 0xc5, 0xee, 0xa7, 0xdc, 0x6c, 0x4f, 0x3e, 0x4a, 0x26, 0x10, 0x97, 0x66, 0xc5, 0xf7, 0x8d, 0x6b, + 0x6e, 0x09, 0x18, 0x46, 0xf5, 0x4f, 0xa6, 0x60, 0x36, 0x65, 0xcf, 0x3d, 0x45, 0x26, 0x2a, 0xea, + 0x1b, 0xc4, 0x58, 0x18, 0xec, 0x43, 0x6e, 0x0b, 0xef, 0xc3, 0xf0, 0xa9, 0xdb, 0x01, 0x77, 0x4a, + 0x89, 0xed, 0x02, 0x9c, 0xec, 0x13, 0x91, 0x8b, 0xd4, 0x78, 0x3c, 0xc3, 0x4f, 0x2d, 0x1e, 0xcf, + 0x12, 0x4c, 0x8a, 0x56, 0x89, 0xed, 0x4a, 0x31, 0x8e, 0x96, 0x19, 0x62, 0x12, 0xdb, 0x96, 0x4e, + 0xc2, 0x79, 0xf8, 0x6e, 0xf3, 0x11, 0x15, 0x3c, 0x46, 0x55, 0x1e, 0x58, 0x90, 0xca, 0x43, 0x21, + 0x21, 0xff, 0x31, 0x26, 0x72, 0x44, 0x88, 0xba, 0x67, 0xe5, 0xfb, 0xed, 0x59, 0x8d, 0xa7, 0xb3, + 0x67, 0xbd, 0x28, 0xbf, 0x31, 0x7d, 0xef, 0x4a, 0xf9, 0x2c, 0xf2, 0xcb, 0x19, 0x98, 0xe1, 0x41, + 0x61, 0xd4, 0x8f, 0xed, 0x1b, 0xe8, 0xa3, 0xfe, 0x74, 0x3e, 0xf6, 0x05, 0x91, 0x1b, 0x28, 0xfd, + 0x5b, 0x93, 0x1f, 0x45, 0xbe, 0x07, 0x20, 0x5c, 0x51, 0x3c, 0x94, 0xec, 0xf8, 0xe2, 0x0b, 0x29, + 0xbb, 0x40, 0x88, 0x14, 0xa5, 0xf0, 0x08, 0x42, 0x3a, 0x2d, 0x7d, 0x67, 0x08, 0x25, 0x7f, 0x15, + 0xe6, 0xd8, 0x7a, 0x09, 0x21, 0x22, 0x84, 0xd5, 0xfc, 0x38, 0xd6, 0xf2, 0x99, 0xde, 0x32, 0xd1, + 0xf5, 0x34, 0x32, 0x1e, 0x78, 0x38, 0xca, 0xa4, 0x1e, 0xa8, 0xd1, 0x2e, 0x52, 0x2b, 0xc2, 0xc8, + 0x70, 0xf8, 0xf5, 0x3c, 0xcd, 0x46, 0x8f, 0xfd, 0xed, 0xa2, 0x5c, 0x0b, 0x7c, 0x7f, 0xf3, 0x75, + 0x1f, 0x65, 0x04, 0x91, 0x2f, 0x02, 0x09, 0xa3, 0xa9, 0x70, 0x18, 0x95, 0x29, 0x38, 0xb8, 0xba, + 0x39, 0x8a, 0xca, 0xe2, 0xc9, 0x62, 0x75, 0x92, 0x24, 0x89, 0x09, 0x85, 0x39, 0xd1, 0x68, 0x06, + 0x95, 0x59, 0x16, 0xfd, 0xf9, 0x29, 0x2d, 0x40, 0x58, 0x54, 0x12, 0xa5, 0x5c, 0x57, 0x52, 0x35, + 0x6a, 0x2a, 0xa7, 0x34, 0x76, 0xe4, 0x36, 0x8c, 0xa1, 0xa3, 0xf0, 0x8a, 0x34, 0xf6, 0x12, 0x86, + 0x27, 0xe8, 0x52, 0x6c, 0xed, 0xeb, 0x26, 0x5b, 0x11, 0x2a, 0xbb, 0x0e, 0x54, 0xbc, 0x23, 0xb3, + 0xdb, 0x46, 0xa5, 0xb0, 0xd0, 0x77, 0x34, 0xbc, 0x23, 0xcb, 0xeb, 0xea, 0x9e, 0xe4, 0x88, 0x44, + 0xbe, 0x0e, 0xe3, 0x6b, 0xf6, 0xe3, 0x30, 0xcf, 0xd4, 0xcc, 0xe0, 0xd9, 0xac, 0x5a, 0xf6, 0xe3, + 0x30, 0xc9, 0x54, 0x3c, 0x9b, 0x95, 0xc2, 0x92, 0x7c, 0x15, 0x40, 0xd1, 0x54, 0x93, 0x53, 0x2b, + 0x78, 0x49, 0x86, 0xbd, 0x4b, 0xd5, 0x60, 0x23, 0x7f, 0x85, 0x61, 0x4c, 0x72, 0x98, 0xfb, 0xe4, + 0x24, 0x87, 0x73, 0x9f, 0x9c, 0xe4, 0xb0, 0xb0, 0x03, 0x17, 0x7b, 0x2e, 0x9d, 0x94, 0xa0, 0xc7, + 0x37, 0xf4, 0xa0, 0xc7, 0x17, 0x7b, 0x1d, 0xb1, 0xbe, 0x9e, 0x69, 0x65, 0xb6, 0x30, 0xd7, 0x5b, + 0x3a, 0xf9, 0x76, 0x36, 0x76, 0xe4, 0x8a, 0x8b, 0x05, 0xcf, 0xf2, 0xd5, 0x4b, 0x26, 0xc9, 0x62, + 0x0a, 0x6e, 0x7e, 0x28, 0x2b, 0x71, 0xe1, 0xd9, 0xa1, 0xac, 0x1e, 0xea, 0x78, 0x3c, 0x3f, 0xe9, + 0xe9, 0xfb, 0x2e, 0x4c, 0xf1, 0xac, 0xb9, 0xf7, 0xe9, 0xd1, 0xa1, 0xeb, 0x35, 0x78, 0xfe, 0x22, + 0x21, 0x83, 0x27, 0x52, 0xde, 0xc7, 0x70, 0x49, 0x45, 0xfa, 0x9e, 0x0e, 0x63, 0xed, 0x17, 0x53, + 0x77, 0x31, 0x86, 0xd0, 0xcf, 0x2d, 0x95, 0xbc, 0x15, 0x0a, 0x6a, 0xd4, 0x53, 0xf3, 0xad, 0x78, + 0x12, 0x98, 0x22, 0xaf, 0x51, 0xcf, 0xf8, 0x97, 0x39, 0x20, 0xbc, 0xa6, 0xb2, 0xdd, 0xb1, 0xd1, + 0x33, 0xdb, 0xc1, 0x58, 0x4b, 0x05, 0x81, 0x63, 0xef, 0x34, 0xa9, 0x1a, 0xa8, 0x4c, 0x18, 0xd7, + 0x86, 0x65, 0x56, 0xfc, 0xa2, 0x93, 0x20, 0xec, 0xb1, 0xd5, 0x65, 0x9f, 0x64, 0xab, 0xfb, 0x3a, + 0x3c, 0x5f, 0xea, 0x60, 0xfa, 0x6d, 0x59, 0xcb, 0x1d, 0xd7, 0x93, 0x9b, 0x94, 0xe6, 0xf3, 0x67, + 0x87, 0x68, 0x89, 0x2f, 0xed, 0xc7, 0x42, 0x91, 0x53, 0xd8, 0xbc, 0xec, 0x04, 0x6a, 0x0c, 0x09, + 0x29, 0xa7, 0x74, 0xb0, 0x24, 0x45, 0x4e, 0xe1, 0x24, 0x92, 0x87, 0xe3, 0x49, 0x39, 0x05, 0xb3, + 0x95, 0x45, 0x3c, 0x1c, 0x8f, 0xf6, 0x90, 0x75, 0x42, 0x12, 0xf2, 0x2e, 0x8c, 0x97, 0xba, 0x81, + 0x2b, 0x18, 0x0b, 0xab, 0xf0, 0xc8, 0x7e, 0x5b, 0x7c, 0x8a, 0x76, 0xf5, 0x89, 0xd0, 0x8d, 0x3f, + 0xce, 0xc1, 0xc5, 0xe4, 0xf0, 0x8a, 0xd2, 0x70, 0x7d, 0x64, 0x4e, 0x59, 0x1f, 0x69, 0xb3, 0x21, + 0x1b, 0x65, 0x9a, 0x78, 0x1a, 0xb3, 0x81, 0x67, 0xf1, 0xfe, 0x98, 0xb3, 0xa1, 0x06, 0xe3, 0xea, + 0x79, 0x37, 0xf4, 0x71, 0xcf, 0x3b, 0x95, 0x0b, 0xbb, 0xd4, 0xf3, 0xd0, 0x19, 0xc3, 0xd1, 0xd3, + 0x51, 0x3c, 0x6a, 0x06, 0xc7, 0x20, 0xff, 0x0e, 0x5c, 0xe6, 0x7b, 0x52, 0xbc, 0xb1, 0x4b, 0x47, + 0x92, 0xa3, 0x18, 0xb8, 0xc5, 0x93, 0xe3, 0xe2, 0x75, 0xae, 0x2a, 0xb1, 0x12, 0xdd, 0x66, 0xed, + 0x1c, 0x59, 0xf2, 0xcb, 0x94, 0x4a, 0x4e, 0xe5, 0x6d, 0x94, 0xe1, 0xa2, 0x28, 0x8d, 0x9c, 0xb6, + 0x65, 0x21, 0x1b, 0xe4, 0x83, 0x48, 0xdb, 0x85, 0x83, 0x1c, 0x53, 0x64, 0x61, 0x39, 0xe6, 0xff, + 0x56, 0x72, 0x33, 0xbf, 0x99, 0xe6, 0x73, 0xc3, 0xa3, 0x76, 0x73, 0xb0, 0xee, 0x6e, 0x23, 0x75, + 0x6a, 0xd9, 0x54, 0x9d, 0x9a, 0x54, 0xca, 0xe4, 0x52, 0x95, 0x32, 0x15, 0x98, 0xae, 0x75, 0x77, + 0x64, 0xdd, 0x71, 0x7f, 0x4d, 0xbf, 0xbb, 0x93, 0xd6, 0x2b, 0x71, 0x12, 0xe3, 0x47, 0xb2, 0x30, + 0xb1, 0xd1, 0xec, 0xee, 0x39, 0xed, 0x8a, 0x1d, 0xd8, 0xcf, 0xac, 0x9a, 0xef, 0x6d, 0x4d, 0xcd, + 0x17, 0xba, 0x96, 0x85, 0x0d, 0x1b, 0x48, 0xc7, 0xf7, 0x33, 0x19, 0x98, 0x8e, 0x48, 0xf8, 0x61, + 0xbd, 0x02, 0x43, 0xec, 0x87, 0xb8, 0xfc, 0x5e, 0x4e, 0x30, 0xe6, 0x69, 0x26, 0xc3, 0xbf, 0x84, + 0xe2, 0x4d, 0xcf, 0xe1, 0x86, 0x1c, 0x16, 0x3e, 0x0b, 0x63, 0x11, 0xdb, 0xb3, 0xa4, 0x97, 0xfc, + 0xf5, 0x0c, 0x14, 0xe2, 0x2d, 0x21, 0xf7, 0x61, 0x94, 0x71, 0x72, 0xa8, 0xbc, 0x97, 0xbf, 0xd2, + 0xa3, 0xcd, 0xd7, 0x05, 0x1a, 0xff, 0x3c, 0xec, 0x7c, 0xca, 0x21, 0xa6, 0xe4, 0xb0, 0x60, 0xc2, + 0x84, 0x8a, 0x95, 0xf2, 0x75, 0x6f, 0xe8, 0x12, 0xca, 0xf9, 0xf4, 0x7e, 0xd0, 0x92, 0x62, 0x6a, + 0x5f, 0x2d, 0x84, 0x8f, 0x2b, 0xda, 0xe4, 0x4a, 0x5d, 0x55, 0x38, 0x69, 0x16, 0xa3, 0x7c, 0x05, + 0xea, 0x3c, 0x4b, 0x99, 0xd0, 0x21, 0x1e, 0x79, 0x03, 0x46, 0x78, 0x7d, 0x6a, 0x42, 0xb7, 0x0e, + 0x42, 0x54, 0x39, 0x99, 0xe3, 0x18, 0x7f, 0x27, 0x07, 0xe7, 0xa3, 0xcf, 0xdb, 0xea, 0x34, 0xec, + 0x80, 0x6e, 0xd8, 0x9e, 0xdd, 0xf2, 0x4f, 0x59, 0x01, 0x57, 0x13, 0x9f, 0x86, 0xa9, 0xb4, 0xe4, + 0xa7, 0x29, 0x1f, 0x64, 0xc4, 0x3e, 0x08, 0x75, 0xa0, 0xfc, 0x83, 0xe4, 0x67, 0x90, 0xfb, 0x90, + 0xab, 0xd1, 0x40, 0xec, 0xbd, 0x57, 0x12, 0xbd, 0xaa, 0x7e, 0xd7, 0xf5, 0x1a, 0x0d, 0xf8, 0x20, + 0xf2, 0xb8, 0x50, 0x5a, 0x70, 0x3e, 0xc6, 0x85, 0x6c, 0xc3, 0xc8, 0xf2, 0xe3, 0x0e, 0xad, 0x07, + 0x22, 0x39, 0xea, 0xb5, 0xfe, 0xfc, 0x38, 0xae, 0x92, 0x1b, 0x95, 0x22, 0x40, 0xed, 0x2c, 0x8e, + 0xb2, 0x70, 0x1b, 0xf2, 0xb2, 0xf2, 0xb3, 0xcc, 0xdc, 0x85, 0xb7, 0x61, 0x5c, 0xa9, 0xe4, 0x4c, + 0x93, 0xfe, 0x17, 0xd8, 0xbe, 0xea, 0x36, 0x65, 0x3e, 0xd5, 0xe5, 0x84, 0xac, 0xa8, 0x64, 0xa3, + 0xe2, 0xb2, 0xa2, 0x75, 0x20, 0x8a, 0xfa, 0x08, 0x8d, 0x55, 0x98, 0xae, 0x1d, 0x38, 0x9d, 0x28, + 0x50, 0xac, 0x76, 0x22, 0x63, 0xc6, 0x1b, 0x71, 0x71, 0x8f, 0x9f, 0xc8, 0x71, 0x3a, 0xe3, 0xcf, + 0x32, 0x30, 0xc2, 0xfe, 0x7a, 0x78, 0xfb, 0x19, 0xdd, 0x32, 0x6f, 0x69, 0x5b, 0xe6, 0x8c, 0x12, + 0xab, 0x1d, 0x37, 0x8e, 0xdb, 0xa7, 0x6c, 0x96, 0xc7, 0x62, 0x80, 0x38, 0x32, 0xb9, 0x0b, 0xa3, + 0xc2, 0xa4, 0x48, 0xd8, 0x7e, 0xab, 0xc1, 0xdf, 0xa5, 0xb1, 0x51, 0x78, 0xc3, 0x77, 0x3b, 0x71, + 0x95, 0x88, 0xa4, 0x66, 0x72, 0xbd, 0x0c, 0xd9, 0xab, 0xe5, 0x4b, 0x77, 0xd1, 0x59, 0x8f, 0x87, + 0x2e, 0xf7, 0x97, 0x2e, 0x08, 0x4e, 0xbd, 0x7c, 0xeb, 0x4b, 0xe2, 0x35, 0x24, 0xd7, 0x8f, 0xc9, + 0x79, 0x99, 0xa4, 0x38, 0xf5, 0xa1, 0xa4, 0x05, 0xe7, 0x6b, 0xb5, 0x15, 0x34, 0x3f, 0xdc, 0x70, + 0xbd, 0xe0, 0x8e, 0xeb, 0x1d, 0xda, 0x68, 0x5b, 0x8c, 0x1a, 0x3e, 0xc5, 0x06, 0x21, 0xcd, 0x28, + 0xec, 0xb5, 0x54, 0xa3, 0xb0, 0x3e, 0x76, 0x0a, 0x46, 0x1b, 0x2e, 0xd4, 0x6a, 0x2b, 0x3c, 0x70, + 0xf8, 0x9f, 0x47, 0x7d, 0xbf, 0x9e, 0x81, 0x99, 0x5a, 0x6d, 0x25, 0x56, 0xd5, 0xaa, 0x8c, 0x58, + 0x9e, 0xd1, 0xf3, 0x7c, 0xa7, 0x76, 0x04, 0x8e, 0x42, 0x86, 0x4b, 0x78, 0x75, 0x2d, 0x38, 0x25, + 0x67, 0x42, 0x36, 0xc2, 0x18, 0xe9, 0x59, 0xcd, 0x1f, 0xa0, 0x47, 0x43, 0x51, 0xc3, 0x2d, 0xbc, + 0xe9, 0x58, 0xa9, 0xae, 0xe1, 0x66, 0x10, 0xe3, 0xbf, 0x39, 0xcf, 0xa3, 0xb0, 0xcb, 0xd9, 0xf2, + 0x1e, 0x4c, 0x08, 0x7a, 0x34, 0x9a, 0x17, 0x36, 0x21, 0x17, 0xd9, 0x06, 0xb9, 0xcb, 0xe1, 0x3c, + 0x3a, 0xef, 0x77, 0x8e, 0x8b, 0x43, 0xac, 0x6b, 0x4c, 0x0d, 0x9d, 0x3c, 0x80, 0xc9, 0x35, 0xfb, + 0xb1, 0xa2, 0xce, 0xe0, 0x2e, 0x51, 0xd7, 0xd8, 0xae, 0xd2, 0xb2, 0x1f, 0x0f, 0x60, 0x74, 0xa7, + 0xd3, 0x93, 0x03, 0x98, 0xd2, 0xdb, 0x24, 0x66, 0x60, 0x72, 0xc4, 0x6e, 0xa6, 0x8e, 0xd8, 0xc5, + 0x8e, 0xeb, 0x05, 0xd6, 0x6e, 0x48, 0xae, 0x65, 0x1c, 0x88, 0xb1, 0x26, 0xef, 0xc1, 0x8c, 0x12, + 0x02, 0xf4, 0x8e, 0xeb, 0xb5, 0x6c, 0x79, 0xe1, 0x42, 0x1d, 0x3f, 0xda, 0x12, 0xed, 0x22, 0xd8, + 0x4c, 0x62, 0x92, 0x2f, 0xa7, 0xb9, 0x99, 0x0d, 0x47, 0x96, 0x87, 0x29, 0x6e, 0x66, 0xbd, 0x2c, + 0x0f, 0x93, 0x0e, 0x67, 0x7b, 0xfd, 0x2c, 0x93, 0xf3, 0xbc, 0xf5, 0x03, 0x59, 0x1e, 0x87, 0x23, + 0xd7, 0xc3, 0x02, 0x79, 0x11, 0x72, 0x4b, 0x1b, 0x77, 0xf0, 0x65, 0x4a, 0x1a, 0x51, 0xb5, 0xf7, + 0xed, 0x76, 0x1d, 0x2f, 0x42, 0xc2, 0x1b, 0x40, 0x3d, 0x28, 0x97, 0x36, 0xee, 0x10, 0x1b, 0x66, + 0x31, 0xcf, 0x5b, 0xf0, 0xa5, 0x9b, 0x37, 0x95, 0xa1, 0xca, 0xe3, 0xa7, 0xdd, 0x10, 0x9f, 0x56, + 0xc4, 0x2c, 0x71, 0x81, 0xf5, 0xf8, 0xe6, 0xcd, 0xd4, 0x01, 0x09, 0x3f, 0x2c, 0x8d, 0x17, 0x3b, + 0xb0, 0xd6, 0xec, 0xc7, 0x91, 0x13, 0x87, 0x2f, 0x1c, 0x76, 0x5f, 0x94, 0x53, 0x2b, 0x72, 0x00, + 0xd1, 0x0e, 0x2c, 0x9d, 0x88, 0xdd, 0x63, 0xa3, 0x09, 0xe6, 0x0b, 0x57, 0xa7, 0x05, 0xa9, 0xae, + 0x93, 0x5e, 0xdd, 0xea, 0x65, 0x4c, 0x41, 0x27, 0x5b, 0xe1, 0x6d, 0x9c, 0xdf, 0x66, 0x45, 0x66, + 0xe4, 0x1b, 0xea, 0x6d, 0x9c, 0x2b, 0xc9, 0xb4, 0x66, 0x4d, 0x87, 0x2a, 0x1c, 0xee, 0xd5, 0x62, + 0xea, 0x5c, 0x92, 0x97, 0xfc, 0x89, 0xb3, 0x5f, 0xf2, 0x29, 0x0c, 0xad, 0xba, 0xf5, 0x03, 0x11, + 0x9c, 0xef, 0x8b, 0x6c, 0x17, 0xd6, 0xd3, 0xe8, 0x3f, 0xa9, 0xc5, 0x35, 0xb2, 0x27, 0xeb, 0xec, + 0x53, 0xd9, 0x2c, 0x10, 0x7d, 0x22, 0xac, 0x78, 0xe7, 0xc2, 0x5b, 0xae, 0x52, 0xc6, 0xe5, 0x51, + 0x3e, 0x69, 0x64, 0xd7, 0x9a, 0x3a, 0x39, 0xa1, 0x50, 0xa8, 0x50, 0xff, 0x20, 0x70, 0x3b, 0xe5, + 0xa6, 0xd3, 0xd9, 0x71, 0x6d, 0x4f, 0x86, 0x72, 0x1e, 0x78, 0x4f, 0x6e, 0x70, 0x7a, 0xab, 0x2e, + 0x19, 0x98, 0x09, 0x96, 0xe4, 0xcb, 0x30, 0xc5, 0x26, 0xf7, 0xf2, 0xe3, 0x80, 0xb6, 0xf9, 0xc8, + 0xcf, 0xa0, 0x44, 0x37, 0xa7, 0xe4, 0x2e, 0x09, 0x0b, 0xf9, 0x9c, 0xc2, 0xc5, 0x4e, 0x43, 0x02, + 0x2d, 0xb0, 0xa1, 0xc6, 0x8a, 0x34, 0x60, 0x7e, 0xcd, 0x7e, 0xac, 0xe4, 0x60, 0x56, 0x26, 0x29, + 0xc1, 0x09, 0x76, 0xf5, 0xe4, 0xb8, 0xf8, 0x0a, 0x9b, 0x60, 0x51, 0x74, 0xf1, 0x1e, 0xf3, 0xb5, + 0x27, 0x27, 0xf2, 0x4d, 0xb8, 0x20, 0x9a, 0x55, 0xc1, 0xbc, 0x61, 0xae, 0x77, 0x54, 0xdb, 0xb7, + 0xd1, 0x7f, 0x6b, 0xb6, 0x47, 0x87, 0xdd, 0x48, 0xdf, 0x12, 0x65, 0x87, 0x35, 0x24, 0x1f, 0xcb, + 0xe7, 0x8c, 0xcc, 0x5e, 0x35, 0x90, 0x8f, 0x60, 0x8a, 0x3f, 0xc7, 0xad, 0xb8, 0x7e, 0x80, 0xca, + 0x9a, 0xb9, 0xb3, 0xb9, 0x25, 0xf0, 0x37, 0x3e, 0xee, 0xc8, 0x13, 0x53, 0xee, 0xc4, 0x38, 0x93, + 0x77, 0x60, 0x7c, 0xc3, 0x69, 0xf3, 0xd0, 0xa3, 0xd5, 0x0d, 0x54, 0x2b, 0x8b, 0x13, 0xa8, 0xe3, + 0xb4, 0x2d, 0xa9, 0x31, 0xe9, 0x84, 0xdb, 0x85, 0x8a, 0x4d, 0xb6, 0x61, 0xbc, 0x56, 0x5b, 0xb9, + 0xe3, 0x30, 0xb9, 0xa4, 0x73, 0x34, 0x7f, 0xbe, 0xc7, 0x57, 0xbe, 0x9c, 0xfa, 0x95, 0x93, 0xbe, + 0xbf, 0x6f, 0xed, 0x3a, 0x4d, 0x6a, 0xd5, 0xdd, 0xce, 0x91, 0xa9, 0x72, 0x4a, 0x31, 0xd5, 0xbf, + 0xf0, 0x94, 0x4d, 0xf5, 0xab, 0x30, 0xad, 0x18, 0xcf, 0xa2, 0xe1, 0xec, 0x7c, 0x14, 0xaf, 0x4a, + 0x35, 0xcd, 0x8f, 0xbb, 0xa6, 0xc6, 0xe9, 0xa4, 0x8d, 0xfe, 0xc5, 0xb3, 0xda, 0xe8, 0x3b, 0x30, + 0xc3, 0x07, 0x43, 0xcc, 0x03, 0x1c, 0xe9, 0x85, 0x1e, 0x7d, 0x78, 0x2d, 0xb5, 0x0f, 0x67, 0xc5, + 0x48, 0xcb, 0x49, 0x86, 0xcf, 0xcf, 0x49, 0xae, 0x64, 0x17, 0x88, 0x00, 0xda, 0x81, 0xbd, 0x63, + 0xfb, 0x14, 0xeb, 0x7a, 0xbe, 0x47, 0x5d, 0xaf, 0xa4, 0xd6, 0x35, 0x25, 0xeb, 0xda, 0xe1, 0xd5, + 0xa4, 0x70, 0x24, 0x6d, 0x59, 0x8f, 0x9c, 0x5f, 0xd8, 0xb1, 0x2f, 0x68, 0x3a, 0xee, 0x24, 0x02, + 0x0f, 0xfd, 0x14, 0x9f, 0xb4, 0xf1, 0x7e, 0x4f, 0xe1, 0x4c, 0x1e, 0xc3, 0xf9, 0xe4, 0x57, 0x60, + 0x9d, 0x2f, 0x62, 0x9d, 0x2f, 0x6a, 0x75, 0xc6, 0x91, 0xf8, 0xbc, 0xd1, 0x9b, 0x15, 0xaf, 0xb5, + 0x07, 0x7f, 0xf2, 0x83, 0x19, 0xb8, 0xb0, 0x76, 0xa7, 0x84, 0xd9, 0x44, 0x1d, 0x1e, 0x89, 0x2e, + 0x74, 0xe9, 0xbd, 0x24, 0xde, 0x41, 0xe2, 0x6f, 0x33, 0x52, 0xe2, 0xc0, 0xad, 0x82, 0x89, 0xee, + 0x2f, 0xb7, 0x76, 0x6d, 0x9e, 0xa4, 0x54, 0xb0, 0x48, 0xf1, 0xfb, 0xfd, 0xd6, 0x1f, 0x16, 0x33, + 0x66, 0xaf, 0xaa, 0x48, 0x13, 0x16, 0xf4, 0x6e, 0x91, 0x5e, 0x14, 0xfb, 0xb4, 0xd9, 0x9c, 0x2f, + 0xe2, 0x8c, 0x7e, 0xe3, 0xe4, 0xb8, 0x78, 0x35, 0xd1, 0xbb, 0xa1, 0x67, 0x06, 0xc3, 0x54, 0x1a, + 0xdc, 0x87, 0x1f, 0x69, 0xa5, 0x08, 0xdd, 0xf3, 0x97, 0xb5, 0xd8, 0x3f, 0x89, 0xf2, 0xa5, 0x57, + 0x85, 0x44, 0xf2, 0x22, 0x5b, 0xef, 0x3d, 0x05, 0x44, 0x33, 0xc9, 0xf9, 0xde, 0x50, 0x7e, 0xb2, + 0x30, 0x95, 0xe2, 0xb2, 0x60, 0xfc, 0x56, 0x36, 0x76, 0x30, 0x92, 0x2a, 0x8c, 0x8a, 0xf9, 0xde, + 0xf3, 0x92, 0xf1, 0x62, 0xea, 0xac, 0x1e, 0x15, 0x4b, 0xc7, 0x94, 0xf4, 0xe4, 0x90, 0xb1, 0xc2, + 0x46, 0x8b, 0x1b, 0xef, 0x57, 0xf9, 0xb9, 0x87, 0x20, 0xed, 0x84, 0xaf, 0x9c, 0xdd, 0x11, 0x4f, + 0xf7, 0xf3, 0xc4, 0xa3, 0x5e, 0xd6, 0x46, 0x0e, 0x78, 0x2a, 0xa9, 0x5c, 0xe8, 0xcd, 0xa5, 0xe7, + 0x8d, 0x7a, 0x6a, 0x15, 0xb2, 0x5a, 0x8c, 0xdf, 0xcc, 0xc0, 0xa4, 0x76, 0xb2, 0x92, 0xdb, 0x8a, + 0xab, 0x62, 0xe4, 0xbd, 0xaf, 0xe1, 0xe0, 0x66, 0x1b, 0x77, 0x62, 0xbc, 0x2d, 0xfc, 0x0e, 0xb2, + 0xbd, 0xe9, 0x70, 0xb1, 0xc5, 0x3d, 0x57, 0xfb, 0xeb, 0x87, 0xc3, 0x3c, 0x98, 0x43, 0x3d, 0xf2, + 0x60, 0xfe, 0xfd, 0x22, 0x4c, 0xe9, 0x37, 0x62, 0xf2, 0x06, 0x8c, 0xa0, 0x6e, 0x5e, 0xaa, 0x57, + 0x50, 0x2d, 0x84, 0xea, 0x7b, 0xcd, 0x19, 0x85, 0xe3, 0x90, 0x57, 0x01, 0x42, 0x03, 0x70, 0xf9, + 0x32, 0x35, 0x7c, 0x72, 0x5c, 0xcc, 0xbc, 0x69, 0x2a, 0x05, 0xe4, 0x6b, 0x00, 0xeb, 0x6e, 0x83, + 0x86, 0xc9, 0x8d, 0xfb, 0x58, 0x5f, 0xbc, 0x96, 0x48, 0xb3, 0x72, 0xae, 0xed, 0x36, 0x68, 0x32, + 0xa7, 0x8a, 0xc2, 0x91, 0x7c, 0x1e, 0x86, 0xcd, 0x6e, 0x93, 0xca, 0x17, 0x8c, 0x71, 0x79, 0xc2, + 0x75, 0x9b, 0x34, 0xd2, 0x13, 0x78, 0xdd, 0xb8, 0x61, 0x21, 0x03, 0x90, 0x0f, 0x78, 0xfa, 0x15, + 0x11, 0x23, 0x74, 0x38, 0x7a, 0xab, 0x53, 0x24, 0x9f, 0x44, 0x94, 0x50, 0x85, 0x84, 0x3c, 0x80, + 0x51, 0xf5, 0x91, 0x49, 0xf1, 0x79, 0x57, 0x1f, 0x22, 0x15, 0xa5, 0x83, 0xc8, 0x8a, 0x1c, 0x7f, + 0x7f, 0x92, 0x5c, 0xc8, 0xbb, 0x30, 0xc6, 0xd8, 0xb3, 0x9d, 0xc3, 0x17, 0xb7, 0x1a, 0x7c, 0x91, + 0x53, 0x3e, 0x88, 0xed, 0x3e, 0x5a, 0x24, 0xcf, 0x90, 0x80, 0x7c, 0x19, 0xf3, 0xd8, 0x8a, 0xae, + 0xee, 0x6b, 0x95, 0x73, 0x25, 0xd1, 0xd5, 0x98, 0xd8, 0x36, 0xd1, 0xd3, 0x11, 0x3f, 0xb2, 0x17, + 0x86, 0x5c, 0x1b, 0x24, 0x65, 0xce, 0xeb, 0x89, 0x0a, 0xe6, 0x65, 0x14, 0xb1, 0x64, 0x92, 0x6a, + 0x8d, 0x2f, 0xe9, 0x40, 0x21, 0x12, 0x2a, 0x45, 0x5d, 0xd0, 0xaf, 0xae, 0x37, 0x13, 0x75, 0xa9, + 0x03, 0x98, 0xa8, 0x2e, 0xc1, 0x9d, 0x34, 0x60, 0x4a, 0x1e, 0x50, 0xa2, 0xbe, 0xf1, 0x7e, 0xf5, + 0xbd, 0x9a, 0xa8, 0x6f, 0xb6, 0xb1, 0x93, 0xac, 0x27, 0xc6, 0x93, 0xbc, 0x0b, 0x93, 0x12, 0xc2, + 0x53, 0x46, 0x4f, 0x44, 0x39, 0x77, 0x1b, 0x3b, 0x89, 0x44, 0xd1, 0x3a, 0xb2, 0x4a, 0xcd, 0x67, + 0xc7, 0xa4, 0x46, 0x1d, 0x9f, 0x15, 0x3a, 0x32, 0xf9, 0x10, 0xc6, 0xab, 0x2d, 0xd6, 0x10, 0xb7, + 0x6d, 0x07, 0x54, 0xf8, 0x43, 0x4a, 0x0b, 0x23, 0xa5, 0x44, 0x99, 0xaa, 0x3c, 0x19, 0x76, 0x54, + 0xa4, 0x25, 0xc3, 0x8e, 0xc0, 0xac, 0xf3, 0xf8, 0xab, 0xa2, 0x98, 0xc3, 0xd2, 0x57, 0xf2, 0xc5, + 0x14, 0x2b, 0x1f, 0x85, 0xbd, 0x88, 0x07, 0xc9, 0xa0, 0xf2, 0x55, 0x2f, 0x16, 0x8b, 0x57, 0xe5, + 0x49, 0xde, 0x83, 0x71, 0x91, 0x4d, 0xac, 0x64, 0xae, 0xfb, 0xf3, 0x05, 0x6c, 0x3c, 0x46, 0x78, + 0x90, 0x89, 0xc7, 0x2c, 0xdb, 0x8b, 0x99, 0xb3, 0x46, 0xf8, 0xe4, 0x4b, 0x30, 0xb7, 0xed, 0xb4, + 0x1b, 0xee, 0xa1, 0x2f, 0x8e, 0x29, 0xb1, 0xd1, 0xcd, 0x44, 0xce, 0x64, 0x87, 0xbc, 0x3c, 0x94, + 0x05, 0x13, 0x1b, 0x5f, 0x2a, 0x07, 0xf2, 0x7d, 0x09, 0xce, 0x7c, 0x06, 0x91, 0x7e, 0x33, 0x68, + 0x31, 0x31, 0x83, 0x92, 0xd5, 0xc7, 0xa7, 0x53, 0x6a, 0x35, 0xc4, 0x05, 0xa2, 0x9f, 0xef, 0xf7, + 0x5c, 0xa7, 0x3d, 0x3f, 0x8b, 0x7b, 0xe1, 0xf3, 0xf1, 0x98, 0x0a, 0x88, 0x27, 0x92, 0x8a, 0x1b, + 0x27, 0xc7, 0xc5, 0x4b, 0x71, 0x99, 0xff, 0x23, 0x57, 0x7b, 0x2e, 0x49, 0x61, 0x4d, 0x3e, 0x84, + 0x09, 0xf6, 0x7f, 0xa8, 0x94, 0x98, 0xd3, 0xec, 0x42, 0x15, 0x4c, 0x51, 0x0f, 0x8e, 0x11, 0xa6, + 0x3b, 0x4b, 0xd1, 0x57, 0x68, 0xac, 0xc8, 0xdb, 0x00, 0x4c, 0x6c, 0x12, 0xdb, 0xf1, 0xb9, 0x28, + 0xf4, 0x31, 0x4a, 0x5d, 0xc9, 0x8d, 0x38, 0x42, 0x26, 0xef, 0xc2, 0x38, 0xfb, 0x55, 0xeb, 0x36, + 0x5c, 0xb6, 0x36, 0xce, 0x23, 0x2d, 0x77, 0x4d, 0x65, 0xb4, 0x3e, 0x87, 0x6b, 0xae, 0xa9, 0x11, + 0x3a, 0x59, 0x81, 0x69, 0x0c, 0x51, 0x2d, 0x82, 0xa3, 0x3a, 0xd4, 0x9f, 0xbf, 0xa0, 0x58, 0x43, + 0xb0, 0x22, 0xcb, 0x09, 0xcb, 0xd4, 0xbb, 0x4c, 0x8c, 0x8c, 0xf8, 0x30, 0x9b, 0x7c, 0x4e, 0xf6, + 0xe7, 0xe7, 0xb1, 0x93, 0xa4, 0x04, 0x9f, 0xc4, 0xe0, 0xfb, 0x31, 0x1b, 0x11, 0x65, 0xe3, 0x92, + 0x8f, 0x4a, 0x6a, 0x85, 0x69, 0xdc, 0x89, 0x09, 0xe4, 0x6e, 0x79, 0x23, 0x1e, 0xc3, 0xf9, 0x22, + 0xb6, 0x00, 0x87, 0x79, 0xaf, 0x1e, 0x65, 0x11, 0x4f, 0x89, 0xe3, 0x9c, 0x42, 0x4d, 0xbe, 0x17, + 0xce, 0xc9, 0x1d, 0x44, 0x14, 0x89, 0x79, 0xbd, 0x70, 0xc6, 0x9d, 0xb8, 0xb1, 0x13, 0x56, 0x9d, + 0x98, 0xd2, 0xe9, 0x55, 0x10, 0x1b, 0xc6, 0x71, 0x58, 0x45, 0x8d, 0xcf, 0xf7, 0xab, 0xf1, 0x6a, + 0xa2, 0xc6, 0xf3, 0x38, 0x51, 0x92, 0x95, 0xa9, 0x3c, 0xc9, 0x12, 0x4c, 0x8a, 0x75, 0x24, 0x66, + 0xdb, 0x0b, 0xd8, 0x5b, 0xa8, 0xc4, 0x92, 0x2b, 0x30, 0x31, 0xe1, 0x74, 0x12, 0x75, 0x47, 0xe6, + 0x8f, 0x49, 0x2f, 0x6a, 0x3b, 0x72, 0xfc, 0x0d, 0x49, 0x47, 0x66, 0x3b, 0x52, 0x24, 0xc5, 0x2c, + 0x3f, 0xee, 0x78, 0x42, 0x45, 0x75, 0x29, 0xca, 0x8a, 0xa4, 0x08, 0x3f, 0x16, 0x0d, 0x31, 0xd4, + 0x2d, 0x21, 0x8d, 0x03, 0xd9, 0x82, 0xd9, 0xf0, 0xd4, 0x56, 0x18, 0x17, 0xa3, 0x28, 0xc1, 0xd1, + 0x51, 0x9f, 0xce, 0x37, 0x8d, 0x9e, 0xd8, 0x70, 0x41, 0x3b, 0xa7, 0x15, 0xd6, 0x97, 0x91, 0x35, + 0x66, 0xad, 0xd7, 0x0f, 0xf9, 0x74, 0xf6, 0xbd, 0xf8, 0x90, 0x8f, 0x60, 0x21, 0x7e, 0x36, 0x2b, + 0xb5, 0xbc, 0x84, 0xb5, 0xbc, 0x7e, 0x72, 0x5c, 0xbc, 0x92, 0x38, 0xde, 0xd3, 0x2b, 0xea, 0xc3, + 0x8d, 0x7c, 0x0d, 0xe6, 0xf5, 0xf3, 0x59, 0xa9, 0xc9, 0xc0, 0x9a, 0x70, 0xe9, 0x84, 0x07, 0x7b, + 0x7a, 0x0d, 0x3d, 0x79, 0x90, 0x00, 0x8a, 0xa9, 0xb3, 0x5b, 0xa9, 0xe6, 0xe5, 0xa8, 0x41, 0x89, + 0x55, 0x92, 0x5e, 0xdd, 0x69, 0x2c, 0xc9, 0x21, 0x5c, 0x4a, 0x3b, 0x26, 0x94, 0x4a, 0x5f, 0x09, + 0x95, 0xc0, 0x9f, 0x4a, 0x3f, 0x72, 0xd2, 0x6b, 0x3e, 0x85, 0x2d, 0xf9, 0x32, 0x9c, 0x53, 0xd6, + 0x97, 0x52, 0xdf, 0xab, 0x58, 0x1f, 0xba, 0x82, 0xab, 0x0b, 0x33, 0xbd, 0x96, 0x74, 0x1e, 0xa4, + 0x05, 0xb3, 0xb2, 0xe1, 0xa8, 0x6d, 0x17, 0x47, 0xcf, 0x15, 0x6d, 0x57, 0x4d, 0x62, 0x2c, 0x5d, + 0x16, 0xbb, 0xea, 0x7c, 0x63, 0xc7, 0xea, 0x44, 0x84, 0xea, 0x4c, 0x4f, 0xe1, 0x4b, 0x56, 0x60, + 0xa4, 0xb6, 0x51, 0xbd, 0x73, 0x67, 0x79, 0xfe, 0x35, 0xac, 0x41, 0xfa, 0x8d, 0x71, 0xa0, 0x76, + 0x69, 0x12, 0xe6, 0x8a, 0x1d, 0x67, 0x77, 0x57, 0x7b, 0xb0, 0xe2, 0xa8, 0xe4, 0xfb, 0xd0, 0x50, + 0x90, 0xed, 0xa8, 0x25, 0xdf, 0x77, 0xf6, 0x30, 0xea, 0xb4, 0x3f, 0xff, 0xba, 0xf6, 0xde, 0x2f, + 0x23, 0x72, 0x97, 0x31, 0x61, 0x59, 0x02, 0x9d, 0x4b, 0x9b, 0xec, 0xfe, 0x2f, 0x76, 0x6e, 0xcb, + 0x8e, 0x58, 0xa9, 0x9b, 0x78, 0xb2, 0x22, 0xd6, 0x6f, 0x7b, 0x4e, 0x60, 0xed, 0x77, 0xb5, 0xe6, + 0xcf, 0x7f, 0x4a, 0x8b, 0xc0, 0xcc, 0xd3, 0xb8, 0x29, 0xbd, 0xf6, 0x8a, 0xa8, 0xf0, 0x05, 0x7e, + 0x5b, 0xee, 0xd1, 0x73, 0x33, 0x7b, 0x31, 0x3a, 0x9f, 0xfc, 0x40, 0x06, 0xce, 0x6f, 0xbb, 0xde, + 0x41, 0xd3, 0xb5, 0x1b, 0xb2, 0x55, 0x62, 0x0f, 0x7f, 0xa3, 0xdf, 0x1e, 0xfe, 0x99, 0xc4, 0x1e, + 0x6e, 0x1c, 0x0a, 0x36, 0x56, 0x18, 0xd0, 0x3c, 0xb1, 0x9f, 0xf7, 0xa8, 0x8a, 0x7c, 0x1f, 0x5c, + 0x4e, 0x2f, 0x51, 0x26, 0xe5, 0x9b, 0x38, 0x29, 0x6f, 0x9e, 0x1c, 0x17, 0xdf, 0xec, 0x55, 0x53, + 0xfa, 0x04, 0x3d, 0x95, 0xf5, 0xbd, 0xa1, 0xfc, 0xd5, 0xc2, 0xb5, 0x7b, 0x43, 0xf9, 0x6b, 0x85, + 0xd7, 0xcd, 0x17, 0x6a, 0xa5, 0xb5, 0xd5, 0x6a, 0x43, 0x1e, 0xae, 0x32, 0xe6, 0x3a, 0xa7, 0x31, + 0xaf, 0xf4, 0x2b, 0x8d, 0x38, 0x1a, 0x7f, 0x2b, 0x03, 0xc5, 0x53, 0x26, 0x09, 0x3b, 0xcf, 0xa2, + 0x91, 0xa8, 0xd1, 0x40, 0x8d, 0xdc, 0x1e, 0x8d, 0x9f, 0xa5, 0x9b, 0x8d, 0xe8, 0x24, 0xe8, 0x74, + 0x28, 0xd2, 0x85, 0x28, 0xbe, 0xa7, 0xc9, 0x34, 0x21, 0x12, 0xcb, 0x58, 0x85, 0x42, 0x7c, 0xf2, + 0x90, 0xcf, 0xc1, 0xa4, 0x9a, 0xac, 0x40, 0xaa, 0x12, 0x78, 0xa0, 0x11, 0x6f, 0x4f, 0x3b, 0x10, + 0x35, 0x44, 0xe3, 0x17, 0x32, 0x30, 0x9b, 0xb2, 0xc2, 0xc8, 0x15, 0x18, 0xc2, 0x6c, 0x62, 0x8a, + 0xd5, 0x50, 0x2c, 0x8b, 0x18, 0x96, 0x93, 0x4f, 0xc3, 0x68, 0x65, 0xbd, 0x56, 0x2b, 0xad, 0x4b, + 0x65, 0x04, 0x3f, 0x88, 0xdb, 0xbe, 0xe5, 0xdb, 0xba, 0xb1, 0x81, 0x40, 0x23, 0x6f, 0xc2, 0x48, + 0x75, 0x03, 0x09, 0xb8, 0xed, 0x2b, 0xb6, 0xd7, 0xe9, 0xc4, 0xf1, 0x05, 0x92, 0xf1, 0x63, 0x19, + 0x20, 0xc9, 0xed, 0x82, 0xdc, 0x84, 0x71, 0x75, 0x53, 0xe2, 0xed, 0xc5, 0x17, 0x58, 0x65, 0xe1, + 0x98, 0x2a, 0x0e, 0xa9, 0xc0, 0x30, 0xe6, 0x81, 0x0d, 0xad, 0x1c, 0x52, 0x97, 0xc5, 0x85, 0xc4, + 0xb2, 0x18, 0xc6, 0x2c, 0xb3, 0x26, 0x27, 0x36, 0x7e, 0x27, 0x03, 0x24, 0xdd, 0x76, 0x71, 0x20, + 0x2b, 0xab, 0xb7, 0x94, 0xd8, 0x05, 0x6a, 0xbe, 0xa0, 0x30, 0xd9, 0x9b, 0xaa, 0x06, 0x88, 0xa2, + 0x1c, 0x5c, 0xd1, 0xd4, 0x4e, 0xbd, 0x1d, 0x5e, 0xaf, 0xc1, 0xf0, 0x43, 0xea, 0xed, 0x48, 0xb3, + 0x6e, 0x34, 0x05, 0x7d, 0xc4, 0x00, 0xaa, 0x1a, 0x06, 0x31, 0x8c, 0x3f, 0xce, 0xc0, 0x5c, 0xda, + 0x1d, 0xe5, 0x14, 0xbf, 0x54, 0x23, 0xe6, 0x52, 0x8b, 0x16, 0x56, 0xdc, 0x4e, 0x34, 0x74, 0xa4, + 0x2d, 0xc2, 0x30, 0x6b, 0xac, 0x1c, 0x61, 0x54, 0x83, 0xb1, 0xde, 0xf0, 0x4d, 0x0e, 0x67, 0x08, + 0x3c, 0x46, 0xdf, 0x10, 0x86, 0x77, 0x44, 0x04, 0x9c, 0xdd, 0x26, 0x87, 0x33, 0x84, 0x35, 0xb7, + 0x41, 0xa5, 0x7a, 0x08, 0x11, 0x5a, 0x0c, 0x60, 0x72, 0x38, 0xb9, 0x02, 0xa3, 0x0f, 0xda, 0xab, + 0xd4, 0x7e, 0x24, 0x73, 0x56, 0xa0, 0x45, 0x98, 0xdb, 0xb6, 0x9a, 0x0c, 0x66, 0xca, 0x42, 0xe3, + 0x67, 0x32, 0x30, 0x93, 0xb8, 0x1e, 0x9d, 0xee, 0x7a, 0xdb, 0xdf, 0x07, 0x6e, 0x90, 0xf6, 0xf1, + 0xcf, 0x1f, 0x4a, 0xff, 0x7c, 0xe3, 0xbf, 0x1b, 0x81, 0x0b, 0x3d, 0xb4, 0x55, 0x91, 0x8f, 0x6e, + 0xe6, 0x54, 0x1f, 0xdd, 0xaf, 0xc0, 0x64, 0xb9, 0x69, 0x3b, 0x2d, 0x7f, 0xd3, 0x8d, 0xbe, 0x38, + 0x72, 0xf5, 0xc1, 0x32, 0xe1, 0x07, 0x11, 0xfa, 0x84, 0x5c, 0xac, 0x23, 0x85, 0x15, 0xb8, 0x49, + 0x61, 0x59, 0x63, 0x96, 0xf0, 0x92, 0xcd, 0xfd, 0x05, 0xf1, 0x92, 0xd5, 0xfd, 0xb6, 0x86, 0x9e, + 0xaa, 0xdf, 0x56, 0xba, 0xcd, 0xf7, 0xf0, 0x93, 0x78, 0x00, 0x94, 0x61, 0x92, 0x9b, 0xc4, 0x95, + 0x7c, 0x3e, 0x48, 0x23, 0x09, 0x33, 0x3a, 0xdb, 0x4f, 0x8e, 0x85, 0x46, 0x43, 0x56, 0x74, 0x1f, + 0xa3, 0x51, 0x7c, 0x33, 0xbe, 0xd2, 0xdb, 0x87, 0x48, 0xb3, 0x15, 0xd1, 0x7c, 0x89, 0xbe, 0x09, + 0x73, 0x69, 0xd7, 0xdd, 0xf9, 0xbc, 0x66, 0x6d, 0xdb, 0xd3, 0x4a, 0x7b, 0xf0, 0x4b, 0xf3, 0x41, + 0xea, 0xa5, 0x59, 0xfa, 0x7e, 0x8f, 0x69, 0x21, 0x9d, 0x7b, 0xac, 0x05, 0x8e, 0xdb, 0xdf, 0x43, + 0xdc, 0xf8, 0x0a, 0xbc, 0xd8, 0x97, 0x9c, 0xbc, 0xa3, 0xc5, 0x18, 0x7a, 0x2d, 0x19, 0x63, 0xe8, + 0x3b, 0xc7, 0xc5, 0x19, 0xcd, 0x6f, 0x73, 0x2d, 0x54, 0xf8, 0x1b, 0x3f, 0x93, 0xd5, 0x3d, 0x8e, + 0xff, 0x22, 0x2e, 0xd4, 0x6b, 0x30, 0xbc, 0xbd, 0x4f, 0x3d, 0x79, 0x3c, 0xe0, 0x87, 0x1c, 0x32, + 0x80, 0xfa, 0x21, 0x88, 0x41, 0xee, 0xc0, 0xd4, 0x06, 0x9f, 0xb8, 0x72, 0x36, 0x0e, 0x45, 0x3a, + 0x97, 0x8e, 0xd0, 0x0c, 0xa6, 0x4c, 0xc7, 0x18, 0x95, 0x71, 0x37, 0xd6, 0xe9, 0x22, 0x42, 0x12, + 0xf7, 0x8c, 0xe2, 0x02, 0xc4, 0x54, 0xe4, 0x0b, 0x16, 0x6d, 0xb6, 0x66, 0x0c, 0x6a, 0xec, 0xc2, + 0xa5, 0xbe, 0x8c, 0xd8, 0xb9, 0x0d, 0x9d, 0xf0, 0x57, 0xcc, 0xf2, 0xba, 0x2f, 0xa9, 0xa9, 0xd0, + 0x19, 0xdf, 0x84, 0x09, 0xb5, 0x97, 0xf1, 0x08, 0x62, 0xbf, 0xc5, 0xac, 0xe0, 0x47, 0x10, 0x03, + 0x98, 0x1c, 0x1e, 0xbd, 0xe5, 0x64, 0xd3, 0xdf, 0x72, 0xa2, 0xe1, 0xcf, 0x9d, 0x36, 0xfc, 0xac, + 0x72, 0xdc, 0xe1, 0x94, 0xca, 0xf1, 0xb7, 0x5a, 0x39, 0x86, 0x40, 0x32, 0x39, 0xfc, 0xa9, 0x56, + 0xfe, 0x4f, 0x65, 0x92, 0x33, 0x74, 0xbc, 0x92, 0xcb, 0x3d, 0x13, 0x65, 0x2a, 0x4b, 0x5b, 0xbd, + 0x11, 0x66, 0x24, 0x53, 0x64, 0x4f, 0x93, 0x29, 0xce, 0x32, 0x11, 0x51, 0xee, 0xe5, 0x43, 0x3a, + 0x14, 0xc9, 0x81, 0x76, 0xc2, 0xda, 0x45, 0x62, 0x19, 0xdf, 0xca, 0xc0, 0xb9, 0x54, 0x9d, 0x39, + 0xab, 0x95, 0x2b, 0xe7, 0x95, 0x75, 0x18, 0xd7, 0xcc, 0x73, 0x8c, 0xb3, 0xc4, 0xbf, 0x18, 0xbc, + 0x2d, 0xc6, 0x4b, 0x30, 0x16, 0xbe, 0xd8, 0x92, 0x39, 0x39, 0x74, 0x68, 0x17, 0x29, 0x1f, 0xfe, + 0x6a, 0x00, 0xec, 0x0b, 0x9e, 0xaa, 0x69, 0xb5, 0xf1, 0x4f, 0xb3, 0x3c, 0x01, 0xee, 0x33, 0x1b, + 0xca, 0x36, 0xdd, 0x1e, 0x9a, 0x35, 0xa9, 0x77, 0x00, 0x5b, 0xb2, 0x0c, 0x23, 0xb5, 0xc0, 0x0e, + 0xba, 0x32, 0x6c, 0xc7, 0xac, 0x4a, 0x86, 0x05, 0x0f, 0x17, 0xa3, 0xc0, 0x0d, 0x3e, 0x42, 0x34, + 0x2d, 0x01, 0x42, 0x14, 0xb3, 0xea, 0xdf, 0xcf, 0xc0, 0x84, 0x4a, 0x4c, 0x3e, 0x84, 0x29, 0x19, + 0xa0, 0x93, 0x07, 0x33, 0x11, 0xcf, 0xcb, 0xd2, 0x14, 0x4c, 0x06, 0xe8, 0x54, 0x83, 0x9f, 0x68, + 0xf8, 0xea, 0x56, 0xdd, 0x51, 0x91, 0x49, 0x03, 0x48, 0x6b, 0xd7, 0xb6, 0x0e, 0xa9, 0x7d, 0x40, + 0xfd, 0xc0, 0xe2, 0x26, 0x3b, 0xe2, 0x15, 0x5a, 0xb2, 0x5f, 0xbb, 0x53, 0xe2, 0xd6, 0x3a, 0x6c, + 0x24, 0x44, 0xa4, 0xd5, 0x04, 0x8d, 0xfa, 0xb4, 0xd6, 0xda, 0xb5, 0xb7, 0x79, 0x21, 0xa7, 0x33, + 0xfe, 0x64, 0x84, 0x4f, 0x37, 0x11, 0xcf, 0x77, 0x07, 0xa6, 0x1e, 0x54, 0x2b, 0x65, 0x45, 0xd1, + 0xae, 0xa7, 0x83, 0x5a, 0x7e, 0x1c, 0x50, 0xaf, 0x6d, 0x37, 0xe5, 0x7d, 0x37, 0x3a, 0x82, 0x5c, + 0xa7, 0x51, 0x4f, 0x57, 0xc2, 0xc7, 0x38, 0xb2, 0x3a, 0xf8, 0xcd, 0x3a, 0xac, 0x23, 0x3b, 0x60, + 0x1d, 0xbe, 0xdd, 0x6a, 0xf6, 0xa8, 0x43, 0xe7, 0x48, 0xf6, 0xf1, 0xea, 0xbb, 0xdf, 0xdd, 0x51, + 0x6a, 0xc9, 0xf5, 0xaf, 0xe5, 0x65, 0x51, 0xcb, 0xf3, 0x42, 0xad, 0x92, 0x5a, 0x4f, 0x82, 0x6b, + 0xb4, 0x4f, 0x0c, 0x9d, 0xba, 0x4f, 0xfc, 0x8d, 0x0c, 0x8c, 0x70, 0xf1, 0x55, 0x4c, 0xe3, 0x1e, + 0x02, 0xf2, 0xf6, 0xd3, 0x11, 0x90, 0x0b, 0x78, 0x4e, 0x68, 0x13, 0x9a, 0x97, 0x91, 0x4a, 0x6c, + 0x5d, 0x48, 0x6f, 0x00, 0x7c, 0x32, 0xe3, 0x25, 0xa7, 0x2f, 0x0b, 0x52, 0x8d, 0x42, 0x69, 0x8c, + 0x9e, 0xea, 0xad, 0x2d, 0xc3, 0x8f, 0x8c, 0x8a, 0x50, 0x1a, 0x7a, 0x00, 0x8d, 0x55, 0x18, 0x13, + 0x01, 0x3a, 0x96, 0x8e, 0xc4, 0xc3, 0x78, 0x41, 0x33, 0x6d, 0x6a, 0x2c, 0x1d, 0x45, 0xa2, 0xb9, + 0x08, 0xf1, 0x61, 0xed, 0x1c, 0x69, 0xf9, 0x84, 0x25, 0x22, 0x79, 0xc0, 0xf3, 0x6c, 0xf2, 0x88, + 0xc7, 0x7a, 0x8a, 0x83, 0x10, 0x2e, 0x42, 0x7f, 0x49, 0x2f, 0xff, 0x94, 0x00, 0xc7, 0x11, 0x0f, + 0xb2, 0x0a, 0x05, 0x34, 0x87, 0xa3, 0x0d, 0xbe, 0x6a, 0xaa, 0x15, 0x1e, 0x04, 0x42, 0x98, 0x34, + 0x07, 0xbc, 0x4c, 0x2c, 0xb7, 0x98, 0xff, 0x65, 0x82, 0xd2, 0xf8, 0xe9, 0x2c, 0x14, 0xe2, 0xb3, + 0x8f, 0xbc, 0x0b, 0xe3, 0x61, 0xc4, 0xe9, 0xd0, 0x03, 0x1c, 0x1f, 0xc8, 0xa2, 0x10, 0xd5, 0x7a, + 0x76, 0x46, 0x05, 0x9d, 0x2c, 0x42, 0x9e, 0x2d, 0xe2, 0x78, 0x26, 0xe3, 0xae, 0x80, 0xa9, 0x1e, + 0x59, 0x12, 0x8f, 0xd4, 0x60, 0x96, 0x2d, 0x9a, 0x9a, 0xd3, 0xde, 0x6b, 0xd2, 0x55, 0x77, 0xcf, + 0xed, 0x06, 0x51, 0xb2, 0x42, 0x7e, 0x81, 0xb1, 0x5b, 0x4d, 0xad, 0x58, 0x4f, 0x55, 0x98, 0x42, + 0xad, 0xe4, 0x59, 0x1f, 0x1a, 0x20, 0xcf, 0xba, 0xb2, 0xb3, 0xfe, 0x61, 0x16, 0xc6, 0x95, 0xe9, + 0x47, 0xae, 0x41, 0xbe, 0xea, 0xaf, 0xba, 0xf5, 0x83, 0x30, 0x94, 0xe4, 0xe4, 0xc9, 0x71, 0x71, + 0xcc, 0xf1, 0xad, 0x26, 0x02, 0xcd, 0xb0, 0x98, 0x2c, 0xc1, 0x24, 0xff, 0x4b, 0x26, 0x0e, 0xc9, + 0x46, 0xba, 0x35, 0x8e, 0x2c, 0x53, 0x86, 0xa8, 0x9b, 0xad, 0x46, 0x42, 0xbe, 0x0a, 0xc0, 0x01, + 0x18, 0x7c, 0x20, 0x37, 0x78, 0xd8, 0x04, 0x51, 0x41, 0x4a, 0xd8, 0x01, 0x85, 0x21, 0xf9, 0x3a, + 0x0f, 0x68, 0x2d, 0x97, 0xcb, 0xd0, 0xe0, 0x71, 0x1f, 0x18, 0x7f, 0x2b, 0x3d, 0xfc, 0x8c, 0xca, + 0x52, 0xe4, 0xfa, 0x59, 0x30, 0x69, 0xdd, 0x7d, 0x44, 0xbd, 0xa3, 0x52, 0x80, 0x88, 0x0a, 0x86, + 0xf1, 0xbf, 0x64, 0x94, 0x45, 0x46, 0xd6, 0x31, 0x57, 0x37, 0x9f, 0x40, 0xc2, 0xa4, 0x2c, 0xbc, + 0x62, 0x48, 0xb8, 0x49, 0x77, 0x97, 0x9e, 0x17, 0xd6, 0x6d, 0xb3, 0xe1, 0x34, 0x8c, 0xe5, 0xf0, + 0xe6, 0x40, 0xf2, 0x05, 0x18, 0xc2, 0xae, 0xcb, 0x9e, 0xda, 0x34, 0x79, 0xca, 0x0f, 0xb1, 0x3e, + 0xc3, 0x86, 0x20, 0x25, 0xf9, 0xb4, 0x70, 0xdc, 0xe6, 0x9d, 0x3f, 0xa5, 0x1c, 0xd5, 0xec, 0x3b, + 0xc2, 0xe3, 0x3d, 0x8a, 0x40, 0xa4, 0xcc, 0x9e, 0xbf, 0x95, 0x85, 0x42, 0x7c, 0x69, 0x93, 0x0f, + 0x60, 0x42, 0x1e, 0xbf, 0x2b, 0xb6, 0xc8, 0x7a, 0x31, 0x21, 0xb2, 0x4e, 0xc8, 0x33, 0x78, 0xdf, + 0x56, 0x4d, 0xd0, 0x4c, 0x8d, 0x80, 0xc9, 0x42, 0x9b, 0x22, 0x22, 0xa0, 0xb2, 0xa8, 0x02, 0x37, + 0xe8, 0xc4, 0xe2, 0x28, 0x4b, 0x34, 0xf2, 0x16, 0xe4, 0xd6, 0xee, 0x94, 0x84, 0x83, 0x5f, 0x21, + 0x7e, 0x48, 0x73, 0x4b, 0x59, 0xdd, 0x6e, 0x97, 0xe1, 0x93, 0x55, 0x25, 0xe4, 0xf8, 0x88, 0x66, + 0x6e, 0x28, 0xc1, 0x61, 0xe3, 0x4e, 0x8f, 0x3d, 0x7e, 0x6f, 0x28, 0x9f, 0x2b, 0x0c, 0x89, 0x20, + 0xba, 0xff, 0x7d, 0x0e, 0xc6, 0xc2, 0xfa, 0x09, 0x51, 0xdd, 0xa6, 0xb9, 0x8b, 0x34, 0xb9, 0x08, + 0x79, 0x29, 0xdd, 0x09, 0x3f, 0xbf, 0x51, 0x5f, 0x48, 0x76, 0xf3, 0x20, 0xc5, 0x38, 0xbe, 0x2b, + 0x98, 0xf2, 0x27, 0xb9, 0x09, 0xa1, 0x8c, 0xd6, 0x4b, 0x98, 0x1b, 0x62, 0x03, 0x66, 0x86, 0x68, + 0x64, 0x0a, 0xb2, 0x0e, 0x0f, 0xcc, 0x36, 0x66, 0x66, 0x9d, 0x06, 0xf9, 0x00, 0xf2, 0x76, 0xa3, + 0x41, 0x1b, 0x96, 0x2d, 0x6d, 0xb3, 0xfa, 0x4d, 0x9a, 0x3c, 0xe3, 0xc6, 0xcf, 0x0c, 0xa4, 0x2a, + 0x05, 0xa4, 0x04, 0x63, 0x4d, 0x9b, 0x5b, 0x7b, 0x36, 0x06, 0x38, 0x80, 0x22, 0x0e, 0x79, 0x46, + 0xb6, 0xe5, 0xd3, 0x06, 0x79, 0x0d, 0x86, 0xd8, 0x68, 0x8a, 0x13, 0x47, 0x0a, 0x95, 0x6c, 0x30, + 0x79, 0x87, 0xad, 0x3c, 0x67, 0x22, 0x02, 0x79, 0x05, 0x72, 0xdd, 0xc5, 0x5d, 0x71, 0x96, 0x14, + 0xa2, 0xf0, 0xff, 0x21, 0x1a, 0x2b, 0x26, 0xb7, 0x20, 0x7f, 0xa8, 0x47, 0x8e, 0x3f, 0x17, 0x1b, + 0xc6, 0x10, 0x3f, 0x44, 0x24, 0xaf, 0x41, 0xce, 0xf7, 0x5d, 0x61, 0xd0, 0x34, 0x1b, 0x5a, 0x99, + 0x3e, 0x08, 0x47, 0x8d, 0x71, 0xf7, 0x7d, 0x77, 0x29, 0x0f, 0x23, 0xfc, 0x80, 0x31, 0x2e, 0x01, + 0x44, 0xdf, 0x98, 0xf4, 0xdb, 0x34, 0xbe, 0x0a, 0x63, 0xe1, 0xb7, 0x91, 0x17, 0x01, 0x0e, 0xe8, + 0x91, 0xb5, 0x6f, 0xb7, 0x1b, 0x4d, 0x2e, 0x9d, 0x4e, 0x98, 0x63, 0x07, 0xf4, 0x68, 0x05, 0x01, + 0xe4, 0x02, 0x8c, 0x76, 0xd8, 0xf0, 0x8b, 0x39, 0x3e, 0x61, 0x8e, 0x74, 0xba, 0x3b, 0x6c, 0x2a, + 0xcf, 0xc3, 0x28, 0xea, 0x59, 0xc5, 0x8a, 0x9c, 0x34, 0xe5, 0x4f, 0xe3, 0x4f, 0x73, 0x98, 0x5e, + 0x49, 0x69, 0x10, 0x79, 0x19, 0x26, 0xeb, 0x1e, 0xc5, 0xb3, 0xcc, 0x66, 0x12, 0x9a, 0xa8, 0x67, + 0x22, 0x02, 0x56, 0x1b, 0xe4, 0x0a, 0x4c, 0x77, 0xba, 0x3b, 0x4d, 0xa7, 0xce, 0x6a, 0xb3, 0xea, + 0x3b, 0x22, 0x1f, 0xc4, 0x84, 0x39, 0xc9, 0xc1, 0xf7, 0xe9, 0x51, 0x79, 0x07, 0x23, 0x0f, 0x16, + 0xd4, 0xc0, 0xd1, 0x41, 0x98, 0xf8, 0xde, 0x9c, 0x56, 0xe0, 0x68, 0x9b, 0x79, 0x1e, 0x46, 0x6c, + 0x7b, 0xaf, 0xeb, 0xf0, 0x08, 0x61, 0x13, 0xa6, 0xf8, 0x45, 0x3e, 0x05, 0x33, 0x51, 0x2c, 0x73, + 0xd9, 0x8c, 0x61, 0x6c, 0x46, 0x21, 0x2c, 0x28, 0x73, 0x38, 0x79, 0x13, 0x88, 0x5a, 0x9f, 0xbb, + 0xf3, 0x11, 0xad, 0xf3, 0x39, 0x39, 0x61, 0xce, 0x28, 0x25, 0x0f, 0xb0, 0x80, 0xbc, 0x04, 0x13, + 0x1e, 0xf5, 0x51, 0x3a, 0xc4, 0x6e, 0xc3, 0xec, 0x83, 0xe6, 0xb8, 0x84, 0xb1, 0xbe, 0xbb, 0x0a, + 0x05, 0xa5, 0x3b, 0x30, 0x36, 0x37, 0x4f, 0x86, 0x60, 0x4e, 0x45, 0x70, 0xb3, 0x53, 0x6d, 0x90, + 0x2f, 0xc1, 0x82, 0x82, 0xc9, 0x13, 0x21, 0x5a, 0xb4, 0xe9, 0xec, 0x39, 0x3b, 0x4d, 0x2a, 0xe6, + 0x5b, 0x72, 0x56, 0x87, 0x57, 0x48, 0x73, 0x3e, 0xa2, 0xe6, 0x29, 0x12, 0x97, 0x05, 0x2d, 0x59, + 0x85, 0xb9, 0x18, 0x67, 0xda, 0xb0, 0xba, 0x9d, 0x9e, 0x21, 0xf9, 0x22, 0x9e, 0x44, 0xe7, 0x49, + 0x1b, 0x5b, 0x1d, 0xe3, 0x9b, 0x30, 0xa1, 0xce, 0x49, 0xd6, 0x09, 0xaa, 0x5c, 0x22, 0x66, 0xdf, + 0x78, 0x08, 0xab, 0xb2, 0x7b, 0xe1, 0x54, 0x84, 0x12, 0x84, 0x39, 0xfe, 0xcd, 0xc9, 0x10, 0x8a, + 0x43, 0xf8, 0x12, 0x4c, 0x34, 0x1c, 0xbf, 0xd3, 0xb4, 0x8f, 0xac, 0x28, 0xc3, 0xb7, 0x39, 0x2e, + 0x60, 0xa8, 0xf8, 0x59, 0x82, 0x99, 0xc4, 0x3e, 0xa8, 0x48, 0x1a, 0x7c, 0x5f, 0xef, 0x2f, 0x69, + 0x18, 0x6d, 0x98, 0x50, 0xcf, 0xb5, 0x53, 0x12, 0x97, 0x9c, 0xc7, 0x30, 0x3c, 0x7c, 0xd3, 0x1f, + 0x39, 0x39, 0x2e, 0x66, 0x9d, 0x06, 0x06, 0xdf, 0xb9, 0x0a, 0x79, 0x29, 0xb1, 0x09, 0x41, 0x09, + 0x1f, 0x13, 0xe4, 0xd3, 0xa4, 0x19, 0x96, 0x1a, 0xaf, 0xc1, 0xa8, 0x38, 0xba, 0xfa, 0x3f, 0x21, + 0x18, 0x3f, 0x94, 0x85, 0x69, 0x93, 0xb2, 0x8d, 0x95, 0xf2, 0x6c, 0x45, 0xcf, 0xec, 0x15, 0x3d, + 0x3d, 0x98, 0xab, 0xd6, 0xb6, 0x3e, 0x79, 0x82, 0x7e, 0x25, 0x03, 0xb3, 0x29, 0xb8, 0x1f, 0x2b, + 0x4f, 0xee, 0x6d, 0x18, 0xab, 0x38, 0x76, 0xb3, 0xd4, 0x68, 0x84, 0x31, 0x79, 0x50, 0xce, 0xc7, + 0x64, 0x5a, 0x36, 0x83, 0xaa, 0x42, 0x4c, 0x88, 0x4a, 0x5e, 0x17, 0x93, 0x22, 0xca, 0x32, 0x8f, + 0x93, 0xe2, 0x3b, 0xc7, 0x45, 0xe0, 0xdf, 0xb4, 0x19, 0x4e, 0x11, 0x0c, 0xb0, 0xcc, 0x81, 0x91, + 0x5f, 0xd5, 0x33, 0x3b, 0x74, 0xe9, 0x01, 0x96, 0xe3, 0xcd, 0x1b, 0x28, 0x55, 0xd0, 0x8f, 0x67, + 0xe1, 0x7c, 0x3a, 0xe1, 0xc7, 0x4d, 0x79, 0x8c, 0x49, 0x9a, 0x94, 0xa0, 0xf0, 0x98, 0xf2, 0x98, + 0x67, 0x74, 0x42, 0xfc, 0x08, 0x81, 0xec, 0xc2, 0xe4, 0xaa, 0xed, 0x07, 0x2b, 0xd4, 0xf6, 0x82, + 0x1d, 0x6a, 0x07, 0x03, 0x48, 0xf2, 0xd2, 0x9a, 0x62, 0x1e, 0x85, 0x89, 0x7d, 0x49, 0x19, 0x93, + 0xb5, 0x75, 0xb6, 0xe1, 0x44, 0x19, 0x1a, 0x60, 0xa2, 0x7c, 0x03, 0xa6, 0x6b, 0xb4, 0x65, 0x77, + 0xf6, 0x5d, 0x4f, 0xc6, 0x4b, 0xb8, 0x0e, 0x93, 0x21, 0x28, 0x75, 0xb6, 0xe8, 0xc5, 0x1a, 0xbe, + 0xd2, 0x11, 0xd1, 0x56, 0xa2, 0x17, 0x1b, 0x7f, 0x3b, 0x0b, 0x17, 0x4a, 0x75, 0x61, 0x1a, 0x2a, + 0x0a, 0xa4, 0x05, 0xfb, 0x27, 0x5c, 0x37, 0xb9, 0x01, 0x63, 0x6b, 0xf6, 0xe3, 0x55, 0x6a, 0xfb, + 0xd4, 0x17, 0x09, 0x27, 0xb9, 0xd8, 0x6b, 0x3f, 0x8e, 0x1e, 0x7f, 0xcc, 0x08, 0x47, 0x55, 0x23, + 0x0c, 0x3d, 0xa1, 0x1a, 0xc1, 0x80, 0x91, 0x15, 0xb7, 0xd9, 0x10, 0x67, 0xbd, 0x78, 0x71, 0xde, + 0x47, 0x88, 0x29, 0x4a, 0x8c, 0x3f, 0xce, 0xc0, 0x54, 0xf8, 0xc5, 0xf8, 0x09, 0x9f, 0x78, 0x97, + 0x5c, 0x81, 0x51, 0xac, 0x28, 0xcc, 0x8c, 0x8f, 0x87, 0x46, 0x93, 0x62, 0xda, 0xc0, 0x86, 0x29, + 0x0b, 0xd5, 0x9e, 0x18, 0x7e, 0xb2, 0x9e, 0x30, 0xfe, 0x01, 0x3e, 0x66, 0xab, 0xad, 0x64, 0x27, + 0x91, 0xf2, 0x21, 0x99, 0x01, 0x3f, 0x24, 0xfb, 0xd4, 0x86, 0x24, 0xd7, 0x73, 0x48, 0x7e, 0x38, + 0x0b, 0xe3, 0xe1, 0xc7, 0x7e, 0x97, 0x65, 0x26, 0x08, 0xdb, 0x35, 0x50, 0x8c, 0xa3, 0x9a, 0xb2, + 0x57, 0x88, 0x50, 0x42, 0x5f, 0x80, 0x11, 0xb1, 0x98, 0x32, 0x31, 0x4b, 0xee, 0xd8, 0xe8, 0x2e, + 0x4d, 0x09, 0xd6, 0x23, 0x38, 0xa0, 0xbe, 0x29, 0xe8, 0x30, 0x88, 0xd4, 0x36, 0xdd, 0x11, 0xb6, + 0x0d, 0xcf, 0xec, 0x19, 0x95, 0x1e, 0x44, 0x2a, 0x6a, 0xd8, 0x40, 0xa7, 0xd3, 0x3f, 0xcf, 0x43, + 0x21, 0x4e, 0x72, 0x7a, 0xee, 0x87, 0x8d, 0xee, 0x0e, 0xbf, 0xaa, 0xf0, 0xdc, 0x0f, 0x9d, 0xee, + 0x8e, 0xc9, 0x60, 0x68, 0xfa, 0xe4, 0x39, 0x8f, 0xb0, 0xd5, 0x13, 0xc2, 0xf4, 0xc9, 0x73, 0x1e, + 0x69, 0xa6, 0x4f, 0x9e, 0xf3, 0x08, 0x15, 0x09, 0xab, 0x35, 0x0c, 0xb0, 0x80, 0xf7, 0x14, 0xa1, + 0x48, 0x68, 0xfa, 0xf1, 0x3c, 0x6e, 0x12, 0x8d, 0x1d, 0x95, 0x4b, 0xd4, 0xf6, 0x44, 0x9e, 0x02, + 0xb1, 0x9d, 0xe1, 0x51, 0xb9, 0x83, 0x60, 0x2b, 0x60, 0x70, 0x53, 0x45, 0x22, 0x4d, 0x20, 0xca, + 0x4f, 0xb9, 0x80, 0x4f, 0xbf, 0x5b, 0x4b, 0x2b, 0xcc, 0x39, 0x95, 0xb5, 0xa5, 0xae, 0xe6, 0x14, + 0xbe, 0x4f, 0x53, 0xfb, 0xbb, 0x21, 0x82, 0xaf, 0xa2, 0x02, 0x29, 0x7f, 0x2a, 0x33, 0x19, 0x18, + 0x06, 0x78, 0x70, 0xd6, 0x50, 0x8d, 0x14, 0x31, 0x21, 0xef, 0xc3, 0xb8, 0x1a, 0x36, 0x83, 0x07, + 0x77, 0x78, 0x81, 0xc7, 0xd3, 0xec, 0x91, 0xf9, 0x57, 0x25, 0x20, 0x3b, 0x70, 0xa1, 0xec, 0xb6, + 0xfd, 0x6e, 0x4b, 0x46, 0xee, 0x8c, 0xe2, 0x85, 0x03, 0x0e, 0x05, 0xfa, 0xe0, 0xd7, 0x05, 0x8a, + 0x88, 0xd2, 0x20, 0xdd, 0x64, 0xf4, 0x0b, 0x48, 0x2f, 0x46, 0x64, 0x13, 0xc6, 0x51, 0x83, 0x2a, + 0x4c, 0x1e, 0xc7, 0xf5, 0x6d, 0x23, 0x2a, 0xa9, 0xb0, 0x85, 0xc1, 0xa3, 0xc6, 0xd9, 0xad, 0xa6, + 0xf4, 0xd2, 0x50, 0x35, 0xc1, 0x0a, 0x32, 0xf9, 0x2a, 0x4c, 0xf1, 0x2b, 0xda, 0x36, 0xdd, 0xe1, + 0x73, 0x67, 0x42, 0xd3, 0x44, 0xe8, 0x85, 0xfc, 0x31, 0x5f, 0xe8, 0xad, 0x0f, 0xe9, 0x0e, 0x1f, + 0x7b, 0xcd, 0x47, 0x4a, 0xc3, 0x27, 0x5b, 0x30, 0xbb, 0x62, 0xfb, 0x1c, 0xa8, 0xc4, 0x3f, 0x98, + 0x44, 0x0d, 0x2d, 0xda, 0xae, 0xef, 0xdb, 0xbe, 0x54, 0x84, 0xa7, 0xc6, 0x3b, 0x48, 0xa3, 0x27, + 0x3f, 0x94, 0x81, 0x79, 0x4d, 0x4f, 0x2e, 0xec, 0xcc, 0x5a, 0xb4, 0x1d, 0xa0, 0x33, 0xd4, 0xd4, + 0x62, 0x51, 0x0a, 0xa5, 0x3d, 0xd0, 0xf8, 0x90, 0xc4, 0x54, 0xf1, 0x5e, 0x54, 0xae, 0x1a, 0x85, + 0xf7, 0xe2, 0x21, 0x16, 0x2a, 0xae, 0xe9, 0x69, 0x7d, 0xa1, 0xc6, 0xd6, 0xb5, 0x44, 0x33, 0x6e, + 0xc7, 0xfb, 0x5b, 0x28, 0xba, 0x32, 0xa1, 0xa2, 0x6b, 0x0e, 0x86, 0xb1, 0x57, 0x65, 0x14, 0x2d, + 0xfc, 0x61, 0x7c, 0x5a, 0xdd, 0x87, 0x84, 0x58, 0xd8, 0x77, 0x1f, 0x32, 0xfe, 0xc7, 0x11, 0x98, + 0x8e, 0x4d, 0x0b, 0x71, 0x4f, 0xcd, 0x24, 0xee, 0xa9, 0x35, 0x00, 0xae, 0xea, 0x1d, 0x50, 0x27, + 0x2b, 0x1d, 0x31, 0xc7, 0x85, 0x1b, 0x75, 0xb8, 0xa6, 0x14, 0x36, 0x8c, 0x29, 0x5f, 0xb1, 0x03, + 0xea, 0xc8, 0x43, 0xa6, 0x7c, 0xd1, 0x2b, 0x4c, 0x23, 0x36, 0xa4, 0x08, 0xc3, 0x18, 0x3f, 0x57, + 0xf5, 0x83, 0x75, 0x18, 0xc0, 0xe4, 0x70, 0xf2, 0x32, 0x8c, 0x30, 0x21, 0xaa, 0x5a, 0x11, 0x9b, + 0x20, 0x9e, 0x2d, 0x4c, 0xca, 0x62, 0x12, 0x8b, 0x28, 0x22, 0xb7, 0x61, 0x82, 0xff, 0x25, 0xc2, + 0xec, 0x8c, 0xe8, 0xc6, 0x8f, 0x96, 0xd3, 0x90, 0x91, 0x76, 0x34, 0x3c, 0x76, 0xbb, 0xa8, 0x75, + 0x51, 0xad, 0x53, 0xad, 0x88, 0x80, 0xeb, 0x78, 0xbb, 0xf0, 0x39, 0x90, 0x55, 0x11, 0x21, 0x30, + 0x59, 0x46, 0x78, 0xa3, 0xe4, 0xf1, 0x4e, 0x89, 0xb2, 0x0c, 0xf7, 0x42, 0x31, 0x45, 0x09, 0xb9, + 0xc6, 0x5f, 0x62, 0x50, 0x2c, 0xe4, 0x79, 0x2b, 0xf1, 0xdd, 0x02, 0x15, 0x13, 0x28, 0x1b, 0x86, + 0xc5, 0xac, 0x72, 0xf6, 0xf7, 0x72, 0xcb, 0x76, 0x9a, 0x62, 0x5b, 0xc1, 0xca, 0x11, 0x97, 0x32, + 0xa8, 0x19, 0x21, 0x90, 0x77, 0x61, 0x8a, 0xfd, 0x28, 0xbb, 0xad, 0x96, 0xdb, 0x46, 0xf6, 0xe3, + 0x51, 0x20, 0x3d, 0x24, 0xa9, 0x63, 0x11, 0xaf, 0x25, 0x86, 0xcb, 0xce, 0x13, 0x7c, 0xe5, 0xed, + 0xf2, 0x37, 0xa2, 0x89, 0xe8, 0x3c, 0x41, 0x52, 0x9f, 0xc3, 0x4d, 0x15, 0x89, 0xbc, 0x0d, 0x93, + 0xec, 0xe7, 0x5d, 0xe7, 0x11, 0xe5, 0x15, 0x4e, 0x46, 0xe6, 0x0d, 0x48, 0xb5, 0xc7, 0x4a, 0x78, + 0x7d, 0x3a, 0x26, 0xf9, 0x22, 0x9c, 0x43, 0x4e, 0x75, 0xb7, 0x43, 0x1b, 0xa5, 0xdd, 0x5d, 0xa7, + 0xe9, 0x70, 0x6b, 0x34, 0x1e, 0x50, 0x06, 0x75, 0xf0, 0xbc, 0x62, 0xc4, 0xb0, 0xec, 0x08, 0xc5, + 0x4c, 0xa7, 0x24, 0xdb, 0x50, 0x28, 0x77, 0xfd, 0xc0, 0x6d, 0x95, 0x82, 0xc0, 0x73, 0x76, 0xba, + 0x01, 0xf5, 0xe7, 0xa7, 0xb5, 0xb0, 0x2b, 0x6c, 0x71, 0x84, 0x85, 0x5c, 0x1f, 0x54, 0x47, 0x0a, + 0xcb, 0x0e, 0x49, 0xcc, 0x04, 0x13, 0xe3, 0x5f, 0x64, 0x60, 0x52, 0x23, 0x25, 0x6f, 0xc1, 0xc4, + 0x1d, 0xcf, 0xa1, 0xed, 0x46, 0xf3, 0x48, 0xb9, 0xa8, 0xe2, 0x2d, 0x66, 0x57, 0xc0, 0x79, 0xab, + 0x35, 0xb4, 0x50, 0xcf, 0x93, 0x4d, 0x35, 0x15, 0xbd, 0xc1, 0xdd, 0xb1, 0xc5, 0x04, 0xcd, 0x45, + 0x71, 0xa0, 0x70, 0x82, 0x8a, 0xd9, 0xa9, 0xa0, 0x90, 0xf7, 0x60, 0x84, 0xbf, 0x07, 0x0b, 0xbb, + 0xc5, 0x8b, 0x69, 0xcd, 0xe4, 0xae, 0xff, 0x38, 0x11, 0xd1, 0xe8, 0xc7, 0x37, 0x05, 0x91, 0xf1, + 0xb3, 0x19, 0x20, 0x49, 0xd4, 0x53, 0xf4, 0x5e, 0xa7, 0x1a, 0x13, 0x7d, 0x21, 0x5c, 0x8d, 0x39, + 0x4d, 0x67, 0xce, 0x6a, 0xe2, 0x05, 0xbc, 0xe3, 0xc5, 0xaa, 0x53, 0x15, 0x71, 0xbc, 0xd8, 0xf8, + 0xc1, 0x2c, 0x40, 0x84, 0x4d, 0x3e, 0xc7, 0xd3, 0x94, 0x7d, 0xb1, 0x6b, 0x37, 0x9d, 0x5d, 0x47, + 0x8f, 0xdb, 0x8b, 0x4c, 0xbe, 0x21, 0x4b, 0x4c, 0x1d, 0x91, 0x7c, 0x00, 0xd3, 0xb5, 0x0d, 0x9d, + 0x56, 0x31, 0x8b, 0xf7, 0x3b, 0x56, 0x8c, 0x3c, 0x8e, 0x8d, 0xf6, 0xc9, 0xea, 0x68, 0x70, 0xfb, + 0x64, 0x3e, 0x10, 0xa2, 0x84, 0x6d, 0x2c, 0xb5, 0x0d, 0x61, 0xf9, 0xdf, 0x08, 0x5f, 0x35, 0xf1, + 0xeb, 0xfc, 0x8e, 0xd5, 0x11, 0x2e, 0x01, 0x6c, 0x9f, 0xd0, 0xf0, 0xa2, 0x8e, 0x1c, 0xee, 0xe1, + 0xde, 0xff, 0x73, 0xa8, 0xf6, 0x6b, 0xb9, 0x01, 0x15, 0xda, 0x8e, 0x67, 0xf6, 0xde, 0x13, 0x19, + 0x13, 0x0c, 0x6b, 0x5e, 0xcb, 0x5a, 0xeb, 0x84, 0xc1, 0xcc, 0xad, 0xe8, 0x92, 0xc2, 0xcd, 0x0a, + 0x52, 0x6c, 0x6c, 0xfe, 0x5e, 0x06, 0xce, 0xa5, 0xd2, 0x92, 0xeb, 0x00, 0x91, 0x4e, 0x49, 0xf4, + 0x12, 0xee, 0x98, 0x51, 0xf4, 0x23, 0x53, 0xc1, 0x20, 0x5f, 0x89, 0x6b, 0x83, 0x4e, 0x3f, 0x08, + 0x17, 0x64, 0xd0, 0x41, 0x5d, 0x1b, 0x94, 0xa2, 0x03, 0x32, 0x7e, 0x25, 0x07, 0x33, 0x4a, 0x70, + 0x25, 0xfe, 0xad, 0xa7, 0xd8, 0x8b, 0x1f, 0xc0, 0x04, 0x6b, 0x8d, 0x53, 0x17, 0x6e, 0x37, 0xdc, + 0xf0, 0xe5, 0xf5, 0x84, 0xdf, 0xa9, 0xe0, 0x76, 0x5d, 0x45, 0xe6, 0xa1, 0x40, 0x71, 0xeb, 0xc4, + 0x07, 0x89, 0x7a, 0xd2, 0xe5, 0x46, 0x63, 0x4e, 0x7c, 0x98, 0xac, 0x1c, 0xb5, 0xed, 0x56, 0x58, + 0x1b, 0x37, 0x80, 0xf9, 0x54, 0xcf, 0xda, 0x34, 0x6c, 0x5e, 0x5d, 0xe4, 0xa1, 0xc5, 0xcb, 0x52, + 0x82, 0x03, 0x68, 0x54, 0x0b, 0x1f, 0xc0, 0x4c, 0xe2, 0xa3, 0xcf, 0x14, 0x95, 0x74, 0x1b, 0x48, + 0xf2, 0x3b, 0x52, 0x38, 0x7c, 0x4a, 0x8f, 0x79, 0x7b, 0x2e, 0x7c, 0xbc, 0x6e, 0xb5, 0xec, 0x76, + 0x83, 0x9b, 0xd3, 0x2c, 0xaa, 0x31, 0x4b, 0x7f, 0x2e, 0xab, 0xfa, 0xfe, 0x3e, 0xeb, 0xab, 0xee, + 0x0b, 0xda, 0x6d, 0xf8, 0x52, 0xaf, 0x31, 0x1d, 0x48, 0xeb, 0xf0, 0xed, 0x1c, 0x5c, 0xe8, 0x41, + 0x49, 0x8e, 0xe2, 0x93, 0x88, 0x6b, 0x21, 0x6e, 0xf6, 0xaf, 0xf0, 0x69, 0x4c, 0x25, 0xf2, 0x39, + 0x1e, 0xfd, 0xa3, 0xee, 0xb6, 0x77, 0x9d, 0x3d, 0x71, 0xff, 0x46, 0x35, 0xfe, 0x41, 0x08, 0x8d, + 0x87, 0xfd, 0xe0, 0x50, 0xf2, 0x01, 0x0c, 0xa3, 0xe3, 0x77, 0x2c, 0xbc, 0x23, 0xc3, 0x40, 0xb8, + 0x12, 0xa0, 0x94, 0xfd, 0xd4, 0x02, 0x94, 0x32, 0x00, 0xf9, 0x2c, 0xe4, 0x4a, 0xdb, 0x35, 0x31, + 0x2e, 0x53, 0x2a, 0xf9, 0x76, 0x2d, 0x4a, 0xae, 0x62, 0x6b, 0x59, 0x50, 0x18, 0x05, 0x23, 0xbc, + 0x5b, 0xde, 0x10, 0xa3, 0xa2, 0x12, 0xde, 0x2d, 0x6f, 0x44, 0x84, 0x7b, 0x75, 0x2d, 0x58, 0xd6, + 0xdd, 0xf2, 0xc6, 0x27, 0x37, 0xed, 0xff, 0xbd, 0x2c, 0x0f, 0x59, 0xc2, 0x1b, 0xf6, 0x01, 0x4c, + 0x68, 0x31, 0xc9, 0x33, 0x91, 0x3c, 0x16, 0xc6, 0x8f, 0x8f, 0x59, 0x0c, 0x69, 0x04, 0x32, 0x4d, + 0x11, 0xfb, 0x8d, 0x12, 0xaf, 0x6a, 0x6c, 0x13, 0x72, 0x40, 0x99, 0x38, 0x9e, 0xa6, 0x28, 0x24, + 0x21, 0xb7, 0x20, 0xbf, 0x49, 0xdb, 0x76, 0x3b, 0x08, 0x15, 0xa2, 0x68, 0x5c, 0x1c, 0x20, 0x4c, + 0x97, 0x1a, 0x42, 0x44, 0x34, 0x84, 0xed, 0xee, 0xf8, 0x75, 0xcf, 0xc1, 0xd0, 0x46, 0xe1, 0x59, + 0xcc, 0x0d, 0x61, 0x95, 0x12, 0x9d, 0x41, 0x8c, 0xc8, 0xf8, 0xb9, 0x0c, 0x8c, 0x8a, 0x81, 0xe4, + 0xe9, 0xe5, 0xf6, 0xa2, 0xb3, 0x44, 0x38, 0x0f, 0xec, 0x39, 0x71, 0xe7, 0x81, 0x3d, 0x1e, 0x3f, + 0x68, 0x4c, 0x38, 0xd6, 0x85, 0x4f, 0x83, 0x38, 0x1b, 0xa5, 0xdb, 0xa7, 0x9e, 0x3d, 0x2c, 0x44, + 0x1d, 0xd4, 0x21, 0xcb, 0xf8, 0x3b, 0xe2, 0xcb, 0xee, 0x96, 0x37, 0xc8, 0x22, 0xe4, 0x57, 0x5d, + 0x1e, 0x0a, 0x4b, 0xcd, 0x15, 0xdc, 0x14, 0x30, 0xb5, 0x83, 0x24, 0x1e, 0xfb, 0xbe, 0x0d, 0xcf, + 0x15, 0x77, 0x19, 0xe5, 0xfb, 0x3a, 0x1c, 0x18, 0xfb, 0xbe, 0x10, 0x75, 0xe0, 0xef, 0xa3, 0x29, + 0x9b, 0xc4, 0xc3, 0x5b, 0x98, 0xbf, 0xe5, 0x9e, 0xea, 0xe8, 0x26, 0x8a, 0xe4, 0x4e, 0xb1, 0xd0, + 0x6b, 0xa7, 0x78, 0x78, 0xcb, 0x4c, 0xa1, 0xc2, 0x77, 0xb5, 0x08, 0x5c, 0xa3, 0xde, 0xa3, 0x67, + 0x78, 0x97, 0x4e, 0x7f, 0x57, 0x8b, 0x37, 0x6f, 0xa0, 0x4d, 0xfa, 0xf7, 0xb3, 0x70, 0x3e, 0x9d, + 0x50, 0x6d, 0x4b, 0xa6, 0x4f, 0x5b, 0xae, 0x42, 0x7e, 0xc5, 0xf5, 0x03, 0xc5, 0x48, 0x10, 0xd5, + 0xff, 0xfb, 0x02, 0x66, 0x86, 0xa5, 0xec, 0xce, 0xcd, 0xfe, 0x0e, 0x97, 0x27, 0xf2, 0xc3, 0x40, + 0x1d, 0xec, 0xce, 0xcd, 0x8b, 0xc8, 0x5d, 0xc8, 0x9b, 0xc2, 0xd1, 0x2a, 0xd6, 0x35, 0x12, 0x1c, + 0x4a, 0x53, 0xc4, 0x13, 0x10, 0x2d, 0x34, 0xbc, 0x80, 0x91, 0x12, 0x8c, 0x8a, 0xd1, 0x8f, 0x3d, + 0x1d, 0xa7, 0x4c, 0x19, 0x3d, 0x5b, 0x83, 0xa4, 0x63, 0x3b, 0x0a, 0x3e, 0x02, 0x56, 0x2b, 0xd2, + 0x67, 0x0a, 0x77, 0x14, 0xfe, 0x48, 0xa8, 0xdb, 0x63, 0x86, 0x88, 0xc6, 0x0f, 0x65, 0x01, 0xa4, + 0xd6, 0xe6, 0x99, 0x9d, 0x61, 0x9f, 0xd5, 0x66, 0x98, 0x62, 0x6f, 0x34, 0x78, 0x3a, 0xe4, 0x07, + 0x68, 0xce, 0x33, 0x78, 0x32, 0xe4, 0x22, 0x0c, 0x6f, 0x46, 0x0a, 0x2d, 0xe1, 0x92, 0x82, 0xea, + 0x68, 0x0e, 0x37, 0x76, 0x60, 0xee, 0x2e, 0x0d, 0x22, 0xf5, 0x96, 0x7c, 0x7a, 0xec, 0xcf, 0xf6, + 0x0d, 0x18, 0x13, 0xf8, 0xe1, 0xfe, 0xc5, 0x75, 0x31, 0x22, 0xf6, 0x0d, 0xea, 0x62, 0x24, 0x02, + 0xdb, 0x8d, 0x2a, 0xb4, 0x49, 0x03, 0xfa, 0xc9, 0x56, 0x53, 0x03, 0xc2, 0x9b, 0x82, 0x2d, 0x1b, + 0xac, 0x86, 0x53, 0xfb, 0xe7, 0x21, 0x9c, 0x0b, 0xbf, 0xfd, 0x69, 0xf2, 0xbd, 0xc1, 0xae, 0x94, + 0x22, 0xd1, 0x41, 0xc4, 0xb1, 0x8f, 0xed, 0xc9, 0x63, 0x58, 0x90, 0x04, 0xdb, 0x4e, 0x68, 0x38, + 0x39, 0x10, 0x2d, 0x79, 0x17, 0xc6, 0x15, 0x1a, 0x11, 0xa8, 0x1f, 0xd5, 0xd4, 0x87, 0x4e, 0xb0, + 0x6f, 0xf9, 0x1c, 0xae, 0xaa, 0xa9, 0x15, 0x74, 0xe3, 0xcb, 0xf0, 0x7c, 0xe8, 0x36, 0x94, 0x52, + 0x75, 0x8c, 0x79, 0xe6, 0x6c, 0xcc, 0xd7, 0xa3, 0x66, 0x55, 0xdb, 0xa1, 0x67, 0xb4, 0xe4, 0x4d, + 0xd4, 0x66, 0x89, 0xc6, 0xbc, 0x90, 0xf0, 0xb5, 0x56, 0x5c, 0xaa, 0x8d, 0x77, 0x94, 0x8f, 0x4d, + 0x61, 0xa8, 0x11, 0x67, 0xe2, 0xc4, 0x3f, 0x94, 0x85, 0xe9, 0x07, 0xd5, 0x4a, 0x39, 0xb4, 0x3e, + 0xfa, 0x2e, 0x4b, 0xd6, 0xac, 0xb5, 0xad, 0xf7, 0x7e, 0x63, 0x6c, 0xc1, 0x6c, 0xac, 0x1b, 0x50, + 0x74, 0x78, 0x9f, 0x3b, 0x9c, 0x84, 0x60, 0x29, 0x36, 0x9c, 0x4f, 0x63, 0xff, 0xf0, 0x96, 0x19, + 0xc3, 0x36, 0xfe, 0x4b, 0x88, 0xf1, 0x15, 0x5b, 0xd8, 0x1b, 0x30, 0x56, 0xf5, 0xfd, 0x2e, 0xf5, + 0xb6, 0xcc, 0x55, 0x55, 0x55, 0xe0, 0x20, 0xd0, 0xea, 0x7a, 0x4d, 0x33, 0x42, 0x20, 0xd7, 0x20, + 0x2f, 0x82, 0xa4, 0xcb, 0x3d, 0x01, 0xb5, 0xb6, 0x61, 0x8c, 0x75, 0x33, 0x2c, 0x26, 0x6f, 0xc1, + 0x04, 0xff, 0x9b, 0xcf, 0x36, 0xd1, 0xe1, 0xa8, 0x1c, 0x14, 0xe8, 0x7c, 0x76, 0x9a, 0x1a, 0x1a, + 0x79, 0x1d, 0x72, 0xa5, 0xb2, 0x29, 0xd4, 0x41, 0x42, 0x6e, 0xf4, 0x2c, 0xae, 0xb3, 0xd3, 0x2e, + 0x11, 0x65, 0x93, 0x49, 0x7f, 0x32, 0xd8, 0x84, 0xd0, 0x64, 0xe3, 0x0c, 0x90, 0xda, 0xa6, 0xd8, + 0x61, 0x86, 0x30, 0x72, 0x03, 0x46, 0x2b, 0xdc, 0x64, 0x4e, 0xe8, 0xb1, 0x79, 0x26, 0x42, 0x0e, + 0xd2, 0x82, 0x2b, 0x70, 0x10, 0xb9, 0x26, 0x33, 0xb4, 0xe5, 0x23, 0xbf, 0x95, 0x1e, 0x69, 0xd8, + 0xde, 0x80, 0x11, 0x11, 0x4a, 0x7c, 0x4c, 0xc9, 0xdd, 0x12, 0x0f, 0x21, 0x2e, 0x70, 0x92, 0x0e, + 0xac, 0xf0, 0x34, 0x1d, 0x58, 0x77, 0xe0, 0xc2, 0x5d, 0xd4, 0xde, 0xe8, 0x01, 0xb1, 0xb6, 0xcc, + 0xaa, 0xd0, 0x87, 0xe3, 0x33, 0x10, 0x57, 0xf0, 0xc4, 0x63, 0x6a, 0x59, 0x5d, 0x4f, 0x4d, 0xac, + 0xdb, 0x8b, 0x11, 0xf9, 0x12, 0xcc, 0xa5, 0x15, 0x09, 0xad, 0x39, 0x86, 0x7e, 0x4a, 0xaf, 0x40, + 0x0d, 0xfd, 0x94, 0xc6, 0x81, 0xac, 0x42, 0x81, 0xc3, 0x4b, 0x8d, 0x96, 0xd3, 0xe6, 0x9a, 0x7f, + 0xae, 0x55, 0x47, 0x47, 0x12, 0xc1, 0xd5, 0x66, 0x85, 0xfc, 0x05, 0x40, 0x73, 0x3d, 0x8a, 0x51, + 0x92, 0x9f, 0xcc, 0xb0, 0xdb, 0x1c, 0x0f, 0xbc, 0xbd, 0x65, 0xae, 0xfa, 0x22, 0x6c, 0xe0, 0xf9, + 0xc8, 0xab, 0xa8, 0x16, 0x78, 0x4e, 0x7b, 0x4f, 0xb8, 0x15, 0x6d, 0x0a, 0xb7, 0xa2, 0x77, 0x3f, + 0x96, 0x5b, 0x11, 0x67, 0xe5, 0x9f, 0x1c, 0x17, 0x27, 0x3c, 0x51, 0x27, 0xae, 0x22, 0xed, 0x0b, + 0x58, 0xd7, 0xa1, 0x6f, 0xed, 0x56, 0x9b, 0x87, 0xfd, 0xa5, 0x0d, 0xde, 0xc8, 0x69, 0xdc, 0xc1, + 0xb1, 0xeb, 0x30, 0x27, 0x88, 0xd5, 0x0d, 0x11, 0x12, 0x0d, 0x4d, 0xe5, 0xc0, 0x2e, 0x9e, 0xd2, + 0x75, 0x85, 0x7b, 0xe3, 0x16, 0xa2, 0x8b, 0xa7, 0xf4, 0x73, 0xb1, 0x70, 0x1a, 0xa9, 0x93, 0x47, + 0x23, 0x21, 0x37, 0x60, 0x64, 0xcd, 0x7e, 0x5c, 0xda, 0xa3, 0x22, 0xf3, 0xe6, 0xa4, 0xdc, 0xfe, + 0x10, 0xb8, 0x94, 0xff, 0x03, 0xee, 0xeb, 0xf0, 0x9c, 0x29, 0xd0, 0xc8, 0x5f, 0xcb, 0xc0, 0x79, + 0xbe, 0x8c, 0x65, 0x2b, 0x6b, 0x34, 0x08, 0x58, 0x3f, 0x88, 0xf8, 0x81, 0x97, 0x23, 0x83, 0xed, + 0x74, 0x3c, 0xf4, 0xbc, 0x37, 0xc4, 0xce, 0x10, 0x76, 0x9c, 0x2f, 0x4a, 0xb5, 0x40, 0xcc, 0xa9, + 0xf4, 0x64, 0x13, 0xc6, 0xd7, 0xee, 0x94, 0xc2, 0x6a, 0x79, 0x74, 0xf6, 0x62, 0xda, 0xee, 0xa8, + 0xa0, 0xa5, 0x79, 0x1a, 0xa8, 0x6c, 0x84, 0x77, 0xc0, 0x67, 0x65, 0x7f, 0x90, 0x37, 0x55, 0x57, + 0xd4, 0x1c, 0x4a, 0xcf, 0xa3, 0x2d, 0xfb, 0xb1, 0x65, 0xef, 0x51, 0xed, 0x95, 0x5c, 0x68, 0xaf, + 0x7f, 0x26, 0x03, 0x17, 0x7b, 0x36, 0x99, 0xdc, 0x86, 0x0b, 0x36, 0x77, 0xb0, 0xb6, 0xf6, 0x83, + 0xa0, 0xe3, 0x5b, 0xf2, 0x8a, 0x21, 0x9c, 0x57, 0xcd, 0x73, 0xa2, 0x78, 0x85, 0x95, 0xca, 0x5b, + 0x87, 0x4f, 0x3e, 0x80, 0x17, 0x9c, 0xb6, 0x4f, 0xeb, 0x5d, 0x8f, 0x5a, 0x92, 0x41, 0xdd, 0x69, + 0x78, 0x96, 0x67, 0xb7, 0xf7, 0xa4, 0x27, 0xae, 0x79, 0x51, 0xe2, 0x08, 0x27, 0xee, 0xb2, 0xd3, + 0xf0, 0x4c, 0x44, 0x30, 0xfe, 0x45, 0x06, 0xe6, 0x7b, 0x75, 0x09, 0x99, 0x87, 0x51, 0xaa, 0xe4, + 0x69, 0xc9, 0x9b, 0xf2, 0x27, 0x79, 0x1e, 0xa2, 0x9d, 0x5e, 0x9c, 0xfe, 0xf9, 0xba, 0xc8, 0x99, + 0x81, 0xa6, 0xed, 0xea, 0xbe, 0x2e, 0x0c, 0x94, 0x27, 0xea, 0xea, 0xee, 0xfe, 0x22, 0x40, 0xb4, + 0x9d, 0x73, 0xc5, 0x84, 0x39, 0x66, 0xd7, 0x3d, 0xbe, 0xf2, 0xc8, 0x79, 0x18, 0xe1, 0xdb, 0xa5, + 0xf0, 0x7f, 0x10, 0xbf, 0xd8, 0xb9, 0x2d, 0x3a, 0x19, 0xf7, 0xf9, 0xdc, 0xd2, 0x84, 0xd6, 0xd9, + 0x23, 0x2d, 0x1c, 0x1c, 0xe3, 0xa7, 0x26, 0xb9, 0x08, 0x51, 0xea, 0x06, 0xfb, 0x52, 0xe8, 0x58, + 0x4c, 0xf3, 0x17, 0xe3, 0xb6, 0x94, 0x8a, 0x5d, 0xb6, 0xee, 0x25, 0x26, 0xdf, 0x7e, 0xb2, 0xa9, + 0x6f, 0x3f, 0x6f, 0xc0, 0x58, 0x79, 0x9f, 0xd6, 0x0f, 0x42, 0x27, 0x9c, 0xbc, 0x50, 0xae, 0x33, + 0x20, 0x0f, 0x89, 0x1e, 0x21, 0x90, 0x1b, 0x00, 0xe8, 0xa6, 0xca, 0x25, 0x52, 0x25, 0xad, 0x09, + 0x7a, 0xb5, 0x0a, 0xf3, 0x14, 0x05, 0x05, 0xd9, 0xd7, 0xcc, 0x3b, 0xaa, 0x3d, 0x0b, 0x67, 0xef, + 0x7b, 0xbb, 0x02, 0x3d, 0x42, 0x60, 0xcd, 0x53, 0xf6, 0x15, 0x71, 0x0a, 0x16, 0x12, 0x9b, 0x8f, + 0x8a, 0x44, 0xae, 0xc3, 0xd8, 0x86, 0x74, 0x24, 0xc0, 0x43, 0x70, 0x02, 0x29, 0x20, 0x72, 0x3a, + 0x98, 0xcf, 0x98, 0x11, 0x0a, 0xf9, 0x2c, 0x8c, 0x96, 0xa9, 0x17, 0x6c, 0x6e, 0xae, 0xa2, 0xd1, + 0x09, 0xcf, 0xfe, 0x91, 0xc7, 0x4c, 0x0d, 0x41, 0xd0, 0xfc, 0xce, 0x71, 0x71, 0x32, 0x70, 0x5a, + 0x34, 0x8c, 0x6a, 0x6e, 0x4a, 0x6c, 0xb2, 0x04, 0x05, 0xfe, 0x2c, 0x1e, 0xdd, 0x3d, 0xf0, 0x64, + 0xcc, 0xf3, 0x73, 0x5a, 0xbc, 0xa1, 0x1f, 0xd2, 0x9d, 0x30, 0x4f, 0x45, 0x02, 0x9f, 0x2c, 0xcb, + 0xf4, 0x2e, 0x6a, 0x33, 0x21, 0x52, 0x86, 0xc5, 0x77, 0x0c, 0xd6, 0xda, 0x24, 0x05, 0x29, 0xc1, + 0x64, 0xd9, 0x6d, 0x75, 0xec, 0xc0, 0xc1, 0x3c, 0x98, 0x47, 0xe2, 0x10, 0x44, 0x85, 0x5e, 0x5d, + 0x2d, 0xd0, 0x4e, 0x54, 0xb5, 0x80, 0xdc, 0x81, 0x29, 0xd3, 0xed, 0xb2, 0x61, 0x92, 0xb7, 0x70, + 0x7e, 0xce, 0xa1, 0x69, 0x88, 0xc7, 0x4a, 0xd8, 0xb1, 0x2c, 0xae, 0xdc, 0x5a, 0x04, 0x58, 0x8d, + 0x8a, 0xac, 0xa7, 0x3c, 0x87, 0xa8, 0x87, 0x9b, 0x9a, 0xad, 0x22, 0xc1, 0x2c, 0xe5, 0x25, 0xe5, + 0x16, 0x8c, 0xd7, 0x6a, 0x0f, 0x36, 0xa9, 0x1f, 0xdc, 0x69, 0xba, 0x87, 0x78, 0xb6, 0xe5, 0x45, + 0x72, 0x35, 0xdf, 0xb5, 0x02, 0xea, 0x07, 0xd6, 0x6e, 0xd3, 0x3d, 0x34, 0x55, 0x2c, 0xf2, 0x35, + 0xd6, 0x1f, 0x8a, 0x24, 0x28, 0x62, 0xdd, 0xf6, 0x13, 0x56, 0xf1, 0x04, 0x89, 0x16, 0x0d, 0x13, + 0x59, 0xf5, 0xce, 0x52, 0xd0, 0xd1, 0xa7, 0xcc, 0x73, 0x1f, 0x1f, 0x95, 0x1a, 0x0d, 0x8f, 0xfa, + 0xbe, 0x38, 0x84, 0xb8, 0x4f, 0x19, 0x2a, 0x1b, 0x6c, 0x5e, 0xa0, 0xf9, 0x94, 0x29, 0x04, 0xe4, + 0x47, 0x32, 0x70, 0x4e, 0xf5, 0x36, 0xc1, 0xe5, 0x82, 0x66, 0x2e, 0xfc, 0x48, 0x7a, 0xf3, 0xba, + 0x3c, 0x84, 0xaf, 0x2b, 0x68, 0xd7, 0x1f, 0xdd, 0xbc, 0x5e, 0x8a, 0x7e, 0xd6, 0x24, 0x11, 0xc6, + 0xed, 0x2b, 0xa6, 0xf2, 0xd3, 0x72, 0x13, 0xcd, 0xd9, 0x29, 0xc4, 0xa4, 0xcc, 0x24, 0x35, 0x36, + 0xa3, 0xd0, 0x70, 0xaa, 0xba, 0x81, 0x67, 0x9a, 0xd0, 0xa8, 0x8a, 0xf9, 0xc7, 0x4d, 0xac, 0x9c, + 0x8e, 0x2e, 0x90, 0x29, 0x34, 0xa4, 0x0a, 0xd3, 0x1c, 0xc0, 0xb6, 0x05, 0x9e, 0xe6, 0x69, 0x36, + 0x4a, 0x34, 0x21, 0xd8, 0xe0, 0x5b, 0x3f, 0xa6, 0x7a, 0x52, 0x83, 0xb3, 0xc6, 0xe8, 0xc8, 0x07, + 0x30, 0x85, 0x31, 0xf4, 0xa3, 0xf5, 0x3a, 0x87, 0xab, 0x18, 0x63, 0xcc, 0x8a, 0x92, 0x98, 0xe7, + 0xdd, 0x84, 0xef, 0xef, 0x47, 0x2b, 0xfa, 0x03, 0x98, 0x42, 0x5b, 0x9d, 0x88, 0xc1, 0xb9, 0x88, + 0x81, 0x28, 0x89, 0x33, 0x08, 0x9a, 0x7e, 0xc4, 0xe0, 0xa7, 0x33, 0x70, 0x91, 0x55, 0x94, 0x3e, + 0x42, 0xe7, 0x3f, 0xce, 0x08, 0x61, 0xd4, 0xcd, 0x9e, 0x3c, 0x55, 0x71, 0xd4, 0xf7, 0xf7, 0xd3, + 0x38, 0xe0, 0x47, 0xb1, 0x8f, 0x4f, 0xff, 0xa8, 0x0b, 0x1f, 0xfb, 0xa3, 0x7a, 0xf2, 0x54, 0x3f, + 0x2a, 0x68, 0xfa, 0x69, 0x1c, 0xf0, 0x5a, 0x5b, 0x2b, 0xad, 0xad, 0x46, 0x77, 0xb3, 0xef, 0x2e, + 0xb7, 0x15, 0xad, 0x6d, 0x7d, 0xdc, 0x56, 0xb6, 0xb8, 0x17, 0xb5, 0xd2, 0x0d, 0xf2, 0x5a, 0xab, + 0x81, 0xe3, 0xd7, 0xda, 0x18, 0x8d, 0x19, 0xc3, 0x36, 0x7e, 0x09, 0x62, 0x7c, 0x85, 0xa9, 0xaa, + 0x01, 0x23, 0xfc, 0xd6, 0x2a, 0x3a, 0x19, 0x6d, 0x16, 0xf8, 0x9d, 0xd6, 0x14, 0x25, 0xe4, 0x22, + 0xe4, 0x6a, 0xb5, 0x07, 0xa2, 0x93, 0xd1, 0x60, 0xd5, 0xf7, 0x5d, 0x93, 0xc1, 0xd8, 0x08, 0xa1, + 0x15, 0xaa, 0x92, 0x93, 0x80, 0x9d, 0x77, 0x26, 0x42, 0x59, 0x7f, 0xcb, 0x3b, 0xe4, 0x50, 0xd4, + 0xdf, 0xe2, 0x0e, 0x19, 0xdd, 0x1c, 0xcb, 0x30, 0x5f, 0xf2, 0x7d, 0xea, 0xb1, 0x09, 0x21, 0x8c, + 0x1b, 0x3d, 0x71, 0xcf, 0x11, 0x07, 0x3b, 0x56, 0x6a, 0xd7, 0x7d, 0xb3, 0x27, 0x22, 0xb9, 0x0a, + 0xf9, 0x52, 0xb7, 0xe1, 0xd0, 0x76, 0x5d, 0x0b, 0xcb, 0x66, 0x0b, 0x98, 0x19, 0x96, 0x92, 0x2f, + 0xc2, 0xb9, 0x58, 0x04, 0x46, 0xd1, 0x03, 0xa3, 0xd1, 0xde, 0x2b, 0xef, 0x61, 0x91, 0x41, 0x06, + 0xef, 0x92, 0x74, 0x4a, 0x52, 0x82, 0xc2, 0x32, 0xba, 0x69, 0x55, 0x28, 0x7f, 0x1b, 0x72, 0x3d, + 0xee, 0x9f, 0xc7, 0x6f, 0xcd, 0x22, 0xce, 0x64, 0x23, 0x2c, 0x34, 0x13, 0xe8, 0xe4, 0x3e, 0xcc, + 0xc6, 0x61, 0xec, 0x04, 0xe7, 0x17, 0x64, 0xdc, 0x6f, 0x12, 0x5c, 0xf0, 0x0c, 0x4f, 0xa3, 0x22, + 0x3b, 0x30, 0x13, 0x19, 0x24, 0xe9, 0xd7, 0x66, 0x69, 0xe7, 0x1c, 0x96, 0xcb, 0xab, 0xf3, 0xf3, + 0x62, 0x32, 0xce, 0x46, 0xc6, 0x4d, 0xe1, 0xf5, 0xd9, 0x4c, 0xb2, 0x23, 0x0d, 0x98, 0xaa, 0x39, + 0x7b, 0x6d, 0xa7, 0xbd, 0x77, 0x9f, 0x1e, 0x6d, 0xd8, 0x8e, 0x27, 0x2c, 0x4e, 0xa5, 0x3d, 0x79, + 0xc9, 0x3f, 0x6a, 0xb5, 0x68, 0xe0, 0xe1, 0x46, 0xc8, 0xca, 0xd1, 0x07, 0x9d, 0x5d, 0x87, 0x16, + 0x7c, 0x4e, 0x87, 0x6e, 0x9b, 0x1d, 0xdb, 0xd1, 0x84, 0x00, 0x9d, 0xa7, 0xa6, 0xba, 0x98, 0x18, + 0x50, 0x75, 0xd1, 0x84, 0x99, 0xe5, 0x76, 0xdd, 0x3b, 0xc2, 0x27, 0x3a, 0xf9, 0x71, 0x93, 0xa7, + 0x7c, 0xdc, 0x2b, 0xe2, 0xe3, 0x5e, 0xb0, 0xe5, 0x0c, 0x4b, 0xfb, 0xbc, 0x24, 0x63, 0x52, 0x83, + 0x19, 0xbc, 0x38, 0x54, 0x2b, 0x1b, 0xd5, 0xb6, 0x13, 0x38, 0x76, 0x40, 0x1b, 0x42, 0xb8, 0x08, + 0x33, 0xb9, 0xf0, 0x2b, 0xaa, 0xd3, 0xe8, 0x58, 0x8e, 0x44, 0x51, 0x99, 0x26, 0xe8, 0xfb, 0xdd, + 0x13, 0xa7, 0xff, 0x9c, 0xee, 0x89, 0x55, 0x98, 0x8e, 0x87, 0x72, 0x28, 0x44, 0xe7, 0xb0, 0x8f, + 0x45, 0xec, 0x38, 0x77, 0xbb, 0x28, 0x4c, 0x6a, 0xc9, 0x53, 0x63, 0x41, 0x1c, 0x62, 0x57, 0xce, + 0x19, 0xed, 0xca, 0xa9, 0xed, 0x4a, 0x67, 0xb8, 0x72, 0x92, 0x0d, 0x80, 0x3b, 0xae, 0x57, 0xa7, + 0x25, 0xf4, 0x8f, 0x26, 0x5a, 0xbe, 0x2b, 0xc6, 0x34, 0x2a, 0xe4, 0xeb, 0x67, 0x97, 0xfd, 0xb6, + 0xe2, 0x6e, 0xee, 0x0a, 0x0f, 0xe3, 0x47, 0xb3, 0x30, 0xdf, 0xeb, 0x73, 0xfa, 0x5c, 0xf7, 0x3e, + 0x05, 0xc9, 0x15, 0x2e, 0xae, 0x7d, 0x05, 0x1a, 0x5f, 0xe7, 0x8b, 0x90, 0xbe, 0x90, 0xc5, 0x35, + 0x70, 0x36, 0x4e, 0xb0, 0xe5, 0x35, 0xc9, 0x6d, 0x18, 0x57, 0x3e, 0x1e, 0xf7, 0xd2, 0x5e, 0x4d, + 0x35, 0x61, 0x37, 0xfc, 0x9b, 0x5d, 0x13, 0xf9, 0xbe, 0x25, 0xaf, 0x89, 0xfc, 0x17, 0x29, 0x70, + 0x17, 0xf1, 0x11, 0x6e, 0x05, 0xe0, 0xfb, 0x2e, 0x21, 0x80, 0xfb, 0x36, 0xdf, 0x02, 0x4d, 0xfc, + 0xdb, 0xf8, 0x8d, 0x09, 0x7e, 0x22, 0xab, 0xb7, 0xc4, 0x5e, 0xf6, 0xc1, 0xb1, 0xdb, 0x63, 0xf6, + 0x2c, 0xb7, 0xc7, 0xdc, 0xe9, 0xb7, 0xc7, 0xa1, 0xd3, 0x6e, 0x8f, 0xb1, 0xeb, 0xdd, 0xf0, 0x99, + 0xaf, 0x77, 0x23, 0x67, 0xba, 0xde, 0x8d, 0x9e, 0xe9, 0x7a, 0xa7, 0xdd, 0x54, 0xf3, 0xa7, 0xdd, + 0x54, 0xff, 0xf2, 0x32, 0xf8, 0xac, 0x5e, 0x06, 0xd3, 0x44, 0xbc, 0x33, 0x5d, 0x06, 0x7f, 0xb8, + 0xe7, 0x5d, 0xae, 0xf0, 0x71, 0x84, 0xf2, 0x97, 0x07, 0xb8, 0xcb, 0x0d, 0x7a, 0x93, 0x9b, 0x79, + 0x3a, 0x37, 0x39, 0xf2, 0xd4, 0x6e, 0x72, 0xb3, 0x4f, 0x7a, 0x93, 0x9b, 0x7b, 0x9a, 0x37, 0xb9, + 0x73, 0x7f, 0x11, 0x6f, 0x72, 0xe7, 0xff, 0xed, 0xdc, 0xe4, 0xfe, 0x0a, 0x14, 0xe2, 0xc2, 0xe5, + 0xe9, 0x51, 0x8f, 0x9f, 0x5a, 0xc8, 0x49, 0x26, 0xfa, 0xc6, 0x85, 0x3b, 0x72, 0x03, 0x60, 0xc3, + 0x73, 0x1e, 0xd9, 0x01, 0xbd, 0x2f, 0xad, 0xdf, 0x44, 0xc4, 0x6e, 0x0e, 0x65, 0x23, 0x6f, 0x2a, + 0x28, 0xe1, 0xbd, 0x26, 0x9b, 0x76, 0xaf, 0x31, 0x7e, 0x24, 0x0b, 0x33, 0x3c, 0x6e, 0xdb, 0xb3, + 0xff, 0x08, 0xfb, 0xbe, 0x76, 0x5b, 0x7d, 0x21, 0xca, 0x11, 0xa0, 0xb6, 0xae, 0xcf, 0x33, 0xec, + 0x57, 0xe1, 0x5c, 0xa2, 0x2b, 0xf0, 0xc6, 0x5a, 0x91, 0x11, 0xf3, 0x12, 0x77, 0xd6, 0xf9, 0xf4, + 0x4a, 0x1e, 0xde, 0x32, 0x13, 0x14, 0xc6, 0x9f, 0x0e, 0x25, 0xf8, 0x8b, 0x07, 0x59, 0xf5, 0x89, + 0x35, 0x73, 0xb6, 0x27, 0xd6, 0xec, 0x60, 0x4f, 0xac, 0x31, 0xa1, 0x22, 0x37, 0x88, 0x50, 0xf1, + 0x45, 0x98, 0xdc, 0xa4, 0x76, 0xcb, 0xdf, 0x74, 0x45, 0xc2, 0x29, 0xee, 0x6b, 0x21, 0x03, 0xe2, + 0xb1, 0x32, 0x79, 0xe1, 0x0a, 0x6d, 0x46, 0x03, 0x46, 0xc0, 0x8e, 0x41, 0x9e, 0x81, 0xca, 0xd4, + 0x39, 0xa8, 0xb7, 0xe8, 0xe1, 0x3e, 0xb7, 0xe8, 0x1a, 0x4c, 0x08, 0xba, 0x28, 0xd4, 0x73, 0x74, + 0xdd, 0x63, 0x45, 0x08, 0x97, 0xb5, 0x87, 0xd9, 0xf0, 0xc3, 0xda, 0xf9, 0x4d, 0x4f, 0x63, 0xc2, + 0xba, 0x60, 0xb9, 0xdd, 0xe8, 0xb8, 0x4e, 0x1b, 0xbb, 0x60, 0x34, 0xea, 0x02, 0x2a, 0xc0, 0xbc, + 0x0b, 0x14, 0x24, 0xf2, 0x2e, 0x4c, 0x95, 0x36, 0xaa, 0x2a, 0x59, 0x3e, 0x7a, 0xe5, 0xb5, 0x3b, + 0x8e, 0xa5, 0x91, 0xc6, 0x70, 0xfb, 0xdd, 0x7c, 0xc6, 0xfe, 0x7c, 0x6e, 0x3e, 0xc6, 0x3f, 0x9b, + 0x94, 0xcb, 0xfb, 0x93, 0x7d, 0x20, 0xd1, 0x9f, 0x3c, 0x72, 0x67, 0x7c, 0xf2, 0x18, 0x3a, 0x4d, + 0x90, 0xd4, 0xe4, 0xdb, 0xe1, 0x33, 0xc9, 0xb7, 0x23, 0x4f, 0xfc, 0x7c, 0x31, 0x7a, 0x46, 0x89, + 0x35, 0xb6, 0xd6, 0xf2, 0x83, 0xac, 0xb5, 0x54, 0x29, 0x77, 0xec, 0xc9, 0xa5, 0x5c, 0x38, 0xb3, + 0x94, 0x5b, 0x8b, 0x7c, 0x97, 0xc7, 0x4f, 0x75, 0x09, 0x79, 0x51, 0x68, 0x05, 0x66, 0xd2, 0xa3, + 0xf0, 0x85, 0x5e, 0xcc, 0xdf, 0x55, 0xa2, 0xf3, 0xd7, 0xd3, 0x45, 0xe7, 0xfe, 0xe7, 0xcd, 0x99, + 0x84, 0xe7, 0x1f, 0x79, 0xba, 0xc2, 0xf3, 0xd3, 0x7d, 0x08, 0xf9, 0x4b, 0xf1, 0xf9, 0x2f, 0xc5, + 0xe7, 0xc1, 0xc4, 0x67, 0xf2, 0x00, 0x88, 0xdd, 0x0d, 0xf6, 0x69, 0x3b, 0x70, 0xea, 0x18, 0x95, + 0x96, 0x0d, 0x31, 0xbe, 0xca, 0x88, 0xf5, 0x9a, 0x2c, 0x55, 0xd7, 0xab, 0x56, 0x8a, 0x7e, 0xde, + 0x1e, 0xae, 0xd7, 0x6d, 0xdb, 0x6b, 0xa3, 0x1e, 0xeb, 0x06, 0x8c, 0xca, 0xb8, 0xa6, 0x99, 0x48, + 0x45, 0x9d, 0x0c, 0x68, 0x2a, 0xb1, 0xc8, 0x22, 0xe4, 0x25, 0xb1, 0x9a, 0x68, 0xe7, 0x50, 0xc0, + 0xb4, 0x90, 0x91, 0x02, 0x66, 0xfc, 0x47, 0x43, 0xf2, 0x4c, 0x60, 0x9f, 0xb0, 0x61, 0x7b, 0x76, + 0x0b, 0x73, 0xf0, 0x85, 0x4b, 0x56, 0xb9, 0x0d, 0xc4, 0x56, 0x79, 0xcc, 0x57, 0x40, 0x27, 0xf9, + 0x58, 0x81, 0x69, 0xa3, 0x34, 0xc7, 0xb9, 0x01, 0xd2, 0x1c, 0xbf, 0xad, 0xe5, 0x08, 0x1e, 0x8a, + 0x92, 0x52, 0xb2, 0x7d, 0xb2, 0x7f, 0x76, 0xe0, 0xdb, 0x6a, 0x32, 0xdf, 0xe1, 0x28, 0x4c, 0x18, + 0x52, 0xf6, 0x49, 0xe3, 0x1b, 0x5e, 0x6f, 0x46, 0xce, 0x12, 0xf2, 0x79, 0xf4, 0xdf, 0x6a, 0xc8, + 0xe7, 0x65, 0x00, 0x71, 0x76, 0x47, 0xf6, 0x0e, 0xaf, 0xe2, 0x76, 0x22, 0xec, 0x9e, 0x83, 0xa0, + 0xd9, 0x23, 0x27, 0x88, 0x42, 0x68, 0xfc, 0x1e, 0x81, 0x99, 0x5a, 0xed, 0x41, 0xc5, 0xb1, 0xf7, + 0xda, 0xae, 0x1f, 0x38, 0xf5, 0x6a, 0x7b, 0xd7, 0x65, 0xb2, 0x7d, 0x78, 0xbe, 0x28, 0xc1, 0x7a, + 0xa3, 0xb3, 0x25, 0x2c, 0x66, 0x77, 0xc7, 0x65, 0xcf, 0x93, 0x0a, 0x57, 0x7e, 0x77, 0xa4, 0x0c, + 0x60, 0x72, 0x38, 0x13, 0x9f, 0x6b, 0x5d, 0x0c, 0x95, 0x21, 0x8c, 0x50, 0x50, 0x7c, 0xf6, 0x39, + 0xc8, 0x94, 0x65, 0x84, 0x26, 0x27, 0xac, 0xb8, 0x4e, 0x5d, 0xd0, 0x02, 0x47, 0x47, 0xc5, 0x7c, + 0x35, 0x0a, 0xe9, 0x06, 0xf7, 0xe1, 0x0e, 0xc2, 0x55, 0x13, 0xbb, 0xc4, 0x1a, 0x38, 0x82, 0x73, + 0x9a, 0x13, 0xf5, 0xa0, 0xaf, 0x33, 0xaf, 0x0b, 0x71, 0xdd, 0xc0, 0x98, 0x1d, 0x29, 0x4f, 0x34, + 0x6a, 0x52, 0xbd, 0xd4, 0x1a, 0xd8, 0x01, 0xf9, 0x62, 0x6a, 0x49, 0xb8, 0xba, 0xc7, 0xb5, 0xe0, + 0xdd, 0xca, 0xa6, 0xc1, 0xd3, 0x07, 0xf6, 0xaa, 0xda, 0x4a, 0xd9, 0x0a, 0xfa, 0xd7, 0x44, 0xfe, + 0x71, 0x06, 0x2e, 0x68, 0x18, 0xe1, 0xfe, 0xe7, 0x87, 0xf1, 0x45, 0x52, 0xe7, 0xf5, 0x47, 0x4f, + 0x67, 0x5e, 0xbf, 0xac, 0xb7, 0x25, 0xda, 0xa1, 0xd5, 0x36, 0xf4, 0xfa, 0x42, 0xf2, 0x08, 0x66, + 0xb0, 0x48, 0xbe, 0x14, 0xb1, 0x39, 0x2b, 0x1e, 0x98, 0xe6, 0xa2, 0xcf, 0xe6, 0x81, 0x01, 0x30, + 0x05, 0xfc, 0xe2, 0xb7, 0x8f, 0x8b, 0x93, 0x1a, 0xba, 0x0c, 0x87, 0x6d, 0x45, 0xcf, 0x4d, 0x4e, + 0x7b, 0xd7, 0xd5, 0xf2, 0xfb, 0xc7, 0xab, 0x20, 0xff, 0x75, 0x86, 0xbf, 0x4f, 0xf0, 0x66, 0xdc, + 0xf1, 0xdc, 0x56, 0x58, 0x2e, 0x6d, 0x35, 0x7b, 0x74, 0x5b, 0xf3, 0xe9, 0x74, 0xdb, 0xab, 0xf8, + 0xc9, 0x7c, 0x4f, 0xb0, 0x76, 0x3d, 0xb7, 0x15, 0x7d, 0xbe, 0xda, 0x71, 0x3d, 0x3f, 0x92, 0xfc, + 0xf5, 0x0c, 0x5c, 0xd4, 0xd4, 0xa4, 0x6a, 0x6e, 0x12, 0x11, 0x7e, 0x61, 0x36, 0x0c, 0xcc, 0x12, + 0x15, 0x2d, 0x5d, 0x17, 0xf3, 0xff, 0x0a, 0x7e, 0x81, 0x12, 0x07, 0x94, 0x21, 0x59, 0x2d, 0x8e, + 0xa5, 0x7c, 0x42, 0xef, 0x5a, 0x88, 0x03, 0x33, 0x68, 0xb6, 0xa3, 0xd9, 0x14, 0xcf, 0xf5, 0xb6, + 0x29, 0x0e, 0xb3, 0x0e, 0x61, 0x46, 0x82, 0xde, 0x86, 0xc5, 0x49, 0xae, 0xe4, 0xfb, 0xe0, 0x62, + 0x02, 0x18, 0xae, 0xb6, 0x73, 0x3d, 0x57, 0xdb, 0xa7, 0x4e, 0x8e, 0x8b, 0xaf, 0xa5, 0xd5, 0x96, + 0xb6, 0xd2, 0x7a, 0xd7, 0x40, 0x6c, 0x80, 0xa8, 0x50, 0xc8, 0x33, 0xe9, 0x13, 0xf4, 0x53, 0x62, + 0x7e, 0x28, 0xf8, 0x6c, 0x2f, 0x57, 0xbe, 0x41, 0x3d, 0xf2, 0x22, 0x24, 0x42, 0x61, 0x42, 0xc9, + 0xc6, 0x70, 0x24, 0xac, 0x47, 0x7a, 0x54, 0xf2, 0xed, 0xe3, 0xa2, 0x86, 0xcd, 0x6e, 0x58, 0x6a, + 0x9a, 0x07, 0x4d, 0x7c, 0x54, 0x11, 0xc9, 0xaf, 0x67, 0x60, 0x8e, 0x01, 0xa2, 0x49, 0x25, 0x1a, + 0x35, 0xdf, 0x6f, 0xd6, 0xef, 0x3f, 0x9d, 0x59, 0xff, 0x12, 0x7e, 0xa3, 0x3a, 0xeb, 0x13, 0x5d, + 0x92, 0xfa, 0x71, 0x38, 0xdb, 0x35, 0x0b, 0x31, 0x6d, 0xb6, 0x5f, 0x1c, 0x60, 0xb6, 0xf3, 0x01, + 0x38, 0x7d, 0xb6, 0xf7, 0xac, 0x85, 0x6c, 0xc2, 0x84, 0xb8, 0x5c, 0xf1, 0x0e, 0xbb, 0xa4, 0xc5, + 0x85, 0x56, 0x8b, 0xf8, 0x8d, 0x57, 0x24, 0xab, 0x48, 0xb4, 0x50, 0xe3, 0x42, 0xda, 0x30, 0xcb, + 0x7f, 0xeb, 0xca, 0xae, 0x62, 0x4f, 0x65, 0xd7, 0x55, 0xd1, 0xa2, 0xcb, 0x82, 0x7f, 0x4c, 0xe7, + 0xa5, 0xc6, 0x73, 0x4a, 0x61, 0x4c, 0x3a, 0x40, 0x34, 0x30, 0x5f, 0xb4, 0x97, 0xfb, 0xab, 0xb8, + 0x5e, 0x13, 0x75, 0x16, 0xe3, 0x75, 0xc6, 0x57, 0x6e, 0x0a, 0x6f, 0x62, 0xc3, 0xb4, 0x80, 0xba, + 0x07, 0x94, 0xef, 0xf0, 0x2f, 0x69, 0x11, 0xb5, 0x62, 0xa5, 0xfc, 0x56, 0x26, 0x6b, 0xc2, 0x88, + 0x67, 0xb1, 0x0d, 0x3d, 0xce, 0x8f, 0x3c, 0x80, 0x99, 0x52, 0xa7, 0xd3, 0x74, 0x68, 0x03, 0x5b, + 0x69, 0x76, 0x59, 0x9b, 0x8c, 0x28, 0xdf, 0x9b, 0xcd, 0x0b, 0xc5, 0x55, 0xd1, 0xeb, 0xc6, 0xb6, + 0x9b, 0x04, 0xad, 0xf1, 0xc3, 0x99, 0xc4, 0x47, 0x93, 0x37, 0x60, 0x0c, 0x7f, 0x28, 0x41, 0x5a, + 0x50, 0x67, 0xc4, 0x3f, 0x11, 0xb5, 0x51, 0x11, 0x02, 0x13, 0x96, 0xd4, 0x40, 0x8d, 0x39, 0x2e, + 0x2c, 0x09, 0x45, 0x45, 0xa4, 0x9a, 0x28, 0x4a, 0x5f, 0x8f, 0x5c, 0x24, 0x74, 0xa1, 0xaf, 0x87, + 0xf0, 0xf0, 0x30, 0xfe, 0x61, 0x56, 0x9f, 0x76, 0xe4, 0xaa, 0x22, 0xb7, 0x2b, 0xa1, 0x22, 0xa5, + 0xdc, 0xae, 0x48, 0xeb, 0x7f, 0x2f, 0x03, 0xb3, 0x0f, 0x94, 0x44, 0xa1, 0x9b, 0x2e, 0x8e, 0x4b, + 0xff, 0xd4, 0x99, 0x4f, 0x2b, 0x05, 0xa0, 0x9a, 0xa1, 0x94, 0xcd, 0x14, 0x9c, 0x32, 0x66, 0xda, + 0xf7, 0xa0, 0xf7, 0x1c, 0x7e, 0x98, 0x92, 0x89, 0x91, 0xa3, 0x73, 0xf8, 0x19, 0x53, 0x57, 0x18, + 0x3f, 0x9e, 0x85, 0x71, 0x65, 0xc5, 0x90, 0xcf, 0xc0, 0x84, 0x5a, 0xad, 0xaa, 0x70, 0x54, 0xbf, + 0xd2, 0xd4, 0xb0, 0x50, 0xe3, 0x48, 0xed, 0x96, 0xa6, 0x71, 0x64, 0xeb, 0x02, 0xa1, 0x67, 0xbc, + 0x09, 0x7d, 0x90, 0x72, 0x13, 0xc2, 0x59, 0xae, 0x68, 0x8c, 0xfa, 0xde, 0x87, 0xde, 0x4d, 0xde, + 0x87, 0x50, 0x79, 0xa5, 0xd0, 0xf7, 0xbe, 0x15, 0x19, 0x3f, 0x95, 0x81, 0x42, 0x7c, 0x4d, 0x7f, + 0x22, 0xbd, 0x72, 0x86, 0xd7, 0xa5, 0x1f, 0xcb, 0x86, 0x99, 0x5b, 0xa4, 0x0b, 0xf1, 0xb3, 0x6a, + 0xa6, 0xf8, 0x9e, 0xf6, 0xf0, 0xf3, 0xbc, 0x1e, 0x0d, 0x4f, 0x0d, 0xbe, 0x91, 0x1e, 0x02, 0x73, + 0xe8, 0x5b, 0xbf, 0x58, 0x7c, 0xce, 0xf8, 0x10, 0xe6, 0xe2, 0xdd, 0x81, 0x8f, 0x3f, 0x25, 0x98, + 0xd6, 0xe1, 0xf1, 0xbc, 0x4f, 0x71, 0x2a, 0x33, 0x8e, 0x6f, 0xfc, 0x41, 0x36, 0xce, 0x5b, 0x98, + 0x2c, 0xb2, 0x3d, 0x4a, 0x35, 0xc4, 0x11, 0x7b, 0x14, 0x07, 0x99, 0xb2, 0xec, 0x2c, 0xf9, 0xd6, + 0x42, 0x47, 0xd8, 0x5c, 0xba, 0x23, 0x2c, 0xb9, 0x1d, 0xb3, 0xd2, 0x56, 0xa2, 0x36, 0x1d, 0xd2, + 0x1d, 0x2b, 0xb2, 0xd4, 0x8e, 0x19, 0x67, 0x97, 0x61, 0x4e, 0x0b, 0x41, 0x2e, 0xe9, 0x87, 0x23, + 0x5d, 0x7f, 0x80, 0x05, 0x9c, 0x38, 0x15, 0x99, 0xac, 0xc0, 0x28, 0xfb, 0xcc, 0x35, 0xbb, 0x23, + 0xde, 0x74, 0x48, 0xe8, 0x16, 0xdf, 0x0c, 0xef, 0x87, 0x8a, 0x67, 0x7c, 0x93, 0x32, 0x09, 0x41, + 0x9d, 0x58, 0x02, 0xd1, 0xf8, 0x57, 0x19, 0xb6, 0xfe, 0xeb, 0x07, 0xdf, 0x65, 0x49, 0xdb, 0x58, + 0x93, 0xfa, 0x58, 0xd4, 0xfe, 0x51, 0x96, 0xe7, 0xe2, 0x11, 0xd3, 0xe7, 0x6d, 0x18, 0xd9, 0xb4, + 0xbd, 0x3d, 0x91, 0x32, 0x5b, 0xe7, 0xc2, 0x0b, 0xa2, 0x98, 0x52, 0x01, 0xfe, 0x36, 0x05, 0x81, + 0xaa, 0x3a, 0xcb, 0x0e, 0xa4, 0x3a, 0x53, 0xde, 0x05, 0x72, 0x4f, 0xed, 0x5d, 0xe0, 0x7b, 0xc2, + 0xb4, 0x3b, 0xa5, 0x60, 0x80, 0x08, 0xd7, 0x97, 0xe3, 0x59, 0xae, 0x12, 0xb1, 0xc8, 0x23, 0x76, + 0xe4, 0xb6, 0x9a, 0x37, 0x4b, 0xf1, 0x2d, 0x3d, 0x25, 0x43, 0x96, 0xf1, 0x47, 0x39, 0xde, 0xc7, + 0xa2, 0xa3, 0xae, 0x68, 0x7e, 0xe7, 0xb8, 0x4e, 0x62, 0x7a, 0x4a, 0xee, 0x81, 0x7e, 0x05, 0x86, + 0xd8, 0xdc, 0x14, 0xbd, 0x89, 0x78, 0x6c, 0xfe, 0xaa, 0x78, 0xac, 0x9c, 0xad, 0x65, 0x3c, 0x93, + 0xd4, 0x84, 0x88, 0x78, 0x6c, 0xa9, 0x6b, 0x19, 0x31, 0xc8, 0x55, 0x18, 0x5a, 0x77, 0x1b, 0x32, + 0x92, 0xfa, 0x1c, 0x46, 0x1f, 0xd1, 0x32, 0xae, 0xce, 0x67, 0x4c, 0xc4, 0x60, 0x6d, 0x0d, 0xf3, + 0x4f, 0xa8, 0x6d, 0x6d, 0xed, 0xda, 0xc9, 0x44, 0x77, 0x4a, 0xd2, 0x9b, 0x65, 0x98, 0xda, 0x76, + 0xda, 0x0d, 0xf7, 0xd0, 0xaf, 0x50, 0xff, 0x20, 0x70, 0x3b, 0xc2, 0xde, 0x18, 0xb5, 0xfb, 0x87, + 0xbc, 0xc4, 0x6a, 0xf0, 0x22, 0xf5, 0x59, 0x46, 0x27, 0x22, 0x4b, 0x30, 0xa9, 0x45, 0x70, 0x15, + 0x8f, 0xab, 0xa8, 0x0d, 0xd5, 0xe3, 0xbf, 0xaa, 0xda, 0x50, 0x8d, 0x84, 0x9d, 0xe7, 0xe2, 0xfb, + 0x95, 0x27, 0xd6, 0xc4, 0xb7, 0x0b, 0x1c, 0x72, 0x0b, 0xf2, 0x3c, 0xcc, 0x47, 0xb5, 0xa2, 0x3e, + 0x93, 0xf9, 0x08, 0x8b, 0x85, 0xc9, 0x91, 0x88, 0x4a, 0x58, 0x87, 0x4f, 0x43, 0x41, 0x6c, 0x49, + 0x51, 0xae, 0xf6, 0x17, 0x60, 0xa8, 0x5c, 0xad, 0x98, 0xea, 0x36, 0x52, 0x77, 0x1a, 0x9e, 0x89, + 0x50, 0xf4, 0xea, 0x5b, 0xa7, 0xc1, 0xa1, 0xeb, 0x1d, 0x98, 0xd4, 0x0f, 0x3c, 0x87, 0xe7, 0xd3, + 0xc4, 0x85, 0xf8, 0x19, 0xf2, 0x2e, 0x0c, 0xa3, 0xe1, 0x6b, 0xec, 0x64, 0x88, 0xd7, 0xb1, 0x34, + 0x29, 0x26, 0xf0, 0x30, 0x5a, 0xd1, 0x9a, 0x9c, 0x88, 0xbc, 0x0d, 0x43, 0x15, 0xda, 0x3e, 0x8a, + 0xa5, 0xfa, 0x4b, 0x10, 0x87, 0x1b, 0x42, 0x83, 0xb6, 0x8f, 0x4c, 0x24, 0x31, 0x7e, 0x2a, 0x0b, + 0xe7, 0x52, 0x3e, 0xeb, 0xe1, 0x67, 0x9e, 0xd1, 0x5d, 0x71, 0x49, 0xdb, 0x15, 0xe5, 0xfb, 0x78, + 0xcf, 0x8e, 0x4f, 0xdd, 0x24, 0x7f, 0x3e, 0x03, 0x17, 0xf4, 0x09, 0x2a, 0x2c, 0xdd, 0x1f, 0xde, + 0x22, 0xef, 0xc0, 0xc8, 0x0a, 0xb5, 0x1b, 0x54, 0xe6, 0xf5, 0x3a, 0x17, 0x06, 0xe4, 0xe3, 0x31, + 0x0c, 0x78, 0x21, 0x67, 0x1b, 0x79, 0xbc, 0x72, 0x28, 0xa9, 0x88, 0x8f, 0xe3, 0xe2, 0xbb, 0x21, + 0xe3, 0x89, 0xa4, 0x55, 0xd5, 0xc7, 0xca, 0xe4, 0xdb, 0x19, 0x78, 0xbe, 0x0f, 0x0d, 0x1b, 0x38, + 0x36, 0xf4, 0xea, 0xc0, 0xe1, 0x89, 0x8a, 0x50, 0xf2, 0x3e, 0x4c, 0x6f, 0x0a, 0xf1, 0x5f, 0x0e, + 0x47, 0x36, 0x5a, 0x2f, 0xf2, 0x66, 0x60, 0xc9, 0x71, 0x89, 0x23, 0x6b, 0x81, 0x6e, 0x72, 0x7d, + 0x03, 0xdd, 0xa8, 0x71, 0x63, 0x86, 0x06, 0x8d, 0x1b, 0xf3, 0x21, 0xcc, 0xe9, 0x6d, 0x13, 0xe1, + 0x7b, 0xa3, 0xa8, 0x39, 0x99, 0xde, 0x51, 0x73, 0xfa, 0x06, 0x09, 0x35, 0x7e, 0x3c, 0x03, 0x05, + 0x9d, 0xf7, 0x93, 0x8e, 0xe7, 0x7b, 0xda, 0x78, 0x3e, 0x9f, 0x3e, 0x9e, 0xbd, 0x07, 0xf2, 0xff, + 0xca, 0xc4, 0x1b, 0x3b, 0xd0, 0x08, 0x1a, 0x30, 0x52, 0x71, 0x5b, 0xb6, 0xd3, 0x56, 0x53, 0xff, + 0x37, 0x10, 0x62, 0x8a, 0x92, 0xc1, 0x82, 0x0c, 0x5d, 0x86, 0xe1, 0x75, 0xb7, 0x5d, 0xaa, 0x08, + 0x93, 0x62, 0xe4, 0xd3, 0x76, 0xdb, 0x96, 0xdd, 0x30, 0x79, 0x01, 0x59, 0x05, 0xa8, 0xd5, 0x3d, + 0x4a, 0xdb, 0x35, 0xe7, 0x7b, 0x69, 0x4c, 0xd2, 0x60, 0x3d, 0xd4, 0xec, 0xe2, 0xc6, 0xc2, 0x9f, + 0x4e, 0x11, 0xd1, 0xf2, 0x9d, 0xef, 0x55, 0xf7, 0x5b, 0x85, 0x1e, 0xd7, 0x95, 0x88, 0xc3, 0x16, + 0x1b, 0x87, 0x9b, 0x9f, 0xc4, 0xba, 0x4a, 0xad, 0x0a, 0x7b, 0xf8, 0x66, 0xea, 0x70, 0xfc, 0x7e, + 0x06, 0x9e, 0xef, 0x43, 0xf3, 0x14, 0x46, 0xe5, 0xcf, 0xbb, 0xc3, 0x29, 0x40, 0x44, 0x84, 0x99, + 0x94, 0x9d, 0x46, 0xc0, 0x73, 0xf5, 0x4d, 0x8a, 0x4c, 0xca, 0x0c, 0xa0, 0x65, 0x52, 0x66, 0x00, + 0x76, 0x96, 0xae, 0x50, 0x67, 0x6f, 0x9f, 0x9b, 0x87, 0x4d, 0xf2, 0xbd, 0x61, 0x1f, 0x21, 0xea, + 0x59, 0xca, 0x71, 0x8c, 0x7f, 0x3d, 0x0c, 0x17, 0x4d, 0xba, 0xe7, 0xb0, 0x7b, 0xc9, 0x96, 0xef, + 0xb4, 0xf7, 0xb4, 0xb8, 0x3b, 0x46, 0x6c, 0xe5, 0x8a, 0x24, 0x15, 0x0c, 0x12, 0xce, 0xc4, 0x6b, + 0x90, 0x67, 0x62, 0x88, 0xb2, 0x78, 0xf1, 0x8d, 0x8b, 0x09, 0x2b, 0x22, 0xb0, 0xb3, 0x2c, 0x26, + 0xaf, 0x0b, 0x31, 0x49, 0x49, 0x23, 0xc4, 0xc4, 0xa4, 0xef, 0x1c, 0x17, 0xa1, 0x76, 0xe4, 0x07, + 0x14, 0xaf, 0xc8, 0x42, 0x54, 0x0a, 0xef, 0x32, 0x43, 0x3d, 0xee, 0x32, 0x6b, 0x30, 0x57, 0x6a, + 0xf0, 0xd3, 0xd1, 0x6e, 0x6e, 0x78, 0x4e, 0xbb, 0xee, 0x74, 0xec, 0xa6, 0xbc, 0x9f, 0x63, 0x2f, + 0xdb, 0x61, 0xb9, 0xd5, 0x09, 0x11, 0xcc, 0x54, 0x32, 0xd6, 0x8c, 0xca, 0x7a, 0x0d, 0xc3, 0xd3, + 0x88, 0xe7, 0x4b, 0x6c, 0x46, 0xa3, 0xed, 0x63, 0x2b, 0x7c, 0x33, 0x2c, 0xc6, 0x5b, 0x14, 0x1a, + 0x04, 0x6c, 0xae, 0xd6, 0x22, 0x97, 0x6a, 0x9e, 0xe5, 0x80, 0x1b, 0x16, 0x04, 0x4d, 0x1f, 0x4d, + 0x31, 0x35, 0xbc, 0x88, 0xae, 0x56, 0x5b, 0x61, 0x74, 0xf9, 0x04, 0x9d, 0xef, 0xef, 0xab, 0x74, + 0x1c, 0x8f, 0xdc, 0x60, 0x53, 0xa1, 0xe5, 0x06, 0x14, 0xa7, 0xf0, 0x58, 0x74, 0xe7, 0xf2, 0x10, + 0xca, 0xef, 0x5c, 0x0a, 0x0a, 0x79, 0x17, 0x66, 0x97, 0xcb, 0x8b, 0x52, 0xe9, 0x5c, 0x71, 0xeb, + 0x5d, 0x34, 0x04, 0x00, 0xac, 0x0f, 0xc7, 0x90, 0xd6, 0x17, 0xd9, 0x6e, 0x92, 0x86, 0x46, 0xae, + 0xc0, 0x68, 0xb5, 0xc2, 0xfb, 0x7e, 0x5c, 0x4d, 0xe5, 0x25, 0x2c, 0xb3, 0x64, 0x21, 0x79, 0x10, + 0x5d, 0x0a, 0x26, 0x4e, 0x95, 0xde, 0x2f, 0x0e, 0x70, 0x21, 0x78, 0x1b, 0x26, 0x97, 0xdc, 0xa0, + 0xda, 0xf6, 0x03, 0xbb, 0x5d, 0xa7, 0xd5, 0x8a, 0x1a, 0x57, 0x7b, 0xc7, 0x0d, 0x2c, 0x47, 0x94, + 0xb0, 0x2f, 0xd7, 0x31, 0xc9, 0xe7, 0x90, 0xf4, 0x2e, 0x6d, 0x53, 0x2f, 0x8a, 0xa7, 0x3d, 0xcc, + 0xfb, 0x96, 0x91, 0xee, 0x85, 0x25, 0xa6, 0x8e, 0x28, 0xd2, 0x8c, 0xf1, 0xe4, 0xa0, 0x65, 0xb7, + 0x41, 0x7d, 0xbe, 0x5b, 0x7c, 0x17, 0xa5, 0x19, 0x53, 0xda, 0xd6, 0x67, 0x07, 0xfd, 0xf7, 0x31, + 0xcd, 0x58, 0x02, 0x97, 0x7c, 0x0e, 0x86, 0xf1, 0xa7, 0x90, 0x6e, 0x67, 0x53, 0xd8, 0x46, 0x92, + 0x6d, 0x9d, 0x61, 0x9a, 0x9c, 0x80, 0x54, 0x61, 0x54, 0x5c, 0xac, 0xce, 0x92, 0x2c, 0x47, 0xdc, + 0xd0, 0xf8, 0xcc, 0x10, 0xf4, 0x46, 0x03, 0x26, 0xd4, 0x0a, 0xd9, 0x8a, 0x58, 0xb1, 0xfd, 0x7d, + 0xda, 0x60, 0xbf, 0x44, 0x9e, 0x3b, 0x5c, 0x11, 0xfb, 0x08, 0xb5, 0xd8, 0x77, 0x98, 0x0a, 0x0a, + 0x3b, 0x53, 0xab, 0xfe, 0x96, 0x2f, 0x3e, 0x45, 0xa8, 0x5a, 0x1c, 0x54, 0xdb, 0x35, 0x4c, 0x51, + 0x64, 0x7c, 0x0f, 0xcc, 0xad, 0x77, 0x9b, 0x4d, 0x7b, 0xa7, 0x49, 0x65, 0x1e, 0x14, 0x4c, 0x38, + 0xbe, 0x04, 0xc3, 0x35, 0x25, 0x85, 0x79, 0x98, 0x8b, 0x52, 0xc1, 0x41, 0x23, 0xd8, 0x0c, 0x86, + 0x0a, 0x8a, 0x25, 0x2f, 0xe7, 0xa4, 0xc6, 0xef, 0x66, 0x60, 0x4e, 0x9a, 0x0b, 0x78, 0x76, 0xfd, + 0x20, 0xcc, 0x63, 0x7f, 0x45, 0x9b, 0x6b, 0x38, 0x61, 0x63, 0xd3, 0x88, 0xcf, 0xba, 0x7b, 0xf2, + 0x23, 0x74, 0x81, 0x25, 0xed, 0x83, 0x4f, 0xfb, 0x18, 0xf2, 0x2e, 0x8c, 0x8b, 0xe3, 0x51, 0x09, + 0x70, 0x89, 0x51, 0xc4, 0xc4, 0x75, 0x2f, 0x6e, 0xbc, 0xa2, 0xa2, 0xa3, 0x2c, 0xa6, 0x37, 0xe5, + 0x49, 0x65, 0x80, 0x74, 0x59, 0x4c, 0xaf, 0xa3, 0xcf, 0xd4, 0xfd, 0xad, 0xf1, 0x78, 0xdf, 0x8a, + 0xb9, 0x7b, 0x5b, 0x0d, 0x69, 0x97, 0x89, 0x6e, 0xc6, 0x51, 0x48, 0x3b, 0xf5, 0x66, 0x1c, 0xa2, + 0x86, 0x63, 0x92, 0x3d, 0x65, 0x4c, 0xde, 0x97, 0x63, 0x92, 0xeb, 0x3d, 0x31, 0x66, 0xfb, 0x8c, + 0x43, 0x2d, 0x5a, 0x21, 0x43, 0x03, 0xa9, 0x55, 0x9e, 0xc3, 0xd8, 0xfd, 0x9c, 0x24, 0xbe, 0x8b, + 0x0a, 0x4e, 0xaa, 0xae, 0x66, 0x78, 0x70, 0xa6, 0xa7, 0x6c, 0xcd, 0x9f, 0x87, 0x89, 0x52, 0x10, + 0xd8, 0xf5, 0x7d, 0xda, 0xa8, 0xb0, 0xed, 0x49, 0x89, 0xbe, 0x65, 0x0b, 0xb8, 0xfa, 0xc6, 0xa6, + 0xe2, 0xf2, 0x68, 0xb2, 0xb6, 0x2f, 0x8c, 0x69, 0xc3, 0x68, 0xb2, 0x0c, 0xa2, 0x47, 0x93, 0x65, + 0x10, 0x72, 0x03, 0x46, 0xab, 0xed, 0x47, 0x0e, 0xeb, 0x13, 0x1e, 0x80, 0x0b, 0x75, 0x53, 0x0e, + 0x07, 0xa9, 0x9b, 0xab, 0xc0, 0x22, 0x6f, 0x2b, 0x97, 0x9a, 0xb1, 0x48, 0x81, 0xc1, 0x55, 0x5e, + 0x61, 0x84, 0x1d, 0xf5, 0xc2, 0x12, 0xde, 0x72, 0x6e, 0xc3, 0xa8, 0xd4, 0x64, 0x42, 0xa4, 0xb4, + 0x10, 0x94, 0xc9, 0x80, 0x15, 0x12, 0x19, 0x73, 0x92, 0x2b, 0xf9, 0xfa, 0xc6, 0x95, 0x9c, 0xe4, + 0x4a, 0xbe, 0x3e, 0x2d, 0x27, 0xb9, 0x92, 0xb9, 0x2f, 0x54, 0x02, 0x4d, 0x9c, 0xaa, 0x04, 0x7a, + 0x08, 0x13, 0x1b, 0xb6, 0x17, 0x38, 0x4c, 0x46, 0x69, 0x07, 0xfe, 0xfc, 0xa4, 0xa6, 0x37, 0x55, + 0x8a, 0x96, 0x2e, 0xc9, 0xbc, 0xd8, 0x1d, 0x05, 0x5f, 0x4f, 0xe0, 0x1c, 0xc1, 0xd3, 0x4d, 0x69, + 0xa7, 0x9e, 0xc4, 0x94, 0x16, 0x3b, 0x15, 0x75, 0x65, 0xd3, 0x91, 0x46, 0x06, 0x2f, 0x2d, 0x31, + 0x85, 0x59, 0x88, 0x48, 0xbe, 0x02, 0x13, 0xec, 0xef, 0x0d, 0xb7, 0xe9, 0xd4, 0x1d, 0xea, 0xcf, + 0x17, 0xb0, 0x71, 0x97, 0x52, 0x57, 0x3f, 0x22, 0x1d, 0xd5, 0x68, 0xc0, 0x17, 0x30, 0x32, 0x8e, + 0x2b, 0xc1, 0x35, 0x6e, 0xe4, 0x03, 0x98, 0x60, 0xb3, 0x6f, 0xc7, 0xf6, 0xb9, 0x68, 0x3a, 0x13, + 0x19, 0x43, 0x37, 0x04, 0x3c, 0x11, 0xd0, 0x59, 0x25, 0x60, 0xc7, 0x7c, 0xa9, 0xc3, 0x37, 0x48, + 0xa2, 0xcc, 0xf6, 0x4e, 0x62, 0x73, 0x94, 0x68, 0xe4, 0x0b, 0x30, 0x51, 0xea, 0x74, 0xa2, 0x1d, + 0x67, 0x56, 0x51, 0x84, 0x75, 0x3a, 0x56, 0xea, 0xae, 0xa3, 0x51, 0xc4, 0x37, 0xe6, 0xb9, 0x33, + 0x6d, 0xcc, 0xe4, 0xcd, 0x50, 0x5a, 0x3f, 0x17, 0x69, 0x75, 0xc5, 0xc5, 0x51, 0x13, 0xfd, 0xb9, + 0xe0, 0x5e, 0x86, 0x49, 0xae, 0xe6, 0x94, 0xd2, 0xcc, 0xf9, 0xc4, 0xea, 0x49, 0x11, 0x6a, 0x74, + 0x1a, 0xb2, 0x0c, 0x53, 0xdc, 0xdb, 0xbb, 0x29, 0x22, 0x6d, 0xcf, 0x5f, 0xc0, 0x55, 0x8b, 0x5c, + 0xb8, 0x93, 0x78, 0x13, 0x13, 0xb0, 0xd8, 0x1a, 0x97, 0x18, 0x91, 0xf1, 0xc7, 0x19, 0xb8, 0xd0, + 0x63, 0xc4, 0xc3, 0x38, 0xcc, 0x99, 0xfe, 0x71, 0x98, 0xd9, 0xce, 0xa1, 0x6b, 0x45, 0xb0, 0xfd, + 0x42, 0xca, 0x52, 0xc7, 0x4b, 0xca, 0x5b, 0x2e, 0x10, 0x91, 0xe3, 0x48, 0x54, 0x7d, 0xcf, 0x45, + 0xd5, 0x6c, 0x2e, 0x79, 0x08, 0x09, 0x3c, 0xfe, 0x51, 0x4b, 0xc6, 0xc9, 0x71, 0xf1, 0x92, 0x48, + 0xa1, 0x14, 0x0e, 0xeb, 0x47, 0xae, 0xb6, 0x82, 0x53, 0x58, 0x1b, 0xc7, 0x19, 0x18, 0x57, 0xd6, + 0x21, 0xb9, 0xac, 0x78, 0x21, 0x17, 0x78, 0x12, 0x2e, 0x85, 0x43, 0x96, 0x9f, 0x44, 0xb8, 0xa8, + 0xb2, 0xa7, 0x2b, 0xa0, 0xd7, 0x98, 0x28, 0xa4, 0xc4, 0xaa, 0x6e, 0x69, 0xda, 0x62, 0x13, 0xcb, + 0x31, 0x9d, 0xbf, 0xed, 0x07, 0xa5, 0x7a, 0xe0, 0x3c, 0xa2, 0x03, 0x1c, 0x3a, 0x51, 0x3a, 0x7f, + 0xdb, 0x0f, 0x2c, 0x1b, 0xc9, 0x12, 0xe9, 0xfc, 0x43, 0x86, 0xc6, 0xf7, 0x67, 0x00, 0xb6, 0xaa, + 0x65, 0x0c, 0x36, 0xff, 0xa4, 0x42, 0x41, 0x7a, 0x00, 0x5f, 0xc9, 0xbd, 0x8f, 0x38, 0xf0, 0x3f, + 0x65, 0x60, 0x4a, 0x47, 0x23, 0xef, 0xc3, 0x74, 0xad, 0xee, 0xb9, 0xcd, 0xe6, 0x8e, 0x5d, 0x3f, + 0x58, 0x75, 0xda, 0x94, 0x87, 0x4e, 0x1d, 0xe6, 0x67, 0x91, 0x1f, 0x16, 0x59, 0x4d, 0x56, 0x66, + 0xc6, 0x91, 0xc9, 0x0f, 0x64, 0x60, 0xb2, 0xb6, 0xef, 0x1e, 0x86, 0xd1, 0x4e, 0xc5, 0x80, 0x7c, + 0x95, 0xad, 0x6d, 0x7f, 0xdf, 0x3d, 0x8c, 0x32, 0x78, 0x6a, 0xb6, 0xa2, 0xef, 0x0d, 0xf6, 0x8c, + 0x5f, 0x77, 0xf1, 0x26, 0x13, 0xf8, 0xd7, 0xb5, 0x4a, 0x4c, 0xbd, 0x4e, 0xe3, 0xcf, 0x32, 0x30, + 0x8e, 0x77, 0x9e, 0x66, 0x13, 0x65, 0xae, 0xef, 0xa6, 0x74, 0x90, 0x61, 0xbb, 0xfa, 0x0c, 0xec, + 0x5b, 0x30, 0x1d, 0x43, 0x23, 0x06, 0x8c, 0xd4, 0x30, 0xc0, 0x80, 0xaa, 0xa0, 0xe0, 0x21, 0x07, + 0x4c, 0x51, 0x62, 0x2c, 0x2b, 0x64, 0x0f, 0x6f, 0xe2, 0xb3, 0xee, 0x22, 0x80, 0x23, 0x41, 0xf2, + 0x66, 0x43, 0xe2, 0x5f, 0xf2, 0xf0, 0xa6, 0xa9, 0x60, 0x19, 0xeb, 0x30, 0x52, 0x73, 0xbd, 0x60, + 0xe9, 0x88, 0x5f, 0x26, 0x2a, 0xd4, 0xaf, 0xab, 0xef, 0xb6, 0x0e, 0xbe, 0x95, 0xd4, 0x4d, 0x51, + 0x44, 0x8a, 0x30, 0x7c, 0xc7, 0xa1, 0xcd, 0x86, 0x6a, 0xcf, 0xbb, 0xcb, 0x00, 0x26, 0x87, 0xb3, + 0x0b, 0xd7, 0xf9, 0x28, 0x27, 0x4b, 0x64, 0x38, 0xfc, 0xa4, 0xeb, 0xa6, 0xac, 0xf5, 0xef, 0x4b, + 0x61, 0x1e, 0x84, 0x64, 0x4d, 0x7d, 0xba, 0xfa, 0x1f, 0x66, 0x60, 0xa1, 0x37, 0x89, 0x6a, 0x8b, + 0x9c, 0xe9, 0x63, 0x8b, 0xfc, 0x6a, 0xfc, 0x9d, 0x11, 0xd1, 0xc4, 0x3b, 0x63, 0xf4, 0xba, 0x58, + 0x41, 0x53, 0xf0, 0x3a, 0x95, 0x89, 0x58, 0x2e, 0xf7, 0xf9, 0x66, 0x44, 0xe4, 0xc3, 0x1c, 0x20, + 0x8d, 0x29, 0x68, 0x8d, 0xdf, 0x1c, 0x82, 0x8b, 0x3d, 0x29, 0xc8, 0x8a, 0x92, 0xde, 0x69, 0x2a, + 0x4c, 0x2c, 0xd3, 0x13, 0xff, 0x3a, 0xfe, 0x8b, 0xd6, 0x7e, 0x71, 0x6f, 0xb7, 0x07, 0x61, 0x5a, + 0x9f, 0x2c, 0xf2, 0xfa, 0xd4, 0xa9, 0xbc, 0x38, 0x3a, 0x32, 0x83, 0x64, 0x86, 0x1f, 0xf4, 0x8b, + 0xa4, 0x81, 0xed, 0x34, 0x7d, 0x75, 0xd9, 0x35, 0x38, 0xc8, 0x94, 0x65, 0x91, 0x81, 0xf8, 0x50, + 0xba, 0x81, 0xb8, 0xf1, 0xaf, 0x33, 0x30, 0x16, 0x7e, 0x36, 0x59, 0x80, 0xf3, 0x9b, 0x66, 0xa9, + 0xbc, 0x6c, 0x6d, 0x7e, 0xb8, 0xb1, 0x6c, 0x6d, 0xad, 0xd7, 0x36, 0x96, 0xcb, 0xd5, 0x3b, 0xd5, + 0xe5, 0x4a, 0xe1, 0x39, 0x32, 0x03, 0x93, 0x5b, 0xeb, 0xf7, 0xd7, 0x1f, 0x6c, 0xaf, 0x5b, 0xcb, + 0xa6, 0xf9, 0xc0, 0x2c, 0x64, 0xc8, 0x24, 0x8c, 0x99, 0x4b, 0xa5, 0xb2, 0xb5, 0xfe, 0xa0, 0xb2, + 0x5c, 0xc8, 0x92, 0x02, 0x4c, 0x94, 0x1f, 0xac, 0xaf, 0x2f, 0x97, 0x37, 0xab, 0x0f, 0xab, 0x9b, + 0x1f, 0x16, 0x72, 0x84, 0xc0, 0x14, 0x22, 0x6c, 0x98, 0xd5, 0xf5, 0x72, 0x75, 0xa3, 0xb4, 0x5a, + 0x18, 0x62, 0x30, 0x86, 0xaf, 0xc0, 0x86, 0x43, 0x46, 0xf7, 0xb7, 0x96, 0x96, 0x0b, 0x23, 0x0c, + 0x85, 0xfd, 0xa5, 0xa0, 0x8c, 0xb2, 0xea, 0x11, 0xa5, 0x52, 0xda, 0x2c, 0x2d, 0x95, 0x6a, 0xcb, + 0x85, 0x3c, 0xb9, 0x00, 0xb3, 0x1a, 0xc8, 0x5a, 0x7d, 0x70, 0xb7, 0xba, 0x5e, 0x18, 0x23, 0x73, + 0x50, 0x08, 0x61, 0x95, 0x25, 0x6b, 0xab, 0xb6, 0x6c, 0x16, 0x20, 0x0e, 0x5d, 0x2f, 0xad, 0x2d, + 0x17, 0xc6, 0x8d, 0xf7, 0xb8, 0x1f, 0x22, 0xef, 0x6a, 0x72, 0x1e, 0x48, 0x6d, 0xb3, 0xb4, 0xb9, + 0x55, 0x8b, 0x35, 0x7e, 0x1c, 0x46, 0x6b, 0x5b, 0xe5, 0xf2, 0x72, 0xad, 0x56, 0xc8, 0x10, 0x80, + 0x91, 0x3b, 0xa5, 0xea, 0xea, 0x72, 0xa5, 0x90, 0x35, 0x7e, 0x32, 0x03, 0x33, 0x52, 0x02, 0x94, + 0x8f, 0x46, 0x4f, 0xb8, 0x16, 0xdf, 0xd7, 0x2e, 0xb6, 0xd2, 0x49, 0x2c, 0x56, 0x49, 0x9f, 0x65, + 0xf8, 0xf3, 0x19, 0x38, 0x97, 0x8a, 0x4d, 0x3e, 0x84, 0x82, 0xfc, 0x82, 0x35, 0x3b, 0xa8, 0xef, + 0x47, 0xfb, 0xd8, 0xa5, 0x58, 0x2d, 0x31, 0x34, 0xae, 0xd6, 0x8c, 0x12, 0x4e, 0x27, 0xd8, 0x0c, + 0x9e, 0x0e, 0xc1, 0xf8, 0x56, 0x06, 0x2e, 0xf4, 0xa8, 0x86, 0x94, 0x61, 0x24, 0x4c, 0x8c, 0xd3, + 0xc7, 0xe0, 0x6d, 0xee, 0xdb, 0xc7, 0x45, 0x81, 0x88, 0x19, 0x7a, 0xf1, 0x2f, 0x73, 0x24, 0xcc, + 0x74, 0x83, 0xe9, 0x66, 0x78, 0xf7, 0x5d, 0x8c, 0xf5, 0xbc, 0xa8, 0xa9, 0xb4, 0x5d, 0x5b, 0x1a, + 0x17, 0x7d, 0x97, 0xb3, 0x0f, 0x7d, 0xcc, 0x37, 0x63, 0xfc, 0x4c, 0x86, 0x09, 0x77, 0x71, 0x44, + 0x26, 0xf3, 0x96, 0x7c, 0xbf, 0xdb, 0xa2, 0xa6, 0xdb, 0xa4, 0x25, 0x73, 0x5d, 0x1c, 0x1b, 0x28, + 0xad, 0xda, 0x58, 0x80, 0xd7, 0x0a, 0xcb, 0xf6, 0xda, 0xda, 0x6b, 0xb5, 0x4a, 0x43, 0xde, 0x06, + 0x58, 0x7e, 0x1c, 0x50, 0xaf, 0x6d, 0x37, 0xc3, 0x18, 0x31, 0x3c, 0xb2, 0x95, 0x80, 0xea, 0xf2, + 0xb6, 0x82, 0x6c, 0xfc, 0x8d, 0x0c, 0x4c, 0x88, 0x4b, 0x53, 0xa9, 0x49, 0xbd, 0xe0, 0xc9, 0xa6, + 0xd7, 0xdb, 0xda, 0xf4, 0x0a, 0xfd, 0x3b, 0x14, 0xfe, 0xac, 0x38, 0x75, 0x66, 0xfd, 0xf3, 0x0c, + 0x14, 0xe2, 0x88, 0xe4, 0x7d, 0xc8, 0xd7, 0xe8, 0x23, 0xea, 0x39, 0xc1, 0x91, 0xd8, 0x28, 0x65, + 0x0a, 0x41, 0x8e, 0x23, 0xca, 0xf8, 0x7c, 0xf0, 0xc5, 0x2f, 0x33, 0xa4, 0x19, 0x74, 0xbf, 0x57, + 0xd4, 0x1e, 0xb9, 0xa7, 0xa5, 0xf6, 0x30, 0xfe, 0xb7, 0x2c, 0x5c, 0xb8, 0x4b, 0x03, 0xb5, 0x4d, + 0xa1, 0x79, 0xc1, 0xa7, 0x07, 0x6b, 0x97, 0xd2, 0x92, 0x79, 0x18, 0xc5, 0x22, 0x39, 0xbe, 0xa6, + 0xfc, 0x49, 0x96, 0xc2, 0x79, 0x9d, 0xd3, 0x72, 0x94, 0xf5, 0xa8, 0xfb, 0xba, 0x92, 0xb5, 0x28, + 0x9c, 0xd6, 0x57, 0x60, 0x0a, 0xc3, 0xf2, 0x77, 0xd9, 0x72, 0xa0, 0x0d, 0xa1, 0xfe, 0xc9, 0x9b, + 0x31, 0x28, 0x79, 0x1d, 0x0a, 0x0c, 0x52, 0xaa, 0x1f, 0xb4, 0xdd, 0xc3, 0x26, 0x6d, 0xec, 0xd1, + 0x06, 0x1e, 0xeb, 0x79, 0x33, 0x01, 0x97, 0x3c, 0xb7, 0xda, 0xfc, 0xea, 0x46, 0x1b, 0xa8, 0xa3, + 0x11, 0x3c, 0x23, 0xe8, 0xc2, 0xdb, 0x30, 0xfe, 0x31, 0x33, 0x90, 0x19, 0xff, 0x6b, 0x06, 0xe6, + 0xb0, 0x71, 0x4a, 0xc5, 0x32, 0x3b, 0xac, 0xec, 0x2d, 0x25, 0x29, 0x8f, 0xcd, 0x40, 0xfa, 0x52, + 0x08, 0x7b, 0x31, 0xd2, 0x09, 0x65, 0x07, 0xd0, 0x09, 0xd5, 0xce, 0x92, 0x09, 0x7f, 0x40, 0x95, + 0xd6, 0xbd, 0xa1, 0x7c, 0xae, 0x30, 0x14, 0x0d, 0xb9, 0xf1, 0x03, 0x59, 0x18, 0x35, 0x29, 0xa6, + 0x08, 0x27, 0x57, 0x60, 0x74, 0xdd, 0x0d, 0xa8, 0xbf, 0xa6, 0xe5, 0x83, 0x6f, 0x33, 0x90, 0xd5, + 0x6a, 0x98, 0xb2, 0x90, 0x4d, 0xf8, 0x0d, 0xcf, 0x6d, 0x74, 0xeb, 0x81, 0x3a, 0xe1, 0x3b, 0x1c, + 0x64, 0xca, 0x32, 0xf2, 0x06, 0x8c, 0x09, 0xce, 0xe1, 0xa3, 0x2e, 0xda, 0x2e, 0x7b, 0x34, 0x4c, + 0x31, 0x1f, 0x21, 0xa0, 0x4c, 0xcb, 0x05, 0x8c, 0x21, 0x45, 0xa6, 0x4d, 0xc8, 0x0c, 0x52, 0x54, + 0x1f, 0xee, 0x23, 0xaa, 0x7f, 0x1a, 0x46, 0x4a, 0xbe, 0x4f, 0x03, 0x19, 0x45, 0x61, 0x22, 0x0c, + 0x1b, 0xe7, 0xd3, 0x80, 0x33, 0xb6, 0xb1, 0xdc, 0x14, 0x78, 0xc6, 0xbf, 0xca, 0xc2, 0x30, 0xfe, + 0x89, 0x4f, 0xa6, 0x5e, 0x7d, 0x5f, 0x7b, 0x32, 0xf5, 0xea, 0xfb, 0x26, 0x42, 0xc9, 0x4d, 0xd4, + 0x54, 0xc8, 0xfc, 0x51, 0xa2, 0xf5, 0xa8, 0x82, 0x6f, 0x44, 0x60, 0x53, 0xc5, 0x09, 0x5f, 0xf8, + 0x73, 0xa9, 0xb1, 0x53, 0xce, 0x43, 0xf6, 0x41, 0x4d, 0xb4, 0x18, 0x23, 0x72, 0xb9, 0xbe, 0x99, + 0x7d, 0x50, 0xc3, 0xde, 0x58, 0x29, 0x2d, 0xbe, 0x75, 0x5b, 0x34, 0x94, 0xf7, 0xc6, 0xbe, 0xbd, + 0xf8, 0xd6, 0x6d, 0x53, 0x94, 0xb0, 0xfe, 0xc5, 0x6f, 0xc6, 0x87, 0x57, 0xee, 0xf3, 0x8f, 0xfd, + 0x8b, 0x6d, 0xc3, 0x47, 0x56, 0x33, 0x42, 0x20, 0x8b, 0x30, 0x2e, 0x62, 0x4d, 0x20, 0xbe, 0x12, + 0x0b, 0x42, 0xc4, 0xa2, 0xe0, 0x14, 0x2a, 0x12, 0x7f, 0x82, 0x13, 0x03, 0x24, 0xb3, 0xdc, 0x8a, + 0x27, 0x38, 0x39, 0x84, 0xbe, 0xa9, 0xa0, 0xb0, 0x4f, 0xe2, 0x6f, 0x78, 0x91, 0x2f, 0xff, 0x94, + 0x12, 0xb4, 0x00, 0xd3, 0x2c, 0x84, 0x08, 0xc6, 0x2f, 0x67, 0x21, 0xbf, 0xd1, 0xec, 0xee, 0x39, + 0xed, 0x87, 0x37, 0x09, 0x01, 0xbc, 0xc6, 0xc9, 0x3c, 0x1c, 0xec, 0x6f, 0x72, 0x11, 0xf2, 0xf2, + 0xe6, 0x26, 0x37, 0x24, 0x5f, 0xdc, 0xda, 0xe6, 0x41, 0x8e, 0xbb, 0x08, 0xbd, 0x26, 0x7f, 0x92, + 0x9b, 0x10, 0xde, 0xbf, 0x7a, 0x5d, 0xd4, 0x86, 0xd8, 0x62, 0x31, 0x43, 0x34, 0xf2, 0x26, 0xe0, + 0x21, 0x21, 0x2e, 0x0f, 0x52, 0xa1, 0xcd, 0x3f, 0x4d, 0xc8, 0x29, 0x9c, 0x04, 0xd1, 0xc8, 0x2d, + 0x10, 0x13, 0x53, 0x64, 0x53, 0x3f, 0xa7, 0x13, 0xf0, 0xfc, 0x94, 0x92, 0x44, 0xa0, 0x92, 0x77, + 0x61, 0xbc, 0xee, 0x51, 0x7c, 0x75, 0xb4, 0x9b, 0x51, 0x92, 0x74, 0x95, 0xb2, 0x1c, 0x95, 0x3f, + 0xbc, 0x69, 0xaa, 0xe8, 0xc6, 0x2f, 0xe7, 0x61, 0x42, 0xfd, 0x1e, 0x62, 0xc2, 0xac, 0xdf, 0x64, + 0x77, 0x77, 0x61, 0x6c, 0xd6, 0xc1, 0x42, 0x71, 0x9c, 0x5e, 0xd6, 0x3f, 0x88, 0xe1, 0x71, 0xcb, + 0x33, 0x19, 0x24, 0x63, 0xe5, 0x39, 0x73, 0xc6, 0x8f, 0xc0, 0x1c, 0x8f, 0x94, 0x20, 0xef, 0x76, + 0xfc, 0x3d, 0xda, 0x76, 0xe4, 0x7b, 0xcb, 0xcb, 0x1a, 0xa3, 0x07, 0xa2, 0x30, 0xc1, 0x2b, 0x24, + 0x23, 0x6f, 0xc1, 0x88, 0xdb, 0xa1, 0x6d, 0xdb, 0x11, 0x67, 0xdc, 0xf3, 0x31, 0x06, 0xb4, 0x5d, + 0xaa, 0x2a, 0x84, 0x02, 0x99, 0xdc, 0x80, 0x21, 0xf7, 0x20, 0x1c, 0xaf, 0x8b, 0x3a, 0xd1, 0x41, + 0x60, 0x2b, 0x24, 0x88, 0xc8, 0x08, 0x3e, 0xb2, 0x5b, 0xbb, 0x62, 0xc4, 0x74, 0x82, 0x7b, 0x76, + 0x6b, 0x57, 0x25, 0x60, 0x88, 0xe4, 0x03, 0x80, 0x8e, 0xbd, 0x47, 0x3d, 0xab, 0xd1, 0x0d, 0x8e, + 0xc4, 0xb8, 0x5d, 0xd2, 0xc8, 0x36, 0x58, 0x71, 0xa5, 0x1b, 0x1c, 0x29, 0xb4, 0x63, 0x1d, 0x09, + 0x24, 0x25, 0x80, 0x96, 0x1d, 0x04, 0xd4, 0x6b, 0xb9, 0xc2, 0xda, 0x2f, 0x0a, 0x82, 0xc8, 0x19, + 0xac, 0x85, 0xc5, 0x0a, 0x07, 0x85, 0x08, 0x3f, 0xda, 0xf1, 0x6c, 0x91, 0xd3, 0x3e, 0xf6, 0xd1, + 0x8e, 0xa7, 0xb5, 0x92, 0x21, 0x92, 0xcf, 0xc1, 0x68, 0xc3, 0xf1, 0xeb, 0xae, 0xd7, 0x10, 0xd1, + 0x53, 0x5e, 0xd0, 0x68, 0x2a, 0xbc, 0x4c, 0x21, 0x93, 0xe8, 0xec, 0x6b, 0x45, 0x10, 0xd4, 0x75, + 0xf7, 0x10, 0xd5, 0xfc, 0xf1, 0xaf, 0xad, 0x85, 0xc5, 0xea, 0xd7, 0x46, 0x44, 0x6c, 0x28, 0xf7, + 0x9c, 0xa0, 0x69, 0xef, 0x88, 0x77, 0x6e, 0x7d, 0x28, 0xef, 0x62, 0x91, 0x3a, 0x94, 0x1c, 0x99, + 0xbc, 0x0d, 0x79, 0xda, 0x0e, 0x3c, 0xdb, 0x72, 0x1a, 0xc2, 0xa9, 0x52, 0xff, 0x68, 0x76, 0x00, + 0xdb, 0xd5, 0x8a, 0xfa, 0xd1, 0x88, 0x5f, 0x6d, 0xb0, 0xfe, 0xf1, 0xeb, 0x4e, 0x4b, 0xf8, 0x42, + 0xea, 0xfd, 0x53, 0x2b, 0x57, 0xd7, 0xd4, 0xfe, 0x61, 0x88, 0xe4, 0x7d, 0x18, 0x65, 0xeb, 0xb7, + 0xe1, 0xee, 0x89, 0x80, 0x14, 0x86, 0xde, 0x3f, 0xbc, 0x2c, 0x31, 0x5d, 0x25, 0x11, 0x5b, 0xc8, + 0xf6, 0xa1, 0x6f, 0x39, 0x75, 0x11, 0x64, 0x42, 0x5f, 0x8e, 0xa5, 0xed, 0x5a, 0xb5, 0xac, 0x90, + 0x0d, 0xdb, 0x87, 0x7e, 0xb5, 0x4e, 0x16, 0x61, 0x18, 0x53, 0x54, 0x88, 0x40, 0x98, 0x3a, 0x0d, + 0x26, 0xa7, 0x50, 0x69, 0x10, 0x95, 0x0d, 0x64, 0xcb, 0x47, 0xf7, 0x12, 0x91, 0x28, 0x42, 0xef, + 0x93, 0xb5, 0x1a, 0xfa, 0x9c, 0xa8, 0x9f, 0x28, 0xd0, 0xc9, 0x25, 0x80, 0xe8, 0x15, 0x9f, 0xbf, + 0xb9, 0x98, 0x0a, 0xe4, 0xf3, 0x43, 0xff, 0xe7, 0x2f, 0x16, 0x33, 0x4b, 0x00, 0x79, 0x19, 0x21, + 0xc7, 0x58, 0x85, 0x8b, 0x3d, 0xd7, 0x3d, 0xb9, 0x06, 0x85, 0x5d, 0x5b, 0x68, 0xfd, 0xea, 0xfb, + 0x76, 0xbb, 0xfd, 0xff, 0xb3, 0xf7, 0x2d, 0x31, 0x6e, 0x64, 0xd7, 0xa1, 0x2a, 0x92, 0xdd, 0xcd, + 0x3e, 0xec, 0x4f, 0xf5, 0xd5, 0xa7, 0x7b, 0x5a, 0x1a, 0x69, 0x54, 0xa3, 0x91, 0x25, 0x8e, 0x67, + 0x6c, 0x69, 0xde, 0x78, 0x66, 0x6c, 0x8f, 0xc7, 0xd5, 0xec, 0xea, 0x26, 0x25, 0xfe, 0x5c, 0x45, + 0xb6, 0x2c, 0xcb, 0x76, 0xb9, 0x44, 0x56, 0x77, 0x97, 0xcd, 0x66, 0xd1, 0x2c, 0x72, 0x64, 0x19, + 0x0f, 0x78, 0x36, 0x1e, 0x60, 0x03, 0xef, 0x25, 0x71, 0xe2, 0x24, 0xc8, 0x20, 0x1b, 0x2f, 0x62, + 0x04, 0x59, 0x64, 0x1b, 0x24, 0x88, 0xb3, 0xf1, 0xce, 0x80, 0x61, 0xc0, 0x40, 0x76, 0x4e, 0x30, + 0x48, 0x06, 0x48, 0x80, 0x7c, 0x76, 0x41, 0xb2, 0xf0, 0x2a, 0xb8, 0xe7, 0xde, 0x5b, 0x75, 0xeb, + 0x43, 0xaa, 0xe5, 0x19, 0x27, 0x31, 0xe0, 0x55, 0x37, 0xcf, 0x3d, 0xe7, 0xd4, 0xfd, 0xdf, 0x73, + 0xcf, 0x3d, 0x1f, 0x77, 0xc0, 0x77, 0xdc, 0x75, 0x01, 0xaf, 0x30, 0x30, 0xe3, 0xac, 0xbd, 0x05, + 0xe7, 0xb2, 0x06, 0x9c, 0x5c, 0x85, 0x15, 0x39, 0x18, 0x10, 0x67, 0x52, 0x72, 0x46, 0x9e, 0x08, + 0x07, 0xc4, 0x19, 0xfc, 0x40, 0x81, 0x4b, 0xf3, 0xb6, 0x0f, 0xb2, 0x0d, 0xc5, 0xd1, 0xd8, 0xf3, + 0x51, 0x4c, 0xe5, 0xd9, 0x16, 0xc4, 0x6f, 0x4c, 0xa4, 0x80, 0xf2, 0xd4, 0xc4, 0x39, 0xe2, 0x0e, + 0x1e, 0xe6, 0x32, 0x42, 0x3a, 0xce, 0x51, 0x40, 0x5e, 0x84, 0x8d, 0xbe, 0x7b, 0xe8, 0x4c, 0x07, + 0x13, 0x3b, 0xe8, 0x1d, 0xbb, 0x7d, 0x74, 0xc1, 0x42, 0xc3, 0x3d, 0x53, 0xe5, 0x05, 0x96, 0x80, + 0xa7, 0x6a, 0xbc, 0x30, 0xa3, 0xc6, 0x77, 0x0a, 0x45, 0x45, 0xcd, 0x99, 0x68, 0x29, 0xa5, 0x7d, + 0x23, 0x07, 0x5b, 0xb3, 0xd6, 0x0b, 0x79, 0x33, 0xab, 0x0f, 0xd8, 0xc3, 0x85, 0x0c, 0x97, 0x1f, + 0x2e, 0xa4, 0xaf, 0x91, 0xdb, 0x10, 0x3a, 0x50, 0x3d, 0x29, 0x18, 0x82, 0x80, 0x51, 0x9a, 0x91, + 0x13, 0x04, 0x8f, 0xe8, 0x96, 0x90, 0x97, 0x02, 0xea, 0x72, 0x98, 0x4c, 0x23, 0x60, 0xe4, 0x35, + 0x80, 0xde, 0xc0, 0x0f, 0x5c, 0xb4, 0x0f, 0xe0, 0xb2, 0x06, 0x33, 0x0b, 0x0f, 0xa1, 0xf2, 0x83, + 0x30, 0x42, 0x2b, 0x7e, 0xdf, 0xe5, 0x03, 0xe8, 0xc0, 0xe6, 0x8c, 0x0d, 0x92, 0x0e, 0x4f, 0x94, + 0x9d, 0x5e, 0xe4, 0xba, 0x9a, 0x86, 0x39, 0xea, 0x93, 0x3d, 0x9e, 0x9b, 0x35, 0x47, 0x1e, 0x03, + 0x49, 0xef, 0x82, 0x94, 0x3b, 0x37, 0x6e, 0x9e, 0x8e, 0x43, 0xee, 0x0c, 0xd2, 0x1d, 0x0f, 0xc8, + 0x15, 0x28, 0x89, 0x5c, 0x96, 0x54, 0x96, 0x67, 0xcc, 0x81, 0x83, 0xee, 0xba, 0x38, 0x79, 0x30, + 0x62, 0x2a, 0xba, 0xc9, 0x71, 0x29, 0x61, 0x19, 0x21, 0x9d, 0xc7, 0x23, 0xd1, 0xba, 0x4b, 0x62, + 0x7e, 0xc7, 0xcf, 0x26, 0x5e, 0xfa, 0xfb, 0x8a, 0x18, 0xfe, 0xf4, 0xe6, 0xfe, 0xa4, 0xfa, 0x11, + 0x40, 0x2f, 0x25, 0x5e, 0x31, 0xfc, 0x9f, 0x4a, 0x2d, 0x62, 0xd5, 0x71, 0xa9, 0x85, 0xff, 0x24, + 0xd7, 0x61, 0x7d, 0xcc, 0xec, 0x58, 0x27, 0x3e, 0xef, 0x4f, 0x96, 0x37, 0x64, 0x95, 0x81, 0x3b, + 0x3e, 0xf6, 0x29, 0xaf, 0xd7, 0x9d, 0xb0, 0xc3, 0xa4, 0xb3, 0x8e, 0xbc, 0x0c, 0xcb, 0xf4, 0xac, + 0xc3, 0x48, 0x3b, 0x09, 0xf7, 0x08, 0xc4, 0x43, 0xc9, 0xc1, 0x2c, 0x7e, 0x99, 0xff, 0xcf, 0x79, + 0xbd, 0x93, 0x13, 0xcc, 0xe4, 0x93, 0x96, 0x6c, 0xc2, 0x92, 0x3f, 0x3e, 0x92, 0x9a, 0xb6, 0xe8, + 0x8f, 0x8f, 0x68, 0xbb, 0x6e, 0x80, 0xca, 0xbc, 0x75, 0x58, 0xd4, 0x84, 0xe0, 0xf1, 0x90, 0x5d, + 0xc5, 0x8b, 0xe6, 0x1a, 0x83, 0x63, 0xc2, 0xfe, 0xc7, 0xc3, 0x1e, 0xc5, 0x0c, 0x02, 0xdf, 0x96, + 0x03, 0x6c, 0xf1, 0x66, 0xaf, 0x05, 0x81, 0x1f, 0x45, 0xda, 0xea, 0x93, 0x1d, 0x58, 0xa5, 0x7c, + 0xc2, 0x30, 0x5f, 0x5c, 0x10, 0x78, 0x36, 0x2d, 0x08, 0x3c, 0x1e, 0xf6, 0x44, 0x15, 0xcd, 0x95, + 0x40, 0xfa, 0x45, 0xee, 0x82, 0x2a, 0x49, 0x4c, 0xe8, 0xbe, 0x99, 0xb0, 0xa9, 0x8e, 0xd8, 0x48, + 0x92, 0x56, 0x6d, 0x78, 0xe8, 0x9b, 0xeb, 0xbd, 0x38, 0x80, 0x77, 0xcd, 0xf7, 0x14, 0xb1, 0x97, + 0x66, 0x10, 0x11, 0x0d, 0x56, 0x8f, 0x9d, 0xc0, 0x0e, 0x82, 0x13, 0x66, 0x23, 0xc6, 0x03, 0x0b, + 0x97, 0x8e, 0x9d, 0xc0, 0x0a, 0x4e, 0x44, 0xe2, 0x92, 0xf3, 0x14, 0xc7, 0x77, 0xa6, 0x93, 0x63, + 0x5b, 0x96, 0xff, 0x58, 0x8f, 0x9d, 0x3d, 0x76, 0x82, 0x16, 0x2d, 0x93, 0x78, 0x93, 0x6b, 0xb0, + 0x86, 0x7c, 0x7b, 0x9e, 0x60, 0x8c, 0x91, 0x2f, 0xcc, 0x15, 0xca, 0xb8, 0xe7, 0x31, 0xce, 0xbc, + 0x86, 0xff, 0x94, 0x83, 0x0b, 0xd9, 0xbd, 0x83, 0xd3, 0x93, 0xf6, 0x29, 0xfa, 0xe8, 0xf1, 0xba, + 0x2d, 0x53, 0x08, 0x8b, 0x5a, 0x92, 0x35, 0x38, 0xb9, 0xcc, 0xc1, 0x29, 0xc3, 0x06, 0x32, 0xe2, + 0x92, 0xe6, 0xc0, 0x0b, 0x26, 0x3c, 0x18, 0x87, 0xb9, 0x4e, 0x0b, 0xd8, 0x7e, 0x5e, 0xa7, 0x60, + 0xf2, 0x02, 0xac, 0x89, 0x1d, 0xd9, 0x7f, 0x34, 0xa4, 0x1f, 0x66, 0xdb, 0xf1, 0x2a, 0x87, 0xb6, + 0x10, 0x48, 0xce, 0xc3, 0xa2, 0x33, 0x1a, 0xd1, 0x4f, 0xb2, 0x5d, 0x78, 0xc1, 0x19, 0x8d, 0x58, + 0x72, 0x1d, 0xf4, 0x48, 0xb4, 0x0f, 0xd1, 0x4a, 0x88, 0x9b, 0x24, 0x9a, 0x2b, 0x08, 0x64, 0x96, + 0x43, 0x01, 0x5d, 0xf7, 0x94, 0x56, 0xa0, 0x2c, 0x21, 0x0a, 0x38, 0xa3, 0x10, 0xe1, 0x19, 0x28, + 0x8a, 0xf7, 0x6a, 0xe6, 0x58, 0x61, 0x2e, 0x39, 0xfc, 0xad, 0xfa, 0x55, 0xd8, 0xec, 0x7b, 0x01, + 0x4e, 0x5e, 0xd6, 0xa4, 0xd1, 0x88, 0xfb, 0x40, 0xb2, 0x20, 0xbd, 0xe6, 0x39, 0x5e, 0x4c, 0x7b, + 0x52, 0x1f, 0x8d, 0x98, 0x27, 0x24, 0xef, 0xeb, 0xd7, 0x61, 0x9d, 0x4b, 0x5c, 0xfc, 0x88, 0xc4, + 0xba, 0xf0, 0x05, 0x4c, 0xaf, 0x42, 0x3c, 0x9d, 0x11, 0x70, 0x50, 0xad, 0x2f, 0x28, 0xff, 0x56, + 0x81, 0xf3, 0x99, 0x22, 0x1b, 0xf9, 0x12, 0x30, 0x97, 0xaf, 0x89, 0x6f, 0x8f, 0xdd, 0x9e, 0x37, + 0xf2, 0x30, 0x86, 0x06, 0x53, 0x69, 0xde, 0x9e, 0x27, 0xec, 0xa1, 0xfb, 0x58, 0xc7, 0x37, 0x43, + 0x22, 0xa6, 0x6b, 0x51, 0xc7, 0x09, 0xf0, 0xf6, 0x03, 0x38, 0x9f, 0x89, 0x9a, 0xa1, 0x03, 0xf9, + 0x70, 0x3c, 0x99, 0xb4, 0x78, 0xa4, 0x4a, 0x34, 0x5a, 0xd2, 0x8d, 0xf0, 0xe6, 0xfd, 0x30, 0x6c, + 0x5e, 0x42, 0xb8, 0x23, 0x46, 0x72, 0x5d, 0x67, 0xdd, 0x4f, 0x04, 0xd1, 0xec, 0xa5, 0xfd, 0x00, + 0xce, 0xf3, 0xc9, 0x77, 0x34, 0x76, 0x46, 0xc7, 0x11, 0x3b, 0x56, 0xd1, 0x0f, 0x65, 0xb1, 0x63, + 0xb3, 0x72, 0x9f, 0xe2, 0x87, 0x5c, 0xcf, 0x3a, 0x69, 0x20, 0x6f, 0xc3, 0x37, 0x73, 0x62, 0xa9, + 0x67, 0x54, 0x27, 0x63, 0x5a, 0x2b, 0x59, 0xd3, 0xfa, 0xf4, 0x6b, 0xaa, 0x09, 0x44, 0xde, 0xac, + 0x98, 0xd6, 0x93, 0x1b, 0x54, 0x09, 0x39, 0x9d, 0x57, 0x44, 0xda, 0x1a, 0x2c, 0x96, 0xcc, 0x73, + 0xa3, 0x97, 0x04, 0x91, 0x8b, 0xb0, 0x1c, 0xe6, 0xcb, 0xe6, 0x07, 0x47, 0x91, 0x01, 0x6a, 0x7d, + 0xf2, 0x1c, 0xac, 0x30, 0x91, 0x3c, 0xb6, 0xe6, 0x00, 0x61, 0x3a, 0x5d, 0x78, 0xa2, 0x0f, 0x14, + 0x78, 0xee, 0x49, 0x7d, 0x48, 0xee, 0xc1, 0x05, 0x34, 0xeb, 0x08, 0xfc, 0x70, 0x18, 0xec, 0x9e, + 0xd3, 0x3b, 0x76, 0xf9, 0xac, 0xd5, 0x32, 0x07, 0x63, 0x34, 0xb2, 0xac, 0x96, 0x34, 0x0e, 0xa3, + 0x91, 0x15, 0xf8, 0xe2, 0x77, 0x85, 0x92, 0xf3, 0x3a, 0xf4, 0xe1, 0xe2, 0x1c, 0x4a, 0x69, 0xe3, + 0x50, 0xe4, 0x8d, 0xe3, 0x06, 0xa8, 0x87, 0x6e, 0x9f, 0xca, 0xc4, 0x6e, 0x1f, 0xab, 0xf6, 0xf6, + 0x6d, 0x96, 0x21, 0xde, 0x5c, 0x0b, 0xe1, 0x56, 0xe0, 0x1f, 0xdc, 0xe6, 0x5f, 0x39, 0x11, 0x47, + 0x9e, 0x7c, 0xad, 0x20, 0x2f, 0xc3, 0xd9, 0x44, 0x7c, 0x92, 0xc8, 0xe1, 0xdd, 0xdc, 0xa0, 0x45, + 0xf1, 0x68, 0x56, 0x57, 0x61, 0x45, 0xcc, 0x8a, 0x71, 0xe8, 0x07, 0x67, 0x96, 0x38, 0x8c, 0xae, + 0x3a, 0xfe, 0xb9, 0xa9, 0x68, 0x54, 0xe6, 0x8d, 0xe4, 0x14, 0xb2, 0x34, 0x79, 0x09, 0x48, 0x28, + 0xb7, 0x87, 0x1b, 0x05, 0xff, 0xe0, 0x86, 0x28, 0x09, 0x57, 0x38, 0xff, 0xec, 0x5f, 0xe5, 0xe0, + 0x6c, 0xc6, 0x55, 0x86, 0x5e, 0x02, 0xbc, 0xe1, 0xc4, 0x3d, 0x62, 0x57, 0x08, 0xb9, 0x91, 0xeb, + 0x12, 0x9c, 0xeb, 0xa7, 0x16, 0x59, 0x06, 0x74, 0xfe, 0x2d, 0xfe, 0x8b, 0x6e, 0x1e, 0xce, 0x58, + 0xa8, 0x5e, 0xe8, 0xbf, 0xa4, 0x06, 0x1b, 0x98, 0xd6, 0x21, 0xf0, 0x7c, 0xcc, 0x0e, 0x81, 0x42, + 0x48, 0x21, 0x76, 0xd9, 0xc1, 0x5a, 0xb4, 0x25, 0x24, 0x2a, 0x85, 0x98, 0xea, 0x28, 0x01, 0x21, + 0x9f, 0x80, 0x6d, 0xe9, 0xac, 0xb1, 0x13, 0x2b, 0x0f, 0x2d, 0xdd, 0xcd, 0x4d, 0x27, 0x3c, 0x75, + 0x76, 0x63, 0x6b, 0x70, 0x07, 0x2e, 0xe3, 0x20, 0x7a, 0xfd, 0x91, 0x9d, 0xca, 0x03, 0x82, 0x4d, + 0x65, 0x81, 0xf3, 0xb7, 0x29, 0x56, 0xad, 0x3f, 0x4a, 0xa4, 0x04, 0xa1, 0xad, 0xe6, 0xdd, 0xf7, + 0x00, 0xce, 0x67, 0xd6, 0x98, 0x1e, 0x30, 0x68, 0x48, 0x15, 0xc9, 0x46, 0x4b, 0xf4, 0x37, 0x15, + 0x8e, 0xae, 0xc2, 0xca, 0x43, 0xd7, 0x19, 0xbb, 0x63, 0x7e, 0x72, 0xf3, 0x29, 0xc1, 0x60, 0xf2, + 0xc1, 0xdd, 0x8f, 0x0f, 0x0d, 0xd7, 0x19, 0x91, 0x06, 0x9c, 0x65, 0x27, 0xa0, 0x77, 0x82, 0xc2, + 0x20, 0xd7, 0x33, 0x29, 0x31, 0x71, 0x08, 0x49, 0xf0, 0x68, 0xaa, 0x21, 0x16, 0xa3, 0x36, 0x37, + 0x8e, 0x92, 0x20, 0xba, 0xa2, 0x2f, 0x64, 0x63, 0x93, 0x1d, 0x28, 0x31, 0xe6, 0xec, 0x5a, 0xc0, + 0x1e, 0x08, 0xae, 0xce, 0xfd, 0x42, 0x05, 0xed, 0x8b, 0x83, 0xf0, 0x7f, 0x7a, 0x5e, 0xe3, 0x5b, + 0xac, 0x7d, 0x22, 0xbf, 0x7f, 0x98, 0x2b, 0x08, 0xe4, 0xef, 0x1e, 0xda, 0x5f, 0x2b, 0xa2, 0xa9, + 0xb1, 0xcb, 0x31, 0x9d, 0x5a, 0x81, 0x3b, 0x14, 0x6f, 0x40, 0xcb, 0x26, 0xff, 0xf5, 0x94, 0x53, + 0x9d, 0xbc, 0x06, 0x2b, 0x94, 0xed, 0xd1, 0x74, 0xc8, 0xa6, 0x5c, 0x3e, 0x16, 0x97, 0xa7, 0xc1, + 0x8a, 0xe8, 0xb0, 0x55, 0xcf, 0x98, 0xa5, 0x93, 0xe8, 0x27, 0x95, 0x96, 0x83, 0x93, 0xc9, 0x48, + 0x9e, 0xa8, 0x42, 0x51, 0x68, 0x35, 0x3a, 0x6d, 0x4e, 0x52, 0xa4, 0x38, 0x91, 0xb4, 0xbc, 0xb3, + 0xc8, 0x54, 0x85, 0xda, 0x8b, 0x50, 0x92, 0x78, 0xd3, 0xc6, 0x30, 0xcf, 0x19, 0xd1, 0x18, 0xf6, + 0x8b, 0x0f, 0xf6, 0x43, 0x28, 0x0a, 0x96, 0xf4, 0x5a, 0x70, 0xec, 0x07, 0x62, 0x91, 0xe3, 0xff, + 0x14, 0x46, 0x7b, 0x19, 0x1b, 0xb9, 0x60, 0xe2, 0xff, 0x78, 0x96, 0x4c, 0x1c, 0x7a, 0x1f, 0x18, + 0x04, 0xf6, 0x08, 0x2d, 0xb0, 0x42, 0xe1, 0x99, 0xc2, 0x3b, 0x83, 0x80, 0xd9, 0x65, 0xf1, 0x6f, + 0xfc, 0x45, 0x78, 0x08, 0x27, 0xb4, 0x09, 0xb3, 0xf6, 0xcc, 0xd8, 0x91, 0x91, 0x4b, 0x1f, 0x19, + 0x2c, 0xde, 0x0a, 0xa7, 0x64, 0x5f, 0x06, 0x84, 0xe1, 0x91, 0x21, 0xed, 0x0c, 0x85, 0xd8, 0xce, + 0x20, 0xdd, 0xc9, 0xa3, 0xd1, 0x63, 0x27, 0x8e, 0xb8, 0x93, 0x27, 0xf7, 0xa9, 0x3f, 0xce, 0x09, + 0x15, 0xc1, 0x8e, 0xef, 0x4f, 0x82, 0xc9, 0xd8, 0x19, 0xc5, 0x54, 0xa1, 0xe4, 0x04, 0x9e, 0x41, + 0x09, 0xfa, 0x36, 0xa6, 0xd0, 0xf0, 0xc7, 0x22, 0xc4, 0x47, 0x38, 0x73, 0x4b, 0xb7, 0x3f, 0x12, + 0x97, 0xf1, 0x75, 0x8a, 0xad, 0xcb, 0xc8, 0x74, 0xc2, 0x4a, 0x5c, 0xab, 0x67, 0xcc, 0x4d, 0xc6, + 0x33, 0x85, 0x45, 0xaa, 0x19, 0x8b, 0x38, 0xa9, 0x0b, 0xdd, 0x89, 0x56, 0x74, 0x9c, 0xab, 0xbc, + 0xd6, 0xc9, 0xa7, 0x60, 0xd9, 0xeb, 0xcb, 0x99, 0x22, 0x93, 0x5a, 0xb8, 0x5a, 0x9f, 0x45, 0xab, + 0x8e, 0x78, 0xd0, 0x39, 0xe7, 0x71, 0xe8, 0xce, 0x6a, 0x4c, 0x69, 0xac, 0xed, 0x88, 0xdb, 0x68, + 0x9a, 0x8c, 0xac, 0x41, 0x2e, 0x1c, 0xe1, 0x9c, 0xd7, 0x67, 0xcb, 0x2b, 0x8a, 0x97, 0x6d, 0xf2, + 0x5f, 0xda, 0xff, 0x86, 0x1b, 0xa7, 0xed, 0x23, 0xba, 0x14, 0x67, 0x74, 0xf8, 0x32, 0x0b, 0x55, + 0x19, 0xef, 0xb7, 0xab, 0x20, 0x87, 0xfb, 0xf5, 0xc4, 0xe6, 0x27, 0x60, 0xdd, 0xb1, 0xa7, 0xfd, + 0x79, 0x1e, 0xd6, 0xe2, 0x6a, 0x72, 0xf2, 0x22, 0x14, 0xa4, 0x1d, 0x68, 0x33, 0x43, 0x97, 0x8e, + 0xfb, 0x0e, 0x22, 0x9d, 0x6a, 0xc7, 0x21, 0x77, 0x60, 0x0d, 0x0d, 0xf7, 0x50, 0xf4, 0x9c, 0x78, + 0xfc, 0xf1, 0x65, 0xfe, 0xfb, 0x59, 0xf1, 0x47, 0xef, 0x5e, 0x39, 0x83, 0x4f, 0x65, 0x2b, 0x94, + 0x96, 0x4a, 0x7f, 0xb4, 0x50, 0xd2, 0x82, 0x16, 0x66, 0x6b, 0x41, 0x79, 0x53, 0x66, 0x68, 0x41, + 0x17, 0xe6, 0x68, 0x41, 0x23, 0x4a, 0x59, 0x0b, 0x8a, 0xba, 0xf0, 0xa5, 0x59, 0xba, 0xf0, 0x88, + 0x86, 0xe9, 0xc2, 0x23, 0x2d, 0x66, 0x71, 0xa6, 0x16, 0x33, 0xa2, 0xe1, 0x5a, 0xcc, 0x6b, 0xbc, + 0x8f, 0xc6, 0xce, 0x23, 0x1b, 0x3b, 0x8f, 0x1f, 0x8b, 0xd8, 0x7a, 0xd3, 0x79, 0x84, 0xc6, 0x35, + 0x3b, 0xcb, 0x20, 0x2c, 0x72, 0xb4, 0xdf, 0x55, 0x12, 0x9a, 0x40, 0x31, 0x7e, 0x2f, 0xc0, 0x1a, + 0x3b, 0xac, 0x78, 0x38, 0x53, 0x76, 0x5a, 0xad, 0x9a, 0xab, 0x02, 0xca, 0xee, 0x9b, 0x1f, 0x82, + 0xf5, 0x10, 0x8d, 0x5f, 0xb9, 0xd0, 0x53, 0xcf, 0x0c, 0xa9, 0x79, 0xd8, 0x99, 0x17, 0x61, 0x23, + 0x44, 0xe4, 0xda, 0x1c, 0x76, 0xdd, 0x5c, 0x35, 0x55, 0x51, 0xd0, 0xe6, 0x70, 0xed, 0x28, 0x79, + 0xf3, 0xf8, 0x25, 0xd5, 0x4a, 0xfb, 0x61, 0x3e, 0xa6, 0x25, 0x11, 0x9f, 0xa1, 0xa7, 0x68, 0xe0, + 0xdb, 0xbc, 0x93, 0xf8, 0x5e, 0x74, 0x75, 0xc6, 0x98, 0x71, 0x9b, 0x26, 0xcb, 0x6a, 0x99, 0x10, + 0x04, 0xbe, 0x30, 0x71, 0xb2, 0x99, 0x44, 0xcd, 0xce, 0x7d, 0x9c, 0xb3, 0x82, 0x1d, 0xdb, 0x78, + 0xca, 0xf3, 0xd9, 0x89, 0x6b, 0x2a, 0x9d, 0xb2, 0x28, 0x59, 0x87, 0xbf, 0xc4, 0x07, 0xba, 0x80, + 0x4a, 0xc5, 0x20, 0xce, 0x3c, 0x9f, 0x71, 0x77, 0x4a, 0x31, 0xc7, 0x5e, 0x42, 0xce, 0xea, 0x54, + 0xfc, 0x2b, 0xd8, 0x1a, 0xb0, 0x82, 0x3a, 0x0a, 0xc1, 0xb0, 0x90, 0xa1, 0x82, 0x4f, 0x37, 0xbe, + 0x52, 0x6b, 0x98, 0x25, 0x4a, 0x27, 0xd8, 0x1c, 0xc3, 0x33, 0xb2, 0x66, 0x21, 0x5e, 0xc9, 0x05, + 0x11, 0xc5, 0x77, 0x6e, 0x0f, 0x44, 0x0a, 0x08, 0xac, 0xea, 0x05, 0x27, 0x0e, 0xe0, 0x68, 0xda, + 0x31, 0x6c, 0xcf, 0x1e, 0x92, 0x39, 0x19, 0xa2, 0xa2, 0x03, 0x34, 0x27, 0x1f, 0xa0, 0xb2, 0x9e, + 0x21, 0x1f, 0xd3, 0x33, 0x68, 0x7f, 0x94, 0x87, 0xe7, 0x4f, 0x31, 0x5c, 0x73, 0xbe, 0xf9, 0xe9, + 0xb8, 0x78, 0x96, 0x8b, 0xdd, 0x0c, 0x29, 0x53, 0xbe, 0x41, 0xd2, 0x5b, 0x6a, 0xb6, 0x70, 0xf6, + 0x25, 0x58, 0x67, 0xbb, 0x20, 0x33, 0x4b, 0x3c, 0x9c, 0x0e, 0x4e, 0xb1, 0x0d, 0x5e, 0x14, 0x3e, + 0x54, 0x09, 0x52, 0xdc, 0x19, 0x71, 0xc7, 0xb0, 0x42, 0x18, 0xe9, 0x40, 0x09, 0xd1, 0x0e, 0x1d, + 0x6f, 0x70, 0x2a, 0x67, 0x1e, 0xe1, 0xa1, 0x25, 0x93, 0x31, 0x6b, 0x6a, 0x0a, 0xd8, 0xc3, 0xdf, + 0xe4, 0x3a, 0xac, 0x0f, 0xa7, 0x27, 0x54, 0xf0, 0x60, 0x73, 0x81, 0x5b, 0x7f, 0x2c, 0x98, 0xab, + 0xc3, 0xe9, 0x89, 0x3e, 0x1a, 0xe1, 0x90, 0xa2, 0x99, 0xc8, 0x06, 0xc5, 0x63, 0xab, 0x56, 0x60, + 0x2e, 0x22, 0x26, 0x65, 0xc0, 0xd6, 0x2d, 0xc7, 0x3d, 0x07, 0xcc, 0x68, 0x90, 0x67, 0xc8, 0x62, + 0x3f, 0xb4, 0xff, 0xc8, 0x89, 0xfb, 0xee, 0xec, 0x79, 0xff, 0xeb, 0x21, 0xca, 0x18, 0xa2, 0x1b, + 0xa0, 0xd2, 0xae, 0x8f, 0x36, 0x95, 0x70, 0x8c, 0xd6, 0x86, 0xd3, 0x93, 0xb0, 0xef, 0xe4, 0x8e, + 0x5f, 0x94, 0x3b, 0xfe, 0x35, 0x71, 0x1f, 0xce, 0xdc, 0x1e, 0x66, 0x77, 0xb9, 0xf6, 0xaf, 0x79, + 0xb8, 0x7e, 0xba, 0x4d, 0xe0, 0xd7, 0xe3, 0x96, 0x31, 0x6e, 0x09, 0xd5, 0xe9, 0x42, 0x4a, 0x75, + 0x9a, 0xb1, 0xf6, 0x16, 0xb3, 0xd6, 0x5e, 0x4a, 0x51, 0xbb, 0x94, 0xa1, 0xa8, 0xcd, 0x5c, 0xa0, + 0xc5, 0x27, 0x2c, 0xd0, 0x65, 0x79, 0x9e, 0xfc, 0x63, 0xa8, 0xc0, 0x88, 0xdf, 0x07, 0x1e, 0xc0, + 0x59, 0x71, 0x1f, 0x60, 0x27, 0x47, 0xa4, 0x7f, 0x2f, 0xdd, 0xbe, 0x99, 0x75, 0x13, 0x40, 0xb4, + 0x0c, 0x69, 0x7d, 0x83, 0xdf, 0x01, 0xa2, 0xf2, 0xff, 0x39, 0xd2, 0x3f, 0xb9, 0x0f, 0x17, 0x30, + 0xbe, 0x7c, 0x4f, 0x7e, 0x39, 0xb0, 0xc7, 0xee, 0x21, 0x9f, 0x0f, 0x57, 0x53, 0xb2, 0xb2, 0xd7, + 0x93, 0xaa, 0x63, 0xba, 0x87, 0xd5, 0x33, 0xe6, 0xb9, 0x20, 0x03, 0x9e, 0xbc, 0x58, 0xfc, 0xa9, + 0x02, 0xda, 0x93, 0xfb, 0x0b, 0x15, 0x55, 0xc9, 0x0e, 0x5f, 0x36, 0x4b, 0x8e, 0xd4, 0x7b, 0xcf, + 0xc3, 0xea, 0xd8, 0x3d, 0x1c, 0xbb, 0xc1, 0x71, 0x4c, 0x03, 0xb2, 0xc2, 0x81, 0xa2, 0x63, 0x44, + 0x50, 0xca, 0xa7, 0x92, 0xcc, 0x05, 0x91, 0xb6, 0x17, 0xde, 0x17, 0x33, 0xc7, 0x81, 0xce, 0x26, + 0xb9, 0x82, 0xec, 0xc7, 0x9d, 0x42, 0x31, 0xa7, 0xe6, 0x4d, 0x1e, 0x3a, 0xf3, 0xd0, 0x1b, 0xb8, + 0xda, 0x5f, 0x2a, 0x42, 0x22, 0xc8, 0xea, 0x3c, 0xf2, 0x40, 0x32, 0xe6, 0xcd, 0xa7, 0xc4, 0x90, + 0x2c, 0x12, 0xd9, 0xee, 0x91, 0x87, 0x67, 0x44, 0x40, 0x2c, 0x3c, 0x23, 0x42, 0xde, 0x87, 0x45, + 0x22, 0xbf, 0x35, 0xbf, 0x21, 0x2c, 0x82, 0xe8, 0x9e, 0x77, 0x70, 0x8b, 0xdc, 0x84, 0x25, 0x66, + 0x04, 0x24, 0xaa, 0xbb, 0x1e, 0xab, 0xee, 0xc1, 0x2d, 0x53, 0x94, 0x6b, 0xef, 0x84, 0xef, 0x5a, + 0xa9, 0x46, 0x1c, 0xdc, 0x22, 0xaf, 0x9d, 0xce, 0x38, 0xb7, 0x28, 0x8c, 0x73, 0x43, 0xc3, 0xdc, + 0xd7, 0x63, 0x86, 0xb9, 0xd7, 0xe6, 0xf7, 0x16, 0x7f, 0x8d, 0x64, 0xe1, 0x08, 0xa3, 0x30, 0x55, + 0x3f, 0xcb, 0xc1, 0xb3, 0x73, 0x29, 0xc8, 0x25, 0x28, 0xea, 0xed, 0x5a, 0x27, 0x1a, 0x5f, 0xba, + 0x66, 0x04, 0x84, 0xec, 0xc3, 0xf2, 0x8e, 0x13, 0x78, 0x3d, 0x3a, 0x8d, 0x33, 0x9f, 0x07, 0x52, + 0x6c, 0x43, 0xf4, 0xea, 0x19, 0x33, 0xa2, 0x25, 0x36, 0x6c, 0xe0, 0x5a, 0x88, 0xa5, 0x9e, 0xca, + 0x67, 0xe8, 0x1a, 0x52, 0x0c, 0x53, 0x64, 0x74, 0x9f, 0x49, 0x01, 0xc9, 0x43, 0x20, 0x96, 0x55, + 0xad, 0xb8, 0xe3, 0x09, 0xbf, 0x83, 0x4f, 0xbc, 0xd0, 0xd2, 0xf3, 0xa3, 0x4f, 0xe8, 0xbb, 0x14, + 0x5d, 0xf5, 0x8c, 0x99, 0xc1, 0x2d, 0xb9, 0xcc, 0xdf, 0x16, 0xf2, 0xce, 0xec, 0x4e, 0x78, 0x8a, + 0x50, 0xaf, 0x37, 0xa0, 0xd8, 0x16, 0xb6, 0x08, 0x92, 0xc5, 0xbc, 0xb0, 0x3b, 0x30, 0xc3, 0x52, + 0xed, 0x37, 0x14, 0xa1, 0x74, 0x78, 0x72, 0x67, 0x49, 0x99, 0xc1, 0xfa, 0xf3, 0x33, 0x83, 0xf5, + 0x7f, 0xc1, 0xcc, 0x60, 0x9a, 0x07, 0x37, 0x4f, 0xdd, 0xb1, 0xe4, 0x93, 0xa0, 0x62, 0x12, 0x25, + 0x47, 0x1a, 0x24, 0xb6, 0xbe, 0x36, 0xc2, 0xd8, 0xdf, 0x55, 0x9e, 0xa9, 0xce, 0x5c, 0xef, 0xc5, + 0xa9, 0xb5, 0x3f, 0xe1, 0x31, 0xdf, 0x6b, 0xfd, 0x76, 0x42, 0xd1, 0xfc, 0x7e, 0x9d, 0x2c, 0x8c, + 0xd8, 0x62, 0x7b, 0x5e, 0x4a, 0x62, 0x99, 0xfe, 0xd6, 0x6c, 0x5f, 0x0b, 0x69, 0xe5, 0xfd, 0x41, + 0x1e, 0x2e, 0xcd, 0x23, 0xcf, 0x4c, 0x93, 0xad, 0x3c, 0x5d, 0x9a, 0xec, 0x9b, 0x50, 0x64, 0xb0, + 0xd0, 0x83, 0x00, 0xc7, 0x96, 0x93, 0xd2, 0xb1, 0x15, 0xc5, 0xe4, 0x79, 0x58, 0xd4, 0x2b, 0x56, + 0x94, 0xb9, 0x0d, 0x4d, 0x7d, 0x9d, 0x5e, 0x80, 0x46, 0xa4, 0xbc, 0x88, 0x7c, 0x31, 0x9d, 0xac, + 0x90, 0xa7, 0x6c, 0xbb, 0x28, 0x75, 0x48, 0x2a, 0x1d, 0x03, 0xd6, 0x37, 0x4a, 0x1f, 0xc0, 0x23, + 0x72, 0x9b, 0xe9, 0xc4, 0x87, 0x1a, 0x2c, 0xb6, 0xc7, 0x6e, 0xe0, 0x4e, 0x64, 0x33, 0xdc, 0x11, + 0x42, 0x4c, 0x5e, 0xc2, 0x8d, 0x64, 0x9d, 0xc7, 0x2c, 0x26, 0xc2, 0xa2, 0x1c, 0xa7, 0x06, 0xad, + 0x6a, 0x29, 0xd8, 0x94, 0x50, 0x28, 0x41, 0xdd, 0x99, 0x0e, 0x7b, 0xc7, 0x5d, 0xb3, 0xce, 0x25, + 0x27, 0x46, 0x30, 0x40, 0x28, 0x6d, 0x60, 0x60, 0x4a, 0x28, 0xda, 0xb7, 0x15, 0x38, 0x97, 0xd5, + 0x0e, 0x72, 0x09, 0x0a, 0xc3, 0xcc, 0xbc, 0x8c, 0x43, 0xe6, 0xca, 0x5d, 0xa2, 0x7f, 0xed, 0x43, + 0x7f, 0x7c, 0xe2, 0x4c, 0x64, 0x63, 0x65, 0x09, 0x6c, 0x02, 0xfd, 0xb1, 0x87, 0xff, 0x93, 0x2b, + 0xe2, 0xc8, 0xc9, 0xa7, 0x32, 0x39, 0xe2, 0x1f, 0x4d, 0x07, 0xa8, 0xf5, 0xdb, 0xad, 0x11, 0x4b, + 0x07, 0xf0, 0x0a, 0x14, 0x68, 0xb5, 0x12, 0xb3, 0x97, 0xce, 0x1f, 0xbd, 0x51, 0xe7, 0x48, 0xac, + 0x56, 0x81, 0x73, 0x32, 0x30, 0x11, 0x59, 0xbb, 0x07, 0x6b, 0x71, 0x0c, 0x62, 0xc4, 0x23, 0xc2, + 0x96, 0x6e, 0xab, 0x9c, 0xd3, 0x8e, 0xef, 0x33, 0x87, 0x99, 0x9d, 0x67, 0x7e, 0xf6, 0xee, 0x15, + 0xa0, 0x3f, 0x19, 0x4d, 0x56, 0xc4, 0x58, 0xed, 0x3b, 0x39, 0x38, 0x17, 0xf9, 0xe8, 0x8b, 0x35, + 0xf4, 0x2b, 0xeb, 0x30, 0xaa, 0xc7, 0x1c, 0x1a, 0x85, 0xdc, 0x98, 0x6e, 0xe0, 0x1c, 0x3f, 0xaa, + 0x7d, 0xd8, 0x9a, 0x85, 0x4f, 0x5e, 0x84, 0x65, 0x0c, 0xeb, 0x34, 0x72, 0x7a, 0xae, 0xbc, 0xcd, + 0x0e, 0x05, 0xd0, 0x8c, 0xca, 0xb5, 0x9f, 0x28, 0xb0, 0xcd, 0xdd, 0x3c, 0x1a, 0x8e, 0x37, 0xc4, + 0x57, 0x82, 0x9e, 0xfb, 0xc1, 0x38, 0x3c, 0xef, 0xc7, 0xf6, 0xb1, 0x17, 0xe2, 0xde, 0x3c, 0xa9, + 0xaf, 0xcd, 0x6e, 0x2d, 0xb9, 0x89, 0xa1, 0xca, 0xf8, 0x2b, 0x7a, 0x81, 0x05, 0x98, 0x18, 0x52, + 0x80, 0x1c, 0x60, 0x02, 0x31, 0xb4, 0xff, 0x03, 0x97, 0xe7, 0x7f, 0x80, 0x7c, 0x01, 0x56, 0x31, + 0xf7, 0x56, 0x77, 0x74, 0x34, 0x76, 0xfa, 0xae, 0xd0, 0xec, 0x09, 0x6d, 0xac, 0x5c, 0xc6, 0x22, + 0xaf, 0xf1, 0x80, 0x07, 0x47, 0x98, 0xd5, 0x8b, 0x13, 0xc5, 0x7c, 0xa9, 0x64, 0x6e, 0xda, 0x37, + 0x14, 0x20, 0x69, 0x1e, 0xe4, 0x63, 0xb0, 0xd2, 0xed, 0x54, 0xac, 0x89, 0x33, 0x9e, 0x54, 0xfd, + 0xe9, 0x98, 0x87, 0x3d, 0x63, 0xfe, 0xef, 0x93, 0x9e, 0xcd, 0xde, 0x83, 0x8e, 0xfd, 0xe9, 0xd8, + 0x8c, 0xe1, 0x61, 0x8e, 0x27, 0xd7, 0xfd, 0x4a, 0xdf, 0x79, 0x1c, 0xcf, 0xf1, 0xc4, 0x61, 0xb1, + 0x1c, 0x4f, 0x1c, 0xa6, 0x7d, 0x5f, 0x81, 0x8b, 0xc2, 0x38, 0xb2, 0x9f, 0x51, 0x97, 0x0a, 0x46, + 0x79, 0x19, 0x8b, 0x38, 0xbb, 0xf3, 0x24, 0xf4, 0x0d, 0x11, 0x08, 0x09, 0x2b, 0x88, 0xa2, 0x3a, + 0xa3, 0x25, 0x9f, 0x86, 0x82, 0x35, 0xf1, 0x47, 0xa7, 0x88, 0x84, 0xa4, 0x86, 0x23, 0x3a, 0xf1, + 0x47, 0xc8, 0x02, 0x29, 0x35, 0x17, 0xce, 0xc9, 0x95, 0x13, 0x35, 0x26, 0x0d, 0x58, 0xe2, 0x21, + 0xef, 0x12, 0x76, 0x07, 0x73, 0xda, 0xb4, 0xb3, 0x2e, 0xc2, 0x2d, 0xf1, 0x38, 0xaf, 0xa6, 0xe0, + 0xa1, 0xfd, 0x96, 0x02, 0x25, 0x2a, 0xd8, 0xe0, 0xa5, 0xf4, 0xfd, 0x4e, 0xe9, 0xb8, 0x1c, 0x2c, + 0xcc, 0x68, 0x42, 0xf6, 0xa7, 0x3a, 0x8d, 0x5f, 0x85, 0xf5, 0x04, 0x01, 0xd1, 0x30, 0xd0, 0xc6, + 0xc0, 0xeb, 0x39, 0x2c, 0x65, 0x0c, 0x33, 0x41, 0x89, 0xc1, 0xb4, 0xff, 0xa7, 0xc0, 0xb9, 0xd6, + 0x57, 0x26, 0x0e, 0x7b, 0xb6, 0x35, 0xa7, 0x03, 0xb1, 0xde, 0xa9, 0xb0, 0x26, 0xac, 0x6c, 0x59, + 0x10, 0x00, 0x26, 0xac, 0x71, 0x98, 0x19, 0x96, 0x92, 0x2a, 0x14, 0xf9, 0xf9, 0x12, 0xf0, 0xf0, + 0xac, 0x97, 0x25, 0xdd, 0x48, 0xc4, 0x98, 0x23, 0xd1, 0x96, 0xe0, 0x16, 0xc6, 0x69, 0xcc, 0x90, + 0x5a, 0xfb, 0x37, 0x05, 0x36, 0x67, 0xd0, 0x90, 0x37, 0x61, 0x01, 0x1d, 0x14, 0xf9, 0xe8, 0x5d, + 0x9a, 0xf1, 0x89, 0x49, 0xef, 0xf8, 0xe0, 0x16, 0x3b, 0x88, 0x4e, 0xe8, 0x0f, 0x93, 0x51, 0x91, + 0x07, 0xb0, 0xac, 0xf7, 0xfb, 0xfc, 0x76, 0x96, 0x8b, 0xdd, 0xce, 0x66, 0x7c, 0xf1, 0xe5, 0x10, + 0x9f, 0xdd, 0xce, 0x98, 0xab, 0x4c, 0xbf, 0x6f, 0x73, 0xe7, 0xcb, 0x88, 0xdf, 0xf6, 0x27, 0x61, + 0x2d, 0x8e, 0xfc, 0x54, 0xfe, 0x62, 0xef, 0x28, 0xa0, 0xc6, 0xeb, 0xf0, 0xcb, 0x09, 0x14, 0x95, + 0x35, 0xcc, 0x4f, 0x98, 0x54, 0xbf, 0x93, 0x83, 0xf3, 0x99, 0x3d, 0x4c, 0x5e, 0x82, 0x45, 0x7d, + 0x34, 0xaa, 0xed, 0xf2, 0x59, 0xc5, 0x25, 0x24, 0x54, 0x7a, 0xc7, 0x2e, 0xaf, 0x0c, 0x89, 0xbc, + 0x02, 0x45, 0x66, 0x1d, 0xb0, 0x2b, 0x36, 0x1c, 0x8c, 0x7c, 0xc3, 0x4d, 0x17, 0xe2, 0x81, 0x52, + 0x05, 0x22, 0xd9, 0x83, 0x35, 0x1e, 0x33, 0xc6, 0x74, 0x8f, 0xdc, 0xaf, 0x85, 0x11, 0xfb, 0x31, + 0xa9, 0x80, 0xd0, 0xa4, 0xdb, 0x63, 0x56, 0x26, 0x47, 0x4d, 0x89, 0x53, 0x91, 0x3a, 0xa8, 0xc8, + 0x53, 0xe6, 0xc4, 0xa2, 0xb5, 0x62, 0x14, 0x1f, 0x56, 0x89, 0x19, 0xbc, 0x52, 0x94, 0xe1, 0x70, + 0xe9, 0x41, 0xe0, 0x1d, 0x0d, 0x4f, 0xdc, 0xe1, 0xe4, 0x97, 0x37, 0x5c, 0xd1, 0x37, 0x4e, 0x35, + 0x5c, 0xbf, 0x57, 0x60, 0x8b, 0x39, 0x49, 0x46, 0x25, 0x1a, 0x29, 0x40, 0x37, 0x4a, 0x34, 0xf4, + 0x7e, 0xc6, 0xa3, 0xa2, 0xec, 0xc2, 0x12, 0x8b, 0x56, 0x23, 0x56, 0xc6, 0xb3, 0x99, 0x55, 0x60, + 0x38, 0x07, 0xb7, 0x98, 0xf8, 0xc2, 0x3c, 0x25, 0x03, 0x53, 0x90, 0x92, 0x03, 0x28, 0x55, 0x06, + 0xae, 0x33, 0x9c, 0x8e, 0x3a, 0xa7, 0x7b, 0x41, 0xdd, 0xe2, 0x6d, 0x59, 0xe9, 0x31, 0x32, 0x7c, + 0x79, 0xc5, 0x9d, 0x5c, 0x66, 0x44, 0x3a, 0xa1, 0xf3, 0x54, 0x01, 0x15, 0xaf, 0x1f, 0x9d, 0xd3, + 0x3f, 0x49, 0x20, 0xd2, 0xc5, 0x3d, 0x03, 0xb9, 0x77, 0x95, 0x0d, 0x6b, 0x75, 0x27, 0x98, 0x74, + 0xc6, 0xce, 0x30, 0xc0, 0x28, 0x97, 0xa7, 0x88, 0x02, 0x76, 0x51, 0x64, 0x70, 0x46, 0x95, 0xe9, + 0x24, 0x24, 0x65, 0x0a, 0xd9, 0x38, 0x3b, 0x2a, 0x2f, 0xed, 0x79, 0x43, 0x67, 0xe0, 0x7d, 0x5d, + 0xf8, 0x98, 0x32, 0x79, 0xe9, 0x50, 0x00, 0xcd, 0xa8, 0x5c, 0xfb, 0x7c, 0x6a, 0xdc, 0x58, 0x2d, + 0x4b, 0xb0, 0xc4, 0x23, 0x10, 0x30, 0x8f, 0xfc, 0xb6, 0xd1, 0xdc, 0xad, 0x35, 0xf7, 0x55, 0x85, + 0xac, 0x01, 0xb4, 0xcd, 0x56, 0xc5, 0xb0, 0x2c, 0xfa, 0x3b, 0x47, 0x7f, 0x73, 0x77, 0xfd, 0xbd, + 0x6e, 0x5d, 0xcd, 0x4b, 0x1e, 0xfb, 0x05, 0xed, 0xc7, 0x0a, 0x5c, 0xc8, 0x1e, 0x4a, 0xd2, 0x01, + 0x8c, 0xd9, 0xc0, 0xdf, 0xd2, 0x3f, 0x36, 0x77, 0xdc, 0x33, 0xc1, 0xc9, 0xd8, 0x0f, 0x13, 0x16, + 0x53, 0x20, 0x27, 0xde, 0xbe, 0x98, 0x93, 0xa2, 0xd7, 0x37, 0x73, 0x5e, 0x5f, 0xab, 0xc0, 0xd6, + 0x2c, 0x1e, 0xf1, 0xa6, 0xae, 0x43, 0x49, 0x6f, 0xb7, 0xeb, 0xb5, 0x8a, 0xde, 0xa9, 0xb5, 0x9a, + 0xaa, 0x42, 0x96, 0x61, 0x61, 0xdf, 0x6c, 0x75, 0xdb, 0x6a, 0x4e, 0xfb, 0xae, 0x02, 0xab, 0xb5, + 0xc8, 0xea, 0xec, 0xfd, 0x2e, 0xbe, 0x8f, 0xc7, 0x16, 0xdf, 0x56, 0x18, 0xdd, 0x24, 0xfc, 0xc0, + 0xa9, 0x56, 0xde, 0x7b, 0x39, 0xd8, 0x48, 0xd1, 0x10, 0x0b, 0x96, 0xf4, 0x7b, 0x56, 0xab, 0xb6, + 0x5b, 0xe1, 0x35, 0xbb, 0x12, 0x99, 0x4b, 0x61, 0xbe, 0xab, 0xd4, 0x57, 0x98, 0x47, 0xf0, 0xa3, + 0xc0, 0xf6, 0xbd, 0xbe, 0x94, 0xfc, 0xb6, 0x7a, 0xc6, 0x14, 0x9c, 0xf0, 0x24, 0xfb, 0xfa, 0x74, + 0xec, 0x22, 0xdb, 0x5c, 0x4c, 0xaf, 0x1b, 0xc2, 0xd3, 0x8c, 0xd1, 0x7f, 0xc3, 0xa1, 0xe5, 0x69, + 0xd6, 0x11, 0x3f, 0xd2, 0x84, 0xc5, 0x7d, 0x6f, 0x52, 0x9d, 0x3e, 0xe4, 0xeb, 0xf7, 0x72, 0x94, + 0xfd, 0xa8, 0x3a, 0x7d, 0x98, 0x66, 0x8b, 0x2a, 0x4b, 0x16, 0xbd, 0x27, 0xc6, 0x92, 0x73, 0x49, + 0x3a, 0x31, 0x16, 0x9e, 0xca, 0x89, 0x71, 0x67, 0x15, 0x4a, 0xfc, 0x0e, 0x85, 0xd7, 0x93, 0x1f, + 0x2a, 0xb0, 0x35, 0xab, 0xe7, 0xe8, 0xb5, 0x2c, 0x1e, 0xac, 0xe0, 0x42, 0x98, 0x1e, 0x23, 0x1e, + 0xa5, 0x40, 0xa0, 0x91, 0xb7, 0xa0, 0x54, 0x0b, 0x82, 0xa9, 0x3b, 0xb6, 0x5e, 0xe9, 0x9a, 0x35, + 0x3e, 0x5d, 0x9f, 0xfd, 0xe7, 0x77, 0xaf, 0x6c, 0xa2, 0xcf, 0xc7, 0xd8, 0x0e, 0x5e, 0xb1, 0xa7, + 0x63, 0x2f, 0x96, 0x4a, 0x40, 0xa6, 0xa0, 0x52, 0xb4, 0x33, 0xed, 0x7b, 0xae, 0xb8, 0x43, 0x08, + 0x87, 0x6e, 0x0e, 0x93, 0xcf, 0x34, 0x01, 0xd3, 0xbe, 0xa5, 0xc0, 0xf6, 0xec, 0x61, 0xa2, 0xe7, + 0x64, 0x87, 0x99, 0x54, 0x09, 0x97, 0x6a, 0x3c, 0x27, 0x43, 0xbb, 0x2b, 0x99, 0xa7, 0x40, 0xa4, + 0x44, 0x61, 0x6a, 0xfc, 0x5c, 0x2a, 0x1f, 0x76, 0x9c, 0x48, 0x20, 0x6a, 0xf7, 0x61, 0x73, 0xc6, + 0xa0, 0x92, 0x4f, 0x65, 0x26, 0xdd, 0x41, 0x37, 0x25, 0x39, 0xe9, 0x4e, 0x2c, 0x7b, 0x9b, 0x04, + 0xd7, 0xfe, 0x25, 0x07, 0x17, 0xe8, 0xea, 0x1a, 0xb8, 0x41, 0xa0, 0x47, 0xf9, 0x69, 0xe9, 0xae, + 0xf8, 0x1a, 0x2c, 0x1e, 0x3f, 0x9d, 0xaa, 0x98, 0xa1, 0x13, 0x02, 0x78, 0x62, 0x09, 0xe7, 0x18, + 0xfa, 0x3f, 0xb9, 0x0a, 0x72, 0x72, 0xf3, 0x3c, 0x86, 0x37, 0xcd, 0x6d, 0x29, 0xe6, 0xf2, 0x28, + 0xcc, 0x43, 0xfc, 0x3a, 0x2c, 0xa0, 0x3e, 0x85, 0x9f, 0x1d, 0x42, 0xe6, 0xcf, 0xae, 0x1d, 0x6a, + 0x5b, 0x4c, 0x46, 0x40, 0x3e, 0x02, 0x10, 0x65, 0x86, 0xe0, 0x87, 0x83, 0xd0, 0x33, 0x84, 0xc9, + 0x21, 0xcc, 0xe5, 0x93, 0x43, 0x87, 0xa7, 0x5b, 0x28, 0xc3, 0x86, 0xe8, 0xf1, 0x91, 0x88, 0x8a, + 0xc8, 0x5f, 0x31, 0xd7, 0x59, 0x41, 0x6d, 0x24, 0x22, 0x23, 0x5e, 0x4b, 0x25, 0x68, 0xc6, 0xe0, + 0xc8, 0x89, 0x2c, 0xcc, 0xd7, 0x52, 0x59, 0x98, 0x8b, 0x0c, 0x4b, 0x4e, 0xb5, 0xac, 0xfd, 0x43, + 0x0e, 0x96, 0xef, 0x51, 0xa9, 0x0c, 0x75, 0x0d, 0xf3, 0x75, 0x17, 0xb7, 0xa1, 0x54, 0xf7, 0x1d, + 0xfe, 0x5c, 0xc4, 0x7d, 0x4a, 0x98, 0x4f, 0xf7, 0xc0, 0x77, 0xc4, 0xcb, 0x53, 0x60, 0xca, 0x48, + 0x4f, 0xf0, 0x47, 0xbf, 0x03, 0x8b, 0xec, 0xf9, 0x8e, 0xab, 0xd1, 0x84, 0x5c, 0x1e, 0xd6, 0xe8, + 0x65, 0x56, 0x2c, 0xbd, 0x70, 0xb0, 0x27, 0x40, 0x59, 0x48, 0xe4, 0x31, 0x5e, 0x25, 0xcd, 0xca, + 0xc2, 0xe9, 0x34, 0x2b, 0x52, 0x2c, 0xbb, 0xc5, 0xd3, 0xc4, 0xb2, 0xdb, 0x7e, 0x03, 0x4a, 0x52, + 0x7d, 0x9e, 0x4a, 0x4c, 0xff, 0x66, 0x0e, 0x56, 0xb1, 0x55, 0xa1, 0x2d, 0xcf, 0xaf, 0xa6, 0x9e, + 0xe8, 0xe3, 0x31, 0x3d, 0xd1, 0x96, 0x3c, 0x5e, 0xac, 0x65, 0x73, 0x14, 0x44, 0x77, 0x60, 0x23, + 0x85, 0x48, 0x5e, 0x85, 0x05, 0x5a, 0x7d, 0x71, 0xaf, 0x56, 0x93, 0x33, 0x20, 0x8a, 0x7b, 0x4c, + 0x1b, 0x1e, 0x98, 0x0c, 0x5b, 0xfb, 0x77, 0x05, 0x56, 0x78, 0xda, 0x91, 0xe1, 0xa1, 0xff, 0xc4, + 0xee, 0xbc, 0x9e, 0xec, 0x4e, 0x16, 0x5d, 0x85, 0x77, 0xe7, 0x7f, 0x75, 0x27, 0xbe, 0x11, 0xeb, + 0xc4, 0xcd, 0x30, 0x0a, 0xa2, 0x68, 0xce, 0x9c, 0x3e, 0xfc, 0x01, 0xc6, 0x05, 0x8e, 0x23, 0x92, + 0x2f, 0xc2, 0x72, 0xd3, 0x7d, 0x14, 0xbb, 0x9e, 0x5e, 0x9f, 0xc1, 0xf4, 0xe5, 0x10, 0x91, 0xad, + 0x29, 0x3c, 0xd9, 0x87, 0xee, 0x23, 0x3b, 0xf5, 0x72, 0x18, 0xb1, 0xa4, 0x37, 0xd4, 0x38, 0xd9, + 0xd3, 0x4c, 0x7d, 0xee, 0xe0, 0x8a, 0x01, 0x83, 0xbe, 0x9d, 0x07, 0x88, 0x7c, 0x03, 0xe9, 0x02, + 0x8c, 0x19, 0x4d, 0x08, 0xcd, 0x3e, 0x82, 0xe4, 0x39, 0x2e, 0x6c, 0x29, 0xae, 0x73, 0x0d, 0x74, + 0x6e, 0x76, 0x94, 0x4a, 0xd4, 0x45, 0x57, 0xb8, 0x33, 0x5a, 0xdf, 0x1d, 0x38, 0x6c, 0x6f, 0xcf, + 0xef, 0x5c, 0xc3, 0xa0, 0xc4, 0x21, 0x74, 0x46, 0xba, 0x69, 0x74, 0x59, 0xdb, 0xa5, 0x08, 0x29, + 0x7f, 0xdb, 0xc2, 0xd3, 0xf9, 0xdb, 0xb6, 0x61, 0xd9, 0x1b, 0xbe, 0xed, 0x0e, 0x27, 0xfe, 0xf8, + 0x31, 0xaa, 0xdd, 0x23, 0x7d, 0x1e, 0xed, 0x82, 0x9a, 0x28, 0x63, 0xe3, 0x80, 0x67, 0x6e, 0x88, + 0x2f, 0x0f, 0x43, 0x08, 0x0c, 0xfd, 0x85, 0x17, 0xd4, 0xc5, 0x3b, 0x85, 0xe2, 0xa2, 0xba, 0x74, + 0xa7, 0x50, 0x2c, 0xaa, 0xcb, 0x77, 0x0a, 0xc5, 0x65, 0x15, 0x4c, 0xe9, 0xcd, 0x2c, 0x7c, 0x13, + 0x93, 0x9e, 0xb1, 0xe2, 0x4f, 0x54, 0xda, 0xcf, 0x73, 0x40, 0xd2, 0xd5, 0x20, 0x1f, 0x87, 0x12, + 0xdb, 0x60, 0xed, 0x71, 0xf0, 0x55, 0xee, 0x6e, 0xc0, 0xc2, 0x2e, 0x49, 0x60, 0x39, 0xec, 0x12, + 0x03, 0x9b, 0xc1, 0x57, 0x07, 0xe4, 0x0b, 0x70, 0x16, 0xbb, 0x77, 0xe4, 0x8e, 0x3d, 0xbf, 0x6f, + 0x63, 0x8c, 0x5c, 0x67, 0xc0, 0x53, 0x43, 0xbe, 0x84, 0x39, 0x8c, 0xd3, 0xc5, 0x33, 0x86, 0x01, + 0x5d, 0x00, 0xdb, 0x88, 0xd9, 0x66, 0x88, 0xa4, 0x03, 0xaa, 0x4c, 0x7f, 0x38, 0x1d, 0x0c, 0xf8, + 0xc8, 0x96, 0xe9, 0x8d, 0x3e, 0x59, 0x36, 0x83, 0xf1, 0x5a, 0xc4, 0x78, 0x6f, 0x3a, 0x18, 0x90, + 0xd7, 0x00, 0xfc, 0xa1, 0x7d, 0xe2, 0x05, 0x01, 0x7b, 0xcc, 0x09, 0xbd, 0x95, 0x23, 0xa8, 0x3c, + 0x18, 0xfe, 0xb0, 0xc1, 0x80, 0xe4, 0x7f, 0x01, 0x46, 0x6b, 0xc0, 0x30, 0x26, 0xcc, 0x1a, 0x89, + 0x67, 0x6f, 0x11, 0xc0, 0xb8, 0x73, 0xf4, 0x91, 0x6b, 0x79, 0x5f, 0x17, 0xae, 0x1e, 0x9f, 0x83, + 0x0d, 0x6e, 0x3c, 0x7c, 0xcf, 0x9b, 0x1c, 0xf3, 0xab, 0xc4, 0xfb, 0xb9, 0x87, 0x48, 0x77, 0x89, + 0xbf, 0x29, 0x00, 0xe8, 0xf7, 0x2c, 0x11, 0x21, 0xec, 0x26, 0x2c, 0xd0, 0x0b, 0x92, 0x50, 0xb4, + 0xa0, 0x9a, 0x1a, 0xf9, 0xca, 0x6a, 0x6a, 0xc4, 0xa0, 0xab, 0xd1, 0x44, 0xa3, 0x7a, 0xa1, 0x64, + 0xc1, 0xd5, 0xc8, 0xec, 0xec, 0x63, 0x11, 0x9a, 0x39, 0x16, 0xa9, 0x03, 0x44, 0x31, 0xbb, 0xb8, + 0xc8, 0xbf, 0x11, 0x05, 0xbf, 0xe1, 0x05, 0x3c, 0x4b, 0x44, 0x14, 0xf7, 0x4b, 0x9e, 0x3e, 0x11, + 0x1a, 0xb9, 0x0b, 0x85, 0x8e, 0x13, 0xfa, 0xe2, 0xce, 0x88, 0x64, 0xf6, 0x1c, 0x4f, 0xdd, 0x19, + 0x45, 0x33, 0x5b, 0x9b, 0x38, 0xb1, 0x0c, 0xc7, 0xc8, 0x84, 0x18, 0xb0, 0xc8, 0xd3, 0xb2, 0xcf, + 0x88, 0x80, 0xc9, 0xb3, 0xb2, 0xf3, 0xb8, 0xd7, 0x08, 0x94, 0x65, 0x0a, 0x9e, 0x80, 0xfd, 0x36, + 0xe4, 0x2d, 0xab, 0xc1, 0xe3, 0x77, 0xac, 0x46, 0xd7, 0x2f, 0xcb, 0x6a, 0xb0, 0x77, 0xdf, 0x20, + 0x38, 0x91, 0xc8, 0x28, 0x32, 0xf9, 0x04, 0x94, 0x24, 0xa1, 0x98, 0x47, 0xbe, 0xc1, 0x3e, 0x90, + 0xbc, 0x9d, 0xe4, 0x4d, 0x43, 0xc2, 0x26, 0x75, 0x50, 0xef, 0x4e, 0x1f, 0xba, 0xfa, 0x68, 0x84, + 0x6e, 0x90, 0x6f, 0xbb, 0x63, 0x26, 0xb6, 0x15, 0xa3, 0x90, 0xd1, 0xe8, 0x23, 0xd1, 0x17, 0xa5, + 0xb2, 0xb2, 0x29, 0x49, 0x49, 0xda, 0xb0, 0x61, 0xb9, 0x93, 0xe9, 0x88, 0xd9, 0xd7, 0xec, 0xf9, + 0x63, 0x7a, 0xbf, 0x61, 0x71, 0x72, 0x30, 0xba, 0x6e, 0x40, 0x0b, 0x85, 0x51, 0xd3, 0xa1, 0x3f, + 0x4e, 0xdc, 0x75, 0xd2, 0xc4, 0x9a, 0x2b, 0x0f, 0x39, 0x3d, 0x55, 0xe3, 0xb7, 0x26, 0x3c, 0x55, + 0xc5, 0xad, 0x29, 0xba, 0x2b, 0x7d, 0x24, 0x23, 0x96, 0x1b, 0xbe, 0x0c, 0x4a, 0xb1, 0xdc, 0x62, + 0x11, 0xdc, 0xbe, 0x5f, 0x90, 0xc2, 0x89, 0xf2, 0xb1, 0x78, 0x13, 0xe0, 0x8e, 0xef, 0x0d, 0x1b, + 0xee, 0xe4, 0xd8, 0xef, 0x4b, 0x21, 0xe5, 0x4a, 0x5f, 0xf6, 0xbd, 0xa1, 0x7d, 0x82, 0xe0, 0x9f, + 0xbf, 0x7b, 0x45, 0x42, 0x32, 0xa5, 0xff, 0xc9, 0x87, 0x61, 0x99, 0xfe, 0xea, 0x44, 0x56, 0x42, + 0x4c, 0x27, 0x8b, 0xd4, 0x2c, 0xe9, 0x46, 0x84, 0x40, 0xde, 0xc0, 0x34, 0x33, 0xde, 0x68, 0x22, + 0x09, 0xaf, 0x22, 0xa7, 0x8c, 0x37, 0x9a, 0x24, 0x23, 0x44, 0x4b, 0xc8, 0xa4, 0x1a, 0x56, 0x5d, + 0x64, 0x86, 0xe2, 0xd9, 0x6c, 0x50, 0xf1, 0xc8, 0xe7, 0x9a, 0x2d, 0x42, 0xd3, 0xca, 0x29, 0x7f, + 0x13, 0x64, 0x58, 0x09, 0xab, 0xba, 0xcb, 0x5e, 0x8a, 0xb8, 0x50, 0xcb, 0x2a, 0x11, 0x1c, 0xf7, + 0xed, 0x1e, 0x82, 0x63, 0x95, 0x08, 0x91, 0xc9, 0x0e, 0xac, 0x33, 0x19, 0x3f, 0xcc, 0x30, 0xc9, + 0x45, 0x5c, 0xdc, 0xdb, 0xa2, 0x14, 0x94, 0xf2, 0xe7, 0x13, 0x04, 0x64, 0x0f, 0x16, 0xf0, 0xae, + 0xc9, 0x5d, 0x03, 0x2e, 0xca, 0x6a, 0x82, 0xe4, 0x3a, 0xc2, 0x7d, 0x05, 0x15, 0x04, 0xf2, 0xbe, + 0x82, 0xa8, 0xe4, 0xb3, 0x00, 0xc6, 0x70, 0xec, 0x0f, 0x06, 0x18, 0x3c, 0xb9, 0x88, 0x57, 0xa9, + 0x67, 0xe3, 0xeb, 0x11, 0xb9, 0x44, 0x48, 0x3c, 0xd0, 0x1f, 0xfe, 0xb6, 0x13, 0x21, 0x96, 0x25, + 0x5e, 0x5a, 0x0d, 0x16, 0xd9, 0x62, 0xc4, 0x40, 0xe4, 0x3c, 0xb5, 0x8a, 0x14, 0xc6, 0x9a, 0x05, + 0x22, 0xe7, 0xf0, 0x74, 0x20, 0x72, 0x89, 0x40, 0xbb, 0x0b, 0xe7, 0xb2, 0x1a, 0x16, 0xbb, 0x1d, + 0x2b, 0xa7, 0xbd, 0x1d, 0x7f, 0x2f, 0x0f, 0x2b, 0xc8, 0x4d, 0xec, 0xc2, 0x3a, 0xac, 0x5a, 0xd3, + 0x87, 0x61, 0x94, 0x2e, 0xb1, 0x1b, 0x63, 0xfd, 0x02, 0xb9, 0x40, 0x7e, 0xc3, 0x8b, 0x51, 0x10, + 0x03, 0xd6, 0xc4, 0x49, 0xb0, 0x2f, 0x3c, 0x07, 0xc2, 0x18, 0xe0, 0x22, 0xd2, 0x64, 0x3a, 0xc3, + 0x6e, 0x82, 0x28, 0x3a, 0x0f, 0xf2, 0x4f, 0x73, 0x1e, 0x14, 0x4e, 0x75, 0x1e, 0x3c, 0x80, 0x15, + 0xf1, 0x35, 0xdc, 0xc9, 0x17, 0xde, 0xdf, 0x4e, 0x1e, 0x63, 0x46, 0xea, 0xe1, 0x8e, 0xbe, 0x38, + 0x77, 0x47, 0xc7, 0x87, 0x51, 0xb1, 0xca, 0x46, 0x08, 0x4b, 0x6f, 0xec, 0x98, 0x82, 0x72, 0xbf, + 0xd2, 0xfe, 0x05, 0x4e, 0xc9, 0x57, 0x61, 0xb9, 0xee, 0x8b, 0x37, 0x31, 0xe9, 0x31, 0x62, 0x20, + 0x80, 0xb2, 0xb8, 0x10, 0x62, 0x86, 0xa7, 0x5b, 0xfe, 0x83, 0x38, 0xdd, 0xde, 0x00, 0xe0, 0x2e, + 0x29, 0x51, 0xea, 0x38, 0x5c, 0x32, 0x22, 0x42, 0x49, 0xfc, 0x4d, 0x44, 0x42, 0xa6, 0xbb, 0x13, + 0x37, 0xb7, 0xd1, 0x7b, 0x3d, 0x7f, 0x3a, 0x9c, 0xc4, 0x72, 0x2d, 0x0b, 0x0f, 0x56, 0x87, 0x97, + 0xc9, 0xdb, 0x43, 0x82, 0xec, 0x83, 0x1d, 0x10, 0xf2, 0x99, 0xd0, 0xf8, 0x71, 0x69, 0x5e, 0x0f, + 0x69, 0xa9, 0x1e, 0x9a, 0x69, 0xf2, 0xa8, 0xfd, 0x58, 0x91, 0x13, 0x30, 0xfc, 0x02, 0x43, 0xfd, + 0x3a, 0x40, 0x68, 0x94, 0x20, 0xc6, 0x9a, 0xdd, 0x97, 0x42, 0xa8, 0xdc, 0xcb, 0x11, 0xae, 0xd4, + 0x9a, 0xfc, 0x07, 0xd5, 0x9a, 0x0e, 0x94, 0x5a, 0x5f, 0x99, 0x38, 0x91, 0x15, 0x0b, 0x58, 0xa1, + 0x24, 0x8b, 0x3b, 0x53, 0x7e, 0xe7, 0x05, 0x3c, 0x1b, 0x22, 0x39, 0x78, 0x86, 0x08, 0x2c, 0x11, + 0x6a, 0x7f, 0xa6, 0xc0, 0xba, 0xec, 0x76, 0xff, 0x78, 0xd8, 0x23, 0x9f, 0x62, 0xf1, 0x60, 0x95, + 0xd8, 0x95, 0x45, 0x42, 0xa2, 0x5b, 0xee, 0xe3, 0x61, 0x8f, 0x09, 0x40, 0xce, 0x23, 0xb9, 0xb2, + 0x94, 0x90, 0x3c, 0x84, 0x95, 0xb6, 0x3f, 0x18, 0x50, 0xb1, 0x66, 0xfc, 0x36, 0xbf, 0x00, 0x50, + 0x46, 0xc9, 0xa7, 0x11, 0x51, 0xa1, 0x9d, 0xe7, 0xf9, 0x3d, 0x77, 0x73, 0x44, 0xf7, 0x7b, 0x8f, + 0xd3, 0x45, 0x6c, 0xdf, 0x41, 0x3f, 0x39, 0x99, 0xa7, 0xf6, 0x53, 0x05, 0x48, 0xba, 0x4a, 0xf2, + 0x96, 0xa5, 0xfc, 0x37, 0x88, 0xb0, 0x09, 0xd1, 0xaf, 0xf0, 0x34, 0xa2, 0x5f, 0xf9, 0xb7, 0x15, + 0x58, 0xaf, 0xe9, 0x0d, 0x9e, 0x92, 0x81, 0xbd, 0xe0, 0x5c, 0x85, 0x67, 0x6b, 0x7a, 0xc3, 0x6e, + 0xb7, 0xea, 0xb5, 0xca, 0x7d, 0x3b, 0x33, 0xd2, 0xf2, 0xb3, 0xf0, 0x4c, 0x1a, 0x25, 0x7a, 0xe9, + 0xb9, 0x04, 0x5b, 0xe9, 0x62, 0x11, 0x8d, 0x39, 0x9b, 0x58, 0x04, 0x6e, 0xce, 0x97, 0xdf, 0x82, + 0x75, 0x11, 0x79, 0xb8, 0x53, 0xb7, 0x30, 0xb7, 0xc1, 0x3a, 0x94, 0x0e, 0x0c, 0xb3, 0xb6, 0x77, + 0xdf, 0xde, 0xeb, 0xd6, 0xeb, 0xea, 0x19, 0xb2, 0x0a, 0xcb, 0x1c, 0x50, 0xd1, 0x55, 0x85, 0xac, + 0x40, 0xb1, 0xd6, 0xb4, 0x8c, 0x4a, 0xd7, 0x34, 0xd4, 0x5c, 0xf9, 0x2d, 0x58, 0x6b, 0x8f, 0xbd, + 0xb7, 0x9d, 0x89, 0x7b, 0xd7, 0x7d, 0x8c, 0x0f, 0x35, 0x4b, 0x90, 0x37, 0xf5, 0x7b, 0xea, 0x19, + 0x02, 0xb0, 0xd8, 0xbe, 0x5b, 0xb1, 0x6e, 0xdd, 0x52, 0x15, 0x52, 0x82, 0xa5, 0xfd, 0x4a, 0xdb, + 0xbe, 0xdb, 0xb0, 0xd4, 0x1c, 0xfd, 0xa1, 0xdf, 0xb3, 0xf0, 0x47, 0xbe, 0xfc, 0x51, 0xd8, 0x40, + 0x81, 0xa4, 0xee, 0x05, 0x13, 0x77, 0xe8, 0x8e, 0xb1, 0x0e, 0x2b, 0x50, 0xb4, 0x5c, 0xba, 0x93, + 0x4c, 0x5c, 0x56, 0x81, 0xc6, 0x74, 0x30, 0xf1, 0x46, 0x03, 0xf7, 0x6b, 0xaa, 0x52, 0x7e, 0x03, + 0xd6, 0x4d, 0x7f, 0x3a, 0xf1, 0x86, 0x47, 0xd6, 0x84, 0x62, 0x1c, 0x3d, 0x26, 0xe7, 0x61, 0xa3, + 0xdb, 0xd4, 0x1b, 0x3b, 0xb5, 0xfd, 0x6e, 0xab, 0x6b, 0xd9, 0x0d, 0xbd, 0x53, 0xa9, 0xb2, 0x67, + 0xa2, 0x46, 0xcb, 0xea, 0xd8, 0xa6, 0x51, 0x31, 0x9a, 0x1d, 0x55, 0x29, 0x7f, 0x07, 0x75, 0x2b, + 0x3d, 0x7f, 0xd8, 0xdf, 0x73, 0x7a, 0x13, 0x7f, 0x8c, 0x15, 0xd6, 0xe0, 0xb2, 0x65, 0x54, 0x5a, + 0xcd, 0x5d, 0x7b, 0x4f, 0xaf, 0x74, 0x5a, 0x66, 0x56, 0xa8, 0xef, 0x6d, 0xb8, 0x90, 0x81, 0xd3, + 0xea, 0xb4, 0x55, 0x85, 0x5c, 0x81, 0x8b, 0x19, 0x65, 0xf7, 0x8c, 0x1d, 0xbd, 0xdb, 0xa9, 0x36, + 0xd5, 0xdc, 0x0c, 0x62, 0xcb, 0x6a, 0xa9, 0xf9, 0xf2, 0xff, 0x57, 0x60, 0xad, 0x1b, 0x70, 0x93, + 0xf3, 0x2e, 0x7a, 0x9b, 0x3e, 0x07, 0x97, 0xba, 0x96, 0x61, 0xda, 0x9d, 0xd6, 0x5d, 0xa3, 0x69, + 0x77, 0x2d, 0x7d, 0x3f, 0x59, 0x9b, 0x2b, 0x70, 0x51, 0xc2, 0x30, 0x8d, 0x4a, 0xeb, 0xc0, 0x30, + 0xed, 0xb6, 0x6e, 0x59, 0xf7, 0x5a, 0xe6, 0xae, 0xaa, 0xd0, 0x2f, 0x66, 0x20, 0x34, 0xf6, 0x74, + 0x56, 0x9b, 0x58, 0x59, 0xd3, 0xb8, 0xa7, 0xd7, 0xed, 0x9d, 0x56, 0x47, 0xcd, 0x97, 0x1b, 0xf4, + 0x7c, 0xc7, 0x80, 0xbb, 0xcc, 0xb2, 0xb0, 0x08, 0x85, 0x66, 0xab, 0x69, 0x24, 0x1f, 0x17, 0x57, + 0xa0, 0xa8, 0xb7, 0xdb, 0x66, 0xeb, 0x00, 0xa7, 0x18, 0xc0, 0xe2, 0xae, 0xd1, 0xa4, 0x35, 0xcb, + 0xd3, 0x92, 0xb6, 0xd9, 0x6a, 0xb4, 0x3a, 0xc6, 0xae, 0x5a, 0x28, 0x9b, 0x62, 0x09, 0x0b, 0xa6, + 0x3d, 0x9f, 0xbd, 0xe4, 0xed, 0x1a, 0x7b, 0x7a, 0xb7, 0xde, 0xe1, 0x43, 0x74, 0xdf, 0x36, 0x8d, + 0xcf, 0x74, 0x0d, 0xab, 0x63, 0xa9, 0x0a, 0x51, 0x61, 0xa5, 0x69, 0x18, 0xbb, 0x96, 0x6d, 0x1a, + 0x07, 0x35, 0xe3, 0x9e, 0x9a, 0xa3, 0x3c, 0xd9, 0xff, 0xf4, 0x0b, 0xe5, 0xef, 0x2b, 0x40, 0x58, + 0xb0, 0x62, 0x91, 0x01, 0x07, 0x67, 0xcc, 0x65, 0xd8, 0xae, 0xd2, 0xa1, 0xc6, 0xa6, 0x35, 0x5a, + 0xbb, 0xc9, 0x2e, 0xbb, 0x00, 0x24, 0x51, 0xde, 0xda, 0xdb, 0x53, 0x15, 0x72, 0x11, 0xce, 0x26, + 0xe0, 0xbb, 0x66, 0xab, 0xad, 0xe6, 0xb6, 0x73, 0x45, 0x85, 0x6c, 0xa6, 0x0a, 0xef, 0x1a, 0x46, + 0x5b, 0xcd, 0xd3, 0x21, 0x4a, 0x14, 0x88, 0x25, 0xc1, 0xc8, 0x0b, 0xe5, 0x6f, 0x29, 0x70, 0x81, + 0x55, 0x53, 0xac, 0xaf, 0xb0, 0xaa, 0x97, 0x60, 0x8b, 0x87, 0x60, 0xcf, 0xaa, 0xe8, 0x39, 0x50, + 0x63, 0xa5, 0xac, 0x9a, 0xe7, 0x61, 0x23, 0x06, 0xc5, 0x7a, 0xe4, 0xe8, 0xee, 0x11, 0x03, 0xef, + 0x18, 0x56, 0xc7, 0x36, 0xf6, 0xf6, 0x5a, 0x66, 0x87, 0x55, 0x24, 0x5f, 0xd6, 0x60, 0xa3, 0xe2, + 0x8e, 0x27, 0xf4, 0xea, 0x35, 0x0c, 0x3c, 0x7f, 0x88, 0x55, 0x58, 0x85, 0x65, 0xe3, 0xb3, 0x1d, + 0xa3, 0x69, 0xd5, 0x5a, 0x4d, 0xf5, 0x4c, 0xf9, 0x52, 0x02, 0x47, 0xac, 0x63, 0xcb, 0xaa, 0xaa, + 0x67, 0xca, 0x0e, 0xac, 0x0a, 0xc3, 0x6b, 0x36, 0x2b, 0x2e, 0xc3, 0xb6, 0x98, 0x6b, 0xb8, 0xa3, + 0x24, 0x9b, 0xb0, 0x05, 0xe7, 0xd2, 0xe5, 0x46, 0x47, 0x55, 0xe8, 0x28, 0x24, 0x4a, 0x28, 0x3c, + 0x57, 0xfe, 0xbf, 0x0a, 0xac, 0x86, 0x8f, 0x26, 0xa8, 0xa6, 0xbd, 0x02, 0x17, 0x1b, 0x7b, 0xba, + 0xbd, 0x6b, 0x1c, 0xd4, 0x2a, 0x86, 0x7d, 0xb7, 0xd6, 0xdc, 0x4d, 0x7c, 0xe4, 0x19, 0x38, 0x9f, + 0x81, 0x80, 0x5f, 0xd9, 0x82, 0x73, 0xc9, 0xa2, 0x0e, 0x5d, 0xaa, 0x39, 0xda, 0xf5, 0xc9, 0x92, + 0x70, 0x9d, 0xe6, 0xcb, 0x07, 0xb0, 0x66, 0xe9, 0x8d, 0xfa, 0x9e, 0x3f, 0xee, 0xb9, 0xfa, 0x74, + 0x72, 0x3c, 0x24, 0x17, 0x61, 0x73, 0xaf, 0x65, 0x56, 0x0c, 0x1b, 0x51, 0x12, 0x35, 0x38, 0x0b, + 0xeb, 0x72, 0xe1, 0x7d, 0x83, 0x4e, 0x5f, 0x02, 0x6b, 0x32, 0xb0, 0xd9, 0x52, 0x73, 0xe5, 0xcf, + 0xc3, 0x4a, 0x2c, 0x11, 0xde, 0x26, 0x9c, 0x95, 0x7f, 0xb7, 0xdd, 0x61, 0xdf, 0x1b, 0x1e, 0xa9, + 0x67, 0x92, 0x05, 0xe6, 0x74, 0x38, 0xa4, 0x05, 0xb8, 0x9e, 0xe5, 0x82, 0x8e, 0x3b, 0x3e, 0xf1, + 0x86, 0xce, 0xc4, 0xed, 0xab, 0xb9, 0xf2, 0xcb, 0xb0, 0x1a, 0x0b, 0xbf, 0x4d, 0x07, 0xae, 0xde, + 0xe2, 0x1b, 0x70, 0xc3, 0xd8, 0xad, 0x75, 0x1b, 0xea, 0x02, 0x5d, 0xc9, 0xd5, 0xda, 0x7e, 0x55, + 0x85, 0xf2, 0x77, 0x15, 0x7a, 0xcf, 0xc0, 0xa4, 0x3a, 0x8d, 0x3d, 0x5d, 0x0c, 0x35, 0x9d, 0x66, + 0x2c, 0xa8, 0xbf, 0x61, 0x59, 0xec, 0x4d, 0xfd, 0x12, 0x6c, 0xf1, 0x1f, 0xb6, 0xde, 0xdc, 0xb5, + 0xab, 0xba, 0xb9, 0x7b, 0x4f, 0x37, 0xe9, 0xdc, 0xbb, 0xaf, 0xe6, 0x70, 0x41, 0x49, 0x10, 0xbb, + 0xd3, 0xea, 0x56, 0xaa, 0x6a, 0x9e, 0xce, 0xdf, 0x18, 0xbc, 0x5d, 0x6b, 0xaa, 0x05, 0x5c, 0x9e, + 0x29, 0x6c, 0x64, 0x4b, 0xcb, 0x17, 0xca, 0xef, 0x29, 0xb0, 0x69, 0x79, 0x47, 0x43, 0x67, 0x32, + 0x1d, 0xbb, 0xfa, 0xe0, 0xc8, 0x1f, 0x7b, 0x93, 0xe3, 0x13, 0x6b, 0xea, 0x4d, 0x5c, 0x72, 0x13, + 0x5e, 0xb0, 0x6a, 0xfb, 0x4d, 0xbd, 0x43, 0x97, 0x97, 0x5e, 0xdf, 0x6f, 0x99, 0xb5, 0x4e, 0xb5, + 0x61, 0x5b, 0xdd, 0x5a, 0x6a, 0xe6, 0x5d, 0x83, 0xe7, 0x66, 0xa3, 0xd6, 0x8d, 0x7d, 0xbd, 0x72, + 0x5f, 0x55, 0xe6, 0x33, 0xdc, 0xd1, 0xeb, 0x7a, 0xb3, 0x62, 0xec, 0xda, 0x07, 0xb7, 0xd4, 0x1c, + 0x79, 0x01, 0xae, 0xce, 0x46, 0xdd, 0xab, 0xb5, 0x2d, 0x8a, 0x96, 0x9f, 0xff, 0xdd, 0xaa, 0xd5, + 0xa0, 0x58, 0x85, 0xf2, 0x1f, 0x2a, 0xb0, 0x35, 0x2b, 0x06, 0x13, 0xb9, 0x0e, 0x9a, 0xd1, 0xec, + 0x98, 0x7a, 0x6d, 0xd7, 0xae, 0x98, 0xc6, 0xae, 0xd1, 0xec, 0xd4, 0xf4, 0xba, 0x65, 0x5b, 0xad, + 0x2e, 0x9d, 0x4d, 0x91, 0xe9, 0xc3, 0xf3, 0x70, 0x65, 0x0e, 0x5e, 0xab, 0xb6, 0x5b, 0x51, 0x15, + 0x72, 0x0b, 0x5e, 0x9a, 0x83, 0x64, 0xdd, 0xb7, 0x3a, 0x46, 0x43, 0x2e, 0x51, 0x73, 0xe5, 0x0a, + 0x6c, 0xcf, 0x0e, 0xd2, 0x42, 0xb7, 0xe9, 0x78, 0x4f, 0x17, 0xa1, 0xb0, 0x4b, 0x4f, 0x86, 0x58, + 0xee, 0x87, 0xb2, 0x07, 0x6a, 0x32, 0xce, 0x42, 0xca, 0x46, 0xc5, 0xec, 0x36, 0x9b, 0xec, 0x18, + 0x59, 0x87, 0x52, 0xab, 0x53, 0x35, 0x4c, 0x9e, 0x3d, 0x03, 0xd3, 0x65, 0x74, 0x9b, 0x74, 0xe1, + 0xb4, 0xcc, 0xda, 0xe7, 0xf0, 0x3c, 0xd9, 0x82, 0x73, 0x56, 0x5d, 0xaf, 0xdc, 0xb5, 0x9b, 0xad, + 0x8e, 0x5d, 0x6b, 0xda, 0x95, 0xaa, 0xde, 0x6c, 0x1a, 0x75, 0x15, 0xb0, 0x33, 0x67, 0xf9, 0x56, + 0x92, 0x0f, 0xc3, 0x8d, 0xd6, 0xdd, 0x8e, 0x6e, 0xb7, 0xeb, 0xdd, 0xfd, 0x5a, 0xd3, 0xb6, 0xee, + 0x37, 0x2b, 0x42, 0xf6, 0xa9, 0xa4, 0xb7, 0xdc, 0x1b, 0x70, 0x6d, 0x2e, 0x76, 0x94, 0xe7, 0xe2, + 0x3a, 0x68, 0x73, 0x31, 0x79, 0x43, 0xca, 0x3f, 0x51, 0xe0, 0xe2, 0x9c, 0x37, 0x64, 0xf2, 0x12, + 0xdc, 0xac, 0x1a, 0xfa, 0x6e, 0xdd, 0xb0, 0x2c, 0xdc, 0x28, 0xe8, 0x30, 0x30, 0x5b, 0x96, 0xcc, + 0x0d, 0xf5, 0x26, 0xbc, 0x30, 0x1f, 0x3d, 0x3a, 0x9a, 0x6f, 0xc0, 0xb5, 0xf9, 0xa8, 0xfc, 0xa8, + 0xce, 0x91, 0x32, 0x5c, 0x9f, 0x8f, 0x19, 0x1e, 0xf1, 0xf9, 0xf2, 0x6f, 0x2a, 0x70, 0x21, 0x5b, + 0x91, 0x43, 0xeb, 0x56, 0x6b, 0x5a, 0x1d, 0xbd, 0x5e, 0xb7, 0xdb, 0xba, 0xa9, 0x37, 0x6c, 0xa3, + 0x69, 0xb6, 0xea, 0xf5, 0xac, 0xa3, 0xed, 0x1a, 0x3c, 0x37, 0x1b, 0xd5, 0xaa, 0x98, 0xb5, 0x36, + 0xdd, 0xbd, 0x35, 0xb8, 0x3c, 0x1b, 0xcb, 0xa8, 0x55, 0x0c, 0x35, 0xb7, 0xf3, 0xe6, 0x8f, 0xfe, + 0xfe, 0xf2, 0x99, 0x1f, 0xbd, 0x77, 0x59, 0xf9, 0xe9, 0x7b, 0x97, 0x95, 0xbf, 0x7b, 0xef, 0xb2, + 0xf2, 0xb9, 0x17, 0x4f, 0x97, 0x22, 0x0a, 0xe5, 0xfe, 0x87, 0x8b, 0x78, 0x43, 0x79, 0xe5, 0x3f, + 0x03, 0x00, 0x00, 0xff, 0xff, 0x09, 0xed, 0xed, 0x8d, 0x2e, 0xbf, 0x01, 0x00, } func (this *PluginSpecV1) Equal(that interface{}) bool { @@ -34564,6 +34575,27 @@ func (m *RoleConditions) MarshalToSizedBuffer(dAtA []byte) (int, error) { i -= len(m.XXX_unrecognized) copy(dAtA[i:], m.XXX_unrecognized) } + if len(m.WorkloadIdentityLabelsExpression) > 0 { + i -= len(m.WorkloadIdentityLabelsExpression) + copy(dAtA[i:], m.WorkloadIdentityLabelsExpression) + i = encodeVarintTypes(dAtA, i, uint64(len(m.WorkloadIdentityLabelsExpression))) + i-- + dAtA[i] = 0x2 + i-- + dAtA[i] = 0xea + } + { + size := m.WorkloadIdentityLabels.Size() + i -= size + if _, err := m.WorkloadIdentityLabels.MarshalTo(dAtA[i:]); err != nil { + return 0, err + } + i = encodeVarintTypes(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x2 + i-- + dAtA[i] = 0xe2 if len(m.GitHubPermissions) > 0 { for iNdEx := len(m.GitHubPermissions) - 1; iNdEx >= 0; iNdEx-- { { @@ -36147,12 +36179,12 @@ func (m *UserSpecV2) MarshalToSizedBuffer(dAtA []byte) (int, error) { } i-- dAtA[i] = 0x42 - n192, err192 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.Expires, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.Expires):]) - if err192 != nil { - return 0, err192 + n193, err193 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.Expires, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.Expires):]) + if err193 != nil { + return 0, err193 } - i -= n192 - i = encodeVarintTypes(dAtA, i, uint64(n192)) + i -= n193 + i = encodeVarintTypes(dAtA, i, uint64(n193)) i-- dAtA[i] = 0x3a { @@ -36308,21 +36340,21 @@ func (m *LoginStatus) MarshalToSizedBuffer(dAtA []byte) (int, error) { i -= len(m.XXX_unrecognized) copy(dAtA[i:], m.XXX_unrecognized) } - n195, err195 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.LockExpires, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.LockExpires):]) - if err195 != nil { - return 0, err195 - } - i -= n195 - i = encodeVarintTypes(dAtA, i, uint64(n195)) - i-- - dAtA[i] = 0x22 - n196, err196 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.LockedTime, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.LockedTime):]) + n196, err196 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.LockExpires, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.LockExpires):]) if err196 != nil { return 0, err196 } i -= n196 i = encodeVarintTypes(dAtA, i, uint64(n196)) i-- + dAtA[i] = 0x22 + n197, err197 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.LockedTime, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.LockedTime):]) + if err197 != nil { + return 0, err197 + } + i -= n197 + i = encodeVarintTypes(dAtA, i, uint64(n197)) + i-- dAtA[i] = 0x1a if len(m.LockedMessage) > 0 { i -= len(m.LockedMessage) @@ -36378,12 +36410,12 @@ func (m *CreatedBy) MarshalToSizedBuffer(dAtA []byte) (int, error) { } i-- dAtA[i] = 0x1a - n198, err198 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.Time, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.Time):]) - if err198 != nil { - return 0, err198 + n199, err199 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.Time, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.Time):]) + if err199 != nil { + return 0, err199 } - i -= n198 - i = encodeVarintTypes(dAtA, i, uint64(n198)) + i -= n199 + i = encodeVarintTypes(dAtA, i, uint64(n199)) i-- dAtA[i] = 0x12 if m.Connector != nil { @@ -36501,21 +36533,21 @@ func (m *MFADevice) MarshalToSizedBuffer(dAtA []byte) (int, error) { } } } - n201, err201 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.LastUsed, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.LastUsed):]) - if err201 != nil { - return 0, err201 - } - i -= n201 - i = encodeVarintTypes(dAtA, i, uint64(n201)) - i-- - dAtA[i] = 0x3a - n202, err202 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.AddedAt, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.AddedAt):]) + n202, err202 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.LastUsed, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.LastUsed):]) if err202 != nil { return 0, err202 } i -= n202 i = encodeVarintTypes(dAtA, i, uint64(n202)) i-- + dAtA[i] = 0x3a + n203, err203 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.AddedAt, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.AddedAt):]) + if err203 != nil { + return 0, err203 + } + i -= n203 + i = encodeVarintTypes(dAtA, i, uint64(n203)) + i-- dAtA[i] = 0x32 if len(m.Id) > 0 { i -= len(m.Id) @@ -37211,12 +37243,12 @@ func (m *TunnelConnectionSpecV2) MarshalToSizedBuffer(dAtA []byte) (int, error) i-- dAtA[i] = 0x22 } - n214, err214 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.LastHeartbeat, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.LastHeartbeat):]) - if err214 != nil { - return 0, err214 + n215, err215 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.LastHeartbeat, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.LastHeartbeat):]) + if err215 != nil { + return 0, err215 } - i -= n214 - i = encodeVarintTypes(dAtA, i, uint64(n214)) + i -= n215 + i = encodeVarintTypes(dAtA, i, uint64(n215)) i-- dAtA[i] = 0x1a if len(m.ProxyName) > 0 { @@ -37308,12 +37340,12 @@ func (m *AcquireSemaphoreRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) i-- dAtA[i] = 0x2a } - n215, err215 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.Expires, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.Expires):]) - if err215 != nil { - return 0, err215 + n216, err216 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.Expires, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.Expires):]) + if err216 != nil { + return 0, err216 } - i -= n215 - i = encodeVarintTypes(dAtA, i, uint64(n215)) + i -= n216 + i = encodeVarintTypes(dAtA, i, uint64(n216)) i-- dAtA[i] = 0x22 if m.MaxLeases != 0 { @@ -37362,12 +37394,12 @@ func (m *SemaphoreLease) MarshalToSizedBuffer(dAtA []byte) (int, error) { i -= len(m.XXX_unrecognized) copy(dAtA[i:], m.XXX_unrecognized) } - n216, err216 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.Expires, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.Expires):]) - if err216 != nil { - return 0, err216 + n217, err217 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.Expires, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.Expires):]) + if err217 != nil { + return 0, err217 } - i -= n216 - i = encodeVarintTypes(dAtA, i, uint64(n216)) + i -= n217 + i = encodeVarintTypes(dAtA, i, uint64(n217)) i-- dAtA[i] = 0x2a if len(m.LeaseID) > 0 { @@ -37425,12 +37457,12 @@ func (m *SemaphoreLeaseRef) MarshalToSizedBuffer(dAtA []byte) (int, error) { i-- dAtA[i] = 0x1a } - n217, err217 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.Expires, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.Expires):]) - if err217 != nil { - return 0, err217 + n218, err218 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.Expires, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.Expires):]) + if err218 != nil { + return 0, err218 } - i -= n217 - i = encodeVarintTypes(dAtA, i, uint64(n217)) + i -= n218 + i = encodeVarintTypes(dAtA, i, uint64(n218)) i-- dAtA[i] = 0x12 if len(m.LeaseID) > 0 { @@ -37702,29 +37734,29 @@ func (m *WebSessionSpecV2) MarshalToSizedBuffer(dAtA []byte) (int, error) { i-- dAtA[i] = 0x48 } - n224, err224 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.LoginTime, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.LoginTime):]) - if err224 != nil { - return 0, err224 - } - i -= n224 - i = encodeVarintTypes(dAtA, i, uint64(n224)) - i-- - dAtA[i] = 0x42 - n225, err225 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.Expires, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.Expires):]) + n225, err225 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.LoginTime, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.LoginTime):]) if err225 != nil { return 0, err225 } i -= n225 i = encodeVarintTypes(dAtA, i, uint64(n225)) i-- - dAtA[i] = 0x3a - n226, err226 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.BearerTokenExpires, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.BearerTokenExpires):]) + dAtA[i] = 0x42 + n226, err226 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.Expires, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.Expires):]) if err226 != nil { return 0, err226 } i -= n226 i = encodeVarintTypes(dAtA, i, uint64(n226)) i-- + dAtA[i] = 0x3a + n227, err227 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.BearerTokenExpires, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.BearerTokenExpires):]) + if err227 != nil { + return 0, err227 + } + i -= n227 + i = encodeVarintTypes(dAtA, i, uint64(n227)) + i-- dAtA[i] = 0x32 if len(m.BearerToken) > 0 { i -= len(m.BearerToken) @@ -37956,21 +37988,21 @@ func (m *SAMLSessionData) MarshalToSizedBuffer(dAtA []byte) (int, error) { i-- dAtA[i] = 0x22 } - n227, err227 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.ExpireTime, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.ExpireTime):]) - if err227 != nil { - return 0, err227 - } - i -= n227 - i = encodeVarintTypes(dAtA, i, uint64(n227)) - i-- - dAtA[i] = 0x1a - n228, err228 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.CreateTime, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.CreateTime):]) + n228, err228 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.ExpireTime, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.ExpireTime):]) if err228 != nil { return 0, err228 } i -= n228 i = encodeVarintTypes(dAtA, i, uint64(n228)) i-- + dAtA[i] = 0x1a + n229, err229 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.CreateTime, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.CreateTime):]) + if err229 != nil { + return 0, err229 + } + i -= n229 + i = encodeVarintTypes(dAtA, i, uint64(n229)) + i-- dAtA[i] = 0x12 if len(m.ID) > 0 { i -= len(m.ID) @@ -38251,12 +38283,12 @@ func (m *RemoteClusterStatusV3) MarshalToSizedBuffer(dAtA []byte) (int, error) { i -= len(m.XXX_unrecognized) copy(dAtA[i:], m.XXX_unrecognized) } - n232, err232 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.LastHeartbeat, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.LastHeartbeat):]) - if err232 != nil { - return 0, err232 + n233, err233 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.LastHeartbeat, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.LastHeartbeat):]) + if err233 != nil { + return 0, err233 } - i -= n232 - i = encodeVarintTypes(dAtA, i, uint64(n232)) + i -= n233 + i = encodeVarintTypes(dAtA, i, uint64(n233)) i-- dAtA[i] = 0x12 if len(m.Connection) > 0 { @@ -41034,12 +41066,12 @@ func (m *GithubAuthRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { dAtA[i] = 0x62 } if m.Expires != nil { - n273, err273 := github_com_gogo_protobuf_types.StdTimeMarshalTo(*m.Expires, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(*m.Expires):]) - if err273 != nil { - return 0, err273 + n274, err274 := github_com_gogo_protobuf_types.StdTimeMarshalTo(*m.Expires, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(*m.Expires):]) + if err274 != nil { + return 0, err274 } - i -= n273 - i = encodeVarintTypes(dAtA, i, uint64(n273)) + i -= n274 + i = encodeVarintTypes(dAtA, i, uint64(n274)) i-- dAtA[i] = 0x5a } @@ -42058,21 +42090,21 @@ func (m *LockSpecV2) MarshalToSizedBuffer(dAtA []byte) (int, error) { i-- dAtA[i] = 0x2a } - n291, err291 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.CreatedAt, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.CreatedAt):]) - if err291 != nil { - return 0, err291 + n292, err292 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.CreatedAt, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.CreatedAt):]) + if err292 != nil { + return 0, err292 } - i -= n291 - i = encodeVarintTypes(dAtA, i, uint64(n291)) + i -= n292 + i = encodeVarintTypes(dAtA, i, uint64(n292)) i-- dAtA[i] = 0x22 if m.Expires != nil { - n292, err292 := github_com_gogo_protobuf_types.StdTimeMarshalTo(*m.Expires, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(*m.Expires):]) - if err292 != nil { - return 0, err292 + n293, err293 := github_com_gogo_protobuf_types.StdTimeMarshalTo(*m.Expires, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(*m.Expires):]) + if err293 != nil { + return 0, err293 } - i -= n292 - i = encodeVarintTypes(dAtA, i, uint64(n292)) + i -= n293 + i = encodeVarintTypes(dAtA, i, uint64(n293)) i-- dAtA[i] = 0x1a } @@ -42789,12 +42821,12 @@ func (m *RegisterUsingTokenRequest) MarshalToSizedBuffer(dAtA []byte) (int, erro dAtA[i] = 0x6a } if m.Expires != nil { - n304, err304 := github_com_gogo_protobuf_types.StdTimeMarshalTo(*m.Expires, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(*m.Expires):]) - if err304 != nil { - return 0, err304 + n305, err305 := github_com_gogo_protobuf_types.StdTimeMarshalTo(*m.Expires, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(*m.Expires):]) + if err305 != nil { + return 0, err305 } - i -= n304 - i = encodeVarintTypes(dAtA, i, uint64(n304)) + i -= n305 + i = encodeVarintTypes(dAtA, i, uint64(n305)) i-- dAtA[i] = 0x62 } @@ -42974,12 +43006,12 @@ func (m *RecoveryCodesSpecV1) MarshalToSizedBuffer(dAtA []byte) (int, error) { i -= len(m.XXX_unrecognized) copy(dAtA[i:], m.XXX_unrecognized) } - n307, err307 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.Created, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.Created):]) - if err307 != nil { - return 0, err307 + n308, err308 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.Created, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.Created):]) + if err308 != nil { + return 0, err308 } - i -= n307 - i = encodeVarintTypes(dAtA, i, uint64(n307)) + i -= n308 + i = encodeVarintTypes(dAtA, i, uint64(n308)) i-- dAtA[i] = 0x12 if len(m.Codes) > 0 { @@ -43359,21 +43391,21 @@ func (m *SessionTrackerSpecV1) MarshalToSizedBuffer(dAtA []byte) (int, error) { i-- dAtA[i] = 0x32 } - n311, err311 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.Expires, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.Expires):]) - if err311 != nil { - return 0, err311 - } - i -= n311 - i = encodeVarintTypes(dAtA, i, uint64(n311)) - i-- - dAtA[i] = 0x2a - n312, err312 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.Created, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.Created):]) + n312, err312 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.Expires, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.Expires):]) if err312 != nil { return 0, err312 } i -= n312 i = encodeVarintTypes(dAtA, i, uint64(n312)) i-- + dAtA[i] = 0x2a + n313, err313 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.Created, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.Created):]) + if err313 != nil { + return 0, err313 + } + i -= n313 + i = encodeVarintTypes(dAtA, i, uint64(n313)) + i-- dAtA[i] = 0x22 if m.State != 0 { i = encodeVarintTypes(dAtA, i, uint64(m.State)) @@ -43476,12 +43508,12 @@ func (m *Participant) MarshalToSizedBuffer(dAtA []byte) (int, error) { i -= len(m.XXX_unrecognized) copy(dAtA[i:], m.XXX_unrecognized) } - n313, err313 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.LastActive, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.LastActive):]) - if err313 != nil { - return 0, err313 + n314, err314 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.LastActive, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.LastActive):]) + if err314 != nil { + return 0, err314 } - i -= n313 - i = encodeVarintTypes(dAtA, i, uint64(n313)) + i -= n314 + i = encodeVarintTypes(dAtA, i, uint64(n314)) i-- dAtA[i] = 0x22 if len(m.Mode) > 0 { @@ -44193,12 +44225,12 @@ func (m *ClusterAlertSpec) MarshalToSizedBuffer(dAtA []byte) (int, error) { i -= len(m.XXX_unrecognized) copy(dAtA[i:], m.XXX_unrecognized) } - n326, err326 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.Created, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.Created):]) - if err326 != nil { - return 0, err326 + n327, err327 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.Created, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.Created):]) + if err327 != nil { + return 0, err327 } - i -= n326 - i = encodeVarintTypes(dAtA, i, uint64(n326)) + i -= n327 + i = encodeVarintTypes(dAtA, i, uint64(n327)) i-- dAtA[i] = 0x1a if len(m.Message) > 0 { @@ -44328,12 +44360,12 @@ func (m *AlertAcknowledgement) MarshalToSizedBuffer(dAtA []byte) (int, error) { i -= len(m.XXX_unrecognized) copy(dAtA[i:], m.XXX_unrecognized) } - n327, err327 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.Expires, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.Expires):]) - if err327 != nil { - return 0, err327 + n328, err328 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.Expires, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.Expires):]) + if err328 != nil { + return 0, err328 } - i -= n327 - i = encodeVarintTypes(dAtA, i, uint64(n327)) + i -= n328 + i = encodeVarintTypes(dAtA, i, uint64(n328)) i-- dAtA[i] = 0x22 if len(m.Reason) > 0 { @@ -46660,12 +46692,12 @@ func (m *PluginStatusV1) MarshalToSizedBuffer(dAtA []byte) (int, error) { i-- dAtA[i] = 0x32 } - n362, err362 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.LastSyncTime, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.LastSyncTime):]) - if err362 != nil { - return 0, err362 + n363, err363 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.LastSyncTime, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.LastSyncTime):]) + if err363 != nil { + return 0, err363 } - i -= n362 - i = encodeVarintTypes(dAtA, i, uint64(n362)) + i -= n363 + i = encodeVarintTypes(dAtA, i, uint64(n363)) i-- dAtA[i] = 0x1a if len(m.ErrorMessage) > 0 { @@ -47026,22 +47058,22 @@ func (m *PluginOktaStatusDetailsAppGroupSync) MarshalToSizedBuffer(dAtA []byte) dAtA[i] = 0x28 } if m.LastFailed != nil { - n372, err372 := github_com_gogo_protobuf_types.StdTimeMarshalTo(*m.LastFailed, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(*m.LastFailed):]) - if err372 != nil { - return 0, err372 + n373, err373 := github_com_gogo_protobuf_types.StdTimeMarshalTo(*m.LastFailed, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(*m.LastFailed):]) + if err373 != nil { + return 0, err373 } - i -= n372 - i = encodeVarintTypes(dAtA, i, uint64(n372)) + i -= n373 + i = encodeVarintTypes(dAtA, i, uint64(n373)) i-- dAtA[i] = 0x22 } if m.LastSuccessful != nil { - n373, err373 := github_com_gogo_protobuf_types.StdTimeMarshalTo(*m.LastSuccessful, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(*m.LastSuccessful):]) - if err373 != nil { - return 0, err373 + n374, err374 := github_com_gogo_protobuf_types.StdTimeMarshalTo(*m.LastSuccessful, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(*m.LastSuccessful):]) + if err374 != nil { + return 0, err374 } - i -= n373 - i = encodeVarintTypes(dAtA, i, uint64(n373)) + i -= n374 + i = encodeVarintTypes(dAtA, i, uint64(n374)) i-- dAtA[i] = 0x1a } @@ -47100,22 +47132,22 @@ func (m *PluginOktaStatusDetailsUsersSync) MarshalToSizedBuffer(dAtA []byte) (in dAtA[i] = 0x28 } if m.LastFailed != nil { - n374, err374 := github_com_gogo_protobuf_types.StdTimeMarshalTo(*m.LastFailed, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(*m.LastFailed):]) - if err374 != nil { - return 0, err374 + n375, err375 := github_com_gogo_protobuf_types.StdTimeMarshalTo(*m.LastFailed, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(*m.LastFailed):]) + if err375 != nil { + return 0, err375 } - i -= n374 - i = encodeVarintTypes(dAtA, i, uint64(n374)) + i -= n375 + i = encodeVarintTypes(dAtA, i, uint64(n375)) i-- dAtA[i] = 0x22 } if m.LastSuccessful != nil { - n375, err375 := github_com_gogo_protobuf_types.StdTimeMarshalTo(*m.LastSuccessful, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(*m.LastSuccessful):]) - if err375 != nil { - return 0, err375 + n376, err376 := github_com_gogo_protobuf_types.StdTimeMarshalTo(*m.LastSuccessful, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(*m.LastSuccessful):]) + if err376 != nil { + return 0, err376 } - i -= n375 - i = encodeVarintTypes(dAtA, i, uint64(n375)) + i -= n376 + i = encodeVarintTypes(dAtA, i, uint64(n376)) i-- dAtA[i] = 0x1a } @@ -47234,22 +47266,22 @@ func (m *PluginOktaStatusDetailsAccessListsSync) MarshalToSizedBuffer(dAtA []byt } } if m.LastFailed != nil { - n376, err376 := github_com_gogo_protobuf_types.StdTimeMarshalTo(*m.LastFailed, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(*m.LastFailed):]) - if err376 != nil { - return 0, err376 + n377, err377 := github_com_gogo_protobuf_types.StdTimeMarshalTo(*m.LastFailed, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(*m.LastFailed):]) + if err377 != nil { + return 0, err377 } - i -= n376 - i = encodeVarintTypes(dAtA, i, uint64(n376)) + i -= n377 + i = encodeVarintTypes(dAtA, i, uint64(n377)) i-- dAtA[i] = 0x22 } if m.LastSuccessful != nil { - n377, err377 := github_com_gogo_protobuf_types.StdTimeMarshalTo(*m.LastSuccessful, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(*m.LastSuccessful):]) - if err377 != nil { - return 0, err377 + n378, err378 := github_com_gogo_protobuf_types.StdTimeMarshalTo(*m.LastSuccessful, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(*m.LastSuccessful):]) + if err378 != nil { + return 0, err378 } - i -= n377 - i = encodeVarintTypes(dAtA, i, uint64(n377)) + i -= n378 + i = encodeVarintTypes(dAtA, i, uint64(n378)) i-- dAtA[i] = 0x1a } @@ -47415,12 +47447,12 @@ func (m *PluginOAuth2AccessTokenCredentials) MarshalToSizedBuffer(dAtA []byte) ( i -= len(m.XXX_unrecognized) copy(dAtA[i:], m.XXX_unrecognized) } - n382, err382 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.Expires, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.Expires):]) - if err382 != nil { - return 0, err382 + n383, err383 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.Expires, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.Expires):]) + if err383 != nil { + return 0, err383 } - i -= n382 - i = encodeVarintTypes(dAtA, i, uint64(n382)) + i -= n383 + i = encodeVarintTypes(dAtA, i, uint64(n383)) i-- dAtA[i] = 0x1a if len(m.RefreshToken) > 0 { @@ -48362,21 +48394,21 @@ func (m *ScheduledAgentUpgradeWindow) MarshalToSizedBuffer(dAtA []byte) (int, er i -= len(m.XXX_unrecognized) copy(dAtA[i:], m.XXX_unrecognized) } - n397, err397 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.Stop, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.Stop):]) - if err397 != nil { - return 0, err397 - } - i -= n397 - i = encodeVarintTypes(dAtA, i, uint64(n397)) - i-- - dAtA[i] = 0x12 - n398, err398 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.Start, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.Start):]) + n398, err398 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.Stop, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.Stop):]) if err398 != nil { return 0, err398 } i -= n398 i = encodeVarintTypes(dAtA, i, uint64(n398)) i-- + dAtA[i] = 0x12 + n399, err399 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.Start, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.Start):]) + if err399 != nil { + return 0, err399 + } + i -= n399 + i = encodeVarintTypes(dAtA, i, uint64(n399)) + i-- dAtA[i] = 0xa return len(dAtA) - i, nil } @@ -48802,12 +48834,12 @@ func (m *OktaAssignmentSpecV1) MarshalToSizedBuffer(dAtA []byte) (int, error) { i-- dAtA[i] = 0x30 } - n405, err405 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.LastTransition, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.LastTransition):]) - if err405 != nil { - return 0, err405 + n406, err406 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.LastTransition, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.LastTransition):]) + if err406 != nil { + return 0, err406 } - i -= n405 - i = encodeVarintTypes(dAtA, i, uint64(n405)) + i -= n406 + i = encodeVarintTypes(dAtA, i, uint64(n406)) i-- dAtA[i] = 0x2a if m.Status != 0 { @@ -48815,12 +48847,12 @@ func (m *OktaAssignmentSpecV1) MarshalToSizedBuffer(dAtA []byte) (int, error) { i-- dAtA[i] = 0x20 } - n406, err406 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.CleanupTime, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.CleanupTime):]) - if err406 != nil { - return 0, err406 + n407, err407 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.CleanupTime, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.CleanupTime):]) + if err407 != nil { + return 0, err407 } - i -= n406 - i = encodeVarintTypes(dAtA, i, uint64(n406)) + i -= n407 + i = encodeVarintTypes(dAtA, i, uint64(n407)) i-- dAtA[i] = 0x1a if len(m.Targets) > 0 { @@ -50330,12 +50362,12 @@ func (m *AccessGraphSync) MarshalToSizedBuffer(dAtA []byte) (int, error) { i -= len(m.XXX_unrecognized) copy(dAtA[i:], m.XXX_unrecognized) } - n431, err431 := github_com_gogo_protobuf_types.StdDurationMarshalTo(m.PollInterval, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdDuration(m.PollInterval):]) - if err431 != nil { - return 0, err431 + n432, err432 := github_com_gogo_protobuf_types.StdDurationMarshalTo(m.PollInterval, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdDuration(m.PollInterval):]) + if err432 != nil { + return 0, err432 } - i -= n431 - i = encodeVarintTypes(dAtA, i, uint64(n431)) + i -= n432 + i = encodeVarintTypes(dAtA, i, uint64(n432)) i-- dAtA[i] = 0x12 if len(m.AWS) > 0 { @@ -54740,6 +54772,12 @@ func (m *RoleConditions) Size() (n int) { n += 2 + l + sovTypes(uint64(l)) } } + l = m.WorkloadIdentityLabels.Size() + n += 2 + l + sovTypes(uint64(l)) + l = len(m.WorkloadIdentityLabelsExpression) + if l > 0 { + n += 2 + l + sovTypes(uint64(l)) + } if m.XXX_unrecognized != nil { n += len(m.XXX_unrecognized) } @@ -90707,6 +90745,71 @@ func (m *RoleConditions) Unmarshal(dAtA []byte) error { return err } iNdEx = postIndex + case 44: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field WorkloadIdentityLabels", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTypes + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthTypes + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.WorkloadIdentityLabels.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 45: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field WorkloadIdentityLabelsExpression", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthTypes + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthTypes + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.WorkloadIdentityLabelsExpression = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipTypes(dAtA[iNdEx:]) diff --git a/docs/pages/reference/operator-resources/resources.teleport.dev_roles.mdx b/docs/pages/reference/operator-resources/resources.teleport.dev_roles.mdx index 7a14c601ab10c..ed405c4443473 100644 --- a/docs/pages/reference/operator-resources/resources.teleport.dev_roles.mdx +++ b/docs/pages/reference/operator-resources/resources.teleport.dev_roles.mdx @@ -74,6 +74,8 @@ resource, which you can apply after installing the Teleport Kubernetes operator. |windows_desktop_labels|object|WindowsDesktopLabels are used in the RBAC system to allow/deny access to Windows desktops.| |windows_desktop_labels_expression|string|WindowsDesktopLabelsExpression is a predicate expression used to allow/deny access to Windows desktops.| |windows_desktop_logins|[]string|WindowsDesktopLogins is a list of desktop login names allowed/denied for Windows desktops.| +|workload_identity_labels|object|WorkloadIdentityLabels controls whether or not specific WorkloadIdentity resources can be invoked. Further authorization controls exist on the WorkloadIdentity resource itself.| +|workload_identity_labels_expression|string|WorkloadIdentityLabelsExpression is a predicate expression used to allow/deny access to issuing a WorkloadIdentity.| ### spec.allow.account_assignments items @@ -253,6 +255,8 @@ resource, which you can apply after installing the Teleport Kubernetes operator. |windows_desktop_labels|object|WindowsDesktopLabels are used in the RBAC system to allow/deny access to Windows desktops.| |windows_desktop_labels_expression|string|WindowsDesktopLabelsExpression is a predicate expression used to allow/deny access to Windows desktops.| |windows_desktop_logins|[]string|WindowsDesktopLogins is a list of desktop login names allowed/denied for Windows desktops.| +|workload_identity_labels|object|WorkloadIdentityLabels controls whether or not specific WorkloadIdentity resources can be invoked. Further authorization controls exist on the WorkloadIdentity resource itself.| +|workload_identity_labels_expression|string|WorkloadIdentityLabelsExpression is a predicate expression used to allow/deny access to issuing a WorkloadIdentity.| ### spec.deny.account_assignments items @@ -535,6 +539,8 @@ resource, which you can apply after installing the Teleport Kubernetes operator. |windows_desktop_labels|object|WindowsDesktopLabels are used in the RBAC system to allow/deny access to Windows desktops.| |windows_desktop_labels_expression|string|WindowsDesktopLabelsExpression is a predicate expression used to allow/deny access to Windows desktops.| |windows_desktop_logins|[]string|WindowsDesktopLogins is a list of desktop login names allowed/denied for Windows desktops.| +|workload_identity_labels|object|WorkloadIdentityLabels controls whether or not specific WorkloadIdentity resources can be invoked. Further authorization controls exist on the WorkloadIdentity resource itself.| +|workload_identity_labels_expression|string|WorkloadIdentityLabelsExpression is a predicate expression used to allow/deny access to issuing a WorkloadIdentity.| ### spec.allow.account_assignments items @@ -714,6 +720,8 @@ resource, which you can apply after installing the Teleport Kubernetes operator. |windows_desktop_labels|object|WindowsDesktopLabels are used in the RBAC system to allow/deny access to Windows desktops.| |windows_desktop_labels_expression|string|WindowsDesktopLabelsExpression is a predicate expression used to allow/deny access to Windows desktops.| |windows_desktop_logins|[]string|WindowsDesktopLogins is a list of desktop login names allowed/denied for Windows desktops.| +|workload_identity_labels|object|WorkloadIdentityLabels controls whether or not specific WorkloadIdentity resources can be invoked. Further authorization controls exist on the WorkloadIdentity resource itself.| +|workload_identity_labels_expression|string|WorkloadIdentityLabelsExpression is a predicate expression used to allow/deny access to issuing a WorkloadIdentity.| ### spec.deny.account_assignments items diff --git a/docs/pages/reference/operator-resources/resources.teleport.dev_rolesv6.mdx b/docs/pages/reference/operator-resources/resources.teleport.dev_rolesv6.mdx index 5f6344d85a1c8..be0ef826e851f 100644 --- a/docs/pages/reference/operator-resources/resources.teleport.dev_rolesv6.mdx +++ b/docs/pages/reference/operator-resources/resources.teleport.dev_rolesv6.mdx @@ -74,6 +74,8 @@ resource, which you can apply after installing the Teleport Kubernetes operator. |windows_desktop_labels|object|WindowsDesktopLabels are used in the RBAC system to allow/deny access to Windows desktops.| |windows_desktop_labels_expression|string|WindowsDesktopLabelsExpression is a predicate expression used to allow/deny access to Windows desktops.| |windows_desktop_logins|[]string|WindowsDesktopLogins is a list of desktop login names allowed/denied for Windows desktops.| +|workload_identity_labels|object|WorkloadIdentityLabels controls whether or not specific WorkloadIdentity resources can be invoked. Further authorization controls exist on the WorkloadIdentity resource itself.| +|workload_identity_labels_expression|string|WorkloadIdentityLabelsExpression is a predicate expression used to allow/deny access to issuing a WorkloadIdentity.| ### spec.allow.account_assignments items @@ -253,6 +255,8 @@ resource, which you can apply after installing the Teleport Kubernetes operator. |windows_desktop_labels|object|WindowsDesktopLabels are used in the RBAC system to allow/deny access to Windows desktops.| |windows_desktop_labels_expression|string|WindowsDesktopLabelsExpression is a predicate expression used to allow/deny access to Windows desktops.| |windows_desktop_logins|[]string|WindowsDesktopLogins is a list of desktop login names allowed/denied for Windows desktops.| +|workload_identity_labels|object|WorkloadIdentityLabels controls whether or not specific WorkloadIdentity resources can be invoked. Further authorization controls exist on the WorkloadIdentity resource itself.| +|workload_identity_labels_expression|string|WorkloadIdentityLabelsExpression is a predicate expression used to allow/deny access to issuing a WorkloadIdentity.| ### spec.deny.account_assignments items diff --git a/docs/pages/reference/operator-resources/resources.teleport.dev_rolesv7.mdx b/docs/pages/reference/operator-resources/resources.teleport.dev_rolesv7.mdx index 311ee13440390..f2f32d32f06f3 100644 --- a/docs/pages/reference/operator-resources/resources.teleport.dev_rolesv7.mdx +++ b/docs/pages/reference/operator-resources/resources.teleport.dev_rolesv7.mdx @@ -74,6 +74,8 @@ resource, which you can apply after installing the Teleport Kubernetes operator. |windows_desktop_labels|object|WindowsDesktopLabels are used in the RBAC system to allow/deny access to Windows desktops.| |windows_desktop_labels_expression|string|WindowsDesktopLabelsExpression is a predicate expression used to allow/deny access to Windows desktops.| |windows_desktop_logins|[]string|WindowsDesktopLogins is a list of desktop login names allowed/denied for Windows desktops.| +|workload_identity_labels|object|WorkloadIdentityLabels controls whether or not specific WorkloadIdentity resources can be invoked. Further authorization controls exist on the WorkloadIdentity resource itself.| +|workload_identity_labels_expression|string|WorkloadIdentityLabelsExpression is a predicate expression used to allow/deny access to issuing a WorkloadIdentity.| ### spec.allow.account_assignments items @@ -253,6 +255,8 @@ resource, which you can apply after installing the Teleport Kubernetes operator. |windows_desktop_labels|object|WindowsDesktopLabels are used in the RBAC system to allow/deny access to Windows desktops.| |windows_desktop_labels_expression|string|WindowsDesktopLabelsExpression is a predicate expression used to allow/deny access to Windows desktops.| |windows_desktop_logins|[]string|WindowsDesktopLogins is a list of desktop login names allowed/denied for Windows desktops.| +|workload_identity_labels|object|WorkloadIdentityLabels controls whether or not specific WorkloadIdentity resources can be invoked. Further authorization controls exist on the WorkloadIdentity resource itself.| +|workload_identity_labels_expression|string|WorkloadIdentityLabelsExpression is a predicate expression used to allow/deny access to issuing a WorkloadIdentity.| ### spec.deny.account_assignments items diff --git a/docs/pages/reference/terraform-provider/data-sources/role.mdx b/docs/pages/reference/terraform-provider/data-sources/role.mdx index 110330e0dc01d..c79cebff80852 100644 --- a/docs/pages/reference/terraform-provider/data-sources/role.mdx +++ b/docs/pages/reference/terraform-provider/data-sources/role.mdx @@ -89,6 +89,8 @@ Optional: - `windows_desktop_labels` (Map of List of String) WindowsDesktopLabels are used in the RBAC system to allow/deny access to Windows desktops. - `windows_desktop_labels_expression` (String) WindowsDesktopLabelsExpression is a predicate expression used to allow/deny access to Windows desktops. - `windows_desktop_logins` (List of String) WindowsDesktopLogins is a list of desktop login names allowed/denied for Windows desktops. +- `workload_identity_labels` (Map of List of String) WorkloadIdentityLabels controls whether or not specific WorkloadIdentity resources can be invoked. Further authorization controls exist on the WorkloadIdentity resource itself. +- `workload_identity_labels_expression` (String) WorkloadIdentityLabelsExpression is a predicate expression used to allow/deny access to issuing a WorkloadIdentity. ### Nested Schema for `spec.allow.account_assignments` @@ -285,6 +287,8 @@ Optional: - `windows_desktop_labels` (Map of List of String) WindowsDesktopLabels are used in the RBAC system to allow/deny access to Windows desktops. - `windows_desktop_labels_expression` (String) WindowsDesktopLabelsExpression is a predicate expression used to allow/deny access to Windows desktops. - `windows_desktop_logins` (List of String) WindowsDesktopLogins is a list of desktop login names allowed/denied for Windows desktops. +- `workload_identity_labels` (Map of List of String) WorkloadIdentityLabels controls whether or not specific WorkloadIdentity resources can be invoked. Further authorization controls exist on the WorkloadIdentity resource itself. +- `workload_identity_labels_expression` (String) WorkloadIdentityLabelsExpression is a predicate expression used to allow/deny access to issuing a WorkloadIdentity. ### Nested Schema for `spec.deny.account_assignments` diff --git a/docs/pages/reference/terraform-provider/resources/role.mdx b/docs/pages/reference/terraform-provider/resources/role.mdx index 5778c9924d832..3d573fa65646b 100644 --- a/docs/pages/reference/terraform-provider/resources/role.mdx +++ b/docs/pages/reference/terraform-provider/resources/role.mdx @@ -143,6 +143,8 @@ Optional: - `windows_desktop_labels` (Map of List of String) WindowsDesktopLabels are used in the RBAC system to allow/deny access to Windows desktops. - `windows_desktop_labels_expression` (String) WindowsDesktopLabelsExpression is a predicate expression used to allow/deny access to Windows desktops. - `windows_desktop_logins` (List of String) WindowsDesktopLogins is a list of desktop login names allowed/denied for Windows desktops. +- `workload_identity_labels` (Map of List of String) WorkloadIdentityLabels controls whether or not specific WorkloadIdentity resources can be invoked. Further authorization controls exist on the WorkloadIdentity resource itself. +- `workload_identity_labels_expression` (String) WorkloadIdentityLabelsExpression is a predicate expression used to allow/deny access to issuing a WorkloadIdentity. ### Nested Schema for `spec.allow.account_assignments` @@ -339,6 +341,8 @@ Optional: - `windows_desktop_labels` (Map of List of String) WindowsDesktopLabels are used in the RBAC system to allow/deny access to Windows desktops. - `windows_desktop_labels_expression` (String) WindowsDesktopLabelsExpression is a predicate expression used to allow/deny access to Windows desktops. - `windows_desktop_logins` (List of String) WindowsDesktopLogins is a list of desktop login names allowed/denied for Windows desktops. +- `workload_identity_labels` (Map of List of String) WorkloadIdentityLabels controls whether or not specific WorkloadIdentity resources can be invoked. Further authorization controls exist on the WorkloadIdentity resource itself. +- `workload_identity_labels_expression` (String) WorkloadIdentityLabelsExpression is a predicate expression used to allow/deny access to issuing a WorkloadIdentity. ### Nested Schema for `spec.deny.account_assignments` diff --git a/examples/chart/teleport-cluster/charts/teleport-operator/operator-crds/resources.teleport.dev_roles.yaml b/examples/chart/teleport-cluster/charts/teleport-operator/operator-crds/resources.teleport.dev_roles.yaml index 1cafc3ae4534a..9e3a0f46e9334 100644 --- a/examples/chart/teleport-cluster/charts/teleport-operator/operator-crds/resources.teleport.dev_roles.yaml +++ b/examples/chart/teleport-cluster/charts/teleport-operator/operator-crds/resources.teleport.dev_roles.yaml @@ -607,6 +607,17 @@ spec: type: string nullable: true type: array + workload_identity_labels: + additionalProperties: + x-kubernetes-preserve-unknown-fields: true + description: WorkloadIdentityLabels controls whether or not specific + WorkloadIdentity resources can be invoked. Further authorization + controls exist on the WorkloadIdentity resource itself. + type: object + workload_identity_labels_expression: + description: WorkloadIdentityLabelsExpression is a predicate expression + used to allow/deny access to issuing a WorkloadIdentity. + type: string type: object deny: description: Deny is the set of conditions evaluated to deny access. @@ -1184,6 +1195,17 @@ spec: type: string nullable: true type: array + workload_identity_labels: + additionalProperties: + x-kubernetes-preserve-unknown-fields: true + description: WorkloadIdentityLabels controls whether or not specific + WorkloadIdentity resources can be invoked. Further authorization + controls exist on the WorkloadIdentity resource itself. + type: object + workload_identity_labels_expression: + description: WorkloadIdentityLabelsExpression is a predicate expression + used to allow/deny access to issuing a WorkloadIdentity. + type: string type: object options: description: Options is for OpenSSH options like agent forwarding. @@ -2058,6 +2080,17 @@ spec: type: string nullable: true type: array + workload_identity_labels: + additionalProperties: + x-kubernetes-preserve-unknown-fields: true + description: WorkloadIdentityLabels controls whether or not specific + WorkloadIdentity resources can be invoked. Further authorization + controls exist on the WorkloadIdentity resource itself. + type: object + workload_identity_labels_expression: + description: WorkloadIdentityLabelsExpression is a predicate expression + used to allow/deny access to issuing a WorkloadIdentity. + type: string type: object deny: description: Deny is the set of conditions evaluated to deny access. @@ -2635,6 +2668,17 @@ spec: type: string nullable: true type: array + workload_identity_labels: + additionalProperties: + x-kubernetes-preserve-unknown-fields: true + description: WorkloadIdentityLabels controls whether or not specific + WorkloadIdentity resources can be invoked. Further authorization + controls exist on the WorkloadIdentity resource itself. + type: object + workload_identity_labels_expression: + description: WorkloadIdentityLabelsExpression is a predicate expression + used to allow/deny access to issuing a WorkloadIdentity. + type: string type: object options: description: Options is for OpenSSH options like agent forwarding. diff --git a/examples/chart/teleport-cluster/charts/teleport-operator/operator-crds/resources.teleport.dev_rolesv6.yaml b/examples/chart/teleport-cluster/charts/teleport-operator/operator-crds/resources.teleport.dev_rolesv6.yaml index 652c82fc05f7d..5e1ff2a359184 100644 --- a/examples/chart/teleport-cluster/charts/teleport-operator/operator-crds/resources.teleport.dev_rolesv6.yaml +++ b/examples/chart/teleport-cluster/charts/teleport-operator/operator-crds/resources.teleport.dev_rolesv6.yaml @@ -610,6 +610,17 @@ spec: type: string nullable: true type: array + workload_identity_labels: + additionalProperties: + x-kubernetes-preserve-unknown-fields: true + description: WorkloadIdentityLabels controls whether or not specific + WorkloadIdentity resources can be invoked. Further authorization + controls exist on the WorkloadIdentity resource itself. + type: object + workload_identity_labels_expression: + description: WorkloadIdentityLabelsExpression is a predicate expression + used to allow/deny access to issuing a WorkloadIdentity. + type: string type: object deny: description: Deny is the set of conditions evaluated to deny access. @@ -1187,6 +1198,17 @@ spec: type: string nullable: true type: array + workload_identity_labels: + additionalProperties: + x-kubernetes-preserve-unknown-fields: true + description: WorkloadIdentityLabels controls whether or not specific + WorkloadIdentity resources can be invoked. Further authorization + controls exist on the WorkloadIdentity resource itself. + type: object + workload_identity_labels_expression: + description: WorkloadIdentityLabelsExpression is a predicate expression + used to allow/deny access to issuing a WorkloadIdentity. + type: string type: object options: description: Options is for OpenSSH options like agent forwarding. diff --git a/examples/chart/teleport-cluster/charts/teleport-operator/operator-crds/resources.teleport.dev_rolesv7.yaml b/examples/chart/teleport-cluster/charts/teleport-operator/operator-crds/resources.teleport.dev_rolesv7.yaml index 53f89036374f4..fb682402d11e3 100644 --- a/examples/chart/teleport-cluster/charts/teleport-operator/operator-crds/resources.teleport.dev_rolesv7.yaml +++ b/examples/chart/teleport-cluster/charts/teleport-operator/operator-crds/resources.teleport.dev_rolesv7.yaml @@ -610,6 +610,17 @@ spec: type: string nullable: true type: array + workload_identity_labels: + additionalProperties: + x-kubernetes-preserve-unknown-fields: true + description: WorkloadIdentityLabels controls whether or not specific + WorkloadIdentity resources can be invoked. Further authorization + controls exist on the WorkloadIdentity resource itself. + type: object + workload_identity_labels_expression: + description: WorkloadIdentityLabelsExpression is a predicate expression + used to allow/deny access to issuing a WorkloadIdentity. + type: string type: object deny: description: Deny is the set of conditions evaluated to deny access. @@ -1187,6 +1198,17 @@ spec: type: string nullable: true type: array + workload_identity_labels: + additionalProperties: + x-kubernetes-preserve-unknown-fields: true + description: WorkloadIdentityLabels controls whether or not specific + WorkloadIdentity resources can be invoked. Further authorization + controls exist on the WorkloadIdentity resource itself. + type: object + workload_identity_labels_expression: + description: WorkloadIdentityLabelsExpression is a predicate expression + used to allow/deny access to issuing a WorkloadIdentity. + type: string type: object options: description: Options is for OpenSSH options like agent forwarding. diff --git a/integrations/operator/config/crd/bases/resources.teleport.dev_roles.yaml b/integrations/operator/config/crd/bases/resources.teleport.dev_roles.yaml index 1cafc3ae4534a..9e3a0f46e9334 100644 --- a/integrations/operator/config/crd/bases/resources.teleport.dev_roles.yaml +++ b/integrations/operator/config/crd/bases/resources.teleport.dev_roles.yaml @@ -607,6 +607,17 @@ spec: type: string nullable: true type: array + workload_identity_labels: + additionalProperties: + x-kubernetes-preserve-unknown-fields: true + description: WorkloadIdentityLabels controls whether or not specific + WorkloadIdentity resources can be invoked. Further authorization + controls exist on the WorkloadIdentity resource itself. + type: object + workload_identity_labels_expression: + description: WorkloadIdentityLabelsExpression is a predicate expression + used to allow/deny access to issuing a WorkloadIdentity. + type: string type: object deny: description: Deny is the set of conditions evaluated to deny access. @@ -1184,6 +1195,17 @@ spec: type: string nullable: true type: array + workload_identity_labels: + additionalProperties: + x-kubernetes-preserve-unknown-fields: true + description: WorkloadIdentityLabels controls whether or not specific + WorkloadIdentity resources can be invoked. Further authorization + controls exist on the WorkloadIdentity resource itself. + type: object + workload_identity_labels_expression: + description: WorkloadIdentityLabelsExpression is a predicate expression + used to allow/deny access to issuing a WorkloadIdentity. + type: string type: object options: description: Options is for OpenSSH options like agent forwarding. @@ -2058,6 +2080,17 @@ spec: type: string nullable: true type: array + workload_identity_labels: + additionalProperties: + x-kubernetes-preserve-unknown-fields: true + description: WorkloadIdentityLabels controls whether or not specific + WorkloadIdentity resources can be invoked. Further authorization + controls exist on the WorkloadIdentity resource itself. + type: object + workload_identity_labels_expression: + description: WorkloadIdentityLabelsExpression is a predicate expression + used to allow/deny access to issuing a WorkloadIdentity. + type: string type: object deny: description: Deny is the set of conditions evaluated to deny access. @@ -2635,6 +2668,17 @@ spec: type: string nullable: true type: array + workload_identity_labels: + additionalProperties: + x-kubernetes-preserve-unknown-fields: true + description: WorkloadIdentityLabels controls whether or not specific + WorkloadIdentity resources can be invoked. Further authorization + controls exist on the WorkloadIdentity resource itself. + type: object + workload_identity_labels_expression: + description: WorkloadIdentityLabelsExpression is a predicate expression + used to allow/deny access to issuing a WorkloadIdentity. + type: string type: object options: description: Options is for OpenSSH options like agent forwarding. diff --git a/integrations/operator/config/crd/bases/resources.teleport.dev_rolesv6.yaml b/integrations/operator/config/crd/bases/resources.teleport.dev_rolesv6.yaml index 652c82fc05f7d..5e1ff2a359184 100644 --- a/integrations/operator/config/crd/bases/resources.teleport.dev_rolesv6.yaml +++ b/integrations/operator/config/crd/bases/resources.teleport.dev_rolesv6.yaml @@ -610,6 +610,17 @@ spec: type: string nullable: true type: array + workload_identity_labels: + additionalProperties: + x-kubernetes-preserve-unknown-fields: true + description: WorkloadIdentityLabels controls whether or not specific + WorkloadIdentity resources can be invoked. Further authorization + controls exist on the WorkloadIdentity resource itself. + type: object + workload_identity_labels_expression: + description: WorkloadIdentityLabelsExpression is a predicate expression + used to allow/deny access to issuing a WorkloadIdentity. + type: string type: object deny: description: Deny is the set of conditions evaluated to deny access. @@ -1187,6 +1198,17 @@ spec: type: string nullable: true type: array + workload_identity_labels: + additionalProperties: + x-kubernetes-preserve-unknown-fields: true + description: WorkloadIdentityLabels controls whether or not specific + WorkloadIdentity resources can be invoked. Further authorization + controls exist on the WorkloadIdentity resource itself. + type: object + workload_identity_labels_expression: + description: WorkloadIdentityLabelsExpression is a predicate expression + used to allow/deny access to issuing a WorkloadIdentity. + type: string type: object options: description: Options is for OpenSSH options like agent forwarding. diff --git a/integrations/operator/config/crd/bases/resources.teleport.dev_rolesv7.yaml b/integrations/operator/config/crd/bases/resources.teleport.dev_rolesv7.yaml index 53f89036374f4..fb682402d11e3 100644 --- a/integrations/operator/config/crd/bases/resources.teleport.dev_rolesv7.yaml +++ b/integrations/operator/config/crd/bases/resources.teleport.dev_rolesv7.yaml @@ -610,6 +610,17 @@ spec: type: string nullable: true type: array + workload_identity_labels: + additionalProperties: + x-kubernetes-preserve-unknown-fields: true + description: WorkloadIdentityLabels controls whether or not specific + WorkloadIdentity resources can be invoked. Further authorization + controls exist on the WorkloadIdentity resource itself. + type: object + workload_identity_labels_expression: + description: WorkloadIdentityLabelsExpression is a predicate expression + used to allow/deny access to issuing a WorkloadIdentity. + type: string type: object deny: description: Deny is the set of conditions evaluated to deny access. @@ -1187,6 +1198,17 @@ spec: type: string nullable: true type: array + workload_identity_labels: + additionalProperties: + x-kubernetes-preserve-unknown-fields: true + description: WorkloadIdentityLabels controls whether or not specific + WorkloadIdentity resources can be invoked. Further authorization + controls exist on the WorkloadIdentity resource itself. + type: object + workload_identity_labels_expression: + description: WorkloadIdentityLabelsExpression is a predicate expression + used to allow/deny access to issuing a WorkloadIdentity. + type: string type: object options: description: Options is for OpenSSH options like agent forwarding. diff --git a/integrations/terraform/tfschema/types_terraform.go b/integrations/terraform/tfschema/types_terraform.go index baadbc04b34f3..dcc27576c8159 100644 --- a/integrations/terraform/tfschema/types_terraform.go +++ b/integrations/terraform/tfschema/types_terraform.go @@ -2075,6 +2075,15 @@ func GenSchemaRoleV6(ctx context.Context) (github_com_hashicorp_terraform_plugin Optional: true, Type: github_com_hashicorp_terraform_plugin_framework_types.ListType{ElemType: github_com_hashicorp_terraform_plugin_framework_types.StringType}, }, + "workload_identity_labels": GenSchemaLabels(ctx, github_com_hashicorp_terraform_plugin_framework_tfsdk.Attribute{ + Description: "WorkloadIdentityLabels controls whether or not specific WorkloadIdentity resources can be invoked. Further authorization controls exist on the WorkloadIdentity resource itself.", + Optional: true, + }), + "workload_identity_labels_expression": { + Description: "WorkloadIdentityLabelsExpression is a predicate expression used to allow/deny access to issuing a WorkloadIdentity.", + Optional: true, + Type: github_com_hashicorp_terraform_plugin_framework_types.StringType, + }, }), Description: "Allow is the set of conditions evaluated to grant access.", Optional: true, @@ -2551,6 +2560,15 @@ func GenSchemaRoleV6(ctx context.Context) (github_com_hashicorp_terraform_plugin Optional: true, Type: github_com_hashicorp_terraform_plugin_framework_types.ListType{ElemType: github_com_hashicorp_terraform_plugin_framework_types.StringType}, }, + "workload_identity_labels": GenSchemaLabels(ctx, github_com_hashicorp_terraform_plugin_framework_tfsdk.Attribute{ + Description: "WorkloadIdentityLabels controls whether or not specific WorkloadIdentity resources can be invoked. Further authorization controls exist on the WorkloadIdentity resource itself.", + Optional: true, + }), + "workload_identity_labels_expression": { + Description: "WorkloadIdentityLabelsExpression is a predicate expression used to allow/deny access to issuing a WorkloadIdentity.", + Optional: true, + Type: github_com_hashicorp_terraform_plugin_framework_types.StringType, + }, }), Description: "Deny is the set of conditions evaluated to deny access. Deny takes priority over allow.", Optional: true, @@ -19152,6 +19170,30 @@ func CopyRoleV6FromTerraform(_ context.Context, tf github_com_hashicorp_terrafor } } } + { + a, ok := tf.Attrs["workload_identity_labels"] + if !ok { + diags.Append(attrReadMissingDiag{"RoleV6.Spec.Allow.WorkloadIdentityLabels"}) + } + CopyFromLabels(diags, a, &obj.WorkloadIdentityLabels) + } + { + a, ok := tf.Attrs["workload_identity_labels_expression"] + if !ok { + diags.Append(attrReadMissingDiag{"RoleV6.Spec.Allow.WorkloadIdentityLabelsExpression"}) + } else { + v, ok := a.(github_com_hashicorp_terraform_plugin_framework_types.String) + if !ok { + diags.Append(attrReadConversionFailureDiag{"RoleV6.Spec.Allow.WorkloadIdentityLabelsExpression", "github.com/hashicorp/terraform-plugin-framework/types.String"}) + } else { + var t string + if !v.Null && !v.Unknown { + t = string(v.Value) + } + obj.WorkloadIdentityLabelsExpression = t + } + } + } } } } @@ -21156,6 +21198,30 @@ func CopyRoleV6FromTerraform(_ context.Context, tf github_com_hashicorp_terrafor } } } + { + a, ok := tf.Attrs["workload_identity_labels"] + if !ok { + diags.Append(attrReadMissingDiag{"RoleV6.Spec.Deny.WorkloadIdentityLabels"}) + } + CopyFromLabels(diags, a, &obj.WorkloadIdentityLabels) + } + { + a, ok := tf.Attrs["workload_identity_labels_expression"] + if !ok { + diags.Append(attrReadMissingDiag{"RoleV6.Spec.Deny.WorkloadIdentityLabelsExpression"}) + } else { + v, ok := a.(github_com_hashicorp_terraform_plugin_framework_types.String) + if !ok { + diags.Append(attrReadConversionFailureDiag{"RoleV6.Spec.Deny.WorkloadIdentityLabelsExpression", "github.com/hashicorp/terraform-plugin-framework/types.String"}) + } else { + var t string + if !v.Null && !v.Unknown { + t = string(v.Value) + } + obj.WorkloadIdentityLabelsExpression = t + } + } + } } } } @@ -25943,6 +26009,37 @@ func CopyRoleV6ToTerraform(ctx context.Context, obj *github_com_gravitational_te } } } + { + t, ok := tf.AttrTypes["workload_identity_labels"] + if !ok { + diags.Append(attrWriteMissingDiag{"RoleV6.Spec.Allow.WorkloadIdentityLabels"}) + } else { + v := CopyToLabels(diags, obj.WorkloadIdentityLabels, t, tf.Attrs["workload_identity_labels"]) + tf.Attrs["workload_identity_labels"] = v + } + } + { + t, ok := tf.AttrTypes["workload_identity_labels_expression"] + if !ok { + diags.Append(attrWriteMissingDiag{"RoleV6.Spec.Allow.WorkloadIdentityLabelsExpression"}) + } else { + v, ok := tf.Attrs["workload_identity_labels_expression"].(github_com_hashicorp_terraform_plugin_framework_types.String) + if !ok { + i, err := t.ValueFromTerraform(ctx, github_com_hashicorp_terraform_plugin_go_tftypes.NewValue(t.TerraformType(ctx), nil)) + if err != nil { + diags.Append(attrWriteGeneralError{"RoleV6.Spec.Allow.WorkloadIdentityLabelsExpression", err}) + } + v, ok = i.(github_com_hashicorp_terraform_plugin_framework_types.String) + if !ok { + diags.Append(attrWriteConversionFailureDiag{"RoleV6.Spec.Allow.WorkloadIdentityLabelsExpression", "github.com/hashicorp/terraform-plugin-framework/types.String"}) + } + v.Null = string(obj.WorkloadIdentityLabelsExpression) == "" + } + v.Value = string(obj.WorkloadIdentityLabelsExpression) + v.Unknown = false + tf.Attrs["workload_identity_labels_expression"] = v + } + } } v.Unknown = false tf.Attrs["allow"] = v @@ -29450,6 +29547,37 @@ func CopyRoleV6ToTerraform(ctx context.Context, obj *github_com_gravitational_te } } } + { + t, ok := tf.AttrTypes["workload_identity_labels"] + if !ok { + diags.Append(attrWriteMissingDiag{"RoleV6.Spec.Deny.WorkloadIdentityLabels"}) + } else { + v := CopyToLabels(diags, obj.WorkloadIdentityLabels, t, tf.Attrs["workload_identity_labels"]) + tf.Attrs["workload_identity_labels"] = v + } + } + { + t, ok := tf.AttrTypes["workload_identity_labels_expression"] + if !ok { + diags.Append(attrWriteMissingDiag{"RoleV6.Spec.Deny.WorkloadIdentityLabelsExpression"}) + } else { + v, ok := tf.Attrs["workload_identity_labels_expression"].(github_com_hashicorp_terraform_plugin_framework_types.String) + if !ok { + i, err := t.ValueFromTerraform(ctx, github_com_hashicorp_terraform_plugin_go_tftypes.NewValue(t.TerraformType(ctx), nil)) + if err != nil { + diags.Append(attrWriteGeneralError{"RoleV6.Spec.Deny.WorkloadIdentityLabelsExpression", err}) + } + v, ok = i.(github_com_hashicorp_terraform_plugin_framework_types.String) + if !ok { + diags.Append(attrWriteConversionFailureDiag{"RoleV6.Spec.Deny.WorkloadIdentityLabelsExpression", "github.com/hashicorp/terraform-plugin-framework/types.String"}) + } + v.Null = string(obj.WorkloadIdentityLabelsExpression) == "" + } + v.Value = string(obj.WorkloadIdentityLabelsExpression) + v.Unknown = false + tf.Attrs["workload_identity_labels_expression"] = v + } + } } v.Unknown = false tf.Attrs["deny"] = v diff --git a/lib/services/access_checker_test.go b/lib/services/access_checker_test.go index 86b49d07d5cb0..41b3bc8aaad59 100644 --- a/lib/services/access_checker_test.go +++ b/lib/services/access_checker_test.go @@ -24,6 +24,8 @@ import ( "github.com/stretchr/testify/require" + headerv1 "github.com/gravitational/teleport/api/gen/proto/go/teleport/header/v1" + workloadidentityv1pb "github.com/gravitational/teleport/api/gen/proto/go/teleport/workloadidentity/v1" "github.com/gravitational/teleport/api/types" ) @@ -779,3 +781,96 @@ type serverStub struct { func (serverStub) GetKind() string { return types.KindNode } + +func TestAccessCheckerWorkloadIdentity(t *testing.T) { + localCluster := "cluster" + + noLabelsWI := &workloadidentityv1pb.WorkloadIdentity{ + Kind: types.KindWorkloadIdentity, + Metadata: &headerv1.Metadata{ + Name: "no-labels", + }, + } + fooLabeledWI := &workloadidentityv1pb.WorkloadIdentity{ + Kind: types.KindWorkloadIdentity, + Metadata: &headerv1.Metadata{ + Name: "foo-labeled", + Labels: map[string]string{ + "foo": "bar", + }, + }, + } + + roleNoLabels := newRole(func(rv *types.RoleV6) {}) + roleWildcard := newRole(func(rv *types.RoleV6) { + rv.Spec.Allow.WorkloadIdentityLabels = types.Labels{types.Wildcard: []string{types.Wildcard}} + }) + roleFooLabel := newRole(func(rv *types.RoleV6) { + rv.Spec.Allow.WorkloadIdentityLabels = types.Labels{"foo": {"bar"}} + }) + tests := []struct { + name string + roleSet RoleSet + resource *workloadidentityv1pb.WorkloadIdentity + requireError require.ErrorAssertionFunc + }{ + { + name: "wildcard role, no labels wi", + roleSet: NewRoleSet( + roleWildcard, + ), + resource: noLabelsWI, + requireError: require.NoError, + }, + { + name: "no labels role, no labels wi", + roleSet: NewRoleSet( + roleNoLabels, + ), + resource: noLabelsWI, + requireError: require.Error, + }, + { + name: "labels role, no labels wi", + roleSet: NewRoleSet( + roleFooLabel, + ), + resource: noLabelsWI, + requireError: require.Error, + }, + { + name: "wildcard role, labels wi", + roleSet: NewRoleSet( + roleWildcard, + ), + resource: fooLabeledWI, + requireError: require.NoError, + }, + { + name: "no labels role, labels wi", + roleSet: NewRoleSet( + roleNoLabels, + ), + resource: fooLabeledWI, + requireError: require.Error, + }, + { + name: "labels role, labels wi", + roleSet: NewRoleSet( + roleFooLabel, + ), + resource: fooLabeledWI, + requireError: require.NoError, + }, + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + accessChecker := NewAccessCheckerWithRoleSet(&AccessInfo{}, localCluster, tt.roleSet) + err := accessChecker.CheckAccess( + types.Resource153ToResourceWithLabels(tt.resource), + AccessState{}, + ) + tt.requireError(t, err) + }) + } +} From c62406f78cf85276899eb1ecf7001198f4a4dbb9 Mon Sep 17 00:00:00 2001 From: rosstimothy <39066650+rosstimothy@users.noreply.github.com> Date: Thu, 12 Dec 2024 07:57:00 -0500 Subject: [PATCH 04/22] Attempt to reduce flakiness of TestIntegrations/DiscoveryNode (#50083) This applies the same measures as https://github.com/gravitational/teleport/pull/49850 applied to various other flaky integration tests to ensure that nodes are routable before attempting user connections to them. Additionally, the debug service is disabled by default for all of the various ways a TeleInstance can be created. This prevents test failures on macOS due to unix socket name length. Closes https://github.com/gravitational/teleport/issues/16310. --- integration/helpers/instance.go | 9 +++++++++ integration/integration_test.go | 6 ++++++ 2 files changed, 15 insertions(+) diff --git a/integration/helpers/instance.go b/integration/helpers/instance.go index cdff68ef04e2a..b132b027b3bef 100644 --- a/integration/helpers/instance.go +++ b/integration/helpers/instance.go @@ -448,6 +448,7 @@ func (i *TeleInstance) Create(t *testing.T, trustedSecrets []*InstanceSecrets, e tconf.Proxy.DisableWebInterface = true tconf.CircuitBreakerConfig = breaker.NoopBreakerConfig() tconf.InstanceMetadataClient = imds.NewDisabledIMDSClient() + tconf.DebugService.Enabled = false return i.CreateEx(t, trustedSecrets, tconf) } @@ -473,6 +474,7 @@ func (i *TeleInstance) GenerateConfig(t *testing.T, trustedSecrets []*InstanceSe tconf.Auth.ClusterName, err = services.NewClusterNameWithRandomID(types.ClusterNameSpecV2{ ClusterName: i.Secrets.SiteName, }) + tconf.DebugService.Enabled = false if err != nil { return nil, trace.Wrap(err) } @@ -741,6 +743,7 @@ func (i *TeleInstance) StartNodeWithTargetPort(tconf *servicecfg.Config, authPor } tconf.Auth.Enabled = false tconf.Proxy.Enabled = false + tconf.DebugService.Enabled = false // Create a new Teleport process and add it to the list of nodes that // compose this "cluster". @@ -783,6 +786,7 @@ func (i *TeleInstance) StartApp(conf *servicecfg.Config) (*service.TeleportProce conf.Testing.UploadEventsC = i.UploadEventsC conf.Auth.Enabled = false conf.Proxy.Enabled = false + conf.DebugService.Enabled = false // Create a new Teleport process and add it to the list of nodes that // compose this "cluster". @@ -833,6 +837,7 @@ func (i *TeleInstance) StartApps(configs []*servicecfg.Config) ([]*service.Telep cfg.Testing.UploadEventsC = i.UploadEventsC cfg.Auth.Enabled = false cfg.Proxy.Enabled = false + cfg.DebugService.Enabled = false // Create a new Teleport process and add it to the list of nodes that // compose this "cluster". @@ -898,6 +903,7 @@ func (i *TeleInstance) StartDatabase(conf *servicecfg.Config) (*service.Teleport conf.Proxy.Enabled = false conf.Apps.Enabled = false conf.SSH.Enabled = false + conf.DebugService.Enabled = false // Create a new Teleport process and add it to the list of nodes that // compose this "cluster". @@ -960,6 +966,7 @@ func (i *TeleInstance) StartKube(t *testing.T, conf *servicecfg.Config, clusterN conf.Apps.Enabled = false conf.SSH.Enabled = false conf.Databases.Enabled = false + conf.DebugService.Enabled = false conf.Kube.KubeconfigPath = filepath.Join(dataDir, "kube_config") if err := EnableKube(t, conf, clusterName); err != nil { @@ -1035,6 +1042,7 @@ func (i *TeleInstance) StartNodeAndProxy(t *testing.T, name string) (sshPort, we } tconf.CircuitBreakerConfig = breaker.NoopBreakerConfig() tconf.InstanceMetadataClient = imds.NewDisabledIMDSClient() + tconf.DebugService.Enabled = false // Create a new Teleport process and add it to the list of nodes that // compose this "cluster". @@ -1128,6 +1136,7 @@ func (i *TeleInstance) StartProxy(cfg ProxyConfig, opts ...Option) (reversetunne tconf.Proxy.DisableALPNSNIListener = cfg.DisableALPNSNIListener tconf.CircuitBreakerConfig = breaker.NoopBreakerConfig() tconf.InstanceMetadataClient = imds.NewDisabledIMDSClient() + tconf.DebugService.Enabled = false tconf.FileDescriptors = cfg.FileDescriptors // apply options for _, o := range opts { diff --git a/integration/integration_test.go b/integration/integration_test.go index 533068269755d..cbc138b498f4f 100644 --- a/integration/integration_test.go +++ b/integration/integration_test.go @@ -4307,12 +4307,18 @@ func testDiscoveryNode(t *testing.T, suite *integrationTestSuite) { helpers.WaitForActiveTunnelConnections(t, main.Tunnel, helpers.Site, 1) helpers.WaitForActiveTunnelConnections(t, proxyTunnel, helpers.Site, 1) + // Wait for the nodes to be visible to both Proxy instances. + require.NoError(t, main.WaitForNodeCount(ctx, helpers.Site, 1)) + instance := helpers.TeleInstance{Tunnel: proxyTunnel} + require.NoError(t, instance.WaitForNodeCount(ctx, helpers.Site, 1)) + // Execute the connection via first proxy. cfg := helpers.ClientConfig{ Login: suite.Me.Username, Cluster: helpers.Site, Host: "cluster-main-node", } + output, err := runCommand(t, main, []string{"echo", "hello world"}, cfg, 1) require.NoError(t, err) require.Equal(t, "hello world\n", output) From ae023820b76e12293c438974d483f36bb78c78b6 Mon Sep 17 00:00:00 2001 From: Edoardo Spadolini Date: Thu, 12 Dec 2024 14:10:01 +0100 Subject: [PATCH 05/22] Disable peer/quic.TestBasicFunctionality for now (#50106) --- lib/proxy/peer/quic/quic_test.go | 2 ++ 1 file changed, 2 insertions(+) diff --git a/lib/proxy/peer/quic/quic_test.go b/lib/proxy/peer/quic/quic_test.go index 2d0b7c4a4be82..2071d78ebe229 100644 --- a/lib/proxy/peer/quic/quic_test.go +++ b/lib/proxy/peer/quic/quic_test.go @@ -221,6 +221,8 @@ func TestCertificateVerification(t *testing.T) { } func TestBasicFunctionality(t *testing.T) { + t.Skip("disabled until quic-go/quic-go#4303 is fixed (data race)") + t.Parallel() hostCA := newCA(t) From b7fa73d3dea3057695b49937aa7718768c29ce16 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 12 Dec 2024 13:21:34 +0000 Subject: [PATCH 06/22] Bump golang.org/x/crypto from 0.22.0 to 0.31.0 in /examples/go-client (#50120) Bumps [golang.org/x/crypto](https://github.com/golang/crypto) from 0.22.0 to 0.31.0. - [Commits](https://github.com/golang/crypto/compare/v0.22.0...v0.31.0) --- updated-dependencies: - dependency-name: golang.org/x/crypto dependency-type: indirect ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- examples/go-client/go.mod | 8 ++++---- examples/go-client/go.sum | 16 ++++++++-------- 2 files changed, 12 insertions(+), 12 deletions(-) diff --git a/examples/go-client/go.mod b/examples/go-client/go.mod index d51d7be223196..f843df505b16b 100644 --- a/examples/go-client/go.mod +++ b/examples/go-client/go.mod @@ -38,12 +38,12 @@ require ( go.opentelemetry.io/otel/sdk v1.22.0 // indirect go.opentelemetry.io/otel/trace v1.22.0 // indirect go.opentelemetry.io/proto/otlp v1.1.0 // indirect - golang.org/x/crypto v0.22.0 // indirect + golang.org/x/crypto v0.31.0 // indirect golang.org/x/exp v0.0.0-20230811145659-89c5cff77bcb // indirect golang.org/x/net v0.24.0 // indirect - golang.org/x/sys v0.19.0 // indirect - golang.org/x/term v0.19.0 // indirect - golang.org/x/text v0.14.0 // indirect + golang.org/x/sys v0.28.0 // indirect + golang.org/x/term v0.27.0 // indirect + golang.org/x/text v0.21.0 // indirect google.golang.org/genproto/googleapis/api v0.0.0-20240102182953-50ed04b92917 // indirect google.golang.org/genproto/googleapis/rpc v0.0.0-20240102182953-50ed04b92917 // indirect google.golang.org/grpc v1.61.1 // indirect diff --git a/examples/go-client/go.sum b/examples/go-client/go.sum index 36a788107e189..0b5eedd0047a0 100644 --- a/examples/go-client/go.sum +++ b/examples/go-client/go.sum @@ -159,8 +159,8 @@ golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8U golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= golang.org/x/crypto v0.7.0/go.mod h1:pYwdfH91IfpZVANVyUOhSIPZaFoJGxTFbZhFTx+dXZU= -golang.org/x/crypto v0.22.0 h1:g1v0xeRhjcugydODzvb3mEM9SQ0HGp9s/nh3COQ/C30= -golang.org/x/crypto v0.22.0/go.mod h1:vr6Su+7cTlO45qkww3VDJlzDn0ctJvRgYbC2NvXHt+M= +golang.org/x/crypto v0.31.0 h1:ihbySMvVjLAeSH1IbfcRTkD/iNscyz8rGzjF/E5hV6U= +golang.org/x/crypto v0.31.0/go.mod h1:kDsLvtWBEx7MV9tJOj9bnXsPbxwJQ6csT/x4KIN4Ssk= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20230811145659-89c5cff77bcb h1:mIKbk8weKhSeLH2GmUTrvx8CjkyJmnU1wFmg59CUjFA= golang.org/x/exp v0.0.0-20230811145659-89c5cff77bcb/go.mod h1:FXUEEKJgO7OQYeo8N01OfiKP8RXMtf6e8aTskBGqWdc= @@ -212,21 +212,21 @@ golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.19.0 h1:q5f1RH2jigJ1MoAWp2KTp3gm5zAGFUTarQZ5U386+4o= -golang.org/x/sys v0.19.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/sys v0.28.0 h1:Fksou7UEQUWlKvIdsqzJmUmCX3cZuD2+P3XyyzwMhlA= +golang.org/x/sys v0.28.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k= golang.org/x/term v0.6.0/go.mod h1:m6U89DPEgQRMq3DNkDClhWw02AUbt2daBVO4cn4Hv9U= -golang.org/x/term v0.19.0 h1:+ThwsDv+tYfnJFhF4L8jITxu1tdTWRTZpdsWgEgjL6Q= -golang.org/x/term v0.19.0/go.mod h1:2CuTdWZ7KHSQwUzKva0cbMg6q2DMI3Mmxp+gKJbskEk= +golang.org/x/term v0.27.0 h1:WP60Sv1nlK1T6SupCHbXzSaN0b9wUmsPoRS9b61A23Q= +golang.org/x/term v0.27.0/go.mod h1:iMsnZpn0cago0GOrHO2+Y7u7JPn5AylBrcoWkElMTSM= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= golang.org/x/text v0.8.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= -golang.org/x/text v0.14.0 h1:ScX5w1eTa3QqT8oi6+ziP7dTV1S2+ALU0bI+0zXKWiQ= -golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU= +golang.org/x/text v0.21.0 h1:zyQAAkrwaneQ066sspRyJaG9VNi/YJ1NfzcGB3hZ/qo= +golang.org/x/text v0.21.0/go.mod h1:4IBbMaMmOPCJ8SecivzSH54+73PCFmPWxNTLm+vZkEQ= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= From 4613b1ac6833da992d27721d3d1128158d26ef4b Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 12 Dec 2024 13:25:59 +0000 Subject: [PATCH 07/22] Bump golang.org/x/crypto from 0.29.0 to 0.31.0 in /api (#50101) Bumps [golang.org/x/crypto](https://github.com/golang/crypto) from 0.29.0 to 0.31.0. - [Commits](https://github.com/golang/crypto/compare/v0.29.0...v0.31.0) --- updated-dependencies: - dependency-name: golang.org/x/crypto dependency-type: direct:production ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- api/go.mod | 8 ++++---- api/go.sum | 16 ++++++++-------- 2 files changed, 12 insertions(+), 12 deletions(-) diff --git a/api/go.mod b/api/go.mod index 31e931385e11a..30d89476538e4 100644 --- a/api/go.mod +++ b/api/go.mod @@ -22,10 +22,10 @@ require ( go.opentelemetry.io/otel/sdk v1.32.0 go.opentelemetry.io/otel/trace v1.32.0 go.opentelemetry.io/proto/otlp v1.4.0 - golang.org/x/crypto v0.29.0 + golang.org/x/crypto v0.31.0 golang.org/x/exp v0.0.0-20241108190413-2d47ceb2692f golang.org/x/net v0.31.0 - golang.org/x/term v0.26.0 + golang.org/x/term v0.27.0 google.golang.org/genproto/googleapis/rpc v0.0.0-20241118233622-e639e219e697 google.golang.org/grpc v1.68.0 google.golang.org/protobuf v1.35.2 @@ -45,8 +45,8 @@ require ( github.com/mattermost/xml-roundtrip-validator v0.1.0 // indirect github.com/pmezard/go-difflib v1.0.0 // indirect github.com/russellhaering/goxmldsig v1.4.0 // indirect - golang.org/x/sys v0.27.0 // indirect - golang.org/x/text v0.20.0 // indirect + golang.org/x/sys v0.28.0 // indirect + golang.org/x/text v0.21.0 // indirect google.golang.org/genproto/googleapis/api v0.0.0-20241118233622-e639e219e697 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect ) diff --git a/api/go.sum b/api/go.sum index 8d2982e63ce17..3c0cf17e4e1d6 100644 --- a/api/go.sum +++ b/api/go.sum @@ -938,8 +938,8 @@ golang.org/x/crypto v0.0.0-20210421170649-83a5a9bb288b/go.mod h1:T9bdIzuCu7OtxOm golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= golang.org/x/crypto v0.0.0-20211108221036-ceb1ce70b4fa/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= golang.org/x/crypto v0.14.0/go.mod h1:MVFd36DqK4CsrnJYDkBA3VC4m2GkXAM0PvzMCn4JQf4= -golang.org/x/crypto v0.29.0 h1:L5SG1JTTXupVV3n6sUqMTeWbjAyfPwoda2DLX8J8FrQ= -golang.org/x/crypto v0.29.0/go.mod h1:+F4F4N5hv6v38hfeYwTdx20oUvLLc+QfrE9Ax9HtgRg= +golang.org/x/crypto v0.31.0 h1:ihbySMvVjLAeSH1IbfcRTkD/iNscyz8rGzjF/E5hV6U= +golang.org/x/crypto v0.31.0/go.mod h1:kDsLvtWBEx7MV9tJOj9bnXsPbxwJQ6csT/x4KIN4Ssk= golang.org/x/exp v0.0.0-20180321215751-8460e604b9de/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20180807140117-3d87b88a115f/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= @@ -1185,8 +1185,8 @@ golang.org/x/sys v0.7.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.13.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.15.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= -golang.org/x/sys v0.27.0 h1:wBqf8DvsY9Y/2P8gAfPDEYNuS30J4lPHJxXSb/nJZ+s= -golang.org/x/sys v0.27.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/sys v0.28.0 h1:Fksou7UEQUWlKvIdsqzJmUmCX3cZuD2+P3XyyzwMhlA= +golang.org/x/sys v0.28.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= golang.org/x/term v0.2.0/go.mod h1:TVmDHMZPmdnySmBfhjOoOdhjzdE1h4u1VwSiw2l1Nuc= @@ -1197,8 +1197,8 @@ golang.org/x/term v0.6.0/go.mod h1:m6U89DPEgQRMq3DNkDClhWw02AUbt2daBVO4cn4Hv9U= golang.org/x/term v0.7.0/go.mod h1:P32HKFT3hSsZrRxla30E9HqToFYAQPCMs/zFMBUFqPY= golang.org/x/term v0.8.0/go.mod h1:xPskH00ivmX89bAKVGSKKtLOWNx2+17Eiy94tnKShWo= golang.org/x/term v0.13.0/go.mod h1:LTmsnFJwVN6bCy1rVCoS+qHT1HhALEFxKncY3WNNh4U= -golang.org/x/term v0.26.0 h1:WEQa6V3Gja/BhNxg540hBip/kkaYtRg3cxg4oXSw4AU= -golang.org/x/term v0.26.0/go.mod h1:Si5m1o57C5nBNQo5z1iq+XDijt21BDBDp2bK0QI8e3E= +golang.org/x/term v0.27.0 h1:WP60Sv1nlK1T6SupCHbXzSaN0b9wUmsPoRS9b61A23Q= +golang.org/x/term v0.27.0/go.mod h1:iMsnZpn0cago0GOrHO2+Y7u7JPn5AylBrcoWkElMTSM= golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= @@ -1217,8 +1217,8 @@ golang.org/x/text v0.8.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= golang.org/x/text v0.9.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= golang.org/x/text v0.13.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU= -golang.org/x/text v0.20.0 h1:gK/Kv2otX8gz+wn7Rmb3vT96ZwuoxnQlY+HlJVj7Qug= -golang.org/x/text v0.20.0/go.mod h1:D4IsuqiFMhST5bX19pQ9ikHC2GsaKyk/oF+pn3ducp4= +golang.org/x/text v0.21.0 h1:zyQAAkrwaneQ066sspRyJaG9VNi/YJ1NfzcGB3hZ/qo= +golang.org/x/text v0.21.0/go.mod h1:4IBbMaMmOPCJ8SecivzSH54+73PCFmPWxNTLm+vZkEQ= golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= From 877e3d8b24bebdc776e9371554fe4c5ee96418b8 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 12 Dec 2024 13:26:05 +0000 Subject: [PATCH 08/22] Bump golang.org/x/crypto from 0.27.0 to 0.31.0 in /build.assets/tooling (#50125) Bumps [golang.org/x/crypto](https://github.com/golang/crypto) from 0.27.0 to 0.31.0. - [Commits](https://github.com/golang/crypto/compare/v0.27.0...v0.31.0) --- updated-dependencies: - dependency-name: golang.org/x/crypto dependency-type: indirect ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- build.assets/tooling/go.mod | 6 +++--- build.assets/tooling/go.sum | 16 ++++++++-------- 2 files changed, 11 insertions(+), 11 deletions(-) diff --git a/build.assets/tooling/go.mod b/build.assets/tooling/go.mod index 5870c74535be8..cfc1305c2b386 100644 --- a/build.assets/tooling/go.mod +++ b/build.assets/tooling/go.mod @@ -53,10 +53,10 @@ require ( github.com/spf13/cast v1.7.0 // indirect github.com/x448/float16 v0.8.4 // indirect github.com/xhit/go-str2duration/v2 v2.1.0 // indirect - golang.org/x/crypto v0.27.0 // indirect + golang.org/x/crypto v0.31.0 // indirect golang.org/x/net v0.26.0 // indirect - golang.org/x/sys v0.25.0 // indirect - golang.org/x/text v0.18.0 // indirect + golang.org/x/sys v0.28.0 // indirect + golang.org/x/text v0.21.0 // indirect golang.org/x/tools v0.21.1-0.20240508182429-e35e4ccd0d2d // indirect gopkg.in/inf.v0 v0.9.1 // indirect gopkg.in/yaml.v2 v2.4.0 // indirect diff --git a/build.assets/tooling/go.sum b/build.assets/tooling/go.sum index f89acb6f5295f..c4ff39d6d8447 100644 --- a/build.assets/tooling/go.sum +++ b/build.assets/tooling/go.sum @@ -991,8 +991,8 @@ golang.org/x/crypto v0.0.0-20210817164053-32db794688a5/go.mod h1:GvvjBRRGRdwPK5y golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= golang.org/x/crypto v0.0.0-20211108221036-ceb1ce70b4fa/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= golang.org/x/crypto v0.14.0/go.mod h1:MVFd36DqK4CsrnJYDkBA3VC4m2GkXAM0PvzMCn4JQf4= -golang.org/x/crypto v0.27.0 h1:GXm2NjJrPaiv/h1tb2UH8QfgC/hOf/+z0p6PT8o1w7A= -golang.org/x/crypto v0.27.0/go.mod h1:1Xngt8kV6Dvbssa53Ziq6Eqn0HqbZi5Z6R0ZpwQzt70= +golang.org/x/crypto v0.31.0 h1:ihbySMvVjLAeSH1IbfcRTkD/iNscyz8rGzjF/E5hV6U= +golang.org/x/crypto v0.31.0/go.mod h1:kDsLvtWBEx7MV9tJOj9bnXsPbxwJQ6csT/x4KIN4Ssk= golang.org/x/exp v0.0.0-20180321215751-8460e604b9de/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20180807140117-3d87b88a115f/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= @@ -1163,8 +1163,8 @@ golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJ golang.org/x/sync v0.0.0-20220819030929-7fc1605a5dde/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20220929204114-8fcdb60fdcc0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.8.0 h1:3NFvSEYkUoMifnESzZl15y791HH1qU2xm6eCJU5ZPXQ= -golang.org/x/sync v0.8.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= +golang.org/x/sync v0.10.0 h1:3NQrjDixjgGwUOCaF8w2+VYHv0Ve/vGYSbdkTa98gmQ= +golang.org/x/sync v0.10.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190222072716-a9d3bda3a223/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= @@ -1250,8 +1250,8 @@ golang.org/x/sys v0.7.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.13.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.15.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= -golang.org/x/sys v0.25.0 h1:r+8e+loiHxRqhXVl6ML1nO3l1+oFoWbnlu2Ehimmi34= -golang.org/x/sys v0.25.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/sys v0.28.0 h1:Fksou7UEQUWlKvIdsqzJmUmCX3cZuD2+P3XyyzwMhlA= +golang.org/x/sys v0.28.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= golang.org/x/term v0.2.0/go.mod h1:TVmDHMZPmdnySmBfhjOoOdhjzdE1h4u1VwSiw2l1Nuc= @@ -1280,8 +1280,8 @@ golang.org/x/text v0.8.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= golang.org/x/text v0.9.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= golang.org/x/text v0.13.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU= -golang.org/x/text v0.18.0 h1:XvMDiNzPAl0jr17s6W9lcaIhGUfUORdGCNsuLmPG224= -golang.org/x/text v0.18.0/go.mod h1:BuEKDfySbSR4drPmRPG/7iBdf8hvFMuRexcpahXilzY= +golang.org/x/text v0.21.0 h1:zyQAAkrwaneQ066sspRyJaG9VNi/YJ1NfzcGB3hZ/qo= +golang.org/x/text v0.21.0/go.mod h1:4IBbMaMmOPCJ8SecivzSH54+73PCFmPWxNTLm+vZkEQ= golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= From 946efc35962c81e066d45594943dacbfe9a9ec2f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rafa=C5=82=20Cie=C5=9Blak?= Date: Thu, 12 Dec 2024 14:42:20 +0100 Subject: [PATCH 09/22] Fix electron-builder peer deps (#50129) --- pnpm-lock.yaml | 73 +++++++++----------------------------------------- 1 file changed, 13 insertions(+), 60 deletions(-) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 5258282a287b4..94b69155e300a 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -474,7 +474,7 @@ importers: version: 33.2.1 electron-builder: specifier: ^25.1.8 - version: 25.1.8(electron-builder-squirrel-windows@25.1.7(dmg-builder@25.1.8)) + version: 25.1.8(electron-builder-squirrel-windows@25.1.8(dmg-builder@25.1.8)) electron-vite: specifier: ^2.3.0 version: 2.3.0(@swc/core@1.9.3)(vite@5.4.8(@types/node@20.17.9)(terser@5.31.1)) @@ -2873,13 +2873,6 @@ packages: app-builder-bin@5.0.0-alpha.10: resolution: {integrity: sha512-Ev4jj3D7Bo+O0GPD2NMvJl+PGiBAfS7pUGawntBNpCbxtpncfUixqFj9z9Jme7V7s3LBGqsWZZP54fxBX3JKJw==} - app-builder-lib@25.1.7: - resolution: {integrity: sha512-JxmN+D/Dn7BLQoN+cTFO+zbMHcpI10v/xjyjFO1FKpHbApOG+OQt/xUyVjKWp4FYplIfuHdpxqTXo1PN/Wzm/A==} - engines: {node: '>=14.0.0'} - peerDependencies: - dmg-builder: 25.1.7 - electron-builder-squirrel-windows: 25.1.7 - app-builder-lib@25.1.8: resolution: {integrity: sha512-pCqe7dfsQFBABC1jeKZXQWhGcCPF3rPCXDdfqVKjIeWBcXzyC1iOWZdfFhGl+S9MyE/k//DFmC6FzuGAUudNDg==} engines: {node: '>=14.0.0'} @@ -3650,8 +3643,8 @@ packages: engines: {node: '>=0.10.0'} hasBin: true - electron-builder-squirrel-windows@25.1.7: - resolution: {integrity: sha512-nJMvw1FNy+6YP8HmjSb0JwMowpdlZpydZGab9KevKO/fIC9wTcr5rkhbLsTfEPOjdAqOTycRoK0mOJCFB/1uig==} + electron-builder-squirrel-windows@25.1.8: + resolution: {integrity: sha512-2ntkJ+9+0GFP6nAISiMabKt6eqBB0kX1QqHNWFWAXgi0VULKGisM46luRFpIBiU3u/TDmhZMM8tzvo2Abn3ayg==} electron-builder@25.1.8: resolution: {integrity: sha512-poRgAtUHHOnlzZnc9PK4nzG53xh74wj2Jy7jkTrqZ0MWPoHGh1M2+C//hGeYdA+4K8w4yiVCNYoLXF7ySj2Wig==} @@ -9417,47 +9410,7 @@ snapshots: app-builder-bin@5.0.0-alpha.10: {} - app-builder-lib@25.1.7(dmg-builder@25.1.8(electron-builder-squirrel-windows@25.1.7))(electron-builder-squirrel-windows@25.1.7(dmg-builder@25.1.8)): - dependencies: - '@develar/schema-utils': 2.6.5 - '@electron/notarize': 2.5.0 - '@electron/osx-sign': 1.3.1 - '@electron/rebuild': 3.6.1 - '@electron/universal': 2.0.1 - '@malept/flatpak-bundler': 0.4.0 - '@types/fs-extra': 9.0.13 - async-exit-hook: 2.0.1 - bluebird-lst: 1.0.9 - builder-util: 25.1.7 - builder-util-runtime: 9.2.10 - chromium-pickle-js: 0.2.0 - config-file-ts: 0.2.8-rc1 - debug: 4.3.7 - dmg-builder: 25.1.8(electron-builder-squirrel-windows@25.1.7) - dotenv: 16.4.5 - dotenv-expand: 11.0.6 - ejs: 3.1.10 - electron-builder-squirrel-windows: 25.1.7(dmg-builder@25.1.8) - electron-publish: 25.1.7 - form-data: 4.0.1 - fs-extra: 10.1.0 - hosted-git-info: 4.1.0 - is-ci: 3.0.1 - isbinaryfile: 5.0.2 - js-yaml: 4.1.0 - json5: 2.2.3 - lazy-val: 1.0.5 - minimatch: 10.0.1 - resedit: 1.7.0 - sanitize-filename: 1.6.3 - semver: 7.6.3 - tar: 6.2.1 - temp-file: 3.4.0 - transitivePeerDependencies: - - bluebird - - supports-color - - app-builder-lib@25.1.8(dmg-builder@25.1.8(electron-builder-squirrel-windows@25.1.7))(electron-builder-squirrel-windows@25.1.7(dmg-builder@25.1.8)): + app-builder-lib@25.1.8(dmg-builder@25.1.8(electron-builder-squirrel-windows@25.1.8))(electron-builder-squirrel-windows@25.1.8(dmg-builder@25.1.8)): dependencies: '@develar/schema-utils': 2.6.5 '@electron/notarize': 2.5.0 @@ -9473,11 +9426,11 @@ snapshots: chromium-pickle-js: 0.2.0 config-file-ts: 0.2.8-rc1 debug: 4.3.7 - dmg-builder: 25.1.8(electron-builder-squirrel-windows@25.1.7) + dmg-builder: 25.1.8(electron-builder-squirrel-windows@25.1.8) dotenv: 16.4.5 dotenv-expand: 11.0.6 ejs: 3.1.10 - electron-builder-squirrel-windows: 25.1.7(dmg-builder@25.1.8) + electron-builder-squirrel-windows: 25.1.8(dmg-builder@25.1.8) electron-publish: 25.1.7 form-data: 4.0.1 fs-extra: 10.1.0 @@ -10336,9 +10289,9 @@ snapshots: dependencies: path-type: 4.0.0 - dmg-builder@25.1.8(electron-builder-squirrel-windows@25.1.7): + dmg-builder@25.1.8(electron-builder-squirrel-windows@25.1.8): dependencies: - app-builder-lib: 25.1.8(dmg-builder@25.1.8(electron-builder-squirrel-windows@25.1.7))(electron-builder-squirrel-windows@25.1.7(dmg-builder@25.1.8)) + app-builder-lib: 25.1.8(dmg-builder@25.1.8(electron-builder-squirrel-windows@25.1.8))(electron-builder-squirrel-windows@25.1.8(dmg-builder@25.1.8)) builder-util: 25.1.7 builder-util-runtime: 9.2.10 fs-extra: 10.1.0 @@ -10420,9 +10373,9 @@ snapshots: dependencies: jake: 10.8.5 - electron-builder-squirrel-windows@25.1.7(dmg-builder@25.1.8): + electron-builder-squirrel-windows@25.1.8(dmg-builder@25.1.8): dependencies: - app-builder-lib: 25.1.7(dmg-builder@25.1.8(electron-builder-squirrel-windows@25.1.7))(electron-builder-squirrel-windows@25.1.7(dmg-builder@25.1.8)) + app-builder-lib: 25.1.8(dmg-builder@25.1.8(electron-builder-squirrel-windows@25.1.8))(electron-builder-squirrel-windows@25.1.8(dmg-builder@25.1.8)) archiver: 5.3.2 builder-util: 25.1.7 fs-extra: 10.1.0 @@ -10431,13 +10384,13 @@ snapshots: - dmg-builder - supports-color - electron-builder@25.1.8(electron-builder-squirrel-windows@25.1.7(dmg-builder@25.1.8)): + electron-builder@25.1.8(electron-builder-squirrel-windows@25.1.8(dmg-builder@25.1.8)): dependencies: - app-builder-lib: 25.1.8(dmg-builder@25.1.8(electron-builder-squirrel-windows@25.1.7))(electron-builder-squirrel-windows@25.1.7(dmg-builder@25.1.8)) + app-builder-lib: 25.1.8(dmg-builder@25.1.8(electron-builder-squirrel-windows@25.1.8))(electron-builder-squirrel-windows@25.1.8(dmg-builder@25.1.8)) builder-util: 25.1.7 builder-util-runtime: 9.2.10 chalk: 4.1.2 - dmg-builder: 25.1.8(electron-builder-squirrel-windows@25.1.7) + dmg-builder: 25.1.8(electron-builder-squirrel-windows@25.1.8) fs-extra: 10.1.0 is-ci: 3.0.1 lazy-val: 1.0.5 From d027987b2a598de8a53b337e73cebc5448c04e7c Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 12 Dec 2024 10:53:47 -0300 Subject: [PATCH 10/22] Bump golang.org/x/crypto from 0.22.0 to 0.31.0 in /assets/backport (#50121) Bumps [golang.org/x/crypto](https://github.com/golang/crypto) from 0.22.0 to 0.31.0. - [Commits](https://github.com/golang/crypto/compare/v0.22.0...v0.31.0) --- updated-dependencies: - dependency-name: golang.org/x/crypto dependency-type: indirect ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- assets/backport/go.mod | 2 +- assets/backport/go.sum | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/assets/backport/go.mod b/assets/backport/go.mod index 6b68eb58c31eb..1a62feb772b02 100644 --- a/assets/backport/go.mod +++ b/assets/backport/go.mod @@ -14,7 +14,7 @@ require ( github.com/davecgh/go-spew v1.1.1 // indirect github.com/google/go-querystring v1.1.0 // indirect github.com/pmezard/go-difflib v1.0.0 // indirect - golang.org/x/crypto v0.22.0 // indirect + golang.org/x/crypto v0.31.0 // indirect golang.org/x/net v0.24.0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect ) diff --git a/assets/backport/go.sum b/assets/backport/go.sum index 13bab01e9ef06..7d0946671e57b 100644 --- a/assets/backport/go.sum +++ b/assets/backport/go.sum @@ -877,8 +877,8 @@ golang.org/x/crypto v0.0.0-20210817164053-32db794688a5/go.mod h1:GvvjBRRGRdwPK5y golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= golang.org/x/crypto v0.0.0-20211108221036-ceb1ce70b4fa/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= golang.org/x/crypto v0.14.0/go.mod h1:MVFd36DqK4CsrnJYDkBA3VC4m2GkXAM0PvzMCn4JQf4= -golang.org/x/crypto v0.22.0 h1:g1v0xeRhjcugydODzvb3mEM9SQ0HGp9s/nh3COQ/C30= -golang.org/x/crypto v0.22.0/go.mod h1:vr6Su+7cTlO45qkww3VDJlzDn0ctJvRgYbC2NvXHt+M= +golang.org/x/crypto v0.31.0 h1:ihbySMvVjLAeSH1IbfcRTkD/iNscyz8rGzjF/E5hV6U= +golang.org/x/crypto v0.31.0/go.mod h1:kDsLvtWBEx7MV9tJOj9bnXsPbxwJQ6csT/x4KIN4Ssk= golang.org/x/exp v0.0.0-20180321215751-8460e604b9de/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20180807140117-3d87b88a115f/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= From da6dfdc76f204f4b9685d5b3f93fc7cb7352eb9d Mon Sep 17 00:00:00 2001 From: Marco Dinis Date: Thu, 12 Dec 2024 14:10:38 +0000 Subject: [PATCH 11/22] Fix UserTask deterministic name for DiscoverEC2 issues (#50051) --- api/types/usertasks/object.go | 20 ++++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) diff --git a/api/types/usertasks/object.go b/api/types/usertasks/object.go index 244dda1d47bc1..278e956ea755d 100644 --- a/api/types/usertasks/object.go +++ b/api/types/usertasks/object.go @@ -45,10 +45,12 @@ func WithExpiration(t time.Time) func(ut *usertasksv1.UserTask) { // NewDiscoverEC2UserTask creates a new DiscoverEC2 User Task Type. func NewDiscoverEC2UserTask(spec *usertasksv1.UserTaskSpec, opts ...UserTaskOption) (*usertasksv1.UserTask, error) { taskName := TaskNameForDiscoverEC2(TaskNameForDiscoverEC2Parts{ - Integration: spec.GetIntegration(), - IssueType: spec.GetIssueType(), - AccountID: spec.GetDiscoverEc2().GetAccountId(), - Region: spec.GetDiscoverEc2().GetRegion(), + Integration: spec.GetIntegration(), + IssueType: spec.GetIssueType(), + AccountID: spec.GetDiscoverEc2().GetAccountId(), + Region: spec.GetDiscoverEc2().GetRegion(), + SSMDocument: spec.GetDiscoverEc2().GetSsmDocument(), + InstallerScript: spec.GetDiscoverEc2().GetInstallerScript(), }) ut := &usertasksv1.UserTask{ @@ -172,10 +174,12 @@ func validateDiscoverEC2TaskType(ut *usertasksv1.UserTask) error { } expectedTaskName := TaskNameForDiscoverEC2(TaskNameForDiscoverEC2Parts{ - Integration: ut.Spec.Integration, - IssueType: ut.Spec.IssueType, - AccountID: ut.Spec.DiscoverEc2.AccountId, - Region: ut.Spec.DiscoverEc2.Region, + Integration: ut.Spec.Integration, + IssueType: ut.Spec.IssueType, + AccountID: ut.Spec.DiscoverEc2.AccountId, + Region: ut.Spec.DiscoverEc2.Region, + SSMDocument: ut.Spec.DiscoverEc2.SsmDocument, + InstallerScript: ut.Spec.DiscoverEc2.InstallerScript, }) if ut.Metadata.GetName() != expectedTaskName { return trace.BadParameter("task name is pre-defined for discover-ec2 types, expected %q, got %q", From 41bae13c2f9eb07eebb5579eea4dbf142b335b76 Mon Sep 17 00:00:00 2001 From: rosstimothy <39066650+rosstimothy@users.noreply.github.com> Date: Thu, 12 Dec 2024 09:25:57 -0500 Subject: [PATCH 12/22] Convert lib/srv/alpnproxy to use slog (#50018) --- integration/proxy/proxy_test.go | 2 +- lib/auth/authclient/tls.go | 12 +++--- lib/kube/grpc/grpc_test.go | 8 ++-- lib/kube/proxy/server.go | 4 +- lib/service/service.go | 5 +-- lib/srv/alpnproxy/auth/auth_proxy.go | 5 +-- lib/srv/alpnproxy/auth/auth_proxy_test.go | 6 +-- lib/srv/alpnproxy/auth_checker_middleware.go | 8 ++-- lib/srv/alpnproxy/aws_local_proxy.go | 20 ++++----- lib/srv/alpnproxy/azure_msi_middleware.go | 12 +++--- .../alpnproxy/azure_msi_middleware_test.go | 5 +-- lib/srv/alpnproxy/forward_proxy.go | 30 +++++++------- lib/srv/alpnproxy/helpers_test.go | 3 +- lib/srv/alpnproxy/kube.go | 18 ++++---- lib/srv/alpnproxy/local_proxy.go | 41 ++++++++++--------- lib/srv/alpnproxy/local_proxy_test.go | 2 +- lib/srv/alpnproxy/proxy.go | 38 ++++++++--------- lib/tbot/service_application_tunnel.go | 2 +- lib/tbot/service_database_tunnel.go | 2 +- lib/teleterm/gateway/app_middleware.go | 2 +- lib/teleterm/gateway/db_middleware.go | 2 +- lib/teleterm/gateway/kube.go | 6 ++- lib/web/apiserver_test.go | 8 ++-- tool/tsh/common/kube_proxy.go | 2 +- tool/tsh/common/tsh.go | 8 ++-- 25 files changed, 127 insertions(+), 124 deletions(-) diff --git a/integration/proxy/proxy_test.go b/integration/proxy/proxy_test.go index 0dcf986d70109..db28b969020d6 100644 --- a/integration/proxy/proxy_test.go +++ b/integration/proxy/proxy_test.go @@ -1236,7 +1236,7 @@ func TestALPNSNIProxyDatabaseAccess(t *testing.T) { // advance the fake clock and verify that the local proxy thinks its cert expired. fakeClock.Advance(time.Hour * 48) - err = lp.CheckDBCert(routeToDatabase) + err = lp.CheckDBCert(context.Background(), routeToDatabase) require.Error(t, err) var x509Err x509.CertificateInvalidError require.ErrorAs(t, err, &x509Err) diff --git a/lib/auth/authclient/tls.go b/lib/auth/authclient/tls.go index 7c607badb2f85..cf03352e26d49 100644 --- a/lib/auth/authclient/tls.go +++ b/lib/auth/authclient/tls.go @@ -20,10 +20,10 @@ import ( "context" "crypto/tls" "crypto/x509" + "log/slog" "math" "github.com/gravitational/trace" - "github.com/sirupsen/logrus" "github.com/gravitational/teleport/api/types" apiutils "github.com/gravitational/teleport/api/utils" @@ -96,7 +96,7 @@ func DefaultClientCertPool(ctx context.Context, client CAGetter, clusterName str // WithClusterCAs returns a TLS hello callback that returns a copy of the provided // TLS config with client CAs pool of the specified cluster. -func WithClusterCAs(tlsConfig *tls.Config, ap CAGetter, currentClusterName string, log logrus.FieldLogger) func(*tls.ClientHelloInfo) (*tls.Config, error) { +func WithClusterCAs(tlsConfig *tls.Config, ap CAGetter, currentClusterName string, logger *slog.Logger) func(*tls.ClientHelloInfo) (*tls.Config, error) { return func(info *tls.ClientHelloInfo) (*tls.Config, error) { var clusterName string var err error @@ -105,14 +105,14 @@ func WithClusterCAs(tlsConfig *tls.Config, ap CAGetter, currentClusterName strin clusterName, err = apiutils.DecodeClusterName(info.ServerName) if err != nil { if !trace.IsNotFound(err) { - log.Debugf("Ignoring unsupported cluster name name %q.", info.ServerName) + logger.DebugContext(info.Context(), "Ignoring unsupported cluster name name", "cluster_name", info.ServerName) clusterName = "" } } } pool, totalSubjectsLen, err := DefaultClientCertPool(info.Context(), ap, clusterName) if err != nil { - log.WithError(err).Errorf("Failed to retrieve client pool for %q.", clusterName) + logger.ErrorContext(info.Context(), "Failed to retrieve client pool for cluster", "error", err, "cluster", clusterName) // this falls back to the default config return nil, nil } @@ -130,11 +130,11 @@ func WithClusterCAs(tlsConfig *tls.Config, ap CAGetter, currentClusterName strin // the current cluster CA. In the unlikely case where it's wrong, the // client will be rejected. if totalSubjectsLen >= int64(math.MaxUint16) { - log.Debugf("Number of CAs in client cert pool is too large and cannot be encoded in a TLS handshake; this is due to a large number of trusted clusters; will use only the CA of the current cluster to validate.") + logger.DebugContext(info.Context(), "Number of CAs in client cert pool is too large and cannot be encoded in a TLS handshake; this is due to a large number of trusted clusters; will use only the CA of the current cluster to validate") pool, _, err = DefaultClientCertPool(info.Context(), ap, currentClusterName) if err != nil { - log.WithError(err).Errorf("Failed to retrieve client pool for %q.", currentClusterName) + logger.ErrorContext(info.Context(), "Failed to retrieve client pool for cluster", "error", err, "cluster", currentClusterName) // this falls back to the default config return nil, nil } diff --git a/lib/kube/grpc/grpc_test.go b/lib/kube/grpc/grpc_test.go index 39ef5ef6b907d..e72e2edf945ef 100644 --- a/lib/kube/grpc/grpc_test.go +++ b/lib/kube/grpc/grpc_test.go @@ -22,12 +22,12 @@ import ( "context" "crypto/tls" "crypto/x509" + "log/slog" "net" "testing" "github.com/google/go-cmp/cmp" "github.com/gravitational/trace" - "github.com/sirupsen/logrus" "github.com/stretchr/testify/require" "google.golang.org/grpc" "google.golang.org/grpc/credentials" @@ -639,7 +639,7 @@ func initGRPCServer(t *testing.T, testCtx *kubeproxy.TestContext, listener net.L AcceptedUsage: []string{teleport.UsageKubeOnly}, } - tlsConf := copyAndConfigureTLS(tlsConfig, logrus.New(), testCtx.AuthClient, clusterName) + tlsConf := copyAndConfigureTLS(tlsConfig, testCtx.AuthClient, clusterName) creds, err := auth.NewTransportCredentials(auth.TransportCredentialsConfig{ TransportCredentials: credentials.NewTLS(tlsConf), UserGetter: authMiddleware, @@ -693,7 +693,7 @@ func initGRPCServer(t *testing.T, testCtx *kubeproxy.TestContext, listener net.L // copyAndConfigureTLS can be used to copy and modify an existing *tls.Config // for Teleport application proxy servers. -func copyAndConfigureTLS(config *tls.Config, log logrus.FieldLogger, accessPoint authclient.AccessCache, clusterName string) *tls.Config { +func copyAndConfigureTLS(config *tls.Config, accessPoint authclient.AccessCache, clusterName string) *tls.Config { tlsConfig := config.Clone() // Require clients to present a certificate @@ -703,7 +703,7 @@ func copyAndConfigureTLS(config *tls.Config, log logrus.FieldLogger, accessPoint // client's certificate to verify the chain presented. If the client does not // pass in the cluster name, this functions pulls back all CA to try and // match the certificate presented against any CA. - tlsConfig.GetConfigForClient = authclient.WithClusterCAs(tlsConfig.Clone(), accessPoint, clusterName, log) + tlsConfig.GetConfigForClient = authclient.WithClusterCAs(tlsConfig.Clone(), accessPoint, clusterName, slog.Default()) return tlsConfig } diff --git a/lib/kube/proxy/server.go b/lib/kube/proxy/server.go index 8c770c16bbdb8..6f05f2a13a22f 100644 --- a/lib/kube/proxy/server.go +++ b/lib/kube/proxy/server.go @@ -21,6 +21,7 @@ package proxy import ( "context" "crypto/tls" + "log/slog" "maps" "net" "net/http" @@ -421,7 +422,8 @@ func (t *TLSServer) close(ctx context.Context) error { // and server's GetConfigForClient reloads the list of trusted // local and remote certificate authorities func (t *TLSServer) GetConfigForClient(info *tls.ClientHelloInfo) (*tls.Config, error) { - return authclient.WithClusterCAs(t.TLS, t.AccessPoint, t.ClusterName, t.log)(info) + // TODO(tross): remove slog.Default once the TLSServer is updated to use a slog.Logger + return authclient.WithClusterCAs(t.TLS, t.AccessPoint, t.ClusterName, slog.Default())(info) } // GetServerInfo returns a services.Server object for heartbeats (aka diff --git a/lib/service/service.go b/lib/service/service.go index b321badeef084..ffadadebf855b 100644 --- a/lib/service/service.go +++ b/lib/service/service.go @@ -5273,7 +5273,6 @@ func (process *TeleportProcess) initProxyEndpoint(conn *Connector) error { clusterName, utils.NetAddrsToStrings(process.Config.AuthServerAddresses()), proxySigner, - process.log, process.TracingProvider.Tracer(teleport.ComponentProxy)) alpnRouter.Add(alpnproxy.HandlerDecs{ @@ -6698,7 +6697,7 @@ func (process *TeleportProcess) initSecureGRPCServer(cfg initSecureGRPCServerCfg tlsConf := serverTLSConfig.Clone() tlsConf.NextProtos = []string{string(alpncommon.ProtocolHTTP2), string(alpncommon.ProtocolProxyGRPCSecure)} - tlsConf = copyAndConfigureTLS(tlsConf, process.log, cfg.accessPoint, clusterName) + tlsConf = copyAndConfigureTLS(tlsConf, process.logger, cfg.accessPoint, clusterName) creds, err := auth.NewTransportCredentials(auth.TransportCredentialsConfig{ TransportCredentials: credentials.NewTLS(tlsConf), UserGetter: authMiddleware, @@ -6752,7 +6751,7 @@ type initSecureGRPCServerCfg struct { // copyAndConfigureTLS can be used to copy and modify an existing *tls.Config // for Teleport application proxy servers. -func copyAndConfigureTLS(config *tls.Config, log logrus.FieldLogger, accessPoint authclient.AccessCache, clusterName string) *tls.Config { +func copyAndConfigureTLS(config *tls.Config, log *slog.Logger, accessPoint authclient.AccessCache, clusterName string) *tls.Config { tlsConfig := config.Clone() // Require clients to present a certificate diff --git a/lib/srv/alpnproxy/auth/auth_proxy.go b/lib/srv/alpnproxy/auth/auth_proxy.go index 795017fb02322..acd1041b5d72a 100644 --- a/lib/srv/alpnproxy/auth/auth_proxy.go +++ b/lib/srv/alpnproxy/auth/auth_proxy.go @@ -26,7 +26,6 @@ import ( "strings" "github.com/gravitational/trace" - "github.com/sirupsen/logrus" "go.opentelemetry.io/otel/attribute" oteltrace "go.opentelemetry.io/otel/trace" @@ -44,13 +43,12 @@ type sitesGetter interface { } // NewAuthProxyDialerService create new instance of AuthProxyDialerService. -func NewAuthProxyDialerService(reverseTunnelServer sitesGetter, localClusterName string, authServers []string, proxySigner multiplexer.PROXYHeaderSigner, log logrus.FieldLogger, tracer oteltrace.Tracer) *AuthProxyDialerService { +func NewAuthProxyDialerService(reverseTunnelServer sitesGetter, localClusterName string, authServers []string, proxySigner multiplexer.PROXYHeaderSigner, tracer oteltrace.Tracer) *AuthProxyDialerService { return &AuthProxyDialerService{ reverseTunnelServer: reverseTunnelServer, localClusterName: localClusterName, authServers: authServers, proxySigner: proxySigner, - log: log, tracer: tracer, } } @@ -62,7 +60,6 @@ type AuthProxyDialerService struct { localClusterName string authServers []string proxySigner multiplexer.PROXYHeaderSigner - log logrus.FieldLogger tracer oteltrace.Tracer } diff --git a/lib/srv/alpnproxy/auth/auth_proxy_test.go b/lib/srv/alpnproxy/auth/auth_proxy_test.go index cf8c6f3b1a07c..1335d3bc94f17 100644 --- a/lib/srv/alpnproxy/auth/auth_proxy_test.go +++ b/lib/srv/alpnproxy/auth/auth_proxy_test.go @@ -31,7 +31,7 @@ import ( ) func TestDialLocalAuthServerNoServers(t *testing.T) { - s := NewAuthProxyDialerService(nil /* reverseTunnelServer */, "clustername", nil /* authServers */, nil, nil, tracing.NoopTracer("test")) + s := NewAuthProxyDialerService(nil /* reverseTunnelServer */, "clustername", nil /* authServers */, nil, tracing.NoopTracer("test")) _, err := s.dialLocalAuthServer(context.Background(), nil, nil) require.Error(t, err, "dialLocalAuthServer expected to fail") require.Equal(t, "empty auth servers list", err.Error()) @@ -40,7 +40,7 @@ func TestDialLocalAuthServerNoServers(t *testing.T) { func TestDialLocalAuthServerNoAvailableServers(t *testing.T) { // The 203.0.113.0/24 range is part of block TEST-NET-3 as defined in RFC-5735 (https://www.rfc-editor.org/rfc/rfc5735). // IPs in this range do not appear on the public internet. - s := NewAuthProxyDialerService(nil /* reverseTunnelServer */, "clustername", []string{"203.0.113.1:3025"}, nil, nil, tracing.NoopTracer("test")) + s := NewAuthProxyDialerService(nil /* reverseTunnelServer */, "clustername", []string{"203.0.113.1:3025"}, nil, tracing.NoopTracer("test")) ctx, cancel := context.WithTimeout(context.Background(), 500*time.Millisecond) t.Cleanup(cancel) _, err := s.dialLocalAuthServer(ctx, nil, nil) @@ -64,7 +64,7 @@ func TestDialLocalAuthServerAvailableServers(t *testing.T) { // IPs in this range do not appear on the public internet. authServers = append(authServers, fmt.Sprintf("203.0.113.%d:3025", i+1)) } - s := NewAuthProxyDialerService(nil /* reverseTunnelServer */, "clustername", authServers, nil, nil, tracing.NoopTracer("test")) + s := NewAuthProxyDialerService(nil /* reverseTunnelServer */, "clustername", authServers, nil, tracing.NoopTracer("test")) require.Eventually(t, func() bool { ctx, cancel := context.WithTimeout(context.Background(), 50*time.Millisecond) t.Cleanup(cancel) diff --git a/lib/srv/alpnproxy/auth_checker_middleware.go b/lib/srv/alpnproxy/auth_checker_middleware.go index d61ad24f6ddf6..0121777121ba7 100644 --- a/lib/srv/alpnproxy/auth_checker_middleware.go +++ b/lib/srv/alpnproxy/auth_checker_middleware.go @@ -20,10 +20,10 @@ package alpnproxy import ( "crypto/subtle" + "log/slog" "net/http" "github.com/gravitational/trace" - "github.com/sirupsen/logrus" "github.com/gravitational/teleport" ) @@ -35,7 +35,7 @@ type AuthorizationCheckerMiddleware struct { DefaultLocalProxyHTTPMiddleware // Log is the Logger. - Log logrus.FieldLogger + Log *slog.Logger // Secret is the expected value of a bearer token. Secret string } @@ -45,7 +45,7 @@ var _ LocalProxyHTTPMiddleware = (*AuthorizationCheckerMiddleware)(nil) // CheckAndSetDefaults checks configuration validity and sets defaults. func (m *AuthorizationCheckerMiddleware) CheckAndSetDefaults() error { if m.Log == nil { - m.Log = logrus.WithField(teleport.ComponentKey, "gcp") + m.Log = slog.With(teleport.ComponentKey, "authz") } if m.Secret == "" { @@ -58,7 +58,7 @@ func (m *AuthorizationCheckerMiddleware) CheckAndSetDefaults() error { func (m *AuthorizationCheckerMiddleware) HandleRequest(rw http.ResponseWriter, req *http.Request) bool { auth := req.Header.Get("Authorization") if auth == "" { - m.Log.Debugf("No Authorization header present, ignoring request.") + m.Log.DebugContext(req.Context(), "No Authorization header present, ignoring request") return false } diff --git a/lib/srv/alpnproxy/aws_local_proxy.go b/lib/srv/alpnproxy/aws_local_proxy.go index 87cf634f365d1..77980930b2f37 100644 --- a/lib/srv/alpnproxy/aws_local_proxy.go +++ b/lib/srv/alpnproxy/aws_local_proxy.go @@ -19,6 +19,7 @@ package alpnproxy import ( + "log/slog" "net/http" "strings" @@ -26,7 +27,6 @@ import ( "github.com/aws/aws-sdk-go-v2/credentials" "github.com/aws/aws-sdk-go-v2/service/sts" "github.com/gravitational/trace" - "github.com/sirupsen/logrus" "github.com/gravitational/teleport" awsapiutils "github.com/gravitational/teleport/api/utils/aws" @@ -43,7 +43,7 @@ type AWSAccessMiddleware struct { // signature verification. AWSCredentialsProvider aws.CredentialsProvider - Log logrus.FieldLogger + Log *slog.Logger assumedRoles utils.SyncMap[string, *sts.AssumeRoleOutput] } @@ -52,7 +52,7 @@ var _ LocalProxyHTTPMiddleware = &AWSAccessMiddleware{} func (m *AWSAccessMiddleware) CheckAndSetDefaults() error { if m.Log == nil { - m.Log = logrus.WithField(teleport.ComponentKey, "aws_access") + m.Log = slog.With(teleport.ComponentKey, "aws_access") } if m.AWSCredentialsProvider == nil { @@ -113,7 +113,7 @@ func (m *AWSAccessMiddleware) CheckAndSetDefaults() error { func (m *AWSAccessMiddleware) HandleRequest(rw http.ResponseWriter, req *http.Request) bool { sigV4, err := awsutils.ParseSigV4(req.Header.Get(awsutils.AuthorizationHeader)) if err != nil { - m.Log.WithError(err).Error("Failed to parse AWS request authorization header.") + m.Log.ErrorContext(req.Context(), "Failed to parse AWS request authorization header", "error", err) rw.WriteHeader(http.StatusForbidden) return true } @@ -135,7 +135,7 @@ func (m *AWSAccessMiddleware) HandleRequest(rw http.ResponseWriter, req *http.Re func (m *AWSAccessMiddleware) handleCommonRequest(rw http.ResponseWriter, req *http.Request) bool { if err := awsutils.VerifyAWSSignatureV2(req, m.AWSCredentialsProvider); err != nil { - m.Log.WithError(err).Error("AWS signature verification failed.") + m.Log.ErrorContext(req.Context(), "AWS signature verification failed", "error", err) rw.WriteHeader(http.StatusForbidden) return true } @@ -150,12 +150,12 @@ func (m *AWSAccessMiddleware) handleRequestByAssumedRole(rw http.ResponseWriter, ) if err := awsutils.VerifyAWSSignatureV2(req, credentials); err != nil { - m.Log.WithError(err).Error("AWS signature verification failed.") + m.Log.ErrorContext(req.Context(), "AWS signature verification failed", "error", err) rw.WriteHeader(http.StatusForbidden) return true } - m.Log.Debugf("Rewriting headers for AWS request by assumed role %q.", aws.ToString(assumedRole.AssumedRoleUser.Arn)) + m.Log.DebugContext(req.Context(), "Rewriting headers for AWS request by assumed role", "assumed_role", aws.ToString(assumedRole.AssumedRoleUser.Arn)) // Add a custom header for marking the special request. req.Header.Add(appcommon.TeleportAWSAssumedRole, aws.ToString(assumedRole.AssumedRoleUser.Arn)) @@ -178,7 +178,7 @@ func (m *AWSAccessMiddleware) HandleResponse(response *http.Response) error { sigV4, err := awsutils.ParseSigV4(authHeader) if err != nil { - m.Log.WithError(err).Error("Failed to parse AWS request authorization header.") + m.Log.ErrorContext(response.Request.Context(), "Failed to parse AWS request authorization header", "error", err) return nil } @@ -205,13 +205,13 @@ func (m *AWSAccessMiddleware) handleSTSResponse(response *http.Response) error { assumedRole, err := unmarshalAssumeRoleResponse(body) if err != nil { if !trace.IsNotFound(err) { - m.Log.Warnf("Failed to unmarshal AssumeRoleResponse: %v.", err) + m.Log.WarnContext(response.Request.Context(), "Failed to unmarshal AssumeRoleResponse", "error", err) } return nil } m.assumedRoles.Store(aws.ToString(assumedRole.Credentials.AccessKeyId), assumedRole) - m.Log.Debugf("Saved credentials for assumed role %q.", aws.ToString(assumedRole.AssumedRoleUser.Arn)) + m.Log.DebugContext(response.Request.Context(), "Saved credentials for assumed role", "assumed_role", aws.ToString(assumedRole.AssumedRoleUser.Arn)) return nil } diff --git a/lib/srv/alpnproxy/azure_msi_middleware.go b/lib/srv/alpnproxy/azure_msi_middleware.go index 0156e18b49f7f..6e462f2de8906 100644 --- a/lib/srv/alpnproxy/azure_msi_middleware.go +++ b/lib/srv/alpnproxy/azure_msi_middleware.go @@ -22,13 +22,13 @@ import ( "crypto" "encoding/json" "fmt" + "log/slog" "net/http" "sync" "time" "github.com/gravitational/trace" "github.com/jonboulle/clockwork" - "github.com/sirupsen/logrus" "github.com/gravitational/teleport" "github.com/gravitational/teleport/api/types" @@ -49,7 +49,7 @@ type AzureMSIMiddleware struct { // Clock is used to override time in tests. Clock clockwork.Clock // Log is the Logger. - Log logrus.FieldLogger + Log *slog.Logger // Secret to be provided by the client. Secret string @@ -65,7 +65,7 @@ func (m *AzureMSIMiddleware) CheckAndSetDefaults() error { m.Clock = clockwork.NewRealClock() } if m.Log == nil { - m.Log = logrus.WithField(teleport.ComponentKey, "azure_msi") + m.Log = slog.With(teleport.ComponentKey, "azure_msi") } if m.Secret == "" { @@ -86,7 +86,7 @@ func (m *AzureMSIMiddleware) CheckAndSetDefaults() error { func (m *AzureMSIMiddleware) HandleRequest(rw http.ResponseWriter, req *http.Request) bool { if req.Host == types.TeleportAzureMSIEndpoint { if err := m.msiEndpoint(rw, req); err != nil { - m.Log.Warnf("Bad MSI request: %v", err) + m.Log.WarnContext(req.Context(), "Bad MSI request", "error", err) trace.WriteError(rw, trace.Wrap(err)) } return true @@ -135,7 +135,7 @@ func (m *AzureMSIMiddleware) msiEndpoint(rw http.ResponseWriter, req *http.Reque // check that msi_res_id matches expected Azure Identity requestedAzureIdentity := req.Form.Get("msi_res_id") if requestedAzureIdentity != m.Identity { - m.Log.Warnf("Requested unexpected identity %q, expected %q", requestedAzureIdentity, m.Identity) + m.Log.WarnContext(req.Context(), "Requested unexpected identity", "requested_identity", requestedAzureIdentity, "expected_identity", m.Identity) return trace.BadParameter("unexpected value for parameter 'msi_res_id': %v", requestedAzureIdentity) } @@ -144,7 +144,7 @@ func (m *AzureMSIMiddleware) msiEndpoint(rw http.ResponseWriter, req *http.Reque return trace.Wrap(err) } - m.Log.Infof("MSI: returning token for identity %v", m.Identity) + m.Log.InfoContext(req.Context(), "MSI: returning token for identity", "identity", m.Identity) rw.Header().Add("Content-Type", "application/json; charset=utf-8") rw.Header().Add("Content-Length", fmt.Sprintf("%v", len(respBody))) diff --git a/lib/srv/alpnproxy/azure_msi_middleware_test.go b/lib/srv/alpnproxy/azure_msi_middleware_test.go index 8104186a3cb1e..c1fd2a42d5bea 100644 --- a/lib/srv/alpnproxy/azure_msi_middleware_test.go +++ b/lib/srv/alpnproxy/azure_msi_middleware_test.go @@ -29,13 +29,12 @@ import ( "time" "github.com/jonboulle/clockwork" - "github.com/sirupsen/logrus" "github.com/stretchr/testify/require" - "github.com/gravitational/teleport" "github.com/gravitational/teleport/api/types" "github.com/gravitational/teleport/lib/cryptosuites" "github.com/gravitational/teleport/lib/jwt" + "github.com/gravitational/teleport/lib/utils" ) func TestAzureMSIMiddlewareHandleRequest(t *testing.T) { @@ -58,7 +57,7 @@ func testAzureMSIMiddlewareHandleRequest(t *testing.T, alg cryptosuites.Algorith Identity: "azureTestIdentity", TenantID: "cafecafe-cafe-4aaa-cafe-cafecafecafe", ClientID: "decaffff-cafe-4aaa-cafe-cafecafecafe", - Log: logrus.WithField(teleport.ComponentKey, "msi"), + Log: utils.NewSlogLoggerForTests(), Clock: clockwork.NewFakeClockAt(time.Date(2022, 1, 1, 9, 0, 0, 0, time.UTC)), Secret: "my-secret", } diff --git a/lib/srv/alpnproxy/forward_proxy.go b/lib/srv/alpnproxy/forward_proxy.go index 0a58e442b3f79..1ea1811ff004d 100644 --- a/lib/srv/alpnproxy/forward_proxy.go +++ b/lib/srv/alpnproxy/forward_proxy.go @@ -21,13 +21,13 @@ package alpnproxy import ( "context" "crypto/tls" + "log/slog" "net" "net/http" "net/url" "strings" "github.com/gravitational/trace" - log "github.com/sirupsen/logrus" "golang.org/x/net/http/httpproxy" apidefaults "github.com/gravitational/teleport/api/defaults" @@ -37,6 +37,7 @@ import ( "github.com/gravitational/teleport/api/utils/gcp" "github.com/gravitational/teleport/lib/defaults" "github.com/gravitational/teleport/lib/utils" + logutils "github.com/gravitational/teleport/lib/utils/log" ) // IsConnectRequest returns true if the request is a HTTP CONNECT tunnel @@ -133,7 +134,7 @@ func (p *ForwardProxy) ServeHTTP(rw http.ResponseWriter, req *http.Request) { clientConn := hijackClientConnection(rw) if clientConn == nil { - log.Error("Failed to hijack client connection.") + slog.ErrorContext(req.Context(), "Failed to hijack client connection") rw.WriteHeader(http.StatusInternalServerError) return } @@ -225,7 +226,7 @@ func (h *ForwardToHostHandler) Handle(ctx context.Context, clientConn net.Conn, serverConn, err := net.Dial("tcp", host) if err != nil { - log.WithError(err).Errorf("Failed to connect to host %q.", host) + slog.ErrorContext(req.Context(), "Failed to connect to host", "error", err, "host", host) writeHeaderToHijackedConnection(clientConn, req, http.StatusServiceUnavailable) return } @@ -236,7 +237,7 @@ func (h *ForwardToHostHandler) Handle(ctx context.Context, clientConn net.Conn, return } - startForwardProxy(ctx, clientConn, serverConn, req.Host) + startForwardProxy(ctx, clientConn, serverConn, req.Host, slog.Default()) } // ForwardToSystemProxyHandlerConfig is the config for @@ -299,24 +300,25 @@ func (h *ForwardToSystemProxyHandler) Handle(ctx context.Context, clientConn net return } + logger := slog.With("proxy", logutils.StringerAttr(systemProxyURL)) serverConn, err := h.connectToSystemProxy(systemProxyURL) if err != nil { - log.WithError(err).Errorf("Failed to connect to system proxy %q.", systemProxyURL.Host) + logger.ErrorContext(req.Context(), "Failed to connect to system proxy", "error", err) writeHeaderToHijackedConnection(clientConn, req, http.StatusBadGateway) return } defer serverConn.Close() - log.Debugf("Connected to system proxy %v.", systemProxyURL) + logger.DebugContext(req.Context(), "Connected to system proxy") // Send original CONNECT request to system proxy. if err = req.WriteProxy(serverConn); err != nil { - log.WithError(err).Errorf("Failed to send CONNECT request to system proxy %q.", systemProxyURL.Host) + logger.ErrorContext(req.Context(), "Failed to send CONNECT request to system proxy", "error", err) writeHeaderToHijackedConnection(clientConn, req, http.StatusBadGateway) return } - startForwardProxy(ctx, clientConn, serverConn, req.Host) + startForwardProxy(ctx, clientConn, serverConn, req.Host, logger) } // getSystemProxyURL returns the system proxy URL. @@ -331,7 +333,7 @@ func (h *ForwardToSystemProxyHandler) getSystemProxyURL(req *http.Request) *url. // If error exists, make a log for debugging purpose. if err != nil { - log.WithError(err).Debugf("Failed to get system proxy.") + slog.DebugContext(req.Context(), "Failed to get system proxy", "error", err) } return nil } @@ -364,12 +366,12 @@ func (h *ForwardToSystemProxyHandler) connectToSystemProxy(systemProxyURL *url.U } // startForwardProxy starts streaming between client and server. -func startForwardProxy(ctx context.Context, clientConn, serverConn net.Conn, host string) { - log.Debugf("Started forwarding request for %q.", host) - defer log.Debugf("Stopped forwarding request for %q.", host) +func startForwardProxy(ctx context.Context, clientConn, serverConn net.Conn, host string, logger *slog.Logger) { + logger.DebugContext(ctx, "Started forwarding request to host", "host", host) + defer logger.DebugContext(ctx, "Stopped forwarding request to host", "host", host) if err := utils.ProxyConn(ctx, clientConn, serverConn); err != nil { - log.WithError(err).Errorf("Failed to proxy between %q and %q.", clientConn.LocalAddr(), serverConn.LocalAddr()) + logger.ErrorContext(ctx, "Failed to proxy request", "error", err, "client_addr", clientConn.LocalAddr(), "server_addr", serverConn.LocalAddr()) } } @@ -394,7 +396,7 @@ func writeHeaderToHijackedConnection(conn net.Conn, req *http.Request, statusCod } err := resp.Write(conn) if err != nil && !utils.IsOKNetworkError(err) { - log.WithError(err).Errorf("Failed to write status code %d to client connection.", statusCode) + slog.ErrorContext(req.Context(), "Failed to write status code to client connection", "error", err, "status_code", statusCode) return false } return true diff --git a/lib/srv/alpnproxy/helpers_test.go b/lib/srv/alpnproxy/helpers_test.go index 90af912be29b3..30f72b5543624 100644 --- a/lib/srv/alpnproxy/helpers_test.go +++ b/lib/srv/alpnproxy/helpers_test.go @@ -32,7 +32,6 @@ import ( "time" "github.com/jonboulle/clockwork" - "github.com/sirupsen/logrus" "github.com/stretchr/testify/require" "github.com/gravitational/teleport/api/types" @@ -125,7 +124,7 @@ func (s *Suite) CreateProxyServer(t *testing.T) *Proxy { Listener: s.serverListener, WebTLSConfig: tlsConfig, Router: s.router, - Log: logrus.New(), + Log: utils.NewSlogLoggerForTests(), AccessPoint: s.accessPoint, IdentityTLSConfig: tlsConfig, ClusterName: "root", diff --git a/lib/srv/alpnproxy/kube.go b/lib/srv/alpnproxy/kube.go index 256eb2ad79a30..36ee94ce7fb93 100644 --- a/lib/srv/alpnproxy/kube.go +++ b/lib/srv/alpnproxy/kube.go @@ -24,6 +24,7 @@ import ( "crypto/x509" "crypto/x509/pkix" "errors" + "log/slog" "net" "net/http" "sync" @@ -32,7 +33,6 @@ import ( "github.com/gravitational/trace" "github.com/jonboulle/clockwork" - "github.com/sirupsen/logrus" apierrors "k8s.io/apimachinery/pkg/api/errors" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/runtime" @@ -81,7 +81,7 @@ type KubeMiddleware struct { // headless controls whether proxy is working in headless login mode. headless bool - logger logrus.FieldLogger + logger *slog.Logger closeContext context.Context // isCertReissuingRunning is used to only ever have one concurrent cert reissuing session requiring user input. @@ -97,7 +97,7 @@ type KubeMiddlewareConfig struct { CertReissuer KubeCertReissuer Headless bool Clock clockwork.Clock - Logger logrus.FieldLogger + Logger *slog.Logger CloseContext context.Context } @@ -122,7 +122,7 @@ func (m *KubeMiddleware) CheckAndSetDefaults() error { m.clock = clockwork.NewRealClock() } if m.logger == nil { - m.logger = logrus.WithField(teleport.ComponentKey, "local_proxy_kube") + m.logger = slog.With(teleport.ComponentKey, "local_proxy_kube") } if m.closeContext == nil { return trace.BadParameter("missing close context") @@ -140,12 +140,12 @@ func initKubeCodecs() serializer.CodecFactory { return serializer.NewCodecFactory(kubeScheme) } -func writeKubeError(rw http.ResponseWriter, kubeError *apierrors.StatusError, logger logrus.FieldLogger) { +func writeKubeError(ctx context.Context, rw http.ResponseWriter, kubeError *apierrors.StatusError, logger *slog.Logger) { kubeCodecs := initKubeCodecs() status := kubeError.Status() errorBytes, err := runtime.Encode(kubeCodecs.LegacyCodec(), &status) if err != nil { - logger.Warnf("Failed to encode Kube status error: %v.", err) + logger.WarnContext(ctx, "Failed to encode Kube status error", "error", err) trace.WriteError(rw, trace.Wrap(kubeError)) } @@ -153,7 +153,7 @@ func writeKubeError(rw http.ResponseWriter, kubeError *apierrors.StatusError, lo rw.WriteHeader(int(status.Code)) if _, err := rw.Write(errorBytes); err != nil { - logger.Warnf("Failed to write Kube error: %v.", err) + logger.WarnContext(ctx, "Failed to write Kube error", "error", err) } } @@ -170,7 +170,7 @@ func (m *KubeMiddleware) HandleRequest(rw http.ResponseWriter, req *http.Request if err != nil { // If user input is required we return an error that will try to get user attention to the local proxy if errors.Is(err, ErrUserInputRequired) { - writeKubeError(rw, &apierrors.StatusError{ + writeKubeError(req.Context(), rw, &apierrors.StatusError{ ErrStatus: metav1.Status{ TypeMeta: metav1.TypeMeta{ Kind: "Status", @@ -184,7 +184,7 @@ func (m *KubeMiddleware) HandleRequest(rw http.ResponseWriter, req *http.Request }, m.logger) return true } - m.logger.WithError(err).Warnf("Failed to reissue certificate for server %v", req.TLS.ServerName) + m.logger.WarnContext(req.Context(), "Failed to reissue certificate for server", "server", req.TLS.ServerName) trace.WriteError(rw, trace.Wrap(err)) return true } diff --git a/lib/srv/alpnproxy/local_proxy.go b/lib/srv/alpnproxy/local_proxy.go index 481e0b0813a6d..e5a8da85dcb35 100644 --- a/lib/srv/alpnproxy/local_proxy.go +++ b/lib/srv/alpnproxy/local_proxy.go @@ -24,6 +24,7 @@ import ( "crypto/tls" "crypto/x509" "io" + "log/slog" "net" "net/http" "net/http/httputil" @@ -33,7 +34,6 @@ import ( "github.com/gravitational/trace" "github.com/jackc/pgproto3/v2" "github.com/jonboulle/clockwork" - "github.com/sirupsen/logrus" "github.com/gravitational/teleport" "github.com/gravitational/teleport/api/client" @@ -43,6 +43,7 @@ import ( commonApp "github.com/gravitational/teleport/lib/srv/app/common" "github.com/gravitational/teleport/lib/tlsca" "github.com/gravitational/teleport/lib/utils" + logutils "github.com/gravitational/teleport/lib/utils/log" ) // LocalProxy allows upgrading incoming connection to TLS where custom TLS values are set SNI ALPN and @@ -81,7 +82,7 @@ type LocalProxyConfig struct { // Clock is used to override time in tests. Clock clockwork.Clock // Log is the Logger. - Log logrus.FieldLogger + Log *slog.Logger // CheckCertNeeded determines if the local proxy will check if it should // load cert for dialing upstream. Defaults to false, in which case // the local proxy will always use whatever cert it has to dial upstream. @@ -121,7 +122,7 @@ func (cfg *LocalProxyConfig) CheckAndSetDefaults() error { cfg.Clock = clockwork.NewRealClock() } if cfg.Log == nil { - cfg.Log = logrus.WithField(teleport.ComponentKey, "localproxy") + cfg.Log = slog.With(teleport.ComponentKey, "localproxy") } // set tls cert chain leaf to reduce per-handshake processing. @@ -194,16 +195,16 @@ func (l *LocalProxy) start(ctx context.Context) error { if utils.IsOKNetworkError(err) { return nil } - l.cfg.Log.WithError(err).Error("Failed to accept client connection.") + l.cfg.Log.ErrorContext(ctx, "Failed to accept client connection", "error", err) return trace.Wrap(err) } - l.cfg.Log.Debug("Accepted downstream connection.") + l.cfg.Log.DebugContext(ctx, "Accepted downstream connection") if l.cfg.Middleware != nil { if err := l.cfg.Middleware.OnNewConnection(ctx, l); err != nil { - l.cfg.Log.WithError(err).Error("Middleware failed to handle client connection.") + l.cfg.Log.ErrorContext(ctx, "Middleware failed to handle client connection", "error", err) if err := conn.Close(); err != nil && !utils.IsUseOfClosedNetworkError(err) { - l.cfg.Log.WithError(err).Debug("Failed to close client connection.") + l.cfg.Log.DebugContext(ctx, "Failed to close client connection", "error", err) } continue } @@ -214,7 +215,7 @@ func (l *LocalProxy) start(ctx context.Context) error { if utils.IsOKNetworkError(err) { return } - l.cfg.Log.WithError(err).Error("Failed to handle connection.") + l.cfg.Log.ErrorContext(ctx, "Failed to handle connection", "error", err) } }() } @@ -323,10 +324,10 @@ func (l *LocalProxy) makeHTTPReverseProxy(certs ...tls.Certificate) *httputil.Re // TODO: find a cleaner way of formatting the error. errHeader = strings.Replace(errHeader, " \t", "\n\t", -1) errHeader = strings.Replace(errHeader, " User Message:", "\n\n\tUser Message:", -1) - l.cfg.Log.Warn(errHeader) + l.cfg.Log.WarnContext(response.Request.Context(), "Server response contained an error header", "error_header", errHeader) } for _, infoHeader := range response.Header.Values(commonApp.TeleportAPIInfoHeader) { - l.cfg.Log.Infof("Server response info: %v.", infoHeader) + l.cfg.Log.InfoContext(response.Request.Context(), "Server response info", "header", infoHeader) } if err := l.cfg.HTTPMiddleware.HandleResponse(response); err != nil { @@ -335,7 +336,7 @@ func (l *LocalProxy) makeHTTPReverseProxy(certs ...tls.Certificate) *httputil.Re return nil }, ErrorHandler: func(w http.ResponseWriter, r *http.Request, err error) { - l.cfg.Log.WithError(err).Warnf("Failed to handle request %v %v.", r.Method, r.URL) + l.cfg.Log.WarnContext(r.Context(), "Failed to handle request ", "error", err, "method", r.Method, "url", logutils.StringerAttr(r.URL)) code := trace.ErrorToCode(err) http.Error(w, http.StatusText(code), code) }, @@ -351,15 +352,15 @@ func (l *LocalProxy) startHTTPAccessProxy(ctx context.Context) error { return trace.Wrap(err) } - l.cfg.Log.Info("Starting HTTP access proxy") - defer l.cfg.Log.Info("HTTP access proxy stopped") + l.cfg.Log.InfoContext(ctx, "Starting HTTP access proxy") + defer l.cfg.Log.InfoContext(ctx, "HTTP access proxy stopped") server := &http.Server{ ReadHeaderTimeout: defaults.ReadHeadersTimeout, Handler: http.HandlerFunc(func(rw http.ResponseWriter, req *http.Request) { if l.cfg.Middleware != nil { if err := l.cfg.Middleware.OnNewConnection(ctx, l); err != nil { - l.cfg.Log.WithError(err).Error("Middleware failed to handle client request.") + l.cfg.Log.ErrorContext(ctx, "Middleware failed to handle client request", "error", err) trace.WriteError(rw, trace.Wrap(err)) return } @@ -379,7 +380,7 @@ func (l *LocalProxy) startHTTPAccessProxy(ctx context.Context) error { proxy, err := l.getHTTPReverseProxyForReq(req) if err != nil { - l.cfg.Log.Warnf("Failed to get reverse proxy: %v.", err) + l.cfg.Log.WarnContext(ctx, "Failed to get reverse proxy", "error", err) trace.WriteError(rw, trace.Wrap(err)) return } @@ -410,7 +411,7 @@ func (l *LocalProxy) getHTTPReverseProxyForReq(req *http.Request) (*httputil.Rev return nil, trace.Wrap(err) } - l.cfg.Log.Debug("overwrote certs") + l.cfg.Log.DebugContext(req.Context(), "overwrote certs") return l.makeHTTPReverseProxy(certs...), nil } @@ -422,8 +423,8 @@ func (l *LocalProxy) getCert() tls.Certificate { } // CheckDBCert checks the proxy certificates for expiration and that the cert subject matches a database route. -func (l *LocalProxy) CheckDBCert(dbRoute tlsca.RouteToDatabase) error { - l.cfg.Log.Debug("checking local proxy database certs") +func (l *LocalProxy) CheckDBCert(ctx context.Context, dbRoute tlsca.RouteToDatabase) error { + l.cfg.Log.DebugContext(ctx, "checking local proxy database certs") l.certMu.RLock() defer l.certMu.RUnlock() @@ -445,8 +446,8 @@ func (l *LocalProxy) CheckDBCert(dbRoute tlsca.RouteToDatabase) error { } // CheckCertExpiry checks the proxy certificates for expiration. -func (l *LocalProxy) CheckCertExpiry() error { - l.cfg.Log.Debug("checking local proxy certs") +func (l *LocalProxy) CheckCertExpiry(ctx context.Context) error { + l.cfg.Log.DebugContext(ctx, "checking local proxy certs") l.certMu.RLock() defer l.certMu.RUnlock() diff --git a/lib/srv/alpnproxy/local_proxy_test.go b/lib/srv/alpnproxy/local_proxy_test.go index 347ca22e891ec..063992f56f962 100644 --- a/lib/srv/alpnproxy/local_proxy_test.go +++ b/lib/srv/alpnproxy/local_proxy_test.go @@ -416,7 +416,7 @@ func TestCheckDBCerts(t *testing.T) { withClock(tt.clock), ) lp.SetCert(tlsCert) - tt.errAssertFn(t, lp.CheckDBCert(tt.dbRoute)) + tt.errAssertFn(t, lp.CheckDBCert(context.Background(), tt.dbRoute)) }) } } diff --git a/lib/srv/alpnproxy/proxy.go b/lib/srv/alpnproxy/proxy.go index 4ac1c9d36a643..94f68fb841fcc 100644 --- a/lib/srv/alpnproxy/proxy.go +++ b/lib/srv/alpnproxy/proxy.go @@ -25,6 +25,7 @@ import ( "encoding/base64" "errors" "io" + "log/slog" "net" "strings" "sync" @@ -32,7 +33,6 @@ import ( "github.com/gravitational/trace" "github.com/jonboulle/clockwork" - "github.com/sirupsen/logrus" "github.com/gravitational/teleport" "github.com/gravitational/teleport/api/constants" @@ -55,7 +55,7 @@ type ProxyConfig struct { // Router contains definition of protocol routing and handlers description. Router *Router // Log is used for logging. - Log logrus.FieldLogger + Log *slog.Logger // Clock is a clock to override in tests, set to real time clock // by default Clock clockwork.Clock @@ -241,7 +241,7 @@ type HandlerFunc func(ctx context.Context, conn net.Conn) error type Proxy struct { cfg ProxyConfig supportedProtocols []common.Protocol - log logrus.FieldLogger + log *slog.Logger // mu guards cancel mu sync.Mutex @@ -257,7 +257,7 @@ func (c *ProxyConfig) CheckAndSetDefaults() error { return trace.BadParameter("listener missing") } if c.Log == nil { - c.Log = logrus.WithField(teleport.ComponentKey, "alpn:proxy") + c.Log = slog.With(teleport.ComponentKey, "alpn:proxy") } if c.Clock == nil { c.Clock = clockwork.NewRealClock() @@ -334,16 +334,16 @@ func (p *Proxy) Serve(ctx context.Context) error { // https://github.com/gravitational/teleport/blob/master/lib/sshutils/server.go#L397 if err := p.handleConn(ctx, clientConn, nil); err != nil { if cerr := clientConn.Close(); cerr != nil && !utils.IsOKNetworkError(cerr) { - p.log.WithError(cerr).Warnf("Failed to close client connection.") + p.log.WarnContext(ctx, "Failed to close client connection", "error", cerr) } switch { case trace.IsBadParameter(err): - p.log.Warnf("Failed to handle client connection: %v", err) + p.log.WarnContext(ctx, "Failed to handle client connection", "error", err) case utils.IsOKNetworkError(err): case isConnRemoteError(err): - p.log.WithField("remote_addr", clientConn.RemoteAddr()).Debugf("Connection rejected by client: %v", err) + p.log.DebugContext(ctx, "Connection rejected by client", "error", err, "remote_addr", clientConn.RemoteAddr()) default: - p.log.WithError(err).Warnf("Failed to handle client connection.") + p.log.WarnContext(ctx, "Failed to handle client connection", "error", err) } } }() @@ -407,7 +407,7 @@ func (p *Proxy) handleConn(ctx context.Context, clientConn net.Conn, defaultOver // We try to do quick early IP pinning check, if possible, and stop it on the proxy, without going further. // It's based only on client cert. Client can still fail full IP pinning check later if their role now requires // IP pinning but cert isn't pinned. - if err := p.checkCertIPPinning(tlsConn); err != nil { + if err := p.checkCertIPPinning(ctx, tlsConn); err != nil { return trace.Wrap(err) } @@ -419,7 +419,7 @@ func (p *Proxy) handleConn(ctx context.Context, clientConn net.Conn, defaultOver isDatabaseConnection, err := dbutils.IsDatabaseConnection(tlsConn.ConnectionState()) if err != nil { - p.log.WithError(err).Debug("Failed to check if connection is database connection.") + p.log.DebugContext(ctx, "Failed to check if connection is database connection", "error", err) } if isDatabaseConnection { return trace.Wrap(p.handleDatabaseConnection(ctx, handlerConn, connInfo)) @@ -427,7 +427,7 @@ func (p *Proxy) handleConn(ctx context.Context, clientConn net.Conn, defaultOver return trace.Wrap(handlerDesc.handle(ctx, handlerConn, connInfo)) } -func (p *Proxy) checkCertIPPinning(tlsConn *tls.Conn) error { +func (p *Proxy) checkCertIPPinning(ctx context.Context, tlsConn *tls.Conn) error { state := tlsConn.ConnectionState() if len(state.PeerCertificates) == 0 { @@ -446,10 +446,10 @@ func (p *Proxy) checkCertIPPinning(tlsConn *tls.Conn) error { if identity.PinnedIP != "" && (clientIP != identity.PinnedIP || port == "0") { if port == "0" { - p.log.WithFields(logrus.Fields{ - "client_ip": clientIP, - "pinned_ip": identity.PinnedIP, - }).Debug(authz.ErrIPPinningMismatch.Error()) + p.log.DebugContext(ctx, "pinned IP doesn't match observed client IP", + "client_ip", clientIP, + "pinned_ip", identity.PinnedIP, + ) } return trace.Wrap(authz.ErrIPPinningMismatch) } @@ -474,7 +474,7 @@ func (p *Proxy) handlePingConnection(ctx context.Context, conn *tls.Conn) utils. err := pingConn.WritePing() if err != nil { if !utils.IsOKNetworkError(err) { - p.log.WithError(err).Warn("Failed to write ping message") + p.log.WarnContext(ctx, "Failed to write ping message", "error", err) } return @@ -547,7 +547,7 @@ func (p *Proxy) databaseHandlerWithTLSTermination(ctx context.Context, conn net. tlsConn := tls.Server(conn, p.cfg.IdentityTLSConfig) if err := tlsConn.SetReadDeadline(p.cfg.Clock.Now().Add(p.cfg.ReadDeadline)); err != nil { if err := tlsConn.Close(); err != nil { - p.log.WithError(err).Error("Failed to close TLS connection.") + p.log.ErrorContext(ctx, "Failed to close TLS connection", "error", err) } return trace.Wrap(err) } @@ -556,14 +556,14 @@ func (p *Proxy) databaseHandlerWithTLSTermination(ctx context.Context, conn net. } if err := tlsConn.SetReadDeadline(time.Time{}); err != nil { if err := tlsConn.Close(); err != nil { - p.log.WithError(err).Error("Failed to close TLS connection.") + p.log.ErrorContext(ctx, "Failed to close TLS connection", "error", err) } return trace.Wrap(err) } isDatabaseConnection, err := dbutils.IsDatabaseConnection(tlsConn.ConnectionState()) if err != nil { - p.log.WithError(err).Debug("Failed to check if connection is database connection.") + p.log.DebugContext(ctx, "Failed to check if connection is database connection", "error", err) } if !isDatabaseConnection { return trace.BadParameter("not database connection") diff --git a/lib/tbot/service_application_tunnel.go b/lib/tbot/service_application_tunnel.go index 427a4558d4e5c..36478d983f313 100644 --- a/lib/tbot/service_application_tunnel.go +++ b/lib/tbot/service_application_tunnel.go @@ -150,7 +150,7 @@ func (s *ApplicationTunnelService) buildLocalProxyConfig(ctx context.Context) (l ctx, span := tracer.Start(ctx, "ApplicationTunnelService/OnNewConnection") defer span.End() - if err := lp.CheckCertExpiry(); err != nil { + if err := lp.CheckCertExpiry(ctx); err != nil { s.log.InfoContext(ctx, "Certificate for tunnel needs reissuing.", "reason", err.Error()) cert, _, err := s.issueCert(ctx, roles) if err != nil { diff --git a/lib/tbot/service_database_tunnel.go b/lib/tbot/service_database_tunnel.go index 4ba5c5c3647cf..d65a8d94b3a3f 100644 --- a/lib/tbot/service_database_tunnel.go +++ b/lib/tbot/service_database_tunnel.go @@ -130,7 +130,7 @@ func (s *DatabaseTunnelService) buildLocalProxyConfig(ctx context.Context) (lpCf defer span.End() // Check if the certificate needs reissuing, if so, reissue. - if err := lp.CheckDBCert(tlsca.RouteToDatabase{ + if err := lp.CheckDBCert(ctx, tlsca.RouteToDatabase{ ServiceName: routeToDatabase.ServiceName, Protocol: routeToDatabase.Protocol, Database: routeToDatabase.Database, diff --git a/lib/teleterm/gateway/app_middleware.go b/lib/teleterm/gateway/app_middleware.go index 2da5946018147..8af69271ade03 100644 --- a/lib/teleterm/gateway/app_middleware.go +++ b/lib/teleterm/gateway/app_middleware.go @@ -38,7 +38,7 @@ type appMiddleware struct { // Other middlewares typically also handle MFA here. App access doesn't support per-session MFA yet, // so detecting expired certs is all this middleware can do. func (m *appMiddleware) OnNewConnection(ctx context.Context, lp *alpn.LocalProxy) error { - err := lp.CheckCertExpiry() + err := lp.CheckCertExpiry(ctx) if err == nil { return nil } diff --git a/lib/teleterm/gateway/db_middleware.go b/lib/teleterm/gateway/db_middleware.go index df25c400130e1..cd189fff048a0 100644 --- a/lib/teleterm/gateway/db_middleware.go +++ b/lib/teleterm/gateway/db_middleware.go @@ -44,7 +44,7 @@ type dbMiddleware struct { // In the future, DBCertChecker is going to be extended so that it's used by both tsh and Connect // and this middleware will be removed. func (m *dbMiddleware) OnNewConnection(ctx context.Context, lp *alpn.LocalProxy) error { - err := lp.CheckDBCert(m.dbRoute) + err := lp.CheckDBCert(ctx, m.dbRoute) if err == nil { return nil } diff --git a/lib/teleterm/gateway/kube.go b/lib/teleterm/gateway/kube.go index 17a3b4a55241d..1dccb4189accc 100644 --- a/lib/teleterm/gateway/kube.go +++ b/lib/teleterm/gateway/kube.go @@ -26,6 +26,7 @@ import ( "crypto/rsa" "crypto/tls" "encoding/pem" + "log/slog" "github.com/gravitational/trace" clientcmdapi "k8s.io/client-go/tools/clientcmd/api" @@ -160,8 +161,9 @@ func (k *kube) makeKubeMiddleware() (alpnproxy.LocalProxyHTTPMiddleware, error) cert, err := k.cfg.OnExpiredCert(ctx, k) return cert, trace.Wrap(err) }, - Clock: k.cfg.Clock, - Logger: k.cfg.Log, + Clock: k.cfg.Clock, + // TODO(tross): update this when kube is converted to use slog. + Logger: slog.Default(), CloseContext: k.closeContext, }), nil } diff --git a/lib/web/apiserver_test.go b/lib/web/apiserver_test.go index 5b78a5cd60c54..08611d1c2390a 100644 --- a/lib/web/apiserver_test.go +++ b/lib/web/apiserver_test.go @@ -34,6 +34,7 @@ import ( "errors" "fmt" "io" + "log/slog" "net" "net/http" "net/http/cookiejar" @@ -58,7 +59,6 @@ import ( "github.com/jonboulle/clockwork" "github.com/julienschmidt/httprouter" "github.com/pquerna/otp/totp" - "github.com/sirupsen/logrus" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" commonv1 "go.opentelemetry.io/proto/otlp/common/v1" @@ -9534,7 +9534,7 @@ func initGRPCServer(t *testing.T, env *webPack, listener net.Listener) { AcceptedUsage: []string{teleport.UsageKubeOnly}, } - tlsConf := copyAndConfigureTLS(tlsConfig, logrus.New(), proxyAuthClient, clusterName) + tlsConf := copyAndConfigureTLS(tlsConfig, proxyAuthClient, clusterName) creds, err := auth.NewTransportCredentials(auth.TransportCredentialsConfig{ TransportCredentials: credentials.NewTLS(tlsConf), UserGetter: authMiddleware, @@ -9561,7 +9561,7 @@ func initGRPCServer(t *testing.T, env *webPack, listener net.Listener) { // copyAndConfigureTLS can be used to copy and modify an existing *tls.Config // for Teleport application proxy servers. -func copyAndConfigureTLS(config *tls.Config, log logrus.FieldLogger, accessPoint authclient.AccessCache, clusterName string) *tls.Config { +func copyAndConfigureTLS(config *tls.Config, accessPoint authclient.AccessCache, clusterName string) *tls.Config { tlsConfig := config.Clone() // Require clients to present a certificate @@ -9571,7 +9571,7 @@ func copyAndConfigureTLS(config *tls.Config, log logrus.FieldLogger, accessPoint // client's certificate to verify the chain presented. If the client does not // pass in the cluster name, this functions pulls back all CA to try and // match the certificate presented against any CA. - tlsConfig.GetConfigForClient = authclient.WithClusterCAs(tlsConfig.Clone(), accessPoint, clusterName, log) + tlsConfig.GetConfigForClient = authclient.WithClusterCAs(tlsConfig.Clone(), accessPoint, clusterName, slog.Default()) return tlsConfig } diff --git a/tool/tsh/common/kube_proxy.go b/tool/tsh/common/kube_proxy.go index f8430d642c2a2..75c8c120b223e 100644 --- a/tool/tsh/common/kube_proxy.go +++ b/tool/tsh/common/kube_proxy.go @@ -350,7 +350,7 @@ func makeKubeLocalProxy(cf *CLIConf, tc *client.TeleportClient, clusters kubecon Certs: certs, CertReissuer: kubeProxy.getCertReissuer(tc), Headless: cf.Headless, - Logger: log, + Logger: logger, CloseContext: cf.Context, }) diff --git a/tool/tsh/common/tsh.go b/tool/tsh/common/tsh.go index dc186e3458feb..aa6fb5cbf5666 100644 --- a/tool/tsh/common/tsh.go +++ b/tool/tsh/common/tsh.go @@ -93,6 +93,7 @@ import ( "github.com/gravitational/teleport/lib/tlsca" "github.com/gravitational/teleport/lib/utils" "github.com/gravitational/teleport/lib/utils/diagnostics/latency" + logutils "github.com/gravitational/teleport/lib/utils/log" "github.com/gravitational/teleport/lib/utils/mlock" stacksignal "github.com/gravitational/teleport/lib/utils/signal" "github.com/gravitational/teleport/tool/common" @@ -101,9 +102,10 @@ import ( "github.com/gravitational/teleport/tool/common/webauthnwin" ) -var log = logrus.WithFields(logrus.Fields{ - teleport.ComponentKey: teleport.ComponentTSH, -}) +var ( + log = logrus.WithField(teleport.ComponentKey, teleport.ComponentTSH) + logger = logutils.NewPackageLogger(teleport.ComponentKey, teleport.ComponentTSH) +) const ( // mfaModeAuto automatically chooses the best MFA device(s), without any From 34159bc19ff7d8081f61a006c1507770df3866e7 Mon Sep 17 00:00:00 2001 From: Sakshyam Shah Date: Thu, 12 Dec 2024 10:26:48 -0500 Subject: [PATCH 13/22] update e-ref (#50096) * update e-ref * update submodule head --- e | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/e b/e index 6ddf1da69dcc9..e58eb7edbe80d 160000 --- a/e +++ b/e @@ -1 +1 @@ -Subproject commit 6ddf1da69dcc9217eea30dd793c6b264ea59768d +Subproject commit e58eb7edbe80d991121b58cd35cc959b492406a5 From 804b4cd3a8605fa4dcfac1e052a367303c3088e1 Mon Sep 17 00:00:00 2001 From: Pawel Kopiczko Date: Thu, 12 Dec 2024 15:43:06 +0000 Subject: [PATCH 14/22] Expose /.well-known/jwks-okta for Okta API services type App (#50040) --- lib/web/apiserver.go | 3 ++ lib/web/jwt.go | 65 +++++++++++++++++++++++++++++++++++++++++ lib/web/oidcidp.go | 41 -------------------------- lib/web/oidcidp_test.go | 33 ++------------------- lib/web/okta.go | 32 ++++++++++++++++++++ lib/web/okta_test.go | 46 +++++++++++++++++++++++++++++ lib/web/spiffe_test.go | 22 +------------- 7 files changed, 150 insertions(+), 92 deletions(-) create mode 100644 lib/web/jwt.go create mode 100644 lib/web/okta.go create mode 100644 lib/web/okta_test.go diff --git a/lib/web/apiserver.go b/lib/web/apiserver.go index f1246187a5afe..796e8351ca6f7 100644 --- a/lib/web/apiserver.go +++ b/lib/web/apiserver.go @@ -1009,6 +1009,9 @@ func (h *Handler) bindDefaultEndpoints() { // SAML IDP integration endpoints h.GET("/webapi/scripts/integrations/configure/gcp-workforce-saml.sh", h.WithLimiter(h.gcpWorkforceConfigScript)) + // Okta integration endpoints. + h.GET("/.well-known/jwks-okta", h.WithLimiter(h.jwksOkta)) + // Azure OIDC integration endpoints h.GET("/webapi/scripts/integrations/configure/azureoidc.sh", h.WithLimiter(h.azureOIDCConfigure)) diff --git a/lib/web/jwt.go b/lib/web/jwt.go new file mode 100644 index 0000000000000..40ae3011db979 --- /dev/null +++ b/lib/web/jwt.go @@ -0,0 +1,65 @@ +// Teleport +// Copyright (C) 2024 Gravitational, Inc. +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Affero General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Affero General Public License for more details. +// +// You should have received a copy of the GNU Affero General Public License +// along with this program. If not, see . + +package web + +import ( + "context" + + "github.com/gravitational/trace" + + "github.com/gravitational/teleport/api/types" + "github.com/gravitational/teleport/lib/jwt" +) + +func (h *Handler) jwks(ctx context.Context, caType types.CertAuthType, includeBlankKeyID bool) (*JWKSResponse, error) { + clusterName, err := h.GetProxyClient().GetDomainName(ctx) + if err != nil { + return nil, trace.Wrap(err) + } + + // Fetch the JWT public keys only. + ca, err := h.GetProxyClient().GetCertAuthority(ctx, types.CertAuthID{ + Type: caType, + DomainName: clusterName, + }, false /* loadKeys */) + if err != nil { + return nil, trace.Wrap(err) + } + + pairs := ca.GetTrustedJWTKeyPairs() + + // Create response and allocate space for the keys. + var resp JWKSResponse + resp.Keys = make([]jwt.JWK, 0, len(pairs)) + + // Loop over and all add public keys in JWK format. + for _, key := range pairs { + jwk, err := jwt.MarshalJWK(key.PublicKey) + if err != nil { + return nil, trace.Wrap(err) + } + resp.Keys = append(resp.Keys, jwk) + + // Return an additional copy of the same JWK + // with KeyID set to the empty string for compatibility. + if includeBlankKeyID { + jwk.KeyID = "" + resp.Keys = append(resp.Keys, jwk) + } + } + return &resp, nil +} diff --git a/lib/web/oidcidp.go b/lib/web/oidcidp.go index 28a9b7b7465b0..7b9c433f378f7 100644 --- a/lib/web/oidcidp.go +++ b/lib/web/oidcidp.go @@ -19,7 +19,6 @@ package web import ( - "context" "net/http" "github.com/gravitational/trace" @@ -27,7 +26,6 @@ import ( "github.com/gravitational/teleport/api/types" "github.com/gravitational/teleport/lib/integrations/awsoidc" - "github.com/gravitational/teleport/lib/jwt" "github.com/gravitational/teleport/lib/utils/oidc" ) @@ -51,45 +49,6 @@ func (h *Handler) jwksOIDC(_ http.ResponseWriter, r *http.Request, _ httprouter. return h.jwks(r.Context(), types.OIDCIdPCA, true) } -func (h *Handler) jwks(ctx context.Context, caType types.CertAuthType, includeBlankKeyID bool) (*JWKSResponse, error) { - clusterName, err := h.GetProxyClient().GetDomainName(ctx) - if err != nil { - return nil, trace.Wrap(err) - } - - // Fetch the JWT public keys only. - ca, err := h.GetProxyClient().GetCertAuthority(ctx, types.CertAuthID{ - Type: caType, - DomainName: clusterName, - }, false /* loadKeys */) - if err != nil { - return nil, trace.Wrap(err) - } - - pairs := ca.GetTrustedJWTKeyPairs() - - // Create response and allocate space for the keys. - var resp JWKSResponse - resp.Keys = make([]jwt.JWK, 0, len(pairs)) - - // Loop over and all add public keys in JWK format. - for _, key := range pairs { - jwk, err := jwt.MarshalJWK(key.PublicKey) - if err != nil { - return nil, trace.Wrap(err) - } - resp.Keys = append(resp.Keys, jwk) - - // Return an additional copy of the same JWK - // with KeyID set to the empty string for compatibility. - if includeBlankKeyID { - jwk.KeyID = "" - resp.Keys = append(resp.Keys, jwk) - } - } - return &resp, nil -} - // thumbprint returns the thumbprint as required by AWS when adding an OIDC Identity Provider. // This is documented here: // https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_providers_create_oidc_verify-thumbprint.html diff --git a/lib/web/oidcidp_test.go b/lib/web/oidcidp_test.go index a663a13db6a92..20c9063a7fcb0 100644 --- a/lib/web/oidcidp_test.go +++ b/lib/web/oidcidp_test.go @@ -72,41 +72,14 @@ func TestOIDCIdPPublicEndpoints(t *testing.T) { resp, err = publicClt.Get(ctx, gotConfiguration.JWKSURI, nil) require.NoError(t, err) - type jwksKey struct { - Use string `json:"use"` - KeyID *string `json:"kid"` - KeyType string `json:"kty"` - Alg string `json:"alg"` - } - type jwksKeys struct { - Keys []jwksKey `json:"keys"` - } - - var gotKeys jwksKeys + var gotKeys JWKSResponse err = json.Unmarshal(resp.Bytes(), &gotKeys) require.NoError(t, err) // Expect the same key twice, once with a synthesized Key ID, and once with an empty Key ID for compatibility. require.Len(t, gotKeys.Keys, 2) - require.NotEmpty(t, *gotKeys.Keys[0].KeyID) - require.Equal(t, "", *gotKeys.Keys[1].KeyID) - expectedKeys := jwksKeys{ - Keys: []jwksKey{ - { - Use: "sig", - KeyType: "RSA", - Alg: "RS256", - KeyID: gotKeys.Keys[0].KeyID, - }, - { - Use: "sig", - KeyType: "RSA", - Alg: "RS256", - KeyID: new(string), - }, - }, - } - require.Equal(t, expectedKeys, gotKeys) + require.NotEmpty(t, gotKeys.Keys[0].KeyID) + require.Empty(t, gotKeys.Keys[1].KeyID) } func TestThumbprint(t *testing.T) { diff --git a/lib/web/okta.go b/lib/web/okta.go new file mode 100644 index 0000000000000..67dec290784ae --- /dev/null +++ b/lib/web/okta.go @@ -0,0 +1,32 @@ +// Teleport +// Copyright (C) 2024 Gravitational, Inc. +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Affero General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Affero General Public License for more details. +// +// You should have received a copy of the GNU Affero General Public License +// along with this program. If not, see . + +package web + +import ( + "net/http" + + "github.com/julienschmidt/httprouter" + + "github.com/gravitational/teleport/api/types" +) + +// jwksOkta returns public keys used to verify JWT tokens signed for use with Okta API Service App +// machine-to-machine authentication. +// https://developer.okta.com/docs/guides/implement-oauth-for-okta-serviceapp/main/ +func (h *Handler) jwksOkta(_ http.ResponseWriter, r *http.Request, _ httprouter.Params) (interface{}, error) { + return h.jwks(r.Context(), types.OktaCA, false /* includeBlankKeyID */) +} diff --git a/lib/web/okta_test.go b/lib/web/okta_test.go new file mode 100644 index 0000000000000..b884aa5f85283 --- /dev/null +++ b/lib/web/okta_test.go @@ -0,0 +1,46 @@ +// Teleport +// Copyright (C) 2024 Gravitational, Inc. +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Affero General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Affero General Public License for more details. +// +// You should have received a copy of the GNU Affero General Public License +// along with this program. If not, see . + +package web + +import ( + "context" + "encoding/json" + "testing" + + "github.com/stretchr/testify/require" +) + +// TestJWKSOktaPublicEndpoint ensures the public endpoint for the Okta API Service App integration +// is available. +func TestJWKSOktaPublicEndpoint(t *testing.T) { + t.Parallel() + ctx := context.Background() + env := newWebPack(t, 1) + proxy := env.proxies[0] + + publicClt := proxy.newClient(t) + + resp, err := publicClt.Get(ctx, publicClt.Endpoint(".well-known/jwks-okta"), nil) + require.NoError(t, err) + + var gotKeys JWKSResponse + err = json.Unmarshal(resp.Bytes(), &gotKeys) + require.NoError(t, err) + + require.Len(t, gotKeys.Keys, 1) + require.NotEmpty(t, gotKeys.Keys[0].KeyID) +} diff --git a/lib/web/spiffe_test.go b/lib/web/spiffe_test.go index eef680d411123..1eb49b33b4369 100644 --- a/lib/web/spiffe_test.go +++ b/lib/web/spiffe_test.go @@ -131,30 +131,10 @@ func TestSPIFFEJWTPublicEndpoints(t *testing.T) { resp, err = publicClt.Get(ctx, gotConfiguration.JWKSURI, nil) require.NoError(t, err) - type jwksKey struct { - Use string `json:"use"` - KeyID string `json:"kid"` - KeyType string `json:"kty"` - Alg string `json:"alg"` - } - type jwksKeys struct { - Keys []jwksKey `json:"keys"` - } - gotKeys := jwksKeys{} + var gotKeys JWKSResponse err = json.Unmarshal(resp.Bytes(), &gotKeys) require.NoError(t, err) require.Len(t, gotKeys.Keys, 1) require.NotEmpty(t, gotKeys.Keys[0].KeyID) - expectedKeys := jwksKeys{ - Keys: []jwksKey{ - { - Use: "sig", - KeyType: "EC", - Alg: "ES256", - KeyID: gotKeys.Keys[0].KeyID, - }, - }, - } - require.Equal(t, expectedKeys, gotKeys) } From b43a2d265fed7f9843042dd21beb6a42487f2458 Mon Sep 17 00:00:00 2001 From: Bartosz Leper Date: Thu, 12 Dec 2024 16:43:13 +0100 Subject: [PATCH 15/22] Disable resetting to the standard model (#50048) * Disable resetting to the standard model * Review * Test fix * Fix a test --- .../RoleEditor/RequiresResetToStandard.tsx | 11 ++++----- .../src/Roles/RoleEditor/RoleEditor.test.tsx | 23 ++----------------- .../src/Roles/RoleEditor/StandardEditor.tsx | 14 +---------- 3 files changed, 7 insertions(+), 41 deletions(-) diff --git a/web/packages/teleport/src/Roles/RoleEditor/RequiresResetToStandard.tsx b/web/packages/teleport/src/Roles/RoleEditor/RequiresResetToStandard.tsx index 9b0b33bc4710f..67780c3e4ecbc 100644 --- a/web/packages/teleport/src/Roles/RoleEditor/RequiresResetToStandard.tsx +++ b/web/packages/teleport/src/Roles/RoleEditor/RequiresResetToStandard.tsx @@ -17,16 +17,13 @@ */ import { Info } from 'design/Alert/Alert'; -import { ButtonSecondary, Text } from 'design'; +import { Text } from 'design'; -export const RequiresResetToStandard = ({ reset }: { reset(): void }) => ( +export const RequiresResetToStandard = () => ( - Some fields were not readable by the standard editor. To continue editing, - go back to YAML editor or reset the affected fields to standard settings. + This role is too complex to be edited in the standard editor. To continue + editing, go back to YAML editor. - - Reset to Standard Settings - ); diff --git a/web/packages/teleport/src/Roles/RoleEditor/RoleEditor.test.tsx b/web/packages/teleport/src/Roles/RoleEditor/RoleEditor.test.tsx index 403c9f331255f..2d458fff5aebc 100644 --- a/web/packages/teleport/src/Roles/RoleEditor/RoleEditor.test.tsx +++ b/web/packages/teleport/src/Roles/RoleEditor/RoleEditor.test.tsx @@ -129,9 +129,7 @@ test('rendering and switching tabs for a non-standard role', async () => { expect(screen.getByRole('button', { name: 'Update Role' })).toBeDisabled(); await user.click(getStandardEditorTab()); - expect( - screen.getByRole('button', { name: 'Reset to Standard Settings' }) - ).toBeVisible(); + expect(screen.getByText(/This role is too complex/)).toBeVisible(); expect(screen.getByLabelText('Role Name')).toHaveValue('some-role'); expect(screen.getByLabelText('Description')).toHaveValue(''); expect(screen.getByRole('button', { name: 'Update Role' })).toBeDisabled(); @@ -139,21 +137,6 @@ test('rendering and switching tabs for a non-standard role', async () => { await user.click(getYamlEditorTab()); expect(fromFauxYaml(await getTextEditorContents())).toEqual(originalRole); expect(screen.getByRole('button', { name: 'Update Role' })).toBeDisabled(); - - // Switch once again, reset to standard - await user.click(getStandardEditorTab()); - expect(screen.getByRole('button', { name: 'Update Role' })).toBeDisabled(); - await user.click( - screen.getByRole('button', { name: 'Reset to Standard Settings' }) - ); - expect(screen.getByRole('button', { name: 'Update Role' })).toBeEnabled(); - await user.type(screen.getByLabelText('Description'), 'some description'); - - await user.click(getYamlEditorTab()); - const editorContents = fromFauxYaml(await getTextEditorContents()); - expect(editorContents.metadata.description).toBe('some description'); - expect(editorContents.spec.deny).toEqual({}); - expect(screen.getByRole('button', { name: 'Update Role' })).toBeEnabled(); }); test('switching tabs triggers validation', async () => { @@ -192,9 +175,7 @@ test('switching tabs ignores standard model validation for a non-standard role', ); expect(getYamlEditorTab()).toHaveAttribute('aria-selected', 'true'); await user.click(getStandardEditorTab()); - expect( - screen.getByText(/Some fields were not readable by the standard editor/) - ).toBeVisible(); + expect(screen.getByText(/This role is too complex/)).toBeVisible(); await user.click(getYamlEditorTab()); // Proceed, even though our validation would consider the data invalid. expect(getYamlEditorTab()).toHaveAttribute('aria-selected', 'true'); diff --git a/web/packages/teleport/src/Roles/RoleEditor/StandardEditor.tsx b/web/packages/teleport/src/Roles/RoleEditor/StandardEditor.tsx index 46888d141fc7a..4d6fc5c2777fc 100644 --- a/web/packages/teleport/src/Roles/RoleEditor/StandardEditor.tsx +++ b/web/packages/teleport/src/Roles/RoleEditor/StandardEditor.tsx @@ -161,18 +161,6 @@ export const StandardEditor = ({ }); } - /** - * Resets the standard editor back into viewable state. The existing model - * has been already stripped from unsupported features by the parsing - * attempt, the only thing left to do is to set the `requiresReset` flag. - */ - function resetForStandardEditor() { - handleChange({ - ...standardEditorModel.roleModel, - requiresReset: false, - }); - } - function addAccessSpec(kind: AccessSpecKind) { handleChange({ ...standardEditorModel.roleModel, @@ -219,7 +207,7 @@ export const StandardEditor = ({ <> {roleModel.requiresReset && ( - + )} Date: Thu, 12 Dec 2024 16:26:19 +0000 Subject: [PATCH 16/22] RFD191: Rework Workload Identity Configuration and RBAC UX (#49133) * Add skeleton RFD * Outline problem space * Further explain the negatives of the role templatign alternative * Fill out RFD elements further * Keep expanding on UX * Discuss risks/mitigation * Add notes on performance * Notes on propagating join attributes * Outline basic algorithm of the issuance RPC * Add note on WorkloadIdentity cap * Keep adding detail * Add hint * Add more notes on attribute conversion * Tighten up some language * Update rfd/0191-workload-id-config-ux.md Co-authored-by: Tim Buckley * More restructuring/rethinking * Add info about tester * Add more notes on predicate language * Add section on DNS SANs * Simplify available operators * Further flesh out the proto specs * Fill out more protos/examples * Add exhaustive representation * Add TTL controls * Add more operators/refactor naming a little * Update limit to 20 * Add notes on web ui * Add notes on CEL * Add botinstanceied --------- Co-authored-by: Tim Buckley --- rfd/0191-workload-id-config-ux.md | 1469 +++++++++++++++++++++++++++++ 1 file changed, 1469 insertions(+) create mode 100644 rfd/0191-workload-id-config-ux.md diff --git a/rfd/0191-workload-id-config-ux.md b/rfd/0191-workload-id-config-ux.md new file mode 100644 index 0000000000000..f8ee211381003 --- /dev/null +++ b/rfd/0191-workload-id-config-ux.md @@ -0,0 +1,1469 @@ +--- +authors: Noah Stride (noah@goteleport.com) +state: draft +--- + +# RFD 0191 - Workload Identity Configuration and RBAC Overhaul + +## Required Approvers + +* Engineering: @timothyb89 +* Product: @thedevelopnik + +## What + +Overhaul the Workload Identity configuration and RBAC UX to resolve challenges +with operating Workload Identity at Scale. + +This will be achieved by introducing a new resource to Teleport, the +WorkloadIdentity, which will become the primary resource used to configure +Teleport Workload Identity. + +## Why + +Today, Teleport Workload Identity is configured via a combination of mechanisms: +Roles, Join Tokens, Bots and the `tbot` configuration itself. This worked fine +for the initial proof of concept where operation at scale was not a primary +concern, however, it has become apparent that without change, this will not +scale nicely. + +Let's consider this within the context of a common use-case. + +I wish to issue my GitLab CI workflows SPIFFE IDs that uniquely identify them. +For example, `spiffe://example.teleport.sh/gitlab/my-org/my-repo/my-workflow`. +I have 1000 of these. + +Today, I need to create a Join Token, Bot, Role for each workflow. I must also +maintain a unique configuration for the `tbot` within each workflow. + +This has the following negative impacts: + +- Maintaining a large number of similar configuration items is laborious and + frustrating. +- Enforcing policies/compliance across a larger number of configuration items + is more challenging. +- Configuration in `tbot` can "mismatch" what is allowed by Teleport's RBAC + engine, leading to errors. Therefore, `tbot` configuration must be kept + "in-step" with Teleport resource-based configuration. +- Larger numbers of resources places a greater amount of pressure on the + Teleport Control Plane and cache. + +This leads to a couple of "desires": + +- The ability to "template" the SPIFFE IDs of issued SVIDs using metadata from + attestations, reducing the number of configuration resources required. +- The ability to modify the issuance of SPIFFE IDs without needing to modify + the configuration of individual `tbot` installations. If I want to change the + structure of the SPIFFE IDs, I should be able to do this without modifying + each individual workflow's configuration. +- The ability to centrally control elements of issuance that are critical for + compliance (e.g TTL, Key types etc). + +## Background + +When issuing a workload an identity, there's a number of pieces of metadata that +can be used in that decision, and could potentially included in the resulting +identity document: + +- Join Metadata (Node Attestation) + - When a bot authenticates/joins via the Teleport Auth Service, rich metadata + about the delegated identity is attested to the Auth Service. For example, + when joining with the GitLab join method, the Auth Service can determine the + organization, repository and workflow names. +- Workload Attestation Metadata + - When a workload connects to the SPIFFE Workload API, the `tbot` agent can + determine metadata about the workflow itself. For example, on Kubernetes + it can determine the name of the pod, namespace and service account. + - It's worth bearing in mind that whilst the `tbot` agent is able to "trust" + this information, the Auth Service cannot transitively "trust" that this + has not been tampered by a malicious `tbot`. This should be considered + when designing SPIFFE IDs, with information that can be attested from the + Join itself coming before information from the workload attestation. + - In some environments, this is likely to be uninformative. For example, with + a CI/CD run in GitLab, the Join Metadata containing information such as the + repository or workflow is more interesting for the purposes of templating a + SPIFFE ID than the UID or PID of the workload that has connected to tbot + within the workflow execution. +- User Metadata + - This is a looser category, but consider traits, labels and name of the + User/Bot requesting the generation of the identity. This information doesn't + come from an attestation process, but is typically "administrative" and set + by the operator. + +Today: + +- `tbot` authenticates to the Auth Service in the join process, and if the + attested delegated identity matches the Join Token rules, it is granted a + certificate for the attached Bot identity including the Bot's roles. +- A Teleport Role can contain rules that determine what SPIFFE IDs can be + requested in SVIDs by a principal that holds this role. Basic wildcarding is + possible. +- `tbot` itself decides which SPIFFE ID should be requested for a given + workload based on its configuration and which workload attestation rules + within that configuration have passed. +- Effectively, a combination of local and central configuration controls what + SVIDs are issued by `tbot`. + +## UX + +At the core of the UX overhaul is the introduction of a new resource, the +WorkloadIdentity. This resource is designed to capture the configuration of +Teleport Workload Identity for a single workload, or, a group of similar +workloads for which a structured identifier can be generated from a template. +It effectively acts as a template for the generation of workload identity +credentials (e.g SVIDs). + +The WorkloadIdentity resource in its simplest form merely specifies an static +SPIFFE ID path - in this example - the resulting SPIFFE ID would be +`spiffe://example.teleport.sh/my/awesome/identity`: + +```yaml +kind: workload_identity +version: v1 +metadata: + name: my-workload-identity + labels: + env: production +spec: + spiffe: + # Provide the path element of the workload identifier (SPIFFE ID). + id: /my/awesome/identity + # Optionally provide a "hint" that will be provided to workloads using the + # SPIFFE Workload API to fetch workload identity credentials. + hint: my-hint +``` + +As with most Teleport resources, a basic layer of RBAC based on the label +matcher mechanism will be present. A user or bot must hold a role with the +appropriate label matchers for a WorkloadIdentity in order to execute it: + +```yaml +kind: workload_identity +version: v1 +metadata: + name: my-workload-identity + labels: + env: production +spec: + spiffe: + id: /my/awesome/identity +--- +kind: role +metadata: + name: production-workload-identity +spec: + allow: + workload_identity_labels: + env: production +``` + +### Templating + +Certain fields, such as `spec.spiffe.id`, will support templating using a +set of attributes from the attestation during Bot's Join, the Bot resource +itself and any workload attestation that has been completed by the `tbot` agent. + +To use templating, the name of an attribute is enclosed between `{{` and `}}`. + +For example: + +```yaml +kind: workload_identity +version: v1 +metadata: + name: gitlab +spec: + spiffe: + id: /gitlab/{{ join.gitlab.project_path }}/{{ join.gitlab.environment }} +``` + +This WorkloadIdentity would result in a SPIFFE ID of +`spiffe://example.teleport/sh/gitlab/my-org/my-project/production` if the Bot +had joined with the GitLab join method from a CI pipeline in the +`my-org/my-project` repository which was configured to deploy to the +`production` environment. + +Including an attribute within the WorkloadIdentity will implicitly restrict the +issuance of that WorkloadIdentity to workloads that possess this attribute. In +the given example, the WorkloadIdentity could only be used where a join +has occurred using the `gitlab` join method. + +### Rules + +To restrict the issuance of a WorkloadIdentity based on attributes from the +join, workload attestation or the Bot itself, a set of explicit rules can be +set within the WorkloadIdentity resource: + +```yaml +kind: workload_identity +version: v1 +metadata: + name: my-workload-identity +spec: + spiffe: + # Implicitly, this WorkloadIdentity can only be issued to requester's + # with a successful join via the GitLab join method. + id: /gitlab/{{ join.gitlab.project_path }}/{{ join.gitlab.environment }} + rules: + allow: + - conditions: + # The CI must be running in the "foo" namespace in GitLab + - attribute: join.gitlab.namespace_path + equals: foo + # AND + # The CI must be running against the "special" environment + - attribute: join.gitlab.environment + equals: special + # OR + - conditions: + # The CI must be running in the "bar" namespace in GitLab + - attribute: join.gitlab.namespace_path + equals: bar + deny: + - conditions: + # The CI must not be running against the "dev" environment. + - attribute: join.gitlab.environment + equals: dev +``` + +Each WorkloadIdentity resource has two rulesets - `allow` and `deny`. + +If the `allow` ruleset is non-empty, then at least one rule within the set must +return true for the WorkloadIdentity to be issued. + +If the `deny` ruleset is non-empty, then all rules within the set must return +false for the WorkloadIdentity to be issued. + +Each rule consists of either a set of conditions or an expression. A rule +cannot have both conditions and an expression. + +When conditions have been provided within a rule, then all conditions within the +rule must return true for the rule to return true. A condition consists of a +single target attribute, a single operator and a single expected value. + +Initially, the following operators will be supported: + +- `equals`: The target attribute must equal the given value. +- `not_equals`: The target attribute must not equal the given value +- `matches`: The target attribute must be a string and must match the + given regex pattern. +- `not_matches`: The target attribute must be a string and must not match + the given regex pattern. +- `in`: The target attribute must equal one of the values in the given list. +- `not_in`: The target attribute must not equal any of the values in the given + list. + +Future iterations may introduce additional operators as we better understand the +types of conditions that will be useful to users. + +Alternatively, a rule may consist of a single expression. This expression is +configured by the user in the predicate language with access to the same +attributes as the conditions and templating. This expression must return a +boolean value. For example: + +```yaml +kind: workload_identity +version: v1 +metadata: + name: my-workload-identity +spec: + spiffe: + # Implicitly, this WorkloadIdentity can only be issued to requester's + # with a successful join via the GitLab join method. + id: /gitlab/{{ join.gitlab.project_path }}/{{ join.gitlab.environment }} + rules: + allow: + - expression: join.gitlab.environment == "production" +``` + +See "Predicate Language" for further details. + +### Attributes + +The attributes available for templating and rule evaluation will come from +three sources: + +- `join`: From the attestation performed when the bot joined. This will be + specific to the join method used. E.g `join.gitlab.project_path`. +- `workload`: From the workload attestation performed by `tbot`. The presence of + these attributes is dependent on whether workload attestation has been + performed by `tbot` and which form of attestation has been performed. E.g + `workload.k8s.namespace`. +- `user`: From the identity of the user calling the WorkloadIdentity API. E.g + `user.bot_name` or `user.traits`. This information does not directly come from + attestation but may be useful for referencing administrative or organizational + values. + +Attributes take a hierarchical form which can be navigated within templates and +rules using `.`. For example, `join.gitlab.project_path`. + +Documentation will be generated with an exhaustive list of available attributes +and example values. + +The audit log entry for the issuance of a WorkloadIdentity will include the +full attribute set that was used during rule and template evaluation. This will +not only serve as a tool for compliance and auditing, but, will also provide +the necessary information to debug issues with the configuration of templates +and rules. + +### `tbot` Configuration + +In addition to this resource configuring the Teleport control plane's +authorization rules as to who and what workload identity credentials +can be issued, the WorkloadIdentity resource will also serve as a form of +remote configuration for the `tbot` workload identity agent - removing the need +for explicit configuration of workload identity credentials at the edge. + +For example, to configure `tbot` to attempt to issue a specific +WorkloadIdentity: + +```yaml +services: +- type: spiffe-workload-api + listen: unix:///opt/machine-id/workload.sock + workload_identity: my-workload-identity +``` + +Label matchers can be specified within the `tbot` configuration to issue +any WorkloadIdentity which matches those labels and to which the Bot has access: + +```yaml +services: +- type: spiffe-workload-api + listen: unix:///opt/machine-id/workload.sock + workload_identity_labels: + env: production +``` + +The "wildcard" label matcher can be used within the `tbot` configuration to +issue any WorkloadIdentity to which the Bot has access: + +```yaml +services: +- type: spiffe-workload-api + listen: unix:///opt/machine-id/workload.sock + workload_identity_labels: + '*': '*' +``` + +The `workload_identity` and `workload_identity_labels` fields are mutually +exclusive, that is, a service may be configured with either a specific +WorkloadIdentity or with a set of labels to match against WorkloadIdentity +resources. + +These configuration values may also be provided using the "zero-config" CLI +flags for `tbot`: + +```shell +$ tbot start workload-identity \ + --proxy-server example.teleport.sh:443 \ + --join-token my-join-token \ + --workload-identity my-workload-identity \ + --destination /opt/workload-id + +$ tbot start workload-identity \ + --proxy-server example.teleport.sh:443 \ + --join-token my-join-token \ + --workload-identity-labels env:production \ + --destination /opt/workload-id + + $ tbot start workload-identity \ + --proxy-server example.teleport.sh:443 \ + --join-token my-join-token \ + --workload-identity-labels *:* \ + --destination /opt/workload-id +``` + +### Configuration Tooling + +The WorkloadIdentity resource will support configuration via four methods: + +- The `tctl create`/`tctl update` commands with a YAML representation +- The Teleport Terraform Provider +- The Teleport Kubernetes Operator as Kubernetes CRDs +- The Teleport gRPC API + +### Diagnostics Tooling + +The flexibility of the templating, rules and attributes system allows +potentially complex configurations to be created. As such, we must provide +tooling to assist operators in testing and debugging WorkloadIdentity +configurations. + +The `tctl` CLI will be extended with a new command +`tctl workload-identity test` that will locally evaluate a WorkloadIdentity, +or set of WorkloadIdentities, against a given set of attributes and return a +description of the workload identity credentials that would have been issued. + +Operators will be able to specify a WorkloadIdentity from a local file which +may not yet exist in the Teleport cluster, or specify an existing +WorkloadIdentity by name. + +Operators will provide the attributes as a file in YAML or JSON format. This +will be in the same structure as the attributes included in the Teleport +audit log. + +For example: + +```shell +$ tctl workload-identity test --workload-identity-file ./my-workload-identity.yaml --attributes-file ./attributes.yaml +Evaluating 3 WorkloadIdentity resources against the following attributes: +--snip-- + +1 WorkloadIdentity resources matched the given attributes. The following +credentials would have been issued: + +- workload_identity_name: gitlab-production + spiffe: + id: spiffe://example.teleport.sh/gitlab/my-org/my-project/production + jwt: + sub: spiffe://example.teleport.sh/gitlab/my-org/my-project/production + iss: https://example.teleport.sh + -- snipped for conciseness: all JWT claims would be included -- + x509: + subject: + common_name: spiffe://example.teleport.sh/gitlab/my-org/my-project/production + organization: my-org + -- snipped for conciseness: all Subject DN fields would be included -- + sans: + - dns: my-project.example.com + - ip: 10.0.0.1 + - uri: spiffe://example.teleport.sh/gitlab/my-org/my-project/production +2 WorkloadIdentity resources did not match the given attributes: + +- workload_identity_name: gitlab-staging + reason: Rule evaluation failed. Allow rule expression `join.gitlab.environment == "production"` returned false. +- workload_identity_name: github-production + reason: The `join.github.environment` attribute included in `spec.spiffe.id` template do not exist in the attribute set. +``` + +Similar functionality should be built into the Teleport Web UI. This should +initially be built into the WorkloadIdentity resource view, and allow the +resource to be tested against a set of attributes derived from an existing +Bot Instance resource. + +Later, this functionality can be built into the "Create or Edit" flow for a +WorkloadIdentity resource. + +### X509 SVIDs and DNS SANs + +By default, the X509 SVIDs issued for a WorkloadIdentity resource will not +include any DNS SANs. + +To include DNS SANs, the `spec.spiffe.x509.dns_sans` field can be used: + +```yaml +kind: workload_identity +version: v1 +metadata: + name: gitlab +spec: + spiffe: + id: /my-awesome-service + x509: + dns_sans: + - my.awesome.service.example.com + - "*.my.awesome.service.example.com" +``` + +This will result in any X509 SVID issued using this WorkloadIdentity including +both the specified DNS SANs. + +As with `spec.spiffe.id`, templating can be used to include attributes within +DNS SANs: + +```yaml +kind: workload_identity +version: v1 +metadata: + name: gitlab +spec: + spiffe: + id: /my-awesome-service + x509: + dns_sans: + - {{ join.gitlab.environment }}.gitlab.example.com +``` + +### Time To Live (TTL) + +Both X509 and JWT SVIDs include fields which control when the credential is +valid from and when it is valid to. + +When requesting the issuance of a credential, the `tbot` agent will provide a +requested TTL for the credential - which will either be a default value or +one explicitly configured by a user. + +However, the WorkloadIdentity resource will also include a `spec.spiffe.ttl.max` +field. If `tbot` requests a credential with a TTL greater than this value, the +TTL will be capped at this value. This provides the ability to enforce a +maximum permissible TTL regardless of the configuration of the `tbot` agent. + +If this field is not set, a default maximum value of 24 hours will be used. + +Example: + +```yaml +kind: workload_identity +version: v1 +metadata: + name: my-awesome-service +spec: + spiffe: + id: /my-awesome-service + ttl: + max: 24h +``` + +### Future: Customizing workload identity credentials + +In a future iteration, we'd introduce the ability for the `WorkloadIdentity` +resource to specify more than just the SPIFFE ID/workload identifier of the +generated identity credential. + +This ability serves many purposes: + +- Allow the encoding of additional information that is not considered for + authorization but may be useful to be included in workload audit logs. +- Allow the encoding of additional information that is only rarely used for + authorization - or - does not fit well into the structure of a SPIFFE ID for + other reasons. +- Support compatibility with services which may require information to be + encoded into non-standard fields. + +The fields for controlling customization of the credentials would also accept +the same templating logic as `spec.spiffe.id`. + +For JWTs, the following options are good candidates for inclusion: + +- Additional claims using information from attributes, or, encoding all + attributes into a specific claim. +- Constraining acceptable audiences +- Inclusion or exclusion of standard claims (e.g `jti`) + +For X509 certificates, the following options are good candidates for inclusion: + +- Control of the Subject CN behaviour (e.g should the CN match the SPIFFE ID or + the first DNS SAN) +- Overriding Subject DN entirely (e.g populate DN attributes with values from + the requester's attributes) + +The following example configuration is given for demonstrative purposes and +does not represent a decision on field naming or structure - which is out of +scope of this RFD: + +```yaml +kind: workload_identity +version: v1 +metadata: + name: gitlab +spec: + spiffe: + id: "/gitlab/{{ join.gitlab.project_path }}/{{ join.gitlab.pipeline_id }}" + jwt: + extra_claims: + "gitlab_ref_path": {{ join.gitlab.ref_path }} + x509: + override_subject: + cn: my-lovely-common-name + dns_sans: + - example.com +``` + +We may wish to consider a second-order configuration resource +(e.g a WorkloadIdentityProfile) which would allow customization settings to be +shared between WorkloadIdentity resources. This would provide a unified way +to control customizations which may be necessary for compliance or compatability +purposes. + +### Revisiting our use-case + +Let's revisit the use-case we outlined at the beginning of this RFD. + +Now, the operator must only configure a single WorkloadIdentity, Bot, Join Token +and Role: + +```yaml +kind: workload_identity +version: v1 +metadata: + name: gitlab + labels: + environment: production +spec: + spiffe: + # Results in spiffe://example.teleport.sh/gitlab/my-org/my-project/42 + id: "/gitlab/{{ join.gitlab.project_path }}/{{ join.gitlab.pipeline_id }}" +--- +kind: role +metadata: + name: production-workload-id +spec: + allow: + workload_identity_labels: + environment: production +--- +kind: bot +metadata: + name: gitlab-workload-id +spec: + roles: + - production-workload-id +--- +kind: token +version: v2 +metadata: + name: gitlab-workload-id +spec: + roles: [Bot] + join_method: gitlab + bot_name: gitlab-workload-id + gitlab: + domain: gitlab.example.com + # Allow rules are intentionally very permissive as we'd like to allow any + # CI run to request a WorkloadIdentity using the template. + allow: + - namespace_path: my-org +``` + +The `tbot` configuration is now identical across all workflows and +consists of just a handful of flags: + +```yaml +tbot start workload-api \ + --proxy-server example.teleport.sh:443 \ + --join-token gitlab-workload-id \ + --join-method gitlab \ + --workload-identity-labels *:* \ + --listen-addr unix:///opt/workload.sock +``` + +## Technical Design + +### Attributes + +For the purposes of templating, rule evaluation and auditing, a set of +attributes is derived during the issuance of a WorkloadIdentity. + +Attributes are organized into a hierarchical structure, with three top-level +keys: + +- `join` +- `workload` +- `user` + +The attribute hierarchy will be defined using Protobuf. This will enable: + +- Generation of documentation. +- Strong typing of rules, templates and expressions provided by users. +- Serialization and deserialization of attributes for the purposes of + persistence, auditing or transport. + +Specification: + +```protobuf +package teleport.workloadidentity.v1; + +// AttributeSet is the top-level structure that contains all attributes that +// are considered during the issuance of a WorkloadIdentity. +message AttributeSet { + // Attributes pertaining to the join process. + JoinAttributes join = 1; + // Attributes pertaining to the workload attestation process. + WorkloadAttributes workload = 2; + // Attributes pertaining to the user that is requesting the WorkloadIdentity. + UserAttributes user = 3; +} +``` + +Example (marshalled as YAML): + +```yaml +join: + meta: + token_name: my-gitlab-join-token + method: gitlab + gitlab: + project_path: my-org/my-project + pipeline_id: 42 + # -- snipped for conciseness -- +workload: + unix: + attested: true + pid: 1234 + uid: 1000 + gid: 1000 + k8s: + attested: true + pod_name: my-pod-ab837c + namespace: my-namespace + service_account: my-service-account +user: + name: bot-gitlab-workload-identity + is_bot: true + bot_name: gitlab-workload-identity + traits: + - name: foo + values: + - bar + - bizz + - name: logins + values: + - root +``` + +#### User Attributes + +The user attributes are extracted during the RPC invocation from the X509 +identity of the caller, and include information such as the name of the user, +whether the user is a bot, and any traits attached to that user. + +Specification: + +```protobuf +package teleport.workloadidentity.v1; + +// Attributes pertaining to the user that is requesting the WorkloadIdentity. +message UserAttributes { + // Name of the user requesting the generation of the WorkloadIdentity. + // Example: `bot-gitlab-workload-identity` + string name = 1; + // Whether or not the user requesting the generation of the WorkloadIdentity + // is a bot. + bool is_bot = 2; + // If the user is a bot, the name of the bot. + // Example: `gitlab-workload-identity` + string bot_name = 3; + // The traits of the user configured within Teleport or determined during + // SSO. + Traits traits = 4; + // The ID of the Bot Instance, should this user be a bot. Otherwise empty. + string bot_instance_id = 5; +} +``` + +Example (marshalled as YAML): + +```yaml +name: bot-gitlab-workload-identity +is_bot: true +bot_name: gitlab-workload-identity +traits: +- name: foo + values: + - bar + - bizz +- name: logins + values: + - root +``` + +#### Workload Attributes + +The workload attributes are provided by the `tbot` agent at the time of +attestation as part of the RPC request. + +Depending on whether workload attestation has been performed, or which form of +attestation has been performed, the attributes available will differ. + +```protobuf +package teleport.workloadidentity.v1; + +// Attributes pertaining to unix workload attestation. +message WorkloadUnix { + // Whether or not this attestation method has been performed successfully. + bool attested = 1; + // The PID of the process that connected to the workload API. + int32 pid = 2; + // The UID of the process that connected to the workload API. + uint32 uid = 3; + // The GID of the process that connected to the workload API. + uint32 gid = 4; + // -- snipped for conciseness -- +} + +// Attributes pertaining to Kubernetes workload attestation. +message WorkloadKubernetes { + // Whether or not this attestation method has been performed successfully. + bool attested = 1; + // The name of the pod that connected to the workload API. + string pod_name = 2; + // The namespace of the pod that connected to the workload API. + string namespace = 3; + // The service account of the pod that connected to the workload API. + string service_account = 4; + // -- snipped for conciseness -- +} + +// Attributes sourced from the workload attestation process. +message WorkloadAttributes { + // Attributes pertaining to Unix workload attestation. + WorkloadUnix unix = 1; + // Attributes pertaining to Kubernetes workload attestation. + WorkloadKubernetes k8s = 2; +} +``` + +Example (marshalled as YAML): + +```yaml +unix: + attested: true + pid: 1234 + uid: 1000 + gid: 1000 +k8s: + attested: true + pod_name: my-pod-ab837c + namespace: my-namespace + service_account: my-service-account +``` + +#### Join Attributes + +The `join` attributes are sourced from the attestation process that occurs when +a principal (Bot, Agent etc) initially authenticates using a Join Token. + +At the top level of the join attributes, the `meta` key will hold attributes +that apply to all joins. For example, the name of the join token used and the +method of the join. + +A top level key will exist for each join method that is supported by Teleport. +Under this key, attributes specific to that join method will be present. +Typically, these attributes will be sourced directly from some identity +document provided by the principal upon joining (e.g an ID Token issued by +GitLab). + +Specification: + +```protobuf +package teleport.workloadidentity.v1; + +// Attributes present for all joins, including metadata about the join token +// itself. +message JoinMeta { + // The name of the join token used to join. If the method of the join is + // `token`, then this field will not be set as the name of the join token + // is sensitive. + string token_name = 1; + // The join method that was used, e.g `gitlab`, `github`, `token`. + string method = 2; +} + +// Attributes specific to the GitLab join method. +message JoinGitLab { + // The path of the project in GitLab that the CI pipeline is running in. + // For example `strideynet/my-project`. + string project_path = 1; + // The namespace path of the project in GitLab that the CI pipeline is running + // in. + // For example `strideynet`. + string namespace_path = 2; + // -- snipped for conciseness -- +} + +// Attributes specific to the TPM join method. +message JoinTPM { + // The hash of the EKPub presented during the join process + string ekpub_hash = 1; + // The description of the join token rule that matched during the join + // process. + string rule_description = 2; + // -- snipped for conciseness -- +} + +// Attributes sourced from the join process. +message JoinAttributes { + // Attributes of the join token itself (e.g name, method) + JoinMeta meta = 1; + // Attributes specific to the GitLab join method. + JoinGitLab gitlab = 2; + // Attributes specific to the TPM join method. + JoinTPM tpm = 3; + // Snipped for conciseness. A field will exist for each join method. +} +``` + +Example (marshalled as YAML): + +```yaml +meta: + token_name: my-gitlab-join-token + method: gitlab +gitlab: + project_path: my-org/my-project + namespace_path: my-org + # -- snipped for conciseness -- +``` + +##### Propagating Join Attributes + +In order to access the join attributes during WorkloadIdentity evaluation, +we will need to persist them in some form. + +This persistence must remain over: + +- Renewals of the certificate using the GenerateUserCert RPC. +- The generation of role impersonated certificates using the GenerateUserCert + RPC. + +To achieve this persistence, the JoinAttributes protobuf message will be +encoded using `protojson.Marshal` and stored within the X509 certificate using +a new extension - `1.3.9999.2.21`. When unmarshalling, unknown fields should be +ignored to ensure forwards compatability. + +The GenerateUserCert RPC will be modified to propagate the JoinAttributes, +if present, to any certificates issued. + +The Join RPCs will be modified to pass the newly generated JoinAttributes to +the certificate generation internals. + +Whilst out of scope for this RFD, the persistence of the JoinAttributes into +the X509 certificate could be leveraged in future work to provide a richer +metadata for audit logging of Bot actions. + +### WorkloadIdentity Resource + +The WorkloadIdentity resource abides the guidelines set out in +[RFD 153: Resource Guidelines](./0153-resource-guidelines.md). + +```protobuf +syntax = "proto3"; + +package teleport.workloadidentity.v1; + +// WorkloadIdentity represents a single, or group of similar, workload +// identities and configures the structure of workload identity credentials and +// authorization rules. is a resource that represents the configuration of a trust +// domain federation. +message WorkloadIdentity { + // The kind of resource represented. + string kind = 1; + // Differentiates variations of the same kind. All resources should + // contain one, even if it is never populated. + string sub_kind = 2; + // The version of the resource being represented. + string version = 3; + // Common metadata that all resources share. + teleport.header.v1.Metadata metadata = 4; + // The configured properties of the WorkloadIdentity + WorkloadIdentitySpec spec = 5; +} + +// The individual condition of a rule. A condition consists of a single target +// attribute to evaluate against and an operator to use when evaluating. +// Only one operator field should be set. +message WorkloadIdentityCondition { + // The attribute name to evaluate. + // Example: `join.gitlab.project_path` + string attribute = 1; + // The exact string the attribute value must match. + string equals = 2; + // The regex pattern the attribute value must match. + string matches = 3; + // The exact string the attribute value must not match. + string not_equals = 4; + // The regex pattern the attribute value must not match. + string not_matches = 5; + // A list of strings that the attribute value must equal at least one of. + repeated string in = 6; + // A list of strings that the attribute value must not equal any of. + repeated string not_in = 7; +} + +// WorkloadIdentityRule is an individual rule which can be evaluated against +// the context attributes to produce a boolean result. +// +// A rule contains either a set of conditions or an expression. A rule cannot +// contain both conditions and an expression. +// +// When conditions are provided, the rule evaluates to true if all conditions +// evaluate to true. +message WorkloadIdentityRule { + // The set of conditions to evaluate. All condition may return true for this + // rule to return true. + repeated WorkloadIdentityCondition conditions = 1; + // The predicate language expression to evaluate. Mutually exclusive with + // conditions. + string expression = 2; +} + + +// WorkloadIdentityRules holds the allow and deny authorization rules for the +// WorkloadIdentitySpec. +// +// Deny rules take precedence over allow rules. +message WorkloadIdentityRules { + // Allow is a list of rules. If any rule evaluate to true, then the allow + // ruleset is consdered satisfied. + // + // If the allow ruleset is empty, then the allow ruleset is considered to be + // satisfied. + repeated WorkloadIdentityRule allow = 1; + // Deny is a list of rules. If any rule evaluates to true, then the + // WorkloadIdentity cannot be issued. + repeated WorkloadIdentityRule deny = 2; +} + +// WorkloadIdentitySPIFFEX509 holds configuration specific to the issuance of +// an X509 SVID from a WorkloadIdentity. +message WorkloadIdentitySPIFFEX509 { + // The DNS SANs to include in the issued X509 SVID. Each provided entry + // supports templating using attributes. + repeated string dns_sans = 1; +} + +// WorkloadIdentitySPIFFEJWT holds configuration specific to the issuance of +// a JWT SVID from a WorkloadIdentity. +message WorkloadIdentitySPIFFEJWT { + // Currently empty - but will eventually permit the modification and insertion + // of custom JWT claims. +} + +message WorkloadIdentityTTL { + // The maximum TTL that can be requested for credential using this + // WorkloadIdentity. + // If the requested TTL is greater than this value, the TTL will be capped at + // this value. + // If not set, a default value of 24 hours will be used. + google.protobuf.Duration max = 1; +} + +// WorkloadIdentitySPIFFE holds configuration for the issuance of +// SPIFFE-compatible workload identity credentials when this WorkloadIdentity +// is used. +message WorkloadIdentitySPIFFE { + // Id is the path of the SPIFFE ID that will be issued in workload identity + // credentials when this WorkloadIdentity is used. It can be templated using + // attributes. + // + // Examples: + // - `/no/templating/used` -> `spiffe://example.teleport.sh/no/templating/used` + // - `/gitlab/{{ join.gitlab.project_path }}` -> `spiffe://example.teleport.sh/gitlab/org/project` + string id = 1; + // Hint is an optional hint that will be provided to workloads using the + // SPIFFE Workload API to fetch workload identity credentials. + string hint = 2; + // x509 holds configuration specific to the issuance of X509 SVIDs from this + // WorkloadIdentity resource. + WorkloadIdentitySPIFFEX509 x509 = 3; + // jwt holds configuration specific to the issuance of JWT SVIDs from this + // WorkloadIdentity resource. + WorkloadIdentitySPIFFEJWT jwt = 4; + // ttl holds configuration specific to the TTL of credentials issued from + // this WorkloadIdentity resource. + WorkloadIdentityTTL ttl = 5; +} + +// WorkloadIdentitySpec holds the configuration element of the WorkloadIdentity +// resource. +message WorkloadIdentitySpec { + // Rules holds the authorization rules that must pass for this + // WorkloadIdentity to be used. See [WorkloadIdentityRules] for further + // documentation. + WorkloadIdentityRules rules = 1; + // SPIFFE holds configuration for the structure of SPIFFE-compatible + // workload identity credentials for this WorkloadIdentity. See + // [WorkloadIdentitySPIFFE] for further documentation. + WorkloadIdentitySPIFFE spiffe = 2; +} +``` + +Exhaustive representation in YAML: + +```yaml +kind: workload_identity +version: v1 +metadata: + name: gitlab + labels: + environment: production +spec: + rules: + allow: + - conditions: + - attribute: join.gitlab.user_email + in: + - admin-bob@example.com + - admin-jane@example.com + - conditions: + - attribute: join.gitlab.namespace_path + equals: my-org + - attribute: join.gitlab.user_login + not_equals: noah + - attribute: join.gitlab.environment + not_matches: "^abc-.*$" + - expression: join.gitlab.pipeline_id > 100 + deny: + - conditions: + - attribute: join.gitlab.ref_type + equals: branch + - attribute: join.gitlab.ref + not_in: [main, master] + - conditions: + - attribute: join.gitlab.environment + matches: "^xyz-.*$" + - expression: join.gitlab.project_path == "my-org/my-project" + spiffe: + id: /gitlab/{{ join.gitlab.project_path }}/{{ join.gitlab.environment }} + ttl: + max: 12h + x509: + dns_sans: + - {{ join.gitlab.environment }}.gitlab.example.com +``` + +As per RFD 153, CRUD RPCs will be included for the WorkloadIdentity resource. +The ability to execute these RPCs will be governed by the standard verbs with a +noun of `workload_identity`. + +The proto specification of the RPCs is omitted for conciseness. + +### IssueWorkloadIdentity RPC + +```protobuf +syntax = "proto3"; + +package teleport.workloadidentity.v1; + +// WorkloadIdentityService provides the signing of workload identity documents. +service WorkloadIdentityService { + // IssueWorkloadIdentity issues a workload identity credential from a + // specific named WorkloadIdentity resource. + rpc IssueWorkloadIdentity(IssueWorkloadIdentityRequest) returns (IssueWorkloadIdentityResponse) {} + // IssueWorkloadIdentityWithLabels issues workload identity credentials from + // WorkloadIdentity resources that match the provided label selectors. + rpc IssueWorkloadIdentityWithLabels(IssueWorkloadIdentityWithLabelsRequest) returns (IssueWorkloadIdentityResponse) {} +} + +// The request parameters specific to the issuance of a JWT SVID. +message JWTSVIDRequest { + // The value that should be included in the JWT SVID as the `aud` claim. + // Required. + repeated string audiences = 1; + // The requested TTL for the JWT SVID. This request may be modified by + // the server according to its policies. It is the client's responsibility + // to check the TTL of the returned workload identity credential. + google.protobuf.Duration ttl = 2; +} + +// The request parameters specific to the issuance of an X509 SVID. +message X509SVIDRequest { + // A PKIX, ASN.1 DER encoded public key that should be included in the x509 + // SVID. + // Required. + bytes public_key = 1; + // The requested TTL for the JWT SVID. This request may be modified by + // the server according to its policies. It is the client's responsibility + // to check the TTL of the returned workload identity credential. + google.protobuf.Duration ttl = 2; +} + +message WorkloadIdentityCredential { + oneof credential { + // Signed JWT-SVID + string jwt_svid = 1; + // An ASN.1 DER encoded X509-SVID + bytes x509_svid = 2; + } + // The TTL that was chosen by the server. + google.protobuf.Duration ttl = 3; + // The time that the TTL is reached for this credential. + google.protobuf.Timestamp expiry = 4; + // The hint configured for this Workload Identity - if any. This is provided + // to workloads using the SPIFFE Workload API to fetch credentials. + string hint = 5; + // The name of the Workload Identity resource used to issue this credential. + string workload_identity_name = 6; + // The revision of the Workload Identity resource used to issue this + // credential. + string workload_identity_revision = 7; +} + +message IssueWorkloadIdentityRequest { + // The name of the Workload Identity resource to attempt issuance using. + string name = 1; + + // The credential_type oneof selects the type of credential (e.g JWT vs X509) + // to be issued and also provides any parameters specific to that type. + oneof credential_type { + // Parameters specific to the issuance of a JWT SVID. + JWTSVIDRequest jwt_svid = 2; + // Parameters specific to the issuance of an X509 SVID. + X509SVIDRequest x509_svid = 3; + } + + // The results of any workload attestation performed by `tbot`. + WorkloadAttributes workload_attributes = 4; +} + +// Response for IssueWorkloadIdentity +message IssueWorkloadIdentityResponse { + // The issued credential. + WorkloadIdentityCredential credential = 1; +} + +// An individual label selector to be used to filter WorkloadIdentity resources. +message LabelSelector { + // The name of the label to match. + string key = 1; + // The values to accept within the label. If multiple are provided, then any + // may match. + repeated string values = 2; +} + +// Request for IssueWorkloadIdentityWithLabels +message IssueWorkloadIdentityWithLabelsRequest { + // The label matchers which should be used to select a subset of the + // WorkloadIdentity resources to attempt issuance using. + repeated LabelSelector labels = 1; + + // The credential_type oneof selects the type of credential (e.g JWT vs X509) + // to be issued and also provides any parameters specific to that type. + oneof credential_type { + // Parameters specific to the issuance of a JWT SVID. + JWTSVIDRequest jwt_svid = 2; + // Parameters specific to the issuance of an X509 SVID. + X509SVIDRequest x509_svid = 3; + } + + // The results of any workload attestation performed by `tbot`. + WorkloadAttributes workload_attributes = 4; +} + +// Response for IssueWorkloadIdentityWithLabels +message IssueWorkloadIdentityWithLabelsResponse { + // The issued credentials. + repeated WorkloadIdentityCredentials credential = 1; +} +``` + +When a specific WorkloadIdentity is specified by-name by the client: + +1. Fetch WorkloadIdentity resource by name. +2. Compare `workload_identity_labels` of the client roleset against + `metadata.labels` of the WorkloadIdentity. Reject if no access. +3. Perform rules evaluation of `spec.rules.deny` against the attributes of the + client. Reject if no access. +4. If `spec.rules.allow` is non-zero, complete rules evaluation against the + attributes of the client. Reject if no access. +5. Evaluate templated fields, if attribute included in template missing from + attributes of the client, reject. +6. Issue workload identity credential, emit audit log, and return credential to + client. + +Where the client has provided label selectors: + +1. Fetch all WorkloadIdentity resources. +2. For each WorkloadIdentity, compare client's requested labels against + `metadata.labels`, drop if no match. +3. For each remaining WorkloadIdentity, compare `workload_identity_labels` of + client's roleset against `metadata.labels`, drop if no match. +4. For each remaining WorkloadIdentity: +4a. Perform rules evaluation of `spec.rules.deny` against the attributes of the + client. Drop if no access. +4b. If `spec.rules.allow` is non-zero, complete rules evaluation against the + attributes of the client. Drop if no access. +4c. Evaluate templated fields, if attribute included in template missing from + attributes of the client, drop. +4d. Issue workload identity credential, emit audit log. +5. Return issued credentials to client. + +If, after evaluation of labels and rules, more than 20 WorkloadIdentity +resources remain, the client should receive an error encouraging the user to +leverage labels so that the set of returned WorkloadIdentity falls below this +threshold. This limits the runaway resource consumption if there is a +misconfiguration. + +For the initial release, this limit should be configurable via an environment +variable, allowing this to be tuned without requiring a new release of Teleport +should we discover a use-case that legitimately requires the issuance of a +larger number of identities. + +### Predicate Language + +For the purposes of rule evaluation and templating, a predicate language and +engine must be implemented. + +Today, Teleport already includes a predicate language engine that serves +extremely similar functionality (e.g role templating, login rules). + +This engine and language will be reused. + +### Performance + +In the initial release, the standard resource cache will be used to improve the +performance of issuing identities to workloads. + +The resource requirements of the initial design scale with the number of +WorkloadIdentity resources in use. We should work closely with design partners +to determine the number of WorkloadIdentity resources in use, and proactively +perform benchmarks and performance improvements with growing magnitudes of +scale in mind. + +The flexible templating mechanism is intended to limit the number of Roles, +Bots and WorkloadIdentitys used for large-scale deployment. For example, +thousands of CI workflows can share the same Bot and WorkloadIdentity. +Where possible, we can mitigate the need for growing numbers of WorkloadIdentity +resources by adding more advanced templating and authorization rule +functionality. + +We should bear in mind the following potential performance improvements: + +- Tailored cache with label-based indexing to improve the performance of + resolving label matchers to specific WorkloadIdentity resources. +- Edge cache in `tbot` that can be enabled to return recently-issued identities + without hitting the Auth Service. This will involve some elements of the + authorization logic being executed at the edge for the cache. +- Decoupling the Workload Identity CA and issuance process from the Auth + Service. + +OpenTelemetry tracing should be included across the credential issuance process +to highlight performance hot-spots. + +### Deprecation + +For now, the old RBAC and RPCs for Workload Identity will be left in place as +they provide effectively an "administrative" way of generating workload +identity credentials. + +When the new mechanism has been available for 2 major versions, we should +revisit the deprecation of the legacy RPCs and RBAC. + +### Implementation Pathway + +This work is well-suited to being broken down into a number of smaller tasks: + +1. Implement the persistence of join metadata as attributes into X509 + certificates. +2. Implement the WorkloadIdentity resource and CRUD RPCs. +3. Implement the IssueWorkloadIdentity RPC without templating or rules + evaluation. +4. Implement rules and template evaluation. +5. Implement label-based IssueWorkloadIdentity RPC functionality. +6. Implement changes in `tbot` to support using the IssueWorkloadIdentity RPC. +7. Implement the `tctl workload-identity test` command. + +## Alternatives + +### Role Templating and `tbot` SPIFFE ID templating + +One alternative to introducing a new resource is to introduce support for role +templating of the SPIFFE fields. + +This would still require work to propagate the join metadata into the +certificate as trait-like things for the purposes of RBAC evaluation. + +We'd also need to implement similar templating into the `tbot` configuration +itself, we could likely reuse much of the same functionality here. + +Positives: + +1. "Simpler" to implement (but not significantly so) +2. Keeps configuration within an existing Teleport primitive (roles) rather than + further spreading it out into a new resource. + +Negatives: + +1. TBot configuration still remains important in the SVID issuance process, + meaning you still need to manage configuration for a large fleet of `tbot` + instances. +2. The configuration is split between Teleport resources and the `tbot` + configuration. If these drift, SVIDs will fail to be issued. +3. Teleport Roles are already pretty complex, and this is introducing further + complexity. + +### CEL vs Teleport Predicate Language + +Rather than use the existing Teleport predicate language, we could base the +templating and rule evaluation functionality in Workload Identity on Google's +open-source Common Expression Language (CEL). + +Positives: + +- A more widely-used and understood language. Users are more likely to have + encountered this previously, and, there exists a wealth of tooling and + documentation. +- Native support for encoding compiled expressions in Protobuf. This would + support the pre-compilation of expressions at creation time for the purposes + of validation and performance. +- Native support for environments/contexts defined in Protobuf. Our AttributeSet + will be defined in Protobuf and would natively be supported by CEL. We would + need to extend the Teleport predicate language to support this. +- CEL has a built-in "cost estimation" mechanism which could be used to prevent + the configuration of overly computationally expensive expressions. + +Negatives: + +- Inconsistency with other functionality in Teleport may be confusing for users. +- We already have internal expertise about the functionality of the Teleport + predicate language and understand the existing limitations of it, CEL + introduces a new set of limitations and challenges, many of which are unknown + to us. That being said, CEL is more mature and battle-tested, it's unlikely + we will encounter problems which are not already well-documented. + +At this time, it is felt that consistency with the rest of the product is a +higher priority. We can revisit the introduction of CEL at a later date. + +## Security Considerations + +### Auditing + +The CRUD RPCs for the WorkloadIdentity resource will emit the standard audit +events: + +- `workload_identity.create` +- `workload_identity.update` +- `workload_identity.delete` + +The new RPC for issuing a credential based on a WorkloadIdentity will emit a +new audit event `workload_identity.generate` for each issued identity. This will +contain the following information: + +- Connection Metadata +- The User or Bot Instance that has requested the issuance +- Details of the issued credential: + - X509 SVID: + - SPIFFE ID + - Serial Number + - NotBefore, NotAfter + - Included SANs and Subject + - Public Key + - JWT SVID: + - SPIFFE ID + - Claims (e.g iat, exp, jti, sub, aud and any custom claims) +- The full attribute set that was used during rule and template evaluation. +- Which WorkloadIdentity was used for the issuance. + - The name and the revision to allow the specific version to be identified + if this has been modified since. + +### Trustworthiness of Workload Attestation Attributes + +The `workload` subset of the attributes is sourced from the workload attestation +performed by `tbot`. A malicious `tbot`, or someone with credentials exfiltrated +from `tbot`, is able to provide any values it desires for these attributes. + +This is not a risk that has been introduced by the design proposed by this RFD +and is effectively an underlying concern of most workload identity +implementations that include an element of workload attestation that is +completed using information that is local to the workload. + +To make this risk easier to mitigate, care should be taken to distinguish +attributes sourced from workload attestation against the more verifiable +attributes sourced from the join process. This has been achieved by placing +them under separate root attribute keys (e.g `join` vs `workload`). + +Largely, the blast radius of this risk is mitigated by the use of best practices +such as ensuring that attributes from the join are included in rules or +templates with a higher precedence than that of attributes sourced from +workload attestation. This limits a bad actors abiliy to issue credentials +to a subset of the workload identifier namespace. Authorization rules that +process workload identities should also abide this. + +We should ensure that this risk and the best practices are explained in the +product documentation, and, provide a set of example WorkloadIdentity resources +for common use-cases. + +To simplify responding to this kind of breach, the audit log must include +sufficient information to trace back issued workload identities to the identity +that requested them. From 0870512dba02fe2c61cc788c61dfe9c95dd49eb3 Mon Sep 17 00:00:00 2001 From: Alan Parra Date: Thu, 12 Dec 2024 14:42:12 -0300 Subject: [PATCH 17/22] chore: Bump golang.org/x/crypto on examples/ (#50160) --- examples/access-plugin-minimal/go.mod | 8 ++--- examples/access-plugin-minimal/go.sum | 20 ++++++------- examples/api-sync-roles/go.mod | 8 ++--- examples/api-sync-roles/go.sum | 20 ++++++------- examples/desktop-registration/go.mod | 8 ++--- examples/desktop-registration/go.sum | 16 +++++----- examples/service-discovery-api-client/go.mod | 15 +++++----- examples/service-discovery-api-client/go.sum | 31 ++++++++++---------- 8 files changed, 64 insertions(+), 62 deletions(-) diff --git a/examples/access-plugin-minimal/go.mod b/examples/access-plugin-minimal/go.mod index 6214f88ce768c..85aee3c5a99da 100644 --- a/examples/access-plugin-minimal/go.mod +++ b/examples/access-plugin-minimal/go.mod @@ -46,13 +46,13 @@ require ( go.opentelemetry.io/otel/sdk v1.22.0 // indirect go.opentelemetry.io/otel/trace v1.22.0 // indirect go.opentelemetry.io/proto/otlp v1.1.0 // indirect - golang.org/x/crypto v0.22.0 // indirect + golang.org/x/crypto v0.31.0 // indirect golang.org/x/exp v0.0.0-20230811145659-89c5cff77bcb // indirect golang.org/x/net v0.24.0 // indirect golang.org/x/oauth2 v0.15.0 // indirect - golang.org/x/sys v0.19.0 // indirect - golang.org/x/term v0.19.0 // indirect - golang.org/x/text v0.14.0 // indirect + golang.org/x/sys v0.28.0 // indirect + golang.org/x/term v0.27.0 // indirect + golang.org/x/text v0.21.0 // indirect google.golang.org/appengine v1.6.8 // indirect google.golang.org/genproto/googleapis/api v0.0.0-20240102182953-50ed04b92917 // indirect google.golang.org/genproto/googleapis/rpc v0.0.0-20240102182953-50ed04b92917 // indirect diff --git a/examples/access-plugin-minimal/go.sum b/examples/access-plugin-minimal/go.sum index 1e47f25aebafb..fe8f19d63479a 100644 --- a/examples/access-plugin-minimal/go.sum +++ b/examples/access-plugin-minimal/go.sum @@ -176,8 +176,8 @@ golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8U golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= golang.org/x/crypto v0.7.0/go.mod h1:pYwdfH91IfpZVANVyUOhSIPZaFoJGxTFbZhFTx+dXZU= -golang.org/x/crypto v0.22.0 h1:g1v0xeRhjcugydODzvb3mEM9SQ0HGp9s/nh3COQ/C30= -golang.org/x/crypto v0.22.0/go.mod h1:vr6Su+7cTlO45qkww3VDJlzDn0ctJvRgYbC2NvXHt+M= +golang.org/x/crypto v0.31.0 h1:ihbySMvVjLAeSH1IbfcRTkD/iNscyz8rGzjF/E5hV6U= +golang.org/x/crypto v0.31.0/go.mod h1:kDsLvtWBEx7MV9tJOj9bnXsPbxwJQ6csT/x4KIN4Ssk= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20230811145659-89c5cff77bcb h1:mIKbk8weKhSeLH2GmUTrvx8CjkyJmnU1wFmg59CUjFA= golang.org/x/exp v0.0.0-20230811145659-89c5cff77bcb/go.mod h1:FXUEEKJgO7OQYeo8N01OfiKP8RXMtf6e8aTskBGqWdc= @@ -217,8 +217,8 @@ golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJ golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.5.0 h1:60k92dhOjHxJkrqnwsfl8KuaHbn/5dl0lUPUklKo3qE= -golang.org/x/sync v0.5.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= +golang.org/x/sync v0.10.0 h1:3NQrjDixjgGwUOCaF8w2+VYHv0Ve/vGYSbdkTa98gmQ= +golang.org/x/sync v0.10.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -232,22 +232,22 @@ golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.19.0 h1:q5f1RH2jigJ1MoAWp2KTp3gm5zAGFUTarQZ5U386+4o= -golang.org/x/sys v0.19.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/sys v0.28.0 h1:Fksou7UEQUWlKvIdsqzJmUmCX3cZuD2+P3XyyzwMhlA= +golang.org/x/sys v0.28.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k= golang.org/x/term v0.6.0/go.mod h1:m6U89DPEgQRMq3DNkDClhWw02AUbt2daBVO4cn4Hv9U= -golang.org/x/term v0.19.0 h1:+ThwsDv+tYfnJFhF4L8jITxu1tdTWRTZpdsWgEgjL6Q= -golang.org/x/term v0.19.0/go.mod h1:2CuTdWZ7KHSQwUzKva0cbMg6q2DMI3Mmxp+gKJbskEk= +golang.org/x/term v0.27.0 h1:WP60Sv1nlK1T6SupCHbXzSaN0b9wUmsPoRS9b61A23Q= +golang.org/x/term v0.27.0/go.mod h1:iMsnZpn0cago0GOrHO2+Y7u7JPn5AylBrcoWkElMTSM= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= golang.org/x/text v0.3.8/go.mod h1:E6s5w1FMmriuDzIBO73fBruAKo1PCIq6d2Q6DHfQ8WQ= golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= golang.org/x/text v0.8.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= -golang.org/x/text v0.14.0 h1:ScX5w1eTa3QqT8oi6+ziP7dTV1S2+ALU0bI+0zXKWiQ= -golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU= +golang.org/x/text v0.21.0 h1:zyQAAkrwaneQ066sspRyJaG9VNi/YJ1NfzcGB3hZ/qo= +golang.org/x/text v0.21.0/go.mod h1:4IBbMaMmOPCJ8SecivzSH54+73PCFmPWxNTLm+vZkEQ= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= diff --git a/examples/api-sync-roles/go.mod b/examples/api-sync-roles/go.mod index 5027109379401..e4134f2934472 100644 --- a/examples/api-sync-roles/go.mod +++ b/examples/api-sync-roles/go.mod @@ -57,13 +57,13 @@ require ( go.opentelemetry.io/otel/sdk v1.22.0 // indirect go.opentelemetry.io/otel/trace v1.22.0 // indirect go.opentelemetry.io/proto/otlp v1.1.0 // indirect - golang.org/x/crypto v0.22.0 // indirect + golang.org/x/crypto v0.31.0 // indirect golang.org/x/exp v0.0.0-20230811145659-89c5cff77bcb // indirect golang.org/x/net v0.24.0 // indirect golang.org/x/oauth2 v0.15.0 // indirect - golang.org/x/sys v0.19.0 // indirect - golang.org/x/term v0.19.0 // indirect - golang.org/x/text v0.14.0 // indirect + golang.org/x/sys v0.28.0 // indirect + golang.org/x/term v0.27.0 // indirect + golang.org/x/text v0.21.0 // indirect golang.org/x/time v0.0.0-20220210224613-90d013bbcef8 // indirect google.golang.org/appengine v1.6.8 // indirect google.golang.org/genproto/googleapis/api v0.0.0-20240102182953-50ed04b92917 // indirect diff --git a/examples/api-sync-roles/go.sum b/examples/api-sync-roles/go.sum index 52b2807234af8..be4b25422f0cd 100644 --- a/examples/api-sync-roles/go.sum +++ b/examples/api-sync-roles/go.sum @@ -208,8 +208,8 @@ golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8U golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= golang.org/x/crypto v0.7.0/go.mod h1:pYwdfH91IfpZVANVyUOhSIPZaFoJGxTFbZhFTx+dXZU= -golang.org/x/crypto v0.22.0 h1:g1v0xeRhjcugydODzvb3mEM9SQ0HGp9s/nh3COQ/C30= -golang.org/x/crypto v0.22.0/go.mod h1:vr6Su+7cTlO45qkww3VDJlzDn0ctJvRgYbC2NvXHt+M= +golang.org/x/crypto v0.31.0 h1:ihbySMvVjLAeSH1IbfcRTkD/iNscyz8rGzjF/E5hV6U= +golang.org/x/crypto v0.31.0/go.mod h1:kDsLvtWBEx7MV9tJOj9bnXsPbxwJQ6csT/x4KIN4Ssk= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20230811145659-89c5cff77bcb h1:mIKbk8weKhSeLH2GmUTrvx8CjkyJmnU1wFmg59CUjFA= golang.org/x/exp v0.0.0-20230811145659-89c5cff77bcb/go.mod h1:FXUEEKJgO7OQYeo8N01OfiKP8RXMtf6e8aTskBGqWdc= @@ -261,22 +261,22 @@ golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.19.0 h1:q5f1RH2jigJ1MoAWp2KTp3gm5zAGFUTarQZ5U386+4o= -golang.org/x/sys v0.19.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/sys v0.28.0 h1:Fksou7UEQUWlKvIdsqzJmUmCX3cZuD2+P3XyyzwMhlA= +golang.org/x/sys v0.28.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k= golang.org/x/term v0.6.0/go.mod h1:m6U89DPEgQRMq3DNkDClhWw02AUbt2daBVO4cn4Hv9U= -golang.org/x/term v0.19.0 h1:+ThwsDv+tYfnJFhF4L8jITxu1tdTWRTZpdsWgEgjL6Q= -golang.org/x/term v0.19.0/go.mod h1:2CuTdWZ7KHSQwUzKva0cbMg6q2DMI3Mmxp+gKJbskEk= +golang.org/x/term v0.27.0 h1:WP60Sv1nlK1T6SupCHbXzSaN0b9wUmsPoRS9b61A23Q= +golang.org/x/term v0.27.0/go.mod h1:iMsnZpn0cago0GOrHO2+Y7u7JPn5AylBrcoWkElMTSM= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= golang.org/x/text v0.3.8/go.mod h1:E6s5w1FMmriuDzIBO73fBruAKo1PCIq6d2Q6DHfQ8WQ= golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= golang.org/x/text v0.8.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= -golang.org/x/text v0.14.0 h1:ScX5w1eTa3QqT8oi6+ziP7dTV1S2+ALU0bI+0zXKWiQ= -golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU= +golang.org/x/text v0.21.0 h1:zyQAAkrwaneQ066sspRyJaG9VNi/YJ1NfzcGB3hZ/qo= +golang.org/x/text v0.21.0/go.mod h1:4IBbMaMmOPCJ8SecivzSH54+73PCFmPWxNTLm+vZkEQ= golang.org/x/time v0.0.0-20220210224613-90d013bbcef8 h1:vVKdlvoWBphwdxWKrFZEuM0kGgGLxUOYcY4U/2Vjg44= golang.org/x/time v0.0.0-20220210224613-90d013bbcef8/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= @@ -289,8 +289,8 @@ golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roY golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU= -golang.org/x/tools v0.7.0 h1:W4OVu8VVOaIO0yzWMNdepAulS7YfoS3Zabrm8DOXXU4= -golang.org/x/tools v0.7.0/go.mod h1:4pg6aUX35JBAogB10C9AtvVL+qowtN4pT3CGSQex14s= +golang.org/x/tools v0.21.1-0.20240508182429-e35e4ccd0d2d h1:vU5i/LfpvrRCpgM/VPfJLg5KjxD3E+hfT1SH+d9zLwg= +golang.org/x/tools v0.21.1-0.20240508182429-e35e4ccd0d2d/go.mod h1:aiJjzUbINMkxbQROHiO6hDPo2LHcIPhhQsa9DLh0yGk= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= diff --git a/examples/desktop-registration/go.mod b/examples/desktop-registration/go.mod index a7633a03340aa..5da92f124caa3 100644 --- a/examples/desktop-registration/go.mod +++ b/examples/desktop-registration/go.mod @@ -36,12 +36,12 @@ require ( go.opentelemetry.io/otel/sdk v1.22.0 // indirect go.opentelemetry.io/otel/trace v1.22.0 // indirect go.opentelemetry.io/proto/otlp v1.1.0 // indirect - golang.org/x/crypto v0.22.0 // indirect + golang.org/x/crypto v0.31.0 // indirect golang.org/x/exp v0.0.0-20230811145659-89c5cff77bcb // indirect golang.org/x/net v0.24.0 // indirect - golang.org/x/sys v0.19.0 // indirect - golang.org/x/term v0.19.0 // indirect - golang.org/x/text v0.14.0 // indirect + golang.org/x/sys v0.28.0 // indirect + golang.org/x/term v0.27.0 // indirect + golang.org/x/text v0.21.0 // indirect google.golang.org/genproto/googleapis/api v0.0.0-20240102182953-50ed04b92917 // indirect google.golang.org/genproto/googleapis/rpc v0.0.0-20240102182953-50ed04b92917 // indirect google.golang.org/grpc v1.61.1 // indirect diff --git a/examples/desktop-registration/go.sum b/examples/desktop-registration/go.sum index 36a788107e189..0b5eedd0047a0 100644 --- a/examples/desktop-registration/go.sum +++ b/examples/desktop-registration/go.sum @@ -159,8 +159,8 @@ golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8U golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= golang.org/x/crypto v0.7.0/go.mod h1:pYwdfH91IfpZVANVyUOhSIPZaFoJGxTFbZhFTx+dXZU= -golang.org/x/crypto v0.22.0 h1:g1v0xeRhjcugydODzvb3mEM9SQ0HGp9s/nh3COQ/C30= -golang.org/x/crypto v0.22.0/go.mod h1:vr6Su+7cTlO45qkww3VDJlzDn0ctJvRgYbC2NvXHt+M= +golang.org/x/crypto v0.31.0 h1:ihbySMvVjLAeSH1IbfcRTkD/iNscyz8rGzjF/E5hV6U= +golang.org/x/crypto v0.31.0/go.mod h1:kDsLvtWBEx7MV9tJOj9bnXsPbxwJQ6csT/x4KIN4Ssk= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20230811145659-89c5cff77bcb h1:mIKbk8weKhSeLH2GmUTrvx8CjkyJmnU1wFmg59CUjFA= golang.org/x/exp v0.0.0-20230811145659-89c5cff77bcb/go.mod h1:FXUEEKJgO7OQYeo8N01OfiKP8RXMtf6e8aTskBGqWdc= @@ -212,21 +212,21 @@ golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.19.0 h1:q5f1RH2jigJ1MoAWp2KTp3gm5zAGFUTarQZ5U386+4o= -golang.org/x/sys v0.19.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/sys v0.28.0 h1:Fksou7UEQUWlKvIdsqzJmUmCX3cZuD2+P3XyyzwMhlA= +golang.org/x/sys v0.28.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k= golang.org/x/term v0.6.0/go.mod h1:m6U89DPEgQRMq3DNkDClhWw02AUbt2daBVO4cn4Hv9U= -golang.org/x/term v0.19.0 h1:+ThwsDv+tYfnJFhF4L8jITxu1tdTWRTZpdsWgEgjL6Q= -golang.org/x/term v0.19.0/go.mod h1:2CuTdWZ7KHSQwUzKva0cbMg6q2DMI3Mmxp+gKJbskEk= +golang.org/x/term v0.27.0 h1:WP60Sv1nlK1T6SupCHbXzSaN0b9wUmsPoRS9b61A23Q= +golang.org/x/term v0.27.0/go.mod h1:iMsnZpn0cago0GOrHO2+Y7u7JPn5AylBrcoWkElMTSM= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= golang.org/x/text v0.8.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= -golang.org/x/text v0.14.0 h1:ScX5w1eTa3QqT8oi6+ziP7dTV1S2+ALU0bI+0zXKWiQ= -golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU= +golang.org/x/text v0.21.0 h1:zyQAAkrwaneQ066sspRyJaG9VNi/YJ1NfzcGB3hZ/qo= +golang.org/x/text v0.21.0/go.mod h1:4IBbMaMmOPCJ8SecivzSH54+73PCFmPWxNTLm+vZkEQ= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= diff --git a/examples/service-discovery-api-client/go.mod b/examples/service-discovery-api-client/go.mod index 9d37ee90fba1d..5cfe290b880fb 100644 --- a/examples/service-discovery-api-client/go.mod +++ b/examples/service-discovery-api-client/go.mod @@ -53,15 +53,16 @@ require ( go.opentelemetry.io/otel/sdk v1.25.0 // indirect go.opentelemetry.io/otel/trace v1.25.0 // indirect go.opentelemetry.io/proto/otlp v1.1.0 // indirect - golang.org/x/crypto v0.22.0 // indirect + golang.org/x/crypto v0.31.0 // indirect golang.org/x/exp v0.0.0-20230811145659-89c5cff77bcb // indirect - golang.org/x/mod v0.11.0 // indirect - golang.org/x/net v0.24.0 // indirect - golang.org/x/sys v0.19.0 // indirect - golang.org/x/term v0.19.0 // indirect - golang.org/x/text v0.14.0 // indirect + golang.org/x/mod v0.17.0 // indirect + golang.org/x/net v0.25.0 // indirect + golang.org/x/sync v0.10.0 // indirect + golang.org/x/sys v0.28.0 // indirect + golang.org/x/term v0.27.0 // indirect + golang.org/x/text v0.21.0 // indirect golang.org/x/time v0.3.0 // indirect - golang.org/x/tools v0.6.0 // indirect + golang.org/x/tools v0.21.1-0.20240508182429-e35e4ccd0d2d // indirect google.golang.org/genproto/googleapis/api v0.0.0-20240227224415-6ceb2ff114de // indirect google.golang.org/genproto/googleapis/rpc v0.0.0-20240401170217-c3f982113cda // indirect google.golang.org/protobuf v1.33.0 // indirect diff --git a/examples/service-discovery-api-client/go.sum b/examples/service-discovery-api-client/go.sum index 22bbf60678294..2511aa0d9ec69 100644 --- a/examples/service-discovery-api-client/go.sum +++ b/examples/service-discovery-api-client/go.sum @@ -186,8 +186,8 @@ golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8U golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= golang.org/x/crypto v0.7.0/go.mod h1:pYwdfH91IfpZVANVyUOhSIPZaFoJGxTFbZhFTx+dXZU= -golang.org/x/crypto v0.22.0 h1:g1v0xeRhjcugydODzvb3mEM9SQ0HGp9s/nh3COQ/C30= -golang.org/x/crypto v0.22.0/go.mod h1:vr6Su+7cTlO45qkww3VDJlzDn0ctJvRgYbC2NvXHt+M= +golang.org/x/crypto v0.31.0 h1:ihbySMvVjLAeSH1IbfcRTkD/iNscyz8rGzjF/E5hV6U= +golang.org/x/crypto v0.31.0/go.mod h1:kDsLvtWBEx7MV9tJOj9bnXsPbxwJQ6csT/x4KIN4Ssk= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20230811145659-89c5cff77bcb h1:mIKbk8weKhSeLH2GmUTrvx8CjkyJmnU1wFmg59CUjFA= golang.org/x/exp v0.0.0-20230811145659-89c5cff77bcb/go.mod h1:FXUEEKJgO7OQYeo8N01OfiKP8RXMtf6e8aTskBGqWdc= @@ -198,8 +198,8 @@ golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= -golang.org/x/mod v0.11.0 h1:bUO06HqtnRcc/7l71XBe4WcqTZ+3AH1J59zWDDwLKgU= -golang.org/x/mod v0.11.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= +golang.org/x/mod v0.17.0 h1:zY54UmvipHiNd+pm+m0x9KhZ9hl1/7QNMyxXbc6ICqA= +golang.org/x/mod v0.17.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c= golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= @@ -214,8 +214,8 @@ golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= golang.org/x/net v0.8.0/go.mod h1:QVkue5JL9kW//ek3r6jTKnTFis1tRmNAW2P1shuFdJc= -golang.org/x/net v0.24.0 h1:1PcaxkF854Fu3+lvBIx5SYn9wRlBzzcnHZSiaFFAb0w= -golang.org/x/net v0.24.0/go.mod h1:2Q7sJY5mzlzWjKtYUEXSlBWCdyaioyXzRB2RtU8KVE8= +golang.org/x/net v0.25.0 h1:d/OCCoBEUq33pjydKrGQhw7IlUPI2Oylr+8qLx49kac= +golang.org/x/net v0.25.0/go.mod h1:JkAGAh7GEvH74S6FOH42FLoXpXbE/aqXSrIQjXgsiwM= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.17.0 h1:6m3ZPmLEFdVxKKWnKq4VqZ60gutO35zm+zrAHVmHyDQ= @@ -228,8 +228,8 @@ golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJ golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.6.0 h1:5BMeUDZ7vkXGfEr1x9B4bRcTH4lpkTkpdh0T/J+qjbQ= -golang.org/x/sync v0.6.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= +golang.org/x/sync v0.10.0 h1:3NQrjDixjgGwUOCaF8w2+VYHv0Ve/vGYSbdkTa98gmQ= +golang.org/x/sync v0.10.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -244,21 +244,21 @@ golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.19.0 h1:q5f1RH2jigJ1MoAWp2KTp3gm5zAGFUTarQZ5U386+4o= -golang.org/x/sys v0.19.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/sys v0.28.0 h1:Fksou7UEQUWlKvIdsqzJmUmCX3cZuD2+P3XyyzwMhlA= +golang.org/x/sys v0.28.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k= golang.org/x/term v0.6.0/go.mod h1:m6U89DPEgQRMq3DNkDClhWw02AUbt2daBVO4cn4Hv9U= -golang.org/x/term v0.19.0 h1:+ThwsDv+tYfnJFhF4L8jITxu1tdTWRTZpdsWgEgjL6Q= -golang.org/x/term v0.19.0/go.mod h1:2CuTdWZ7KHSQwUzKva0cbMg6q2DMI3Mmxp+gKJbskEk= +golang.org/x/term v0.27.0 h1:WP60Sv1nlK1T6SupCHbXzSaN0b9wUmsPoRS9b61A23Q= +golang.org/x/term v0.27.0/go.mod h1:iMsnZpn0cago0GOrHO2+Y7u7JPn5AylBrcoWkElMTSM= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= golang.org/x/text v0.8.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= -golang.org/x/text v0.14.0 h1:ScX5w1eTa3QqT8oi6+ziP7dTV1S2+ALU0bI+0zXKWiQ= -golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU= +golang.org/x/text v0.21.0 h1:zyQAAkrwaneQ066sspRyJaG9VNi/YJ1NfzcGB3hZ/qo= +golang.org/x/text v0.21.0/go.mod h1:4IBbMaMmOPCJ8SecivzSH54+73PCFmPWxNTLm+vZkEQ= golang.org/x/time v0.3.0 h1:rg5rLMjNzMS1RkNLzCG38eapWhnYLFYXDXj2gOlr8j4= golang.org/x/time v0.3.0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= @@ -271,8 +271,9 @@ golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roY golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.1.0/go.mod h1:xkSsbof2nBLbhDlRMhhhyNLN/zl3eTqcnHD5viDpcZ0= golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= -golang.org/x/tools v0.6.0 h1:BOw41kyTf3PuCW1pVQf8+Cyg8pMlkYB1oo9iJ6D/lKM= golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU= +golang.org/x/tools v0.21.1-0.20240508182429-e35e4ccd0d2d h1:vU5i/LfpvrRCpgM/VPfJLg5KjxD3E+hfT1SH+d9zLwg= +golang.org/x/tools v0.21.1-0.20240508182429-e35e4ccd0d2d/go.mod h1:aiJjzUbINMkxbQROHiO6hDPo2LHcIPhhQsa9DLh0yGk= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= From 2c82b83622335a99b6715625fa4a6a79c8466c35 Mon Sep 17 00:00:00 2001 From: Steven Martin Date: Thu, 12 Dec 2024 13:12:33 -0500 Subject: [PATCH 18/22] docs: remove var reference that isn't used in terraform provider (#50141) --- .../terraform-provider/dedicated-server.mdx | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/docs/pages/admin-guides/infrastructure-as-code/terraform-provider/dedicated-server.mdx b/docs/pages/admin-guides/infrastructure-as-code/terraform-provider/dedicated-server.mdx index 683f4f3082bf8..121ed798ad5b9 100644 --- a/docs/pages/admin-guides/infrastructure-as-code/terraform-provider/dedicated-server.mdx +++ b/docs/pages/admin-guides/infrastructure-as-code/terraform-provider/dedicated-server.mdx @@ -35,8 +35,7 @@ Terraform provider. The daemon stores its identity on the disk and refresh the t - A Linux host that you wish to run the Teleport Terraform provider onto. -- A Linux user on that host that you wish Terraform and `tbot` to run as. In the guide, - we will use for this. +- A Linux user on that host that you wish Terraform and `tbot` to run as. ## Step 1/4. Install `tbot` on your server From 13cf4eb7ad848efd62ded85ad96725c331b363da Mon Sep 17 00:00:00 2001 From: Vadym Popov Date: Thu, 12 Dec 2024 12:50:18 -0800 Subject: [PATCH 19/22] Restrict AutoUpdateVersion to be created/updated for cloud (#49008) * Restrict AutoUpdateVersion to be created/updated for cloud * Check builtin Admin role and Cloud feature * More informative error message * Remove KindAutoUpdateAgentRollout from editor role preset --- lib/auth/autoupdate/autoupdatev1/service.go | 28 +++++++++++++++++++++ lib/services/presets.go | 2 ++ 2 files changed, 30 insertions(+) diff --git a/lib/auth/autoupdate/autoupdatev1/service.go b/lib/auth/autoupdate/autoupdatev1/service.go index aa9e29f2fabea..77baae74e4658 100644 --- a/lib/auth/autoupdate/autoupdatev1/service.go +++ b/lib/auth/autoupdate/autoupdatev1/service.go @@ -30,6 +30,7 @@ import ( apievents "github.com/gravitational/teleport/api/types/events" "github.com/gravitational/teleport/lib/authz" "github.com/gravitational/teleport/lib/events" + "github.com/gravitational/teleport/lib/modules" "github.com/gravitational/teleport/lib/services" ) @@ -292,6 +293,10 @@ func (s *Service) CreateAutoUpdateVersion(ctx context.Context, req *autoupdate.C return nil, trace.Wrap(err) } + if err := checkAdminCloudAccess(authCtx); err != nil { + return nil, trace.Wrap(err) + } + if err := authCtx.CheckAccessToKind(types.KindAutoUpdateVersion, types.VerbCreate); err != nil { return nil, trace.Wrap(err) } @@ -333,6 +338,10 @@ func (s *Service) UpdateAutoUpdateVersion(ctx context.Context, req *autoupdate.U return nil, trace.Wrap(err) } + if err := checkAdminCloudAccess(authCtx); err != nil { + return nil, trace.Wrap(err) + } + if err := authCtx.CheckAccessToKind(types.KindAutoUpdateVersion, types.VerbUpdate); err != nil { return nil, trace.Wrap(err) } @@ -374,6 +383,10 @@ func (s *Service) UpsertAutoUpdateVersion(ctx context.Context, req *autoupdate.U return nil, trace.Wrap(err) } + if err := checkAdminCloudAccess(authCtx); err != nil { + return nil, trace.Wrap(err) + } + if err := authCtx.CheckAccessToKind(types.KindAutoUpdateVersion, types.VerbCreate, types.VerbUpdate); err != nil { return nil, trace.Wrap(err) } @@ -415,6 +428,10 @@ func (s *Service) DeleteAutoUpdateVersion(ctx context.Context, req *autoupdate.D return nil, trace.Wrap(err) } + if err := checkAdminCloudAccess(authCtx); err != nil { + return nil, trace.Wrap(err) + } + if err := authCtx.CheckAccessToKind(types.KindAutoUpdateVersion, types.VerbDelete); err != nil { return nil, trace.Wrap(err) } @@ -589,3 +606,14 @@ func (s *Service) emitEvent(ctx context.Context, e apievents.AuditEvent) { ) } } + +// checkAdminCloudAccess validates if the given context has the builtin admin role if cloud feature is enabled. +func checkAdminCloudAccess(authCtx *authz.Context) error { + if modules.GetModules().Features().Cloud && !authz.HasBuiltinRole(*authCtx, string(types.RoleAdmin)) { + return trace.AccessDenied("This Teleport instance is running on Teleport Cloud. "+ + "The %q resource is managed by the Teleport Cloud team. You can use the %q resource to opt-in, "+ + "opt-out or configure update schedules.", + types.KindAutoUpdateVersion, types.KindAutoUpdateConfig) + } + return nil +} diff --git a/lib/services/presets.go b/lib/services/presets.go index 887545d164cf6..3da8d165e36f8 100644 --- a/lib/services/presets.go +++ b/lib/services/presets.go @@ -192,6 +192,8 @@ func NewPresetEditorRole() types.Role { types.NewRule(types.KindIdentityCenter, RW()), types.NewRule(types.KindContact, RW()), types.NewRule(types.KindWorkloadIdentity, RW()), + types.NewRule(types.KindAutoUpdateVersion, RW()), + types.NewRule(types.KindAutoUpdateConfig, RW()), }, }, }, From 8a2eebde55f7614587d3f824119abf6378c8b464 Mon Sep 17 00:00:00 2001 From: Michael Date: Thu, 12 Dec 2024 16:12:10 -0600 Subject: [PATCH 20/22] Always show Bots page with conditional permissions error (#50162) This will make the bots page always visible to users. If they do not have permissions, they will see the empty state as well as an error of what permissions are missing. --- .../teleport/src/Bots/List/Bots.test.tsx | 27 ++++++++++++++++--- web/packages/teleport/src/Bots/List/Bots.tsx | 25 ++++++++++++----- .../src/Bots/List/EmptyState/EmptyState.tsx | 12 +++++++-- web/packages/teleport/src/features.tsx | 4 +-- 4 files changed, 54 insertions(+), 14 deletions(-) diff --git a/web/packages/teleport/src/Bots/List/Bots.test.tsx b/web/packages/teleport/src/Bots/List/Bots.test.tsx index bb17c3a495447..5d0f0a78afdeb 100644 --- a/web/packages/teleport/src/Bots/List/Bots.test.tsx +++ b/web/packages/teleport/src/Bots/List/Bots.test.tsx @@ -22,13 +22,20 @@ import { render, screen, userEvent, waitFor } from 'design/utils/testing'; import api from 'teleport/services/api'; import { botsApiResponseFixture } from 'teleport/Bots/fixtures'; -import { createTeleportContext } from 'teleport/mocks/contexts'; +import { + allAccessAcl, + createTeleportContext, + noAccess, +} from 'teleport/mocks/contexts'; import { ContextProvider } from 'teleport/index'; +import TeleportContext from 'teleport/teleportContext'; import { Bots } from './Bots'; -function renderWithContext(element) { - const ctx = createTeleportContext(); +function renderWithContext(element, ctx?: TeleportContext) { + if (!ctx) { + ctx = createTeleportContext(); + } return render( {element} @@ -57,6 +64,20 @@ test('shows empty state when bots are empty', async () => { }); }); +test('shows missing permissions error if user lacks permissions to list', async () => { + jest.spyOn(api, 'get').mockResolvedValue({ items: [] }); + const ctx = createTeleportContext(); + ctx.storeUser.setState({ acl: { ...allAccessAcl, bots: noAccess } }); + renderWithContext(, ctx); + + await waitFor(() => { + expect(screen.getByTestId('bots-empty-state')).toBeInTheDocument(); + }); + expect( + screen.getByText(/You do not have permission to access Bots/i) + ).toBeInTheDocument(); +}); + test('calls edit endpoint', async () => { jest .spyOn(api, 'get') diff --git a/web/packages/teleport/src/Bots/List/Bots.tsx b/web/packages/teleport/src/Bots/List/Bots.tsx index 594a1840d7c52..ade2886712151 100644 --- a/web/packages/teleport/src/Bots/List/Bots.tsx +++ b/web/packages/teleport/src/Bots/List/Bots.tsx @@ -45,12 +45,15 @@ export function Bots() { const ctx = useTeleport(); const flags = ctx.getFeatureFlags(); const hasAddBotPermissions = flags.addBots; + const canListBots = flags.listBots; const [bots, setBots] = useState([]); const [selectedBot, setSelectedBot] = useState(); const [selectedRoles, setSelectedRoles] = useState(); const { attempt: crudAttempt, run: crudRun } = useAttemptNext(); - const { attempt: fetchAttempt, run: fetchRun } = useAttemptNext('processing'); + const { attempt: fetchAttempt, run: fetchRun } = useAttemptNext( + canListBots ? 'processing' : 'success' + ); useEffect(() => { const signal = new AbortController(); @@ -60,15 +63,17 @@ export function Bots() { return await fetchBots(signal, flags); } - fetchRun(() => - bots(signal.signal).then(botRes => { - setBots(botRes.bots); - }) - ); + if (canListBots) { + fetchRun(() => + bots(signal.signal).then(botRes => { + setBots(botRes.bots); + }) + ); + } return () => { signal.abort(); }; - }, [ctx, fetchRun]); + }, [ctx, fetchRun, canListBots]); async function fetchRoleNames(search: string): Promise { const flags = ctx.getFeatureFlags(); @@ -122,6 +127,12 @@ export function Bots() { if (fetchAttempt.status === 'success' && bots.length === 0) { return ( + {!canListBots && ( + + You do not have permission to access Bots. Missing role permissions:{' '} + bot.list + + )} ); diff --git a/web/packages/teleport/src/Bots/List/EmptyState/EmptyState.tsx b/web/packages/teleport/src/Bots/List/EmptyState/EmptyState.tsx index 597a3f3faabae..990578de5c196 100644 --- a/web/packages/teleport/src/Bots/List/EmptyState/EmptyState.tsx +++ b/web/packages/teleport/src/Bots/List/EmptyState/EmptyState.tsx @@ -206,12 +206,20 @@ export const BotTiles = () => { {integrationsTop.map(integration => ( - + ))} {integrationsBottom.map(integration => ( - + ))} diff --git a/web/packages/teleport/src/features.tsx b/web/packages/teleport/src/features.tsx index 4fbe0a12dbd09..7b19c2aa33856 100644 --- a/web/packages/teleport/src/features.tsx +++ b/web/packages/teleport/src/features.tsx @@ -247,8 +247,8 @@ export class FeatureBots implements TeleportFeature { component: Bots, }; - hasAccess(flags: FeatureFlags) { - return flags.listBots; + hasAccess() { + return true; } navigationItem = { From 5ab4b693361fffff3721e0fc960c8571ceee1f95 Mon Sep 17 00:00:00 2001 From: Tiago Silva Date: Thu, 12 Dec 2024 22:34:03 +0000 Subject: [PATCH 21/22] Fixes Kubernetes Service using expired credentials (#50074) The Kubernetes service occasionally fails to forward requests to EKS clusters or retrieve the cluster schema due to AWS rejecting the request with an "expired token" error. EKS access tokens are generated using STS presigned URLs, which include details such as the cluster, backend credentials, and assumed roles. By default, these tokens are valid for 15 minutes, and the Kubernetes service refreshes them every $(15 - 1) / 2 = 7\text{ }minutes$. However, our cloud SDK caches the underlying `aws.Session`, particularly those with assumed roles, for 15 minutes. This leads to a scenario where the token is refreshed a second time at approximately 14 minutes, close to the token's 15-minute validity. If the underlying credentials expire before the next token refresh, given that they were reused from the previous query and cached since then, it results in the Kubernetes Service considering the token valid (since it is a Base64-encoded presigned URL without knowledge about the credentials), but AWS EKS cluster rejects the request, treating the credentials as expired. This PR adds an option to disable cache for EKS STS token signing which results in creating a session per EKS cluster sign process. Bellow one can find the error message EKS returns. ``` 2024-12-09T17:00:15Z ERRO [KUBERNETE] Failed to update cluster schema error:[ ERROR REPORT: Original Error: *errors.StatusError the server has asked for the client to provide credentials Stack Trace: github.com/gravitational/teleport/lib/kube/proxy/scheme.go:140 github.com/gravitational/teleport/lib/kube/proxy.newClusterSchemaBuilder github.com/gravitational/teleport/lib/kube/proxy/cluster_details.go:193 github.com/gravitational/teleport/lib/kube/proxy.newClusterDetails.func1 runtime/asm_amd64.s:1695 runtime.goexit User Message: the server has asked for the client to provide credentials] pid:7.1 start_time:2024-12-09T17:00:15Z proxy/cluster_details.go:210 2024-12-09T17:00:24Z ERRO [KUBERNETE] Failed to update cluster schema error:[ ERROR REPORT: Original Error: *errors.StatusError the server has asked for the client to provide credentials Stack Trace: github.com/gravitational/teleport/lib/kube/proxy/scheme.go:140 github.com/gravitational/teleport/lib/kube/proxy.newClusterSchemaBuilder github.com/gravitational/teleport/lib/kube/proxy/cluster_details.go:193 github.com/gravitational/teleport/lib/kube/proxy.newClusterDetails.func1 runtime/asm_amd64.s:1695 runtime.goexit User Message: the server has asked for the client to provide credentials] pid:7.1 start_time:2024-12-09T17:00:24Z proxy/cluster_details.go:210 ``` Changelog: Fixes an intermittent EKS authentication failure when dealing with EKS auto-discovery. Signed-off-by: Tiago Silva --- lib/cloud/clients.go | 59 +++++++++++++++++++++++++------ lib/kube/proxy/cluster_details.go | 9 +++-- 2 files changed, 53 insertions(+), 15 deletions(-) diff --git a/lib/cloud/clients.go b/lib/cloud/clients.go index ac21c4c89c045..93bb27f90b246 100644 --- a/lib/cloud/clients.go +++ b/lib/cloud/clients.go @@ -390,6 +390,9 @@ type awsOptions struct { // maxRetries is the maximum number of retries to use for the session. maxRetries *int + + // withoutSessionCache disables the session cache for the AWS session. + withoutSessionCache bool } func (a *awsOptions) checkAndSetDefaults() error { @@ -421,6 +424,13 @@ func WithAssumeRole(roleARN, externalID string) AWSOptionsFn { } } +// WithoutSessionCache disables the session cache for the AWS session. +func WithoutSessionCache() AWSOptionsFn { + return func(options *awsOptions) { + options.withoutSessionCache = true + } +} + // WithAssumeRoleFromAWSMeta extracts options needed from AWS metadata for // assuming an AWS role. func WithAssumeRoleFromAWSMeta(meta types.AWS) AWSOptionsFn { @@ -487,7 +497,7 @@ func (c *cloudClients) GetAWSSession(ctx context.Context, region string, opts .. } var err error if options.baseSession == nil { - options.baseSession, err = c.getAWSSessionForRegion(region, options) + options.baseSession, err = c.getAWSSessionForRegion(ctx, region, options) if err != nil { return nil, trace.Wrap(err) } @@ -767,17 +777,12 @@ func awsAmbientSessionProvider(ctx context.Context, region string) (*awssession. } // getAWSSessionForRegion returns AWS session for the specified region. -func (c *cloudClients) getAWSSessionForRegion(region string, opts awsOptions) (*awssession.Session, error) { +func (c *cloudClients) getAWSSessionForRegion(ctx context.Context, region string, opts awsOptions) (*awssession.Session, error) { if err := opts.checkAndSetDefaults(); err != nil { return nil, trace.Wrap(err) } - cacheKey := awsSessionCacheKey{ - region: region, - integration: opts.integration, - } - - sess, err := utils.FnCacheGet(context.Background(), c.awsSessionsCache, cacheKey, func(ctx context.Context) (*awssession.Session, error) { + createSession := func(ctx context.Context) (*awssession.Session, error) { if opts.credentialsSource == credentialsSourceIntegration { if c.awsIntegrationSessionProviderFn == nil { return nil, trace.BadParameter("missing aws integration session provider") @@ -791,6 +796,30 @@ func (c *cloudClients) getAWSSessionForRegion(region string, opts awsOptions) (* logrus.Debugf("Initializing AWS session for region %v using environment credentials.", region) session, err := awsAmbientSessionProvider(ctx, region) return session, trace.Wrap(err) + } + + if opts.withoutSessionCache { + sess, err := createSession(ctx) + if err != nil { + return nil, trace.Wrap(err) + } + if opts.customRetryer != nil || opts.maxRetries != nil { + return sess.Copy(&aws.Config{ + Retryer: opts.customRetryer, + MaxRetries: opts.maxRetries, + }), nil + } + return sess, trace.Wrap(err) + } + + cacheKey := awsSessionCacheKey{ + region: region, + integration: opts.integration, + } + + sess, err := utils.FnCacheGet(ctx, c.awsSessionsCache, cacheKey, func(ctx context.Context) (*awssession.Session, error) { + session, err := createSession(ctx) + return session, trace.Wrap(err) }) if err != nil { return nil, trace.Wrap(err) @@ -810,6 +839,16 @@ func (c *cloudClients) getAWSSessionForRole(ctx context.Context, region string, return nil, trace.Wrap(err) } + createSession := func(ctx context.Context) (*awssession.Session, error) { + stsClient := sts.New(options.baseSession) + return newSessionWithRole(ctx, stsClient, region, options.assumeRoleARN, options.assumeRoleExternalID) + } + + if options.withoutSessionCache { + session, err := createSession(ctx) + return session, trace.Wrap(err) + } + cacheKey := awsSessionCacheKey{ region: region, integration: options.integration, @@ -817,8 +856,8 @@ func (c *cloudClients) getAWSSessionForRole(ctx context.Context, region string, externalID: options.assumeRoleExternalID, } return utils.FnCacheGet(ctx, c.awsSessionsCache, cacheKey, func(ctx context.Context) (*awssession.Session, error) { - stsClient := sts.New(options.baseSession) - return newSessionWithRole(ctx, stsClient, region, options.assumeRoleARN, options.assumeRoleExternalID) + session, err := createSession(ctx) + return session, trace.Wrap(err) }) } diff --git a/lib/kube/proxy/cluster_details.go b/lib/kube/proxy/cluster_details.go index b74e81f1b5ddb..c949494ac982d 100644 --- a/lib/kube/proxy/cluster_details.go +++ b/lib/kube/proxy/cluster_details.go @@ -131,11 +131,9 @@ func newClusterDetails(ctx context.Context, cfg clusterDetailsConfig) (_ *kubeDe go dynLabels.Start() } - kubeClient := creds.getKubeClient() - var isClusterOffline bool // Create the codec factory and the list of supported types for RBAC. - codecFactory, rbacSupportedTypes, gvkSupportedRes, err := newClusterSchemaBuilder(cfg.log, kubeClient) + codecFactory, rbacSupportedTypes, gvkSupportedRes, err := newClusterSchemaBuilder(cfg.log, creds.getKubeClient()) if err != nil { cfg.log.WithError(err).Warn("Failed to create cluster schema. Possibly the cluster is offline.") // If the cluster is offline, we will not be able to create the codec factory @@ -145,7 +143,7 @@ func newClusterDetails(ctx context.Context, cfg clusterDetailsConfig) (_ *kubeDe isClusterOffline = true } - kubeVersion, err := kubeClient.Discovery().ServerVersion() + kubeVersion, err := creds.getKubeClient().Discovery().ServerVersion() if err != nil { cfg.log.WithError(err).Warn("Failed to get Kubernetes cluster version. Possibly the cluster is offline.") } @@ -204,7 +202,7 @@ func newClusterDetails(ctx context.Context, cfg clusterDetailsConfig) (_ *kubeDe continue } - kubeVersion, err := kubeClient.Discovery().ServerVersion() + kubeVersion, err := creds.getKubeClient().Discovery().ServerVersion() if err != nil { cfg.log.WithError(err).Warn("Failed to get Kubernetes cluster version. Possibly the cluster is offline.") } @@ -342,6 +340,7 @@ func getAWSClientRestConfig(cloudClients cloud.Clients, clock clockwork.Clock, r region := cluster.GetAWSConfig().Region opts := []cloud.AWSOptionsFn{ cloud.WithAmbientCredentials(), + cloud.WithoutSessionCache(), } if awsAssume := getAWSResourceMatcherToCluster(cluster, resourceMatchers); awsAssume != nil { opts = append(opts, cloud.WithAssumeRole(awsAssume.AssumeRoleARN, awsAssume.ExternalID)) From b3fbbc2cf9d98de50f29a34b13c9c60a74b347c1 Mon Sep 17 00:00:00 2001 From: Trent Clarke Date: Fri, 13 Dec 2024 09:51:01 +1100 Subject: [PATCH 22/22] Filter IC Permission Sets based on access (#49936) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Filter IC Permission Sets based on access If a user is granted access to an IC Permission Set via an access request, the UI treats the referenced account as if all Permission Sets are granted. This hides the requestable Permission Sets from the user, making it impossible for a user to requests more Permission Sets on that account. This patch filters the Permission Sets delivered to the UI based on whether the user already has access the Permission Sets and marks any requestable Permission Sets on the account. This provides the UI with enough information to decide how to display the Permission Set list in order to get around the issue. * Update lib/auth/auth_with_roles.go Co-authored-by: Marek Smoliński * Update auth_with_roles.go --------- Co-authored-by: Marek Smoliński --- api/types/app.go | 2 +- lib/auth/auth_with_roles.go | 78 +++++++- lib/auth/auth_with_roles_test.go | 203 ++++++++++++++++++++ lib/services/local/identitycenter_events.go | 4 +- lib/services/unified_resource.go | 52 +++-- 5 files changed, 306 insertions(+), 33 deletions(-) diff --git a/api/types/app.go b/api/types/app.go index f24ea7d8cf200..b3f62147e8cac 100644 --- a/api/types/app.go +++ b/api/types/app.go @@ -474,7 +474,7 @@ func (a *AppV3) GetDisplayName() string { if a.Spec.IdentityCenter == nil { return "" } - return a.GetName() + return a.Metadata.Description } // IsEqual determines if two application resources are equivalent to one another. diff --git a/lib/auth/auth_with_roles.go b/lib/auth/auth_with_roles.go index fa4deaeab7c51..e5fdaa9dab8ce 100644 --- a/lib/auth/auth_with_roles.go +++ b/lib/auth/auth_with_roles.go @@ -40,6 +40,8 @@ import ( "github.com/gravitational/teleport/api/constants" apidefaults "github.com/gravitational/teleport/api/defaults" auditlogpb "github.com/gravitational/teleport/api/gen/proto/go/teleport/auditlog/v1" + headerv1 "github.com/gravitational/teleport/api/gen/proto/go/teleport/header/v1" + identitycenterv1 "github.com/gravitational/teleport/api/gen/proto/go/teleport/identitycenter/v1" mfav1 "github.com/gravitational/teleport/api/gen/proto/go/teleport/mfa/v1" "github.com/gravitational/teleport/api/internalutils/stream" "github.com/gravitational/teleport/api/metadata" @@ -1272,7 +1274,7 @@ func (c *resourceAccess) checkAccess(resource types.ResourceWithLabels, filter s return false, nil } - // check access normally if base checker doesnt exist + // check access normally if base checker doesn't exist if c.baseAuthChecker == nil { if err := c.accessChecker.CanAccess(resource); err != nil { if trace.IsAccessDenied(err) { @@ -1474,6 +1476,16 @@ func (a *ServerWithRoles) ListUnifiedResources(ctx context.Context, req *proto.L } r.Logins = logins } else if d := r.GetAppServer(); d != nil { + // Apps representing an Identity Center Account have a collection of Permission Sets + // that can be thought of as individually-addressable sub-resources. To present a consitent + // view of the account we check access for each Permission Set, filter out those that have + // no access and treat the whole app as requiring an access request if _any_ of the contained + // permission sets require one. + if err := a.filterICPermissionSets(r, d.GetApp(), resourceAccess); err != nil { + log.WithError(err).WithField("resource", d.GetApp().GetName()).Warn("Unable to filter ") + continue + } + logins, err := checker.GetAllowedLoginsForResource(d.GetApp()) if err != nil { log.WithError(err).WithField("resource", d.GetApp().GetName()).Warn("Unable to determine logins for app") @@ -1490,6 +1502,56 @@ func (a *ServerWithRoles) ListUnifiedResources(ctx context.Context, req *proto.L }, nil } +func (a *ServerWithRoles) filterICPermissionSets(r *proto.PaginatedResource, app types.Application, checker *resourceAccess) error { + appV3, ok := app.(*types.AppV3) + if !ok { + return trace.BadParameter("resource must be an app") + } + + pss := appV3.Spec.IdentityCenter.GetPermissionSets() + if pss == nil { + return nil + } + + assignment := services.IdentityCenterAccountAssignment{ + AccountAssignment: &identitycenterv1.AccountAssignment{ + Kind: types.KindIdentityCenterAccountAssignment, + Version: types.V1, + Metadata: &headerv1.Metadata{}, + Spec: &identitycenterv1.AccountAssignmentSpec{ + AccountId: appV3.GetName(), + PermissionSet: &identitycenterv1.PermissionSetInfo{}, + }, + }, + } + permissionSetQuery := assignment.Spec.PermissionSet + checkable := types.Resource153ToResourceWithLabels(assignment) + + var output []*types.IdentityCenterPermissionSet + for _, ps := range pss { + assignment.Metadata.Name = ps.AssignmentID + permissionSetQuery.Arn = ps.ARN + + hasAccess, err := checker.checkAccess(checkable, services.MatchResourceFilter{ + ResourceKind: types.KindIdentityCenterAccountAssignment, + }) + if err != nil { + return trace.Wrap(err) + } + + if !hasAccess { + continue + } + output = append(output, ps) + if _, requestable := checker.requestableMap[ps.AssignmentID]; requestable { + r.RequiresRequest = true + } + } + appV3.Spec.IdentityCenter.PermissionSets = output + + return nil +} + func (a *ServerWithRoles) GetNodes(ctx context.Context, namespace string) ([]types.Server, error) { if err := a.actionNamespace(namespace, types.KindNode, types.VerbList); err != nil { return nil, trace.Wrap(err) @@ -1831,8 +1893,18 @@ func (r resourceChecker) CanAccess(resource types.Resource) error { return r.CheckAccess(rr, state) case types.Resource153Unwrapper: - if checkable, ok := rr.(services.AccessCheckable); ok { - return r.CheckAccess(checkable, state) + checkable, isCheckable := rr.(services.AccessCheckable) + if isCheckable { + switch unwrapped := rr.Unwrap().(type) { + case services.IdentityCenterAccount: + return r.CheckAccess(checkable, state, services.NewIdentityCenterAccountMatcher(unwrapped)) + + case services.IdentityCenterAccountAssignment: + return r.CheckAccess(checkable, state, services.NewIdentityCenterAccountAssignmentMatcher(unwrapped)) + + default: + return r.CheckAccess(checkable, state) + } } } diff --git a/lib/auth/auth_with_roles_test.go b/lib/auth/auth_with_roles_test.go index dc4ba4ee2e647..1576986648191 100644 --- a/lib/auth/auth_with_roles_test.go +++ b/lib/auth/auth_with_roles_test.go @@ -9628,3 +9628,206 @@ func TestRoleRequestReasonModeValidation(t *testing.T) { }) } } + +func testUserName(testName string) string { + return strings.ReplaceAll(testName, " ", "_") +} + +func TestFilterIdentityCenterPermissionSets(t *testing.T) { + const ( + allAccessRoleName = "all-access" + accountID = "1234567890" + permissionSetArnPrefix = "aws:awn:test:permission:set:" + ) + + // GIVEN a test cluster... + ctx := context.Background() + srv := newTestTLSServer(t) + s := newTestServerWithRoles(t, srv.AuthServer, types.RoleAdmin) + + // GIVEN an Identity Center Account with some associated Permission Set + // resources + permissionSets := []*identitycenterv1.PermissionSetInfo{ + { + Name: "PS One", + Arn: permissionSetArnPrefix + "one", + AssignmentId: accountID + "-" + "ps_one", + }, + { + Name: "PS Two", + Arn: permissionSetArnPrefix + "two", + AssignmentId: accountID + "-" + "ps_two", + }, + { + Name: "PS Three", + Arn: permissionSetArnPrefix + "ps_three", + AssignmentId: accountID + "-" + "ps_three", + }, + } + + _, err := s.authServer.CreateIdentityCenterAccount(ctx, + services.IdentityCenterAccount{ + Account: &identitycenterv1.Account{ + Kind: types.KindIdentityCenterAccount, + Version: types.V1, + Metadata: &headerv1.Metadata{ + Name: accountID, + Labels: map[string]string{ + types.OriginLabel: apicommon.OriginAWSIdentityCenter, + }, + }, + Spec: &identitycenterv1.AccountSpec{ + Id: accountID, + Arn: "aws:arn:test:account", + Name: "Test Account", + Description: "An account for testing", + PermissionSetInfo: permissionSets, + }, + }, + }) + require.NoError(t, err) + + // GIVEN a role that allows access to all permission sets on the target + // Identity Center account + roleAccessAll, err := types.NewRole(allAccessRoleName, types.RoleSpecV6{ + Allow: types.RoleConditions{ + AccountAssignments: []types.IdentityCenterAccountAssignment{ + { + Account: accountID, + PermissionSet: types.Wildcard, + }, + }, + }, + }) + require.NoError(t, err, "Constructing role should succeed") + _, err = srv.Auth().CreateRole(ctx, roleAccessAll) + require.NoError(t, err, "Cretaing role should succeed") + + withRequesterRole := WithRoleMutator(func(role types.Role) { + r := role.(*types.RoleV6) + r.Spec.Allow.Request = &types.AccessRequestConditions{ + SearchAsRoles: []string{allAccessRoleName}, + } + }) + + // EXPECT that the IC Account has made it to the cache + inlineEventually(t, + func() bool { + testAssignments, _, err := srv.Auth().ListIdentityCenterAccounts( + ctx, 100, &pagination.PageRequestToken{}) + require.NoError(t, err) + return len(testAssignments) == 1 + }, + 5*time.Second, 200*time.Millisecond, + "Target resource missing from cache") + + testCases := []struct { + name string + roleModifiers []CreateUserAndRoleOption + includeRequestable bool + expectedPSs []*types.IdentityCenterPermissionSet + expectedRequireRequest require.BoolAssertionFunc + }{ + { + name: "basic access", + roleModifiers: []CreateUserAndRoleOption{ + withAccountAssignment(types.Allow, accountID, permissionSets[0].Arn), + withAccountAssignment(types.Allow, accountID, permissionSets[1].Arn), + }, + expectedPSs: []*types.IdentityCenterPermissionSet{ + paginatedAppPermissionSet(permissionSets[0]), + paginatedAppPermissionSet(permissionSets[1]), + }, + expectedRequireRequest: require.False, + }, + { + name: "ignore search as roles when disabled", + roleModifiers: []CreateUserAndRoleOption{ + withAccountAssignment(types.Allow, accountID, permissionSets[1].Arn), + withRequesterRole, + }, + includeRequestable: false, + expectedPSs: []*types.IdentityCenterPermissionSet{ + paginatedAppPermissionSet(permissionSets[1]), + }, + expectedRequireRequest: require.False, + }, + { + name: "requestable access", + roleModifiers: []CreateUserAndRoleOption{ + withAccountAssignment(types.Allow, accountID, permissionSets[1].Arn), + withRequesterRole, + }, + includeRequestable: true, + expectedPSs: []*types.IdentityCenterPermissionSet{ + paginatedAppPermissionSet(permissionSets[0]), + paginatedAppPermissionSet(permissionSets[1]), + paginatedAppPermissionSet(permissionSets[2]), + }, + expectedRequireRequest: require.True, + }, + { + name: "no access", + roleModifiers: []CreateUserAndRoleOption{ + withAccountAssignment(types.Allow, accountID, "some-non-existent-ps"), + }, + expectedRequireRequest: require.False, + }, + } + + for _, test := range testCases { + t.Run(test.name, func(t *testing.T) { + // GIVEN a user who has a role that allows a test-defined level of + // Identity Center access + user, _, err := CreateUserAndRole(srv.Auth(), testUserName(test.name), + nil, nil, test.roleModifiers...) + require.NoError(t, err) + + // GIVEN an auth client using the above user + identity := TestUser(user.GetName()) + clt, err := srv.NewClient(identity) + require.NoError(t, err) + t.Cleanup(func() { clt.Close() }) + + // WHEN I list the unified resources, with a filter specifically for + // the account resource defined above... + resp, err := clt.ListUnifiedResources(ctx, &proto.ListUnifiedResourcesRequest{ + Kinds: []string{types.KindApp}, + Labels: map[string]string{ + types.OriginLabel: apicommon.OriginAWSIdentityCenter, + }, + UseSearchAsRoles: test.includeRequestable, + IncludeRequestable: test.includeRequestable, + IncludeLogins: true, + SortBy: types.SortBy{IsDesc: true, Field: types.ResourceMetadataName}, + }) + + // EXPECT that the listing succeeds and returns a single resource + require.NoError(t, err) + require.Len(t, resp.Resources, 1, "Must return exactly one resource") + + // EXPECT that the contained resource has the test-defined value for + // the RequiresRequest flag + resource := resp.Resources[0] + test.expectedRequireRequest(t, resource.RequiresRequest) + + // EXPECT that the returned resource is an App + appServer := resp.Resources[0].GetAppServer() + require.NotNil(t, appServer, "Expected resource to be an app") + app := appServer.GetApp() + + // EXPECT that the app PermissionSets are filtered to the test-defined + // list + require.ElementsMatch(t, + test.expectedPSs, app.GetIdentityCenter().PermissionSets) + }) + } +} + +func paginatedAppPermissionSet(src *identitycenterv1.PermissionSetInfo) *types.IdentityCenterPermissionSet { + return &types.IdentityCenterPermissionSet{ + ARN: src.Arn, + Name: src.Name, + AssignmentID: src.AssignmentId, + } +} diff --git a/lib/services/local/identitycenter_events.go b/lib/services/local/identitycenter_events.go index b8cc8933b200b..967db5ae731bc 100644 --- a/lib/services/local/identitycenter_events.go +++ b/lib/services/local/identitycenter_events.go @@ -65,7 +65,7 @@ func (p *identityCenterAccountParser) parse(event backend.Event) (types.Resource if err != nil { return nil, trace.Wrap(err) } - return types.Resource153ToLegacy(services.IdentityCenterAccount{Account: r}), nil + return types.Resource153ToResourceWithLabels(services.IdentityCenterAccount{Account: r}), nil default: return nil, trace.BadParameter("event %v is not supported", event.Type) } @@ -109,7 +109,7 @@ func (p *identityCenterPrincipalAssignmentParser) parse(event backend.Event) (ty if err != nil { return nil, trace.Wrap(err) } - return types.Resource153ToLegacy(r), nil + return types.Resource153ToResourceWithLabels(r), nil default: return nil, trace.BadParameter("event %v is not supported", event.Type) diff --git a/lib/services/unified_resource.go b/lib/services/unified_resource.go index b3228849a8a25..2cf2e1c89995f 100644 --- a/lib/services/unified_resource.go +++ b/lib/services/unified_resource.go @@ -20,7 +20,6 @@ package services import ( "context" - "maps" "strings" "sync" "time" @@ -1056,37 +1055,36 @@ func makePaginatedIdentityCenterAccount(resourceKind string, resource types.Reso } } - protoResource := &proto.PaginatedResource{ - Resource: &proto.PaginatedResource_AppServer{ - AppServer: &types.AppServerV3{ - Kind: types.KindAppServer, + appServer := &types.AppServerV3{ + Kind: types.KindAppServer, + Version: types.V3, + Metadata: resource.GetMetadata(), + Spec: types.AppServerSpecV3{ + App: &types.AppV3{ + Kind: types.KindApp, + SubKind: types.KindIdentityCenterAccount, Version: types.V3, - Metadata: resource.GetMetadata(), - Spec: types.AppServerSpecV3{ - App: &types.AppV3{ - Kind: types.KindApp, - SubKind: types.KindIdentityCenterAccount, - Version: types.V3, - Metadata: types.Metadata{ - Name: acct.Spec.Name, - Description: acct.Spec.Description, - Labels: maps.Clone(acct.Metadata.Labels), - }, - Spec: types.AppSpecV3{ - URI: acct.Spec.StartUrl, - PublicAddr: acct.Spec.StartUrl, - AWS: &types.AppAWS{ - ExternalID: acct.Spec.Id, - }, - IdentityCenter: &types.AppIdentityCenter{ - AccountID: acct.Spec.Id, - PermissionSets: pss, - }, - }, + Metadata: types.Metadata153ToLegacy(acct.Metadata), + Spec: types.AppSpecV3{ + URI: acct.Spec.StartUrl, + PublicAddr: acct.Spec.StartUrl, + AWS: &types.AppAWS{ + ExternalID: acct.Spec.Id, + }, + IdentityCenter: &types.AppIdentityCenter{ + AccountID: acct.Spec.Id, + PermissionSets: pss, }, }, }, }, + } + appServer.Metadata.Description = acct.Spec.Name + + protoResource := &proto.PaginatedResource{ + Resource: &proto.PaginatedResource_AppServer{ + AppServer: appServer, + }, RequiresRequest: requiresRequest, }