diff --git a/api/accessrequest/access_request.go b/api/accessrequest/access_request.go index 1af10ac4400d3..7b82cfc8f25a6 100644 --- a/api/accessrequest/access_request.go +++ b/api/accessrequest/access_request.go @@ -58,7 +58,7 @@ func GetResourceDetails(ctx context.Context, clusterName string, lister client.L var resourceIDs []types.ResourceID for _, resourceID := range ids { // We're interested in hostname or friendly name details. These apply to - // nodes, app servers, and user groups. + // nodes, app servers, user groups and Identity Center resources. switch resourceID.Kind { case types.KindNode, types.KindApp, types.KindUserGroup, types.KindIdentityCenterAccount: resourceIDs = append(resourceIDs, resourceID) 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= 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/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/api/types/constants.go b/api/types/constants.go index 0035a69dddbde..b274b1871de4f 100644 --- a/api/types/constants.go +++ b/api/types/constants.go @@ -1304,6 +1304,8 @@ var RequestableResourceKinds = []string{ KindKubeCertificateSigningRequest, KindKubeIngress, KindSAMLIdPServiceProvider, + KindIdentityCenterAccount, + KindIdentityCenterAccountAssignment, } // The list below needs to be kept in sync with `kubernetesResourceKindOptions` diff --git a/api/types/role.go b/api/types/role.go index c24b72b84ac8b..28d7e1dda45c3 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. @@ -619,6 +626,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 { @@ -1258,6 +1284,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) @@ -1973,6 +2000,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) } @@ -2026,6 +2055,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/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", 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= diff --git a/build.assets/Makefile b/build.assets/Makefile index ecb0f7674c3f4..21e40af91d59e 100644 --- a/build.assets/Makefile +++ b/build.assets/Makefile @@ -35,19 +35,7 @@ ifneq ("$(KUBECONFIG)","") DOCKERFLAGS := $(DOCKERFLAGS) -v $(KUBECONFIG):/mnt/kube/config -e KUBECONFIG=/mnt/kube/config -e TEST_KUBE=$(TEST_KUBE) endif -# conditionally force the use of UID/GID 1000:1000 if we're running in Github Actions (in which case CI env var will be set) ifeq ("$(CI)","true") -# The UID/GID of the runner user on ARC runners is 1001, not 1000 -# This var is currently only set for ARC runners via https://github.com/gravitational/cloud-terraform/pull/2473 -ifeq ("$(CI_SYSTEM)","ARC") -UID := 1001 -GID := 1001 -NOROOT := -u 1001:1001 -else -UID := 1000 -GID := 1000 -NOROOT := -u 1000:1000 -endif # if running in CI and the GOCACHE environment variable is not set, set it to a sensible default ifeq ("$(GOCACHE)",) GOCACHE := /go/cache 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= 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%", 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 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/e b/e index 6ddf1da69dcc9..e58eb7edbe80d 160000 --- a/e +++ b/e @@ -1 +1 @@ -Subproject commit 6ddf1da69dcc9217eea30dd793c6b264ea59768d +Subproject commit e58eb7edbe80d991121b58cd35cc959b492406a5 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/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/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/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= 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= 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) 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/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/auth/auth.go b/lib/auth/auth.go index 5f21d3b5884ec..befe2993f38d2 100644 --- a/lib/auth/auth.go +++ b/lib/auth/auth.go @@ -5130,47 +5130,11 @@ func (a *Server) CreateAccessRequestV2(ctx context.Context, req types.AccessRequ } // Look for user groups and associated applications to the request. - requestedResourceIDs := req.GetRequestedResourceIDs() - var additionalResources []types.ResourceID - - var userGroups []types.ResourceID - existingApps := map[string]struct{}{} - for _, resource := range requestedResourceIDs { - switch resource.Kind { - case types.KindApp: - existingApps[resource.Name] = struct{}{} - case types.KindUserGroup: - userGroups = append(userGroups, resource) - } - } - - for _, resource := range userGroups { - if resource.Kind != types.KindUserGroup { - continue - } - - userGroup, err := a.GetUserGroup(ctx, resource.Name) - if err != nil { - return nil, trace.Wrap(err) - } - - for _, app := range userGroup.GetApplications() { - // Only add to the request if we haven't already added it. - if _, ok := existingApps[app]; !ok { - additionalResources = append(additionalResources, types.ResourceID{ - ClusterName: resource.ClusterName, - Kind: types.KindApp, - Name: app, - }) - existingApps[app] = struct{}{} - } - } - } - - if len(additionalResources) > 0 { - requestedResourceIDs = append(requestedResourceIDs, additionalResources...) - req.SetRequestedResourceIDs(requestedResourceIDs) + requestedResourceIDs, err := a.appendImplicitlyRequiredResources(ctx, req.GetRequestedResourceIDs()) + if err != nil { + return nil, trace.Wrap(err, "adding additional implicitly required resources") } + req.SetRequestedResourceIDs(requestedResourceIDs) if req.GetDryRun() { _, promotions := a.generateAccessRequestPromotions(ctx, req) @@ -5200,7 +5164,7 @@ func (a *Server) CreateAccessRequestV2(ctx context.Context, req types.AccessRequ } } - err := a.emitter.EmitAuditEvent(a.closeCtx, &apievents.AccessRequestCreate{ + err = a.emitter.EmitAuditEvent(a.closeCtx, &apievents.AccessRequestCreate{ Metadata: apievents.Metadata{ Type: events.AccessRequestCreateEvent, Code: events.AccessRequestCreateCode, @@ -5282,6 +5246,69 @@ func (a *Server) CreateAccessRequestV2(ctx context.Context, req types.AccessRequ return req, nil } +// appendImplicitlyRequiredResources examines the set of requested resources and adds +// any extra resources that are implicitly required by the request. +func (a *Server) appendImplicitlyRequiredResources(ctx context.Context, resources []types.ResourceID) ([]types.ResourceID, error) { + addedApps := utils.NewSet[string]() + var userGroups []types.ResourceID + var accountAssignments []types.ResourceID + + for _, resource := range resources { + switch resource.Kind { + case types.KindApp: + addedApps.Add(resource.Name) + case types.KindUserGroup: + userGroups = append(userGroups, resource) + case types.KindIdentityCenterAccountAssignment: + accountAssignments = append(accountAssignments, resource) + } + } + + for _, resource := range userGroups { + userGroup, err := a.GetUserGroup(ctx, resource.Name) + if err != nil { + return nil, trace.Wrap(err) + } + + for _, app := range userGroup.GetApplications() { + // Only add to the request if we haven't already added it. + if !addedApps.Contains(app) { + resources = append(resources, types.ResourceID{ + ClusterName: resource.ClusterName, + Kind: types.KindApp, + Name: app, + }) + addedApps.Add(app) + } + } + } + + icAccounts := utils.NewSet[string]() + for _, resource := range accountAssignments { + // The UI needs access to the account associated with an Account Assignment + // in order to display the enclosing Account, otherwise the user will not + // be able to see their assigned permission sets. + assignmentID := services.IdentityCenterAccountAssignmentID(resource.Name) + asmt, err := a.Services.IdentityCenter.GetAccountAssignment(ctx, assignmentID) + if err != nil { + return nil, trace.Wrap(err, "fetching identity center account assignment") + } + + if icAccounts.Contains(asmt.GetSpec().GetAccountId()) { + continue + } + + resources = append(resources, types.ResourceID{ + ClusterName: resource.ClusterName, + Kind: types.KindIdentityCenterAccount, + Name: asmt.GetSpec().GetAccountId(), + }) + icAccounts.Add(asmt.GetSpec().GetAccountId()) + } + + return resources, nil +} + // generateAccessRequestPromotions will return potential access list promotions for an access request. On error, this function will log // the error and return whatever it has. The caller is expected to deal with the possibility of a nil promotions object. func (a *Server) generateAccessRequestPromotions(ctx context.Context, req types.AccessRequest) (types.AccessRequest, *types.AccessRequestAllowedPromotions) { 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/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/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/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/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/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)) 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/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) 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/service/service_test.go b/lib/service/service_test.go index 1c05149527304..1c4d38c14d6ba 100644 --- a/lib/service/service_test.go +++ b/lib/service/service_test.go @@ -295,7 +295,10 @@ func TestMonitor(t *testing.T) { process.BroadcastEvent(Event{Name: TeleportOKEvent, Payload: teleport.ComponentAuth}) require.NoError(t, process.Start()) - t.Cleanup(func() { require.NoError(t, process.Close()) }) + t.Cleanup(func() { + require.NoError(t, process.Close()) + require.NoError(t, process.Wait()) + }) diagAddr, err := process.DiagnosticAddr() require.NoError(t, err) @@ -1632,7 +1635,10 @@ func TestDebugServiceStartSocket(t *testing.T) { require.NoError(t, err) require.NoError(t, process.Start()) - t.Cleanup(func() { require.NoError(t, process.Close()) }) + t.Cleanup(func() { + require.NoError(t, process.Close()) + require.NoError(t, process.Wait()) + }) httpClient := &http.Client{ Timeout: 10 * time.Second, @@ -1746,6 +1752,7 @@ func TestInstanceMetadata(t *testing.T) { require.NoError(t, err) t.Cleanup(func() { require.NoError(t, process.Close()) + require.NoError(t, process.Wait()) }) if tc.expectCloudLabels { 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) + }) + } +} 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/presets.go b/lib/services/presets.go index f9b996a13ee9b..1019dbd943274 100644 --- a/lib/services/presets.go +++ b/lib/services/presets.go @@ -194,6 +194,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()), }, }, }, 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, } 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.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/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/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) } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 4f4d986da4820..94b69155e300a 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.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,12 +2873,12 @@ 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==} + app-builder-lib@25.1.8: + resolution: {integrity: sha512-pCqe7dfsQFBABC1jeKZXQWhGcCPF3rPCXDdfqVKjIeWBcXzyC1iOWZdfFhGl+S9MyE/k//DFmC6FzuGAUudNDg==} engines: {node: '>=14.0.0'} peerDependencies: - dmg-builder: 25.1.7 - electron-builder-squirrel-windows: 25.1.7 + dmg-builder: 25.1.8 + electron-builder-squirrel-windows: 25.1.8 append-transform@2.0.0: resolution: {integrity: sha512-7yeyCEurROLQJFv5Xj4lEGTy0borxepjFv1g22oAdqFu//SrAlDl1O1Nxx15SH1RoliUml6p8dwJW9jvZughhg==} @@ -3578,8 +3578,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==} @@ -3643,11 +3643,11 @@ 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.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 +3668,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 +9410,7 @@ 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.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 @@ -9426,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.7(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.7) + 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 @@ -10289,9 +10289,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.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.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 @@ -10373,9 +10373,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.8(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.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 @@ -10384,13 +10384,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.8(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.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.7(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 @@ -10429,7 +10429,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/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. 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 diff --git a/web/packages/shared/components/MissingPermissionsTooltip/MissingPermissionsTooltip.tsx b/web/packages/shared/components/MissingPermissionsTooltip/MissingPermissionsTooltip.tsx index aaef46ec0baf6..f414c2526318f 100644 --- a/web/packages/shared/components/MissingPermissionsTooltip/MissingPermissionsTooltip.tsx +++ b/web/packages/shared/components/MissingPermissionsTooltip/MissingPermissionsTooltip.tsx @@ -20,14 +20,22 @@ import { Box, Text, Flex } from 'design'; export const MissingPermissionsTooltip = ({ missingPermissions, + requiresAll = true, }: { missingPermissions: string[]; + requiresAll?: boolean; }) => { return ( You do not have all of the required permissions. - Missing permissions: + {requiresAll ? ( + Missing permissions: + ) : ( + + You must have at least one of these role permissions: + + )} {missingPermissions.map(perm => ( {perm} 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/Integrations/Integrations.tsx b/web/packages/teleport/src/Integrations/Integrations.tsx index e528a252db7d0..c51acdec84563 100644 --- a/web/packages/teleport/src/Integrations/Integrations.tsx +++ b/web/packages/teleport/src/Integrations/Integrations.tsx @@ -41,7 +41,6 @@ export function Integrations() { const { attempt, run } = useAttempt('processing'); const ctx = useTeleport(); - const canCreateIntegrations = ctx.storeUser.getIntegrationsAccess().create; useEffect(() => { // TODO(lisa): handle paginating as a follow up polish. @@ -82,7 +81,14 @@ export function Integrations() { Integrations - + {attempt.status === 'failed' && } {attempt.status === 'processing' && ( diff --git a/web/packages/teleport/src/Integrations/IntegrationsAddButton.test.tsx b/web/packages/teleport/src/Integrations/IntegrationsAddButton.test.tsx new file mode 100644 index 0000000000000..6021f79e52a96 --- /dev/null +++ b/web/packages/teleport/src/Integrations/IntegrationsAddButton.test.tsx @@ -0,0 +1,54 @@ +/** + * 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 . + */ + +import { MemoryRouter } from 'react-router'; +import { render, screen } from 'design/utils/testing'; + +import { IntegrationsAddButton } from './IntegrationsAddButton'; + +test('is disables if all permissions are missing', async () => { + render( + + + + ); + + expect( + screen.getByTitle('You do not have access to add new integrations') + ).toBeInTheDocument(); +}); + +test('is enabled if at least one permission is true', async () => { + render( + + + + ); + + expect(screen.getByText('Enroll New Integration')).toBeEnabled(); +}); diff --git a/web/packages/teleport/src/Integrations/IntegrationsAddButton.tsx b/web/packages/teleport/src/Integrations/IntegrationsAddButton.tsx index 3c66c1c1272e8..425e66335b744 100644 --- a/web/packages/teleport/src/Integrations/IntegrationsAddButton.tsx +++ b/web/packages/teleport/src/Integrations/IntegrationsAddButton.tsx @@ -19,26 +19,48 @@ import React from 'react'; import { Link } from 'react-router-dom'; import { Button } from 'design'; +import { HoverTooltip } from 'design/Tooltip'; +import { MissingPermissionsTooltip } from 'shared/components/MissingPermissionsTooltip'; import cfg from 'teleport/config'; export function IntegrationsAddButton({ - canCreate = false, + requiredPermissions, }: { - canCreate: boolean; + requiredPermissions: { value: boolean; label: string }[]; }) { + const canCreateIntegrations = requiredPermissions.some(v => v.value); + const missingPermissions = requiredPermissions + .filter(perm => !perm.value) + .map(perm => perm.label); + return ( - + + ); } 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 && ( - + )} { // @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",