diff --git a/docs/generated/settings/settings.html b/docs/generated/settings/settings.html
index a4cd8785db6c..176845d2550e 100644
--- a/docs/generated/settings/settings.html
+++ b/docs/generated/settings/settings.html
@@ -99,6 +99,6 @@
trace.debug.enable | boolean | false | if set, traces for recent requests can be seen in the /debug page |
trace.lightstep.token | string |
| if set, traces go to Lightstep using this token |
trace.zipkin.collector | string |
| if set, traces go to the given Zipkin instance (example: '127.0.0.1:9411'); ignored if trace.lightstep.token is set |
-version | version | 20.2-6 | set the active cluster version in the format '.' |
+version | version | 20.2-8 | set the active cluster version in the format '.' |
diff --git a/pkg/clusterversion/cockroach_versions.go b/pkg/clusterversion/cockroach_versions.go
index edbd16cf7d78..190e0ed13d1d 100644
--- a/pkg/clusterversion/cockroach_versions.go
+++ b/pkg/clusterversion/cockroach_versions.go
@@ -202,6 +202,8 @@ const (
// UniqueWithoutIndexConstraints is when adding UNIQUE WITHOUT INDEX
// constraints is supported.
UniqueWithoutIndexConstraints
+ // VirtualComputedColumns is when virtual computed columns are supported.
+ VirtualComputedColumns
// Step (1): Add new versions here.
)
@@ -328,6 +330,10 @@ var versionsSingleton = keyedVersions([]keyedVersion{
Key: UniqueWithoutIndexConstraints,
Version: roachpb.Version{Major: 20, Minor: 2, Internal: 6},
},
+ {
+ Key: VirtualComputedColumns,
+ Version: roachpb.Version{Major: 20, Minor: 2, Internal: 8},
+ },
// Step (2): Add new versions here.
})
diff --git a/pkg/clusterversion/key_string.go b/pkg/clusterversion/key_string.go
index 6c6ae4041f0f..6186fb8edaf8 100644
--- a/pkg/clusterversion/key_string.go
+++ b/pkg/clusterversion/key_string.go
@@ -33,11 +33,12 @@ func _() {
_ = x[Start21_1-22]
_ = x[EmptyArraysInInvertedIndexes-23]
_ = x[UniqueWithoutIndexConstraints-24]
+ _ = x[VirtualComputedColumns-25]
}
-const _Key_name = "NamespaceTableWithSchemasStart20_2GeospatialTypeEnumsRangefeedLeasesAlterColumnTypeGeneralAlterSystemJobsAddCreatedByColumnsAddScheduledJobsTableUserDefinedSchemasNoOriginFKIndexesClientRangeInfosOnBatchResponseNodeMembershipStatusRangeStatsRespHasDescMinPasswordLengthAbortSpanBytesAlterSystemJobsAddSqllivenessColumnsAddNewSystemSqllivenessTableMaterializedViewsBox2DTypeUpdateScheduledJobsSchemaCreateLoginPrivilegeHBAForNonTLSV20_2Start21_1EmptyArraysInInvertedIndexesUniqueWithoutIndexConstraints"
+const _Key_name = "NamespaceTableWithSchemasStart20_2GeospatialTypeEnumsRangefeedLeasesAlterColumnTypeGeneralAlterSystemJobsAddCreatedByColumnsAddScheduledJobsTableUserDefinedSchemasNoOriginFKIndexesClientRangeInfosOnBatchResponseNodeMembershipStatusRangeStatsRespHasDescMinPasswordLengthAbortSpanBytesAlterSystemJobsAddSqllivenessColumnsAddNewSystemSqllivenessTableMaterializedViewsBox2DTypeUpdateScheduledJobsSchemaCreateLoginPrivilegeHBAForNonTLSV20_2Start21_1EmptyArraysInInvertedIndexesUniqueWithoutIndexConstraintsVirtualComputedColumns"
-var _Key_index = [...]uint16{0, 25, 34, 48, 53, 68, 90, 124, 145, 163, 180, 211, 231, 252, 269, 283, 347, 364, 373, 398, 418, 430, 435, 444, 472, 501}
+var _Key_index = [...]uint16{0, 25, 34, 48, 53, 68, 90, 124, 145, 163, 180, 211, 231, 252, 269, 283, 347, 364, 373, 398, 418, 430, 435, 444, 472, 501, 523}
func (i Key) String() string {
if i < 0 || i >= Key(len(_Key_index)-1) {
diff --git a/pkg/sql/catalog/descpb/structured.pb.go b/pkg/sql/catalog/descpb/structured.pb.go
index 6c0de3c43e9d..d880eded7ec1 100644
--- a/pkg/sql/catalog/descpb/structured.pb.go
+++ b/pkg/sql/catalog/descpb/structured.pb.go
@@ -76,7 +76,7 @@ func (x *ConstraintValidity) UnmarshalJSON(data []byte) error {
return nil
}
func (ConstraintValidity) EnumDescriptor() ([]byte, []int) {
- return fileDescriptor_structured_6c66c5bf12013d5f, []int{0}
+ return fileDescriptor_structured_c6d9278eb5f43f16, []int{0}
}
// SystemColumnKind is an enum representing the different kind of system
@@ -121,7 +121,7 @@ func (x *SystemColumnKind) UnmarshalJSON(data []byte) error {
return nil
}
func (SystemColumnKind) EnumDescriptor() ([]byte, []int) {
- return fileDescriptor_structured_6c66c5bf12013d5f, []int{1}
+ return fileDescriptor_structured_c6d9278eb5f43f16, []int{1}
}
// State indicates whether a descriptor is public (i.e., normally visible,
@@ -173,7 +173,7 @@ func (x *DescriptorState) UnmarshalJSON(data []byte) error {
return nil
}
func (DescriptorState) EnumDescriptor() ([]byte, []int) {
- return fileDescriptor_structured_6c66c5bf12013d5f, []int{2}
+ return fileDescriptor_structured_c6d9278eb5f43f16, []int{2}
}
// SurvivalGoal is the survival goal for a database.
@@ -212,7 +212,7 @@ func (x *SurvivalGoal) UnmarshalJSON(data []byte) error {
return nil
}
func (SurvivalGoal) EnumDescriptor() ([]byte, []int) {
- return fileDescriptor_structured_6c66c5bf12013d5f, []int{3}
+ return fileDescriptor_structured_c6d9278eb5f43f16, []int{3}
}
type ForeignKeyReference_Action int32
@@ -257,7 +257,7 @@ func (x *ForeignKeyReference_Action) UnmarshalJSON(data []byte) error {
return nil
}
func (ForeignKeyReference_Action) EnumDescriptor() ([]byte, []int) {
- return fileDescriptor_structured_6c66c5bf12013d5f, []int{0, 0}
+ return fileDescriptor_structured_c6d9278eb5f43f16, []int{0, 0}
}
// Match is the algorithm used to compare composite keys.
@@ -297,7 +297,7 @@ func (x *ForeignKeyReference_Match) UnmarshalJSON(data []byte) error {
return nil
}
func (ForeignKeyReference_Match) EnumDescriptor() ([]byte, []int) {
- return fileDescriptor_structured_6c66c5bf12013d5f, []int{0, 1}
+ return fileDescriptor_structured_c6d9278eb5f43f16, []int{0, 1}
}
// The direction of a column in the index.
@@ -334,7 +334,7 @@ func (x *IndexDescriptor_Direction) UnmarshalJSON(data []byte) error {
return nil
}
func (IndexDescriptor_Direction) EnumDescriptor() ([]byte, []int) {
- return fileDescriptor_structured_6c66c5bf12013d5f, []int{8, 0}
+ return fileDescriptor_structured_c6d9278eb5f43f16, []int{8, 0}
}
// The type of the index.
@@ -371,7 +371,7 @@ func (x *IndexDescriptor_Type) UnmarshalJSON(data []byte) error {
return nil
}
func (IndexDescriptor_Type) EnumDescriptor() ([]byte, []int) {
- return fileDescriptor_structured_6c66c5bf12013d5f, []int{8, 1}
+ return fileDescriptor_structured_c6d9278eb5f43f16, []int{8, 1}
}
type ConstraintToUpdate_ConstraintType int32
@@ -417,7 +417,7 @@ func (x *ConstraintToUpdate_ConstraintType) UnmarshalJSON(data []byte) error {
return nil
}
func (ConstraintToUpdate_ConstraintType) EnumDescriptor() ([]byte, []int) {
- return fileDescriptor_structured_6c66c5bf12013d5f, []int{9, 0}
+ return fileDescriptor_structured_c6d9278eb5f43f16, []int{9, 0}
}
// A descriptor within a mutation is unavailable for reads, writes
@@ -482,7 +482,7 @@ func (x *DescriptorMutation_State) UnmarshalJSON(data []byte) error {
return nil
}
func (DescriptorMutation_State) EnumDescriptor() ([]byte, []int) {
- return fileDescriptor_structured_6c66c5bf12013d5f, []int{13, 0}
+ return fileDescriptor_structured_c6d9278eb5f43f16, []int{13, 0}
}
// Direction of mutation.
@@ -525,7 +525,7 @@ func (x *DescriptorMutation_Direction) UnmarshalJSON(data []byte) error {
return nil
}
func (DescriptorMutation_Direction) EnumDescriptor() ([]byte, []int) {
- return fileDescriptor_structured_6c66c5bf12013d5f, []int{13, 1}
+ return fileDescriptor_structured_c6d9278eb5f43f16, []int{13, 1}
}
// AuditMode indicates which auditing actions to take when this table is used.
@@ -562,7 +562,7 @@ func (x *TableDescriptor_AuditMode) UnmarshalJSON(data []byte) error {
return nil
}
func (TableDescriptor_AuditMode) EnumDescriptor() ([]byte, []int) {
- return fileDescriptor_structured_6c66c5bf12013d5f, []int{15, 0}
+ return fileDescriptor_structured_c6d9278eb5f43f16, []int{15, 0}
}
// Represents the kind of type that this type descriptor represents.
@@ -607,7 +607,7 @@ func (x *TypeDescriptor_Kind) UnmarshalJSON(data []byte) error {
return nil
}
func (TypeDescriptor_Kind) EnumDescriptor() ([]byte, []int) {
- return fileDescriptor_structured_6c66c5bf12013d5f, []int{17, 0}
+ return fileDescriptor_structured_c6d9278eb5f43f16, []int{17, 0}
}
// Represents what operations are allowed on this ENUM member.
@@ -648,7 +648,7 @@ func (x *TypeDescriptor_EnumMember_Capability) UnmarshalJSON(data []byte) error
return nil
}
func (TypeDescriptor_EnumMember_Capability) EnumDescriptor() ([]byte, []int) {
- return fileDescriptor_structured_6c66c5bf12013d5f, []int{17, 0, 0}
+ return fileDescriptor_structured_c6d9278eb5f43f16, []int{17, 0, 0}
}
// ForeignKeyReference is deprecated, replaced by ForeignKeyConstraint in v19.2
@@ -678,7 +678,7 @@ func (m *ForeignKeyReference) Reset() { *m = ForeignKeyReference{} }
func (m *ForeignKeyReference) String() string { return proto.CompactTextString(m) }
func (*ForeignKeyReference) ProtoMessage() {}
func (*ForeignKeyReference) Descriptor() ([]byte, []int) {
- return fileDescriptor_structured_6c66c5bf12013d5f, []int{0}
+ return fileDescriptor_structured_c6d9278eb5f43f16, []int{0}
}
func (m *ForeignKeyReference) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -726,7 +726,7 @@ func (m *ForeignKeyConstraint) Reset() { *m = ForeignKeyConstraint{} }
func (m *ForeignKeyConstraint) String() string { return proto.CompactTextString(m) }
func (*ForeignKeyConstraint) ProtoMessage() {}
func (*ForeignKeyConstraint) Descriptor() ([]byte, []int) {
- return fileDescriptor_structured_6c66c5bf12013d5f, []int{1}
+ return fileDescriptor_structured_c6d9278eb5f43f16, []int{1}
}
func (m *ForeignKeyConstraint) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -764,7 +764,7 @@ func (m *UniqueWithoutIndexConstraint) Reset() { *m = UniqueWithoutIndex
func (m *UniqueWithoutIndexConstraint) String() string { return proto.CompactTextString(m) }
func (*UniqueWithoutIndexConstraint) ProtoMessage() {}
func (*UniqueWithoutIndexConstraint) Descriptor() ([]byte, []int) {
- return fileDescriptor_structured_6c66c5bf12013d5f, []int{2}
+ return fileDescriptor_structured_c6d9278eb5f43f16, []int{2}
}
func (m *UniqueWithoutIndexConstraint) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -811,6 +811,9 @@ type ColumnDescriptor struct {
// have been serialized in a internal format. Instead, use one of the
// schemaexpr.FormatExpr* functions.
ComputeExpr *string `protobuf:"bytes,11,opt,name=compute_expr,json=computeExpr" json:"compute_expr,omitempty"`
+ // A computed column can be stored or virtual.
+ // Virtual can only be true if there is a compute expression.
+ Virtual bool `protobuf:"varint,16,opt,name=virtual" json:"virtual"`
// PGAttributeNum must be accessed through the accessor, since it is set
// lazily, it is incorrect to access it directly.
// PGAttributeNum represents a column's number in catalog tables.
@@ -829,7 +832,7 @@ func (m *ColumnDescriptor) Reset() { *m = ColumnDescriptor{} }
func (m *ColumnDescriptor) String() string { return proto.CompactTextString(m) }
func (*ColumnDescriptor) ProtoMessage() {}
func (*ColumnDescriptor) Descriptor() ([]byte, []int) {
- return fileDescriptor_structured_6c66c5bf12013d5f, []int{3}
+ return fileDescriptor_structured_c6d9278eb5f43f16, []int{3}
}
func (m *ColumnDescriptor) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -885,7 +888,7 @@ func (m *ColumnFamilyDescriptor) Reset() { *m = ColumnFamilyDescriptor{}
func (m *ColumnFamilyDescriptor) String() string { return proto.CompactTextString(m) }
func (*ColumnFamilyDescriptor) ProtoMessage() {}
func (*ColumnFamilyDescriptor) Descriptor() ([]byte, []int) {
- return fileDescriptor_structured_6c66c5bf12013d5f, []int{4}
+ return fileDescriptor_structured_c6d9278eb5f43f16, []int{4}
}
func (m *ColumnFamilyDescriptor) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -931,7 +934,7 @@ func (m *InterleaveDescriptor) Reset() { *m = InterleaveDescriptor{} }
func (m *InterleaveDescriptor) String() string { return proto.CompactTextString(m) }
func (*InterleaveDescriptor) ProtoMessage() {}
func (*InterleaveDescriptor) Descriptor() ([]byte, []int) {
- return fileDescriptor_structured_6c66c5bf12013d5f, []int{5}
+ return fileDescriptor_structured_c6d9278eb5f43f16, []int{5}
}
func (m *InterleaveDescriptor) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -975,7 +978,7 @@ func (m *InterleaveDescriptor_Ancestor) Reset() { *m = InterleaveDescrip
func (m *InterleaveDescriptor_Ancestor) String() string { return proto.CompactTextString(m) }
func (*InterleaveDescriptor_Ancestor) ProtoMessage() {}
func (*InterleaveDescriptor_Ancestor) Descriptor() ([]byte, []int) {
- return fileDescriptor_structured_6c66c5bf12013d5f, []int{5, 0}
+ return fileDescriptor_structured_c6d9278eb5f43f16, []int{5, 0}
}
func (m *InterleaveDescriptor_Ancestor) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -1030,7 +1033,7 @@ func (m *ShardedDescriptor) Reset() { *m = ShardedDescriptor{} }
func (m *ShardedDescriptor) String() string { return proto.CompactTextString(m) }
func (*ShardedDescriptor) ProtoMessage() {}
func (*ShardedDescriptor) Descriptor() ([]byte, []int) {
- return fileDescriptor_structured_6c66c5bf12013d5f, []int{6}
+ return fileDescriptor_structured_c6d9278eb5f43f16, []int{6}
}
func (m *ShardedDescriptor) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -1075,7 +1078,7 @@ func (m *PartitioningDescriptor) Reset() { *m = PartitioningDescriptor{}
func (m *PartitioningDescriptor) String() string { return proto.CompactTextString(m) }
func (*PartitioningDescriptor) ProtoMessage() {}
func (*PartitioningDescriptor) Descriptor() ([]byte, []int) {
- return fileDescriptor_structured_6c66c5bf12013d5f, []int{7}
+ return fileDescriptor_structured_c6d9278eb5f43f16, []int{7}
}
func (m *PartitioningDescriptor) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -1118,7 +1121,7 @@ func (m *PartitioningDescriptor_List) Reset() { *m = PartitioningDescrip
func (m *PartitioningDescriptor_List) String() string { return proto.CompactTextString(m) }
func (*PartitioningDescriptor_List) ProtoMessage() {}
func (*PartitioningDescriptor_List) Descriptor() ([]byte, []int) {
- return fileDescriptor_structured_6c66c5bf12013d5f, []int{7, 0}
+ return fileDescriptor_structured_c6d9278eb5f43f16, []int{7, 0}
}
func (m *PartitioningDescriptor_List) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -1163,7 +1166,7 @@ func (m *PartitioningDescriptor_Range) Reset() { *m = PartitioningDescri
func (m *PartitioningDescriptor_Range) String() string { return proto.CompactTextString(m) }
func (*PartitioningDescriptor_Range) ProtoMessage() {}
func (*PartitioningDescriptor_Range) Descriptor() ([]byte, []int) {
- return fileDescriptor_structured_6c66c5bf12013d5f, []int{7, 1}
+ return fileDescriptor_structured_c6d9278eb5f43f16, []int{7, 1}
}
func (m *PartitioningDescriptor_Range) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -1330,7 +1333,7 @@ func (m *IndexDescriptor) Reset() { *m = IndexDescriptor{} }
func (m *IndexDescriptor) String() string { return proto.CompactTextString(m) }
func (*IndexDescriptor) ProtoMessage() {}
func (*IndexDescriptor) Descriptor() ([]byte, []int) {
- return fileDescriptor_structured_6c66c5bf12013d5f, []int{8}
+ return fileDescriptor_structured_c6d9278eb5f43f16, []int{8}
}
func (m *IndexDescriptor) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -1382,7 +1385,7 @@ func (m *ConstraintToUpdate) Reset() { *m = ConstraintToUpdate{} }
func (m *ConstraintToUpdate) String() string { return proto.CompactTextString(m) }
func (*ConstraintToUpdate) ProtoMessage() {}
func (*ConstraintToUpdate) Descriptor() ([]byte, []int) {
- return fileDescriptor_structured_6c66c5bf12013d5f, []int{9}
+ return fileDescriptor_structured_c6d9278eb5f43f16, []int{9}
}
func (m *ConstraintToUpdate) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -1429,7 +1432,7 @@ func (m *PrimaryKeySwap) Reset() { *m = PrimaryKeySwap{} }
func (m *PrimaryKeySwap) String() string { return proto.CompactTextString(m) }
func (*PrimaryKeySwap) ProtoMessage() {}
func (*PrimaryKeySwap) Descriptor() ([]byte, []int) {
- return fileDescriptor_structured_6c66c5bf12013d5f, []int{10}
+ return fileDescriptor_structured_c6d9278eb5f43f16, []int{10}
}
func (m *PrimaryKeySwap) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -1469,7 +1472,7 @@ func (m *ComputedColumnSwap) Reset() { *m = ComputedColumnSwap{} }
func (m *ComputedColumnSwap) String() string { return proto.CompactTextString(m) }
func (*ComputedColumnSwap) ProtoMessage() {}
func (*ComputedColumnSwap) Descriptor() ([]byte, []int) {
- return fileDescriptor_structured_6c66c5bf12013d5f, []int{11}
+ return fileDescriptor_structured_c6d9278eb5f43f16, []int{11}
}
func (m *ComputedColumnSwap) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -1517,7 +1520,7 @@ func (m *MaterializedViewRefresh) Reset() { *m = MaterializedViewRefresh
func (m *MaterializedViewRefresh) String() string { return proto.CompactTextString(m) }
func (*MaterializedViewRefresh) ProtoMessage() {}
func (*MaterializedViewRefresh) Descriptor() ([]byte, []int) {
- return fileDescriptor_structured_6c66c5bf12013d5f, []int{12}
+ return fileDescriptor_structured_c6d9278eb5f43f16, []int{12}
}
func (m *MaterializedViewRefresh) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -1574,7 +1577,7 @@ func (m *DescriptorMutation) Reset() { *m = DescriptorMutation{} }
func (m *DescriptorMutation) String() string { return proto.CompactTextString(m) }
func (*DescriptorMutation) ProtoMessage() {}
func (*DescriptorMutation) Descriptor() ([]byte, []int) {
- return fileDescriptor_structured_6c66c5bf12013d5f, []int{13}
+ return fileDescriptor_structured_c6d9278eb5f43f16, []int{13}
}
func (m *DescriptorMutation) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -1912,7 +1915,7 @@ func (m *NameInfo) Reset() { *m = NameInfo{} }
func (m *NameInfo) String() string { return proto.CompactTextString(m) }
func (*NameInfo) ProtoMessage() {}
func (*NameInfo) Descriptor() ([]byte, []int) {
- return fileDescriptor_structured_6c66c5bf12013d5f, []int{14}
+ return fileDescriptor_structured_c6d9278eb5f43f16, []int{14}
}
func (m *NameInfo) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -2098,7 +2101,7 @@ func (m *TableDescriptor) Reset() { *m = TableDescriptor{} }
func (m *TableDescriptor) String() string { return proto.CompactTextString(m) }
func (*TableDescriptor) ProtoMessage() {}
func (*TableDescriptor) Descriptor() ([]byte, []int) {
- return fileDescriptor_structured_6c66c5bf12013d5f, []int{15}
+ return fileDescriptor_structured_c6d9278eb5f43f16, []int{15}
}
func (m *TableDescriptor) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -2419,7 +2422,7 @@ func (m *TableDescriptor_SchemaChangeLease) Reset() { *m = TableDescript
func (m *TableDescriptor_SchemaChangeLease) String() string { return proto.CompactTextString(m) }
func (*TableDescriptor_SchemaChangeLease) ProtoMessage() {}
func (*TableDescriptor_SchemaChangeLease) Descriptor() ([]byte, []int) {
- return fileDescriptor_structured_6c66c5bf12013d5f, []int{15, 0}
+ return fileDescriptor_structured_c6d9278eb5f43f16, []int{15, 0}
}
func (m *TableDescriptor_SchemaChangeLease) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -2465,7 +2468,7 @@ func (m *TableDescriptor_CheckConstraint) Reset() { *m = TableDescriptor
func (m *TableDescriptor_CheckConstraint) String() string { return proto.CompactTextString(m) }
func (*TableDescriptor_CheckConstraint) ProtoMessage() {}
func (*TableDescriptor_CheckConstraint) Descriptor() ([]byte, []int) {
- return fileDescriptor_structured_6c66c5bf12013d5f, []int{15, 1}
+ return fileDescriptor_structured_c6d9278eb5f43f16, []int{15, 1}
}
func (m *TableDescriptor_CheckConstraint) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -2505,7 +2508,7 @@ func (m *TableDescriptor_Reference) Reset() { *m = TableDescriptor_Refer
func (m *TableDescriptor_Reference) String() string { return proto.CompactTextString(m) }
func (*TableDescriptor_Reference) ProtoMessage() {}
func (*TableDescriptor_Reference) Descriptor() ([]byte, []int) {
- return fileDescriptor_structured_6c66c5bf12013d5f, []int{15, 2}
+ return fileDescriptor_structured_c6d9278eb5f43f16, []int{15, 2}
}
func (m *TableDescriptor_Reference) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -2542,7 +2545,7 @@ func (m *TableDescriptor_MutationJob) Reset() { *m = TableDescriptor_Mut
func (m *TableDescriptor_MutationJob) String() string { return proto.CompactTextString(m) }
func (*TableDescriptor_MutationJob) ProtoMessage() {}
func (*TableDescriptor_MutationJob) Descriptor() ([]byte, []int) {
- return fileDescriptor_structured_6c66c5bf12013d5f, []int{15, 3}
+ return fileDescriptor_structured_c6d9278eb5f43f16, []int{15, 3}
}
func (m *TableDescriptor_MutationJob) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -2585,7 +2588,7 @@ func (m *TableDescriptor_SequenceOpts) Reset() { *m = TableDescriptor_Se
func (m *TableDescriptor_SequenceOpts) String() string { return proto.CompactTextString(m) }
func (*TableDescriptor_SequenceOpts) ProtoMessage() {}
func (*TableDescriptor_SequenceOpts) Descriptor() ([]byte, []int) {
- return fileDescriptor_structured_6c66c5bf12013d5f, []int{15, 4}
+ return fileDescriptor_structured_c6d9278eb5f43f16, []int{15, 4}
}
func (m *TableDescriptor_SequenceOpts) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -2625,7 +2628,7 @@ func (m *TableDescriptor_SequenceOpts_SequenceOwner) String() string {
}
func (*TableDescriptor_SequenceOpts_SequenceOwner) ProtoMessage() {}
func (*TableDescriptor_SequenceOpts_SequenceOwner) Descriptor() ([]byte, []int) {
- return fileDescriptor_structured_6c66c5bf12013d5f, []int{15, 4, 0}
+ return fileDescriptor_structured_c6d9278eb5f43f16, []int{15, 4, 0}
}
func (m *TableDescriptor_SequenceOpts_SequenceOwner) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -2665,7 +2668,7 @@ func (m *TableDescriptor_Replacement) Reset() { *m = TableDescriptor_Rep
func (m *TableDescriptor_Replacement) String() string { return proto.CompactTextString(m) }
func (*TableDescriptor_Replacement) ProtoMessage() {}
func (*TableDescriptor_Replacement) Descriptor() ([]byte, []int) {
- return fileDescriptor_structured_6c66c5bf12013d5f, []int{15, 5}
+ return fileDescriptor_structured_c6d9278eb5f43f16, []int{15, 5}
}
func (m *TableDescriptor_Replacement) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -2702,7 +2705,7 @@ func (m *TableDescriptor_GCDescriptorMutation) Reset() { *m = TableDescr
func (m *TableDescriptor_GCDescriptorMutation) String() string { return proto.CompactTextString(m) }
func (*TableDescriptor_GCDescriptorMutation) ProtoMessage() {}
func (*TableDescriptor_GCDescriptorMutation) Descriptor() ([]byte, []int) {
- return fileDescriptor_structured_6c66c5bf12013d5f, []int{15, 6}
+ return fileDescriptor_structured_c6d9278eb5f43f16, []int{15, 6}
}
func (m *TableDescriptor_GCDescriptorMutation) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -2739,7 +2742,7 @@ func (m *TableDescriptor_LocalityConfig) Reset() { *m = TableDescriptor_
func (m *TableDescriptor_LocalityConfig) String() string { return proto.CompactTextString(m) }
func (*TableDescriptor_LocalityConfig) ProtoMessage() {}
func (*TableDescriptor_LocalityConfig) Descriptor() ([]byte, []int) {
- return fileDescriptor_structured_6c66c5bf12013d5f, []int{15, 7}
+ return fileDescriptor_structured_c6d9278eb5f43f16, []int{15, 7}
}
func (m *TableDescriptor_LocalityConfig) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -2919,7 +2922,7 @@ func (m *TableDescriptor_LocalityConfig_RegionalByTable) String() string {
}
func (*TableDescriptor_LocalityConfig_RegionalByTable) ProtoMessage() {}
func (*TableDescriptor_LocalityConfig_RegionalByTable) Descriptor() ([]byte, []int) {
- return fileDescriptor_structured_6c66c5bf12013d5f, []int{15, 7, 0}
+ return fileDescriptor_structured_c6d9278eb5f43f16, []int{15, 7, 0}
}
func (m *TableDescriptor_LocalityConfig_RegionalByTable) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -2955,7 +2958,7 @@ func (m *TableDescriptor_LocalityConfig_RegionalByRow) String() string {
}
func (*TableDescriptor_LocalityConfig_RegionalByRow) ProtoMessage() {}
func (*TableDescriptor_LocalityConfig_RegionalByRow) Descriptor() ([]byte, []int) {
- return fileDescriptor_structured_6c66c5bf12013d5f, []int{15, 7, 1}
+ return fileDescriptor_structured_c6d9278eb5f43f16, []int{15, 7, 1}
}
func (m *TableDescriptor_LocalityConfig_RegionalByRow) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -2987,7 +2990,7 @@ func (m *TableDescriptor_LocalityConfig_Global) Reset() { *m = TableDesc
func (m *TableDescriptor_LocalityConfig_Global) String() string { return proto.CompactTextString(m) }
func (*TableDescriptor_LocalityConfig_Global) ProtoMessage() {}
func (*TableDescriptor_LocalityConfig_Global) Descriptor() ([]byte, []int) {
- return fileDescriptor_structured_6c66c5bf12013d5f, []int{15, 7, 2}
+ return fileDescriptor_structured_c6d9278eb5f43f16, []int{15, 7, 2}
}
func (m *TableDescriptor_LocalityConfig_Global) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -3038,7 +3041,7 @@ func (m *DatabaseDescriptor) Reset() { *m = DatabaseDescriptor{} }
func (m *DatabaseDescriptor) String() string { return proto.CompactTextString(m) }
func (*DatabaseDescriptor) ProtoMessage() {}
func (*DatabaseDescriptor) Descriptor() ([]byte, []int) {
- return fileDescriptor_structured_6c66c5bf12013d5f, []int{16}
+ return fileDescriptor_structured_c6d9278eb5f43f16, []int{16}
}
func (m *DatabaseDescriptor) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -3146,7 +3149,7 @@ func (m *DatabaseDescriptor_SchemaInfo) Reset() { *m = DatabaseDescripto
func (m *DatabaseDescriptor_SchemaInfo) String() string { return proto.CompactTextString(m) }
func (*DatabaseDescriptor_SchemaInfo) ProtoMessage() {}
func (*DatabaseDescriptor_SchemaInfo) Descriptor() ([]byte, []int) {
- return fileDescriptor_structured_6c66c5bf12013d5f, []int{16, 0}
+ return fileDescriptor_structured_c6d9278eb5f43f16, []int{16, 0}
}
func (m *DatabaseDescriptor_SchemaInfo) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -3186,7 +3189,7 @@ func (m *DatabaseDescriptor_RegionConfig) Reset() { *m = DatabaseDescrip
func (m *DatabaseDescriptor_RegionConfig) String() string { return proto.CompactTextString(m) }
func (*DatabaseDescriptor_RegionConfig) ProtoMessage() {}
func (*DatabaseDescriptor_RegionConfig) Descriptor() ([]byte, []int) {
- return fileDescriptor_structured_6c66c5bf12013d5f, []int{16, 2}
+ return fileDescriptor_structured_c6d9278eb5f43f16, []int{16, 2}
}
func (m *DatabaseDescriptor_RegionConfig) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -3249,7 +3252,7 @@ func (m *TypeDescriptor) Reset() { *m = TypeDescriptor{} }
func (m *TypeDescriptor) String() string { return proto.CompactTextString(m) }
func (*TypeDescriptor) ProtoMessage() {}
func (*TypeDescriptor) Descriptor() ([]byte, []int) {
- return fileDescriptor_structured_6c66c5bf12013d5f, []int{17}
+ return fileDescriptor_structured_c6d9278eb5f43f16, []int{17}
}
func (m *TypeDescriptor) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -3397,7 +3400,7 @@ func (m *TypeDescriptor_EnumMember) Reset() { *m = TypeDescriptor_EnumMe
func (m *TypeDescriptor_EnumMember) String() string { return proto.CompactTextString(m) }
func (*TypeDescriptor_EnumMember) ProtoMessage() {}
func (*TypeDescriptor_EnumMember) Descriptor() ([]byte, []int) {
- return fileDescriptor_structured_6c66c5bf12013d5f, []int{17, 0}
+ return fileDescriptor_structured_c6d9278eb5f43f16, []int{17, 0}
}
func (m *TypeDescriptor_EnumMember) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -3433,7 +3436,7 @@ func (m *TypeDescriptor_RegionConfig) Reset() { *m = TypeDescriptor_Regi
func (m *TypeDescriptor_RegionConfig) String() string { return proto.CompactTextString(m) }
func (*TypeDescriptor_RegionConfig) ProtoMessage() {}
func (*TypeDescriptor_RegionConfig) Descriptor() ([]byte, []int) {
- return fileDescriptor_structured_6c66c5bf12013d5f, []int{17, 1}
+ return fileDescriptor_structured_c6d9278eb5f43f16, []int{17, 1}
}
func (m *TypeDescriptor_RegionConfig) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -3481,7 +3484,7 @@ func (m *SchemaDescriptor) Reset() { *m = SchemaDescriptor{} }
func (m *SchemaDescriptor) String() string { return proto.CompactTextString(m) }
func (*SchemaDescriptor) ProtoMessage() {}
func (*SchemaDescriptor) Descriptor() ([]byte, []int) {
- return fileDescriptor_structured_6c66c5bf12013d5f, []int{18}
+ return fileDescriptor_structured_c6d9278eb5f43f16, []int{18}
}
func (m *SchemaDescriptor) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -3584,7 +3587,7 @@ func (m *Descriptor) Reset() { *m = Descriptor{} }
func (m *Descriptor) String() string { return proto.CompactTextString(m) }
func (*Descriptor) ProtoMessage() {}
func (*Descriptor) Descriptor() ([]byte, []int) {
- return fileDescriptor_structured_6c66c5bf12013d5f, []int{19}
+ return fileDescriptor_structured_c6d9278eb5f43f16, []int{19}
}
func (m *Descriptor) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -4046,6 +4049,9 @@ func (this *ColumnDescriptor) Equal(that interface{}) bool {
} else if that1.ComputeExpr != nil {
return false
}
+ if this.Virtual != that1.Virtual {
+ return false
+ }
if this.PGAttributeNum != that1.PGAttributeNum {
return false
}
@@ -6110,6 +6116,16 @@ func (m *ColumnDescriptor) MarshalTo(dAtA []byte) (int, error) {
dAtA[i] = 0x78
i++
i = encodeVarintStructured(dAtA, i, uint64(m.SystemColumnKind))
+ dAtA[i] = 0x80
+ i++
+ dAtA[i] = 0x1
+ i++
+ if m.Virtual {
+ dAtA[i] = 1
+ } else {
+ dAtA[i] = 0
+ }
+ i++
return i, nil
}
@@ -8278,6 +8294,7 @@ func (m *ColumnDescriptor) Size() (n int) {
n += 1 + sovStructured(uint64(m.PGAttributeNum))
n += 2
n += 1 + sovStructured(uint64(m.SystemColumnKind))
+ n += 3
return n
}
@@ -10395,6 +10412,26 @@ func (m *ColumnDescriptor) Unmarshal(dAtA []byte) error {
break
}
}
+ case 16:
+ if wireType != 0 {
+ return fmt.Errorf("proto: wrong wireType = %d for field Virtual", wireType)
+ }
+ var v int
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowStructured
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ v |= (int(b) & 0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ m.Virtual = bool(v != 0)
default:
iNdEx = preIndex
skippy, err := skipStructured(dAtA[iNdEx:])
@@ -17893,19 +17930,19 @@ var (
)
func init() {
- proto.RegisterFile("sql/catalog/descpb/structured.proto", fileDescriptor_structured_6c66c5bf12013d5f)
-}
-
-var fileDescriptor_structured_6c66c5bf12013d5f = []byte{
- // 5080 bytes of a gzipped FileDescriptorProto
- 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x3c, 0x49, 0x70, 0x23, 0xd7,
- 0x75, 0xc4, 0x0e, 0x3c, 0x6c, 0xcd, 0x3f, 0x9c, 0x19, 0x88, 0x96, 0x48, 0x0e, 0x46, 0x23, 0x51,
- 0x92, 0x45, 0x8e, 0x38, 0x5e, 0xc6, 0x96, 0xed, 0x12, 0x08, 0x80, 0x43, 0x70, 0x01, 0xa8, 0x26,
- 0x39, 0x23, 0xdb, 0x89, 0xdb, 0x4d, 0xf4, 0x07, 0xd8, 0x9a, 0x46, 0x37, 0xa6, 0xbb, 0x31, 0x43,
- 0xa4, 0x72, 0x48, 0x39, 0x97, 0x9c, 0xb2, 0x1c, 0x72, 0x4c, 0xc5, 0x95, 0x72, 0x55, 0x7c, 0x4b,
- 0xf9, 0x92, 0xdc, 0x72, 0xc8, 0x21, 0xe5, 0x5b, 0x9c, 0x9b, 0x4f, 0xac, 0x84, 0xba, 0xe4, 0x96,
- 0xe4, 0xe4, 0x2a, 0x9d, 0x52, 0x7f, 0xeb, 0x05, 0x0b, 0x07, 0x24, 0x15, 0x1f, 0xa4, 0x62, 0xbf,
- 0xed, 0x6f, 0x6f, 0xff, 0x1f, 0x03, 0xf7, 0x9d, 0x17, 0xc6, 0x7a, 0x5b, 0x75, 0x55, 0xc3, 0xea,
+ proto.RegisterFile("sql/catalog/descpb/structured.proto", fileDescriptor_structured_c6d9278eb5f43f16)
+}
+
+var fileDescriptor_structured_c6d9278eb5f43f16 = []byte{
+ // 5087 bytes of a gzipped FileDescriptorProto
+ 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x3c, 0x4b, 0x70, 0x1b, 0xe7,
+ 0x79, 0xc4, 0x1b, 0xf8, 0xf0, 0x5a, 0xfe, 0xa2, 0x24, 0x98, 0xb1, 0x49, 0x0a, 0xb2, 0x6c, 0xda,
+ 0x8e, 0x49, 0x99, 0xca, 0x43, 0x89, 0x93, 0x8c, 0x41, 0x00, 0x14, 0xc1, 0x07, 0x40, 0x2f, 0x49,
+ 0xc9, 0x49, 0xda, 0x6c, 0x96, 0xd8, 0x1f, 0xe0, 0x5a, 0x8b, 0x5d, 0x68, 0x77, 0x21, 0x11, 0x9d,
+ 0x1e, 0x3a, 0xe9, 0xa5, 0xa7, 0xb6, 0x39, 0xf4, 0xd8, 0x69, 0xa6, 0x93, 0x99, 0xe6, 0xd6, 0xc9,
+ 0xa5, 0xbd, 0xf5, 0xd0, 0x43, 0x27, 0xb7, 0xa6, 0xb7, 0x9c, 0x38, 0x2d, 0x7d, 0xe9, 0xad, 0xbd,
+ 0x65, 0xc6, 0xa7, 0xce, 0xff, 0xda, 0x07, 0x1e, 0x14, 0x48, 0xba, 0x39, 0xd8, 0xc3, 0xfd, 0x5e,
+ 0xff, 0xeb, 0x7b, 0xff, 0x3f, 0x04, 0xf7, 0x9d, 0x17, 0xc6, 0x7a, 0x5b, 0x75, 0x55, 0xc3, 0xea,
0xae, 0x6b, 0xd8, 0x69, 0xf7, 0x4f, 0xd6, 0x1d, 0xd7, 0x1e, 0xb4, 0xdd, 0x81, 0x8d, 0xb5, 0xb5,
0xbe, 0x6d, 0xb9, 0x16, 0xba, 0xdd, 0xb6, 0xda, 0xcf, 0x6d, 0x4b, 0x6d, 0x9f, 0xae, 0x39, 0x2f,
0x0c, 0xf2, 0xdf, 0x89, 0xea, 0xe0, 0xc5, 0xd2, 0xc0, 0xd5, 0x8d, 0xf5, 0x53, 0xa3, 0xbd, 0xee,
@@ -17914,7 +17951,7 @@ var fileDescriptor_structured_6c66c5bf12013d5f = []byte{
0xe8, 0x62, 0x6b, 0xbd, 0x8b, 0x2d, 0xdd, 0xd4, 0xf0, 0xd9, 0x7a, 0xdb, 0x32, 0x3b, 0x7a, 0x97,
0xa3, 0x16, 0xba, 0x56, 0xd7, 0xa2, 0x7f, 0xae, 0x93, 0xbf, 0x18, 0xb4, 0xfc, 0xb3, 0x04, 0xdc,
0xda, 0xb2, 0x6c, 0xac, 0x77, 0xcd, 0x5d, 0x3c, 0x94, 0x71, 0x07, 0xdb, 0xd8, 0x6c, 0x63, 0xb4,
- 0x02, 0x09, 0x57, 0x3d, 0x31, 0x70, 0x29, 0xb2, 0x12, 0x59, 0xcd, 0x6f, 0xc2, 0xaf, 0xcf, 0x97,
+ 0x02, 0x09, 0x57, 0x3d, 0x31, 0x70, 0x29, 0xb2, 0x12, 0x59, 0xcd, 0x6f, 0xc2, 0x6f, 0xce, 0x97,
0xe7, 0xbe, 0x3c, 0x5f, 0x8e, 0x36, 0x6a, 0x32, 0x43, 0xa0, 0x07, 0x90, 0xa0, 0xa3, 0x94, 0xa2,
0x94, 0xa2, 0xc8, 0x29, 0x52, 0x0d, 0x02, 0x24, 0x64, 0x14, 0x8b, 0x4a, 0x10, 0x37, 0xd5, 0x1e,
0x2e, 0xc5, 0x56, 0x22, 0xab, 0x99, 0xcd, 0x38, 0xa1, 0x92, 0x29, 0x04, 0xed, 0x42, 0xfa, 0xa5,
@@ -17930,9 +17967,9 @@ var fileDescriptor_structured_6c66c5bf12013d5f = []byte{
0x73, 0x28, 0x07, 0x69, 0xb9, 0x7e, 0x78, 0x24, 0x37, 0xaa, 0x47, 0x52, 0x84, 0x7c, 0x1d, 0xd6,
0x8f, 0x94, 0xe6, 0xf1, 0xde, 0x9e, 0x14, 0x45, 0x45, 0xc8, 0x92, 0xaf, 0x5a, 0x7d, 0xab, 0x72,
0xbc, 0x77, 0x24, 0xc5, 0x50, 0x16, 0x52, 0xd5, 0xca, 0x61, 0xb5, 0x52, 0xab, 0x4b, 0xf1, 0xc5,
- 0xf8, 0x2f, 0x7f, 0xb1, 0x34, 0x57, 0x7e, 0x08, 0x09, 0x3a, 0x1c, 0x02, 0x48, 0x1e, 0x36, 0xf6,
+ 0xf8, 0xaf, 0x7e, 0xb9, 0x34, 0x57, 0x7e, 0x08, 0x09, 0x3a, 0x1c, 0x02, 0x48, 0x1e, 0x36, 0xf6,
0x0f, 0xf6, 0xea, 0xd2, 0x1c, 0x4a, 0x43, 0x7c, 0x8b, 0x88, 0x88, 0x10, 0x8e, 0x83, 0x8a, 0x7c,
- 0xd4, 0xa8, 0xec, 0x49, 0x51, 0xc6, 0xf1, 0xdd, 0xf8, 0x7f, 0xfd, 0x7c, 0x39, 0x52, 0xfe, 0xf7,
+ 0xd4, 0xa8, 0xec, 0x49, 0x51, 0xc6, 0xf1, 0xdd, 0xf8, 0x7f, 0xff, 0x62, 0x39, 0x52, 0xfe, 0x8f,
0x04, 0x2c, 0xf8, 0x73, 0xf7, 0x4f, 0x1b, 0x55, 0xa1, 0x68, 0xd9, 0x7a, 0x57, 0x37, 0x15, 0xaa,
0x73, 0x8a, 0xae, 0x71, 0x7d, 0xfc, 0x1a, 0x59, 0xcf, 0xc5, 0xf9, 0x72, 0xbe, 0x45, 0xd1, 0x47,
0x04, 0xdb, 0xa8, 0x71, 0x05, 0xcd, 0x5b, 0x01, 0xa0, 0x86, 0x76, 0x61, 0x9e, 0x0b, 0x69, 0x5b,
@@ -17944,276 +17981,276 @@ var fileDescriptor_structured_6c66c5bf12013d5f = []byte{
0xe7, 0xed, 0x11, 0x84, 0xe6, 0x19, 0x5e, 0xe2, 0x52, 0xc3, 0x4b, 0xde, 0xd4, 0xf0, 0x42, 0x66,
0x94, 0xfa, 0x7f, 0x31, 0xa3, 0xf4, 0x57, 0x6e, 0x46, 0x99, 0xaf, 0xc0, 0x8c, 0x98, 0xee, 0xee,
0xc4, 0xd3, 0x20, 0x65, 0x77, 0xe2, 0xe9, 0xac, 0x94, 0xdb, 0x89, 0xa7, 0x73, 0x52, 0x7e, 0x27,
- 0x9e, 0xce, 0x4b, 0x85, 0xf2, 0xef, 0x22, 0xf0, 0xe6, 0xb1, 0xa9, 0xbf, 0x18, 0xe0, 0x67, 0xba,
+ 0x9e, 0xce, 0x4b, 0x85, 0xf2, 0xef, 0x23, 0xf0, 0xe6, 0xb1, 0xa9, 0xbf, 0x18, 0xe0, 0x67, 0xba,
0x7b, 0x6a, 0x0d, 0x5c, 0xea, 0x17, 0x03, 0xba, 0xfd, 0x10, 0xd2, 0x23, 0x4a, 0x7d, 0x9b, 0x9f,
0x72, 0x2a, 0x7c, 0xb6, 0x29, 0x97, 0x9f, 0xe8, 0x63, 0x80, 0x31, 0x0d, 0x7e, 0xe3, 0xe2, 0x7c,
- 0x39, 0x33, 0x59, 0xcd, 0x32, 0x6d, 0x4f, 0xb9, 0x7e, 0x3f, 0x4e, 0x98, 0x5b, 0xf3, 0xff, 0xc6,
- 0x41, 0x62, 0x93, 0xa8, 0x61, 0xa7, 0x6d, 0xeb, 0x7d, 0xd7, 0xb2, 0xbd, 0x19, 0x44, 0xc6, 0x66,
- 0xf0, 0x0e, 0x44, 0x75, 0x8d, 0x07, 0x91, 0x3b, 0x7c, 0x07, 0xa2, 0x74, 0xf1, 0xfe, 0x52, 0xa2,
- 0xba, 0x86, 0xd6, 0x20, 0x4e, 0x22, 0x1d, 0x5d, 0x43, 0x76, 0x63, 0x71, 0x74, 0x96, 0xb8, 0xb7,
- 0xc6, 0x02, 0xe1, 0x91, 0x4c, 0xe9, 0xd0, 0x0a, 0xa4, 0xcd, 0x81, 0x61, 0xd0, 0x20, 0x46, 0x56,
- 0x96, 0x16, 0xd3, 0x15, 0x50, 0x74, 0x0f, 0x72, 0x1a, 0xee, 0xa8, 0x03, 0xc3, 0x55, 0xf0, 0x59,
- 0xdf, 0x66, 0x96, 0x22, 0x67, 0x39, 0xac, 0x7e, 0xd6, 0xb7, 0xd1, 0x9b, 0x90, 0x3c, 0xd5, 0x35,
- 0x0d, 0x9b, 0xd4, 0x50, 0x84, 0x08, 0x0e, 0x43, 0x1b, 0x30, 0x3f, 0x70, 0xb0, 0xa3, 0x38, 0xf8,
- 0xc5, 0x80, 0x68, 0x09, 0x3d, 0x17, 0xa0, 0xe7, 0x92, 0xe4, 0x87, 0x57, 0x24, 0x04, 0x87, 0x1c,
- 0x4f, 0x8e, 0xe2, 0x1e, 0xe4, 0xda, 0x56, 0xaf, 0x3f, 0x70, 0x31, 0x1b, 0x34, 0xcb, 0x06, 0xe5,
- 0x30, 0x3a, 0xe8, 0x06, 0xcc, 0x5b, 0xaf, 0xcc, 0x11, 0xb1, 0xb9, 0xb0, 0x58, 0x42, 0x10, 0x14,
- 0xfb, 0x09, 0x48, 0xfd, 0xae, 0xa2, 0xba, 0xae, 0xad, 0x9f, 0x10, 0xd9, 0xe6, 0xa0, 0x57, 0xca,
- 0x87, 0xf6, 0xb4, 0x70, 0xf0, 0xa4, 0x22, 0xd0, 0xcd, 0x41, 0x4f, 0x2e, 0xf4, 0xbb, 0xc1, 0x6f,
- 0xb4, 0x05, 0x6f, 0xa9, 0x86, 0x8b, 0x6d, 0xe1, 0xd4, 0xc8, 0x26, 0x2a, 0xba, 0xa9, 0xf4, 0x6d,
- 0xab, 0x6b, 0x63, 0xc7, 0x29, 0x15, 0x02, 0x3b, 0xf0, 0x06, 0x25, 0x65, 0xe7, 0x73, 0x34, 0xec,
- 0xe3, 0x86, 0x79, 0xc0, 0xc9, 0xd0, 0x8f, 0x01, 0x39, 0x43, 0xc7, 0xc5, 0x3d, 0x21, 0xe8, 0xb9,
- 0x6e, 0x6a, 0xa5, 0x22, 0xd5, 0xad, 0x77, 0xa7, 0xe8, 0xd6, 0x21, 0x65, 0x60, 0xe2, 0x76, 0x75,
- 0x53, 0xe3, 0xa3, 0x48, 0xce, 0x08, 0xdc, 0xb3, 0xb9, 0xb4, 0x94, 0xd9, 0x89, 0xa7, 0x33, 0x12,
- 0xec, 0xc4, 0xd3, 0x29, 0x29, 0x5d, 0xfe, 0xf3, 0x28, 0xdc, 0x61, 0x64, 0x5b, 0x6a, 0x4f, 0x37,
- 0x86, 0x37, 0xd5, 0x3c, 0x26, 0x85, 0x6b, 0x1e, 0x3d, 0x32, 0xba, 0x14, 0xc2, 0xc6, 0x5c, 0x3d,
- 0x3d, 0x32, 0x02, 0x6b, 0x12, 0xd0, 0x88, 0x69, 0xc6, 0xaf, 0x60, 0x9a, 0x2d, 0x98, 0x17, 0x4a,
- 0xe8, 0x49, 0xa0, 0x9a, 0x98, 0xdf, 0xbc, 0xcf, 0xe7, 0x54, 0xac, 0x31, 0x02, 0xc1, 0x1e, 0x8e,
- 0x50, 0x5a, 0x08, 0xc9, 0xb7, 0xa8, 0xfc, 0x4f, 0x51, 0x58, 0x68, 0x98, 0x2e, 0xb6, 0x0d, 0xac,
- 0xbe, 0xc4, 0x81, 0xed, 0xf8, 0x0c, 0x32, 0xaa, 0xd9, 0xc6, 0x8e, 0x6b, 0xd9, 0x4e, 0x29, 0xb2,
- 0x12, 0x5b, 0xcd, 0x6e, 0x7c, 0x63, 0xca, 0xa9, 0x4c, 0xe2, 0x5f, 0xab, 0x70, 0x66, 0xbe, 0x93,
- 0xbe, 0xb0, 0xc5, 0x7f, 0x8e, 0x40, 0x5a, 0x60, 0xaf, 0xe1, 0xdd, 0xbe, 0x09, 0x69, 0x9a, 0x31,
- 0x2a, 0xde, 0x99, 0x2c, 0x0a, 0x0e, 0x9e, 0x52, 0x06, 0xb3, 0xcb, 0x14, 0xa5, 0x6d, 0x68, 0xa8,
- 0x3a, 0x29, 0xf1, 0x8b, 0x51, 0xfe, 0xbb, 0x62, 0xff, 0x0e, 0xc3, 0xa9, 0xdf, 0x58, 0x2e, 0xc8,
- 0xf6, 0x8c, 0xef, 0xdc, 0x3f, 0x46, 0x60, 0x9e, 0x30, 0x68, 0x58, 0x0b, 0x6c, 0xdb, 0x7d, 0x00,
- 0xdd, 0x51, 0x1c, 0x06, 0xa7, 0x2b, 0x12, 0xa6, 0x90, 0xd1, 0x1d, 0x4e, 0xee, 0xa9, 0x5a, 0x74,
- 0x4c, 0xd5, 0xbe, 0x03, 0x79, 0xca, 0xab, 0x9c, 0x0c, 0xda, 0xcf, 0xb1, 0xeb, 0xd0, 0x19, 0x26,
- 0x36, 0x17, 0xf8, 0x0c, 0x73, 0x54, 0xc2, 0x26, 0xc3, 0xc9, 0x39, 0x27, 0xf0, 0x35, 0xa6, 0x7d,
- 0xf1, 0x31, 0xed, 0xe3, 0x13, 0xff, 0x5d, 0x0c, 0xee, 0x1c, 0xa8, 0xb6, 0xab, 0x93, 0xd8, 0xa7,
- 0x9b, 0xdd, 0xc0, 0xec, 0x1f, 0x40, 0xd6, 0x1c, 0x08, 0x83, 0x74, 0xf8, 0x81, 0xb0, 0xf9, 0x81,
- 0x39, 0xe0, 0x06, 0xe6, 0xa0, 0x3d, 0x88, 0x1b, 0xba, 0xe3, 0xd2, 0xd0, 0x92, 0xdd, 0xd8, 0x98,
- 0xa2, 0x16, 0x93, 0xc7, 0x58, 0xdb, 0xd3, 0x1d, 0x57, 0xac, 0x99, 0x48, 0x41, 0x2d, 0x48, 0xd8,
- 0xaa, 0xd9, 0xc5, 0xd4, 0x5e, 0xb2, 0x1b, 0x8f, 0xae, 0x26, 0x4e, 0x26, 0xac, 0x22, 0xe0, 0x52,
- 0x39, 0x8b, 0x7f, 0x13, 0x81, 0x38, 0x19, 0xe5, 0x12, 0x93, 0xbe, 0x03, 0xc9, 0x97, 0xaa, 0x31,
- 0xc0, 0x2c, 0x3c, 0xe6, 0x64, 0xfe, 0x85, 0xfe, 0x10, 0x8a, 0xce, 0xe0, 0xa4, 0x1f, 0x18, 0x8a,
- 0xc7, 0x91, 0x0f, 0xaf, 0x34, 0x2b, 0xaf, 0x96, 0x08, 0xcb, 0x62, 0x07, 0xb0, 0xf8, 0x02, 0x12,
- 0x74, 0xd6, 0x97, 0xcc, 0xef, 0x1e, 0xe4, 0x5c, 0x4b, 0xc1, 0x67, 0x6d, 0x63, 0xe0, 0xe8, 0x2f,
- 0x99, 0xa6, 0xe4, 0xe4, 0xac, 0x6b, 0xd5, 0x05, 0x08, 0x3d, 0x80, 0x42, 0xc7, 0xb6, 0x7a, 0x8a,
- 0x6e, 0x0a, 0xa2, 0x18, 0x25, 0xca, 0x13, 0x68, 0x43, 0x00, 0x43, 0x2a, 0xfb, 0xd7, 0x39, 0x28,
- 0x52, 0xc3, 0x98, 0xc9, 0xed, 0x3d, 0x08, 0xb8, 0xbd, 0xdb, 0x21, 0xb7, 0xe7, 0x59, 0x17, 0xf1,
- 0x7a, 0x6f, 0x42, 0x72, 0x40, 0xf3, 0x17, 0x3a, 0xbe, 0x17, 0xfa, 0x18, 0x6c, 0x06, 0xad, 0x44,
- 0x5f, 0x07, 0x44, 0x5c, 0x01, 0x56, 0x42, 0x84, 0x09, 0x4a, 0x28, 0x51, 0x4c, 0x75, 0xaa, 0x07,
- 0x4d, 0x5e, 0xc1, 0x83, 0x6e, 0x83, 0x84, 0xcf, 0x5c, 0x5b, 0x0d, 0x66, 0xe3, 0x29, 0xca, 0xbf,
- 0x44, 0xc2, 0x5e, 0x9d, 0xe0, 0x26, 0x0b, 0x29, 0xe0, 0x00, 0x4e, 0x23, 0x5a, 0x32, 0xcf, 0x65,
- 0x68, 0xba, 0x8d, 0x69, 0x0e, 0xe9, 0x94, 0xd2, 0x2b, 0xb1, 0x4b, 0x72, 0xc5, 0x91, 0x6d, 0x5f,
- 0xab, 0x09, 0x46, 0x59, 0x62, 0xa2, 0x3c, 0x80, 0x83, 0x0e, 0x21, 0xdb, 0x61, 0xa9, 0xa5, 0xf2,
- 0x1c, 0x0f, 0x69, 0x12, 0x9a, 0xdd, 0x78, 0x7f, 0xf6, 0x24, 0x74, 0x33, 0x49, 0x8e, 0xa0, 0x14,
- 0x91, 0xa1, 0xe3, 0x21, 0xd1, 0x33, 0xc8, 0x07, 0xea, 0x86, 0x93, 0x21, 0xcd, 0x3f, 0xae, 0x27,
- 0x36, 0xe7, 0x0b, 0xda, 0x1c, 0xa2, 0x4f, 0x01, 0x74, 0x2f, 0x00, 0xd0, 0x34, 0x25, 0xbb, 0xf1,
- 0xc1, 0x15, 0x22, 0x85, 0xf0, 0x2f, 0xbe, 0x10, 0xf4, 0x0c, 0x0a, 0xfe, 0x17, 0x9d, 0x6c, 0xee,
- 0xca, 0x93, 0x65, 0x52, 0xf3, 0x01, 0x39, 0x9b, 0xa4, 0x08, 0x59, 0x20, 0x09, 0x94, 0xe5, 0xe8,
- 0x2e, 0x0e, 0xaa, 0x41, 0x9e, 0xaa, 0x41, 0xf9, 0xe2, 0x7c, 0x19, 0x55, 0x05, 0x7e, 0xb2, 0x2a,
- 0xa0, 0xf6, 0x08, 0x9e, 0x29, 0x56, 0x48, 0x81, 0x89, 0xc4, 0x82, 0xaf, 0x58, 0x87, 0xbe, 0x0a,
- 0x8f, 0x29, 0x56, 0x40, 0xbd, 0x59, 0xd5, 0x98, 0x0b, 0xf9, 0x9e, 0xe2, 0xf5, 0x7d, 0x4f, 0x48,
- 0x10, 0xaa, 0xf3, 0xa4, 0x58, 0xa2, 0xe9, 0xd5, 0x07, 0x33, 0x2a, 0x29, 0xc9, 0xd8, 0x84, 0x4b,
- 0xa0, 0xb9, 0xf2, 0x23, 0x40, 0x6d, 0x1b, 0xab, 0x2e, 0xd6, 0x48, 0x52, 0x6a, 0xe8, 0x6d, 0xdd,
- 0x35, 0x86, 0xa5, 0xf9, 0x80, 0xdd, 0xcf, 0x73, 0x7c, 0xdd, 0x43, 0xa3, 0xc7, 0x90, 0x7a, 0x89,
- 0x6d, 0x47, 0xb7, 0xcc, 0x12, 0xa2, 0xce, 0x64, 0x89, 0xb7, 0x80, 0xee, 0x8c, 0x8c, 0xf7, 0x94,
- 0x51, 0xc9, 0x82, 0x1c, 0x6d, 0x43, 0x1e, 0x9b, 0x6d, 0x4b, 0xd3, 0xcd, 0x2e, 0x4d, 0x33, 0x4b,
- 0xb7, 0xfc, 0x7c, 0xe7, 0xcb, 0xf3, 0xe5, 0xaf, 0x8d, 0xf0, 0xd7, 0x39, 0x2d, 0x99, 0xb6, 0x9c,
- 0xc3, 0x81, 0x2f, 0xb4, 0x0d, 0x29, 0x11, 0x93, 0x17, 0xe8, 0x9e, 0xae, 0x4e, 0xcb, 0x30, 0x47,
- 0x23, 0x3a, 0x5f, 0x97, 0x60, 0x27, 0xe5, 0x82, 0xa6, 0x3b, 0x24, 0x17, 0xd1, 0x4a, 0xb7, 0x83,
- 0xe5, 0x82, 0x80, 0xa2, 0x2a, 0x40, 0x17, 0x5b, 0x0a, 0x6b, 0xaa, 0x95, 0xee, 0xd0, 0xe1, 0x96,
- 0x02, 0xc3, 0x75, 0xb1, 0xb5, 0x26, 0x5a, 0x6f, 0xa4, 0x5a, 0xea, 0xe8, 0x5d, 0x91, 0x22, 0x74,
- 0xb1, 0xc5, 0x00, 0xa8, 0x0c, 0x99, 0xbe, 0x8d, 0x35, 0xbd, 0x4d, 0x0a, 0xdb, 0xbb, 0x01, 0xdf,
- 0xec, 0x83, 0xcb, 0x4b, 0x90, 0xf1, 0xbc, 0x06, 0x4a, 0x41, 0xac, 0x72, 0x58, 0x65, 0x7d, 0x94,
- 0x5a, 0xfd, 0xb0, 0x2a, 0x45, 0xca, 0xf7, 0x20, 0x4e, 0x17, 0x9f, 0x85, 0xd4, 0x56, 0x4b, 0x7e,
- 0x56, 0x91, 0x6b, 0xac, 0x77, 0xd3, 0x68, 0x3e, 0xad, 0xcb, 0x47, 0xf5, 0x9a, 0x24, 0xe2, 0xc2,
- 0x79, 0x1c, 0x90, 0x5f, 0xb6, 0x1d, 0x59, 0xbc, 0x0c, 0xee, 0x42, 0xb1, 0xed, 0x41, 0xd9, 0x01,
- 0x44, 0x56, 0xa2, 0xab, 0x85, 0x8d, 0xc7, 0xaf, 0x2d, 0xfd, 0x84, 0x8c, 0x20, 0xc8, 0x57, 0xa6,
- 0x42, 0x3b, 0x04, 0x0d, 0xe4, 0x43, 0xd1, 0x91, 0x18, 0x24, 0x43, 0xa2, 0x7d, 0x8a, 0xdb, 0xcf,
- 0x79, 0x14, 0xfe, 0xd6, 0x94, 0x81, 0x69, 0xaa, 0x18, 0x50, 0xdc, 0x2a, 0xe1, 0xf1, 0x87, 0x16,
- 0xe9, 0x01, 0x15, 0x85, 0xe4, 0xb0, 0x7b, 0x8d, 0x5f, 0xea, 0xb1, 0x26, 0xb5, 0x9b, 0x84, 0xc7,
- 0x0a, 0x78, 0xd7, 0xc7, 0x50, 0x34, 0x2d, 0x57, 0x21, 0x25, 0x23, 0xf7, 0x02, 0xb4, 0x10, 0xcc,
- 0x6f, 0x4a, 0x5c, 0x57, 0x7d, 0x9b, 0xcf, 0x9b, 0x96, 0xdb, 0x1c, 0x18, 0x06, 0x03, 0xa0, 0x3f,
- 0x89, 0xc0, 0x32, 0x8b, 0x95, 0xca, 0x2b, 0xd6, 0x00, 0x50, 0x58, 0x7a, 0xeb, 0xef, 0x11, 0x6d,
- 0x97, 0x4c, 0x4f, 0x8c, 0x2e, 0xeb, 0x1e, 0xf0, 0xa9, 0xbe, 0x39, 0xb8, 0x84, 0xa6, 0x7c, 0x04,
- 0x85, 0xf0, 0x31, 0xa1, 0x0c, 0x24, 0xaa, 0xdb, 0xf5, 0xea, 0xae, 0x34, 0x87, 0x8a, 0x90, 0xdd,
- 0x6a, 0xc9, 0xf5, 0xc6, 0x93, 0xa6, 0xb2, 0x5b, 0xff, 0x21, 0x6b, 0xf7, 0x35, 0x5b, 0x5e, 0xbb,
- 0xaf, 0x04, 0x0b, 0xc7, 0xcd, 0xc6, 0xa7, 0xc7, 0x75, 0xe5, 0x59, 0xe3, 0x68, 0xbb, 0x75, 0x7c,
- 0xa4, 0x34, 0x9a, 0xb5, 0xfa, 0x67, 0x52, 0xcc, 0x2b, 0xc1, 0x12, 0x52, 0xb2, 0xfc, 0xab, 0x28,
- 0x14, 0x0e, 0x6c, 0xbd, 0xa7, 0xda, 0xc3, 0x5d, 0x3c, 0x3c, 0x7c, 0xa5, 0xf6, 0xd1, 0x27, 0xb0,
- 0x60, 0xe2, 0x57, 0x4a, 0x9f, 0x41, 0x15, 0x2f, 0xa5, 0x8f, 0x4c, 0xee, 0x12, 0xcf, 0x9b, 0xf8,
- 0x15, 0x97, 0xd0, 0xe0, 0x19, 0xfd, 0xd7, 0x21, 0x6b, 0x19, 0x1a, 0xe3, 0xc4, 0xa2, 0xcf, 0x91,
- 0x0d, 0x32, 0x81, 0x65, 0x68, 0x0d, 0x86, 0x26, 0xd4, 0x64, 0x3c, 0x41, 0x1d, 0x9b, 0x40, 0x6d,
- 0xe2, 0x57, 0x82, 0xfa, 0x13, 0x58, 0x20, 0xb2, 0xc7, 0x66, 0x17, 0x9f, 0x32, 0x3b, 0xcb, 0xd0,
- 0x46, 0x66, 0xf7, 0x1d, 0xb8, 0x33, 0xbe, 0xbe, 0xb1, 0x46, 0xdb, 0xad, 0x91, 0x65, 0x91, 0x1c,
- 0x87, 0x1b, 0xe5, 0x3f, 0x44, 0x80, 0x06, 0xa3, 0x81, 0x2b, 0xda, 0x7f, 0x74, 0xdf, 0xbe, 0x01,
- 0x79, 0x22, 0xd7, 0xaf, 0x01, 0x23, 0x53, 0xf4, 0x8c, 0x2c, 0x57, 0x44, 0x16, 0xc2, 0x45, 0xd6,
- 0xe3, 0x73, 0x45, 0xa7, 0x71, 0x59, 0x86, 0xd7, 0x6c, 0x44, 0xef, 0x42, 0x4e, 0x37, 0x89, 0x33,
- 0xe6, 0x3d, 0x88, 0x60, 0x5b, 0x28, 0xcb, 0x31, 0xf5, 0xb3, 0xbe, 0xcd, 0x67, 0xfc, 0xab, 0x28,
- 0xdc, 0xdd, 0x57, 0x5d, 0x6c, 0xeb, 0xaa, 0xa1, 0xff, 0x11, 0xd6, 0x9e, 0xea, 0xf8, 0x95, 0x8c,
- 0x3b, 0x36, 0x76, 0x4e, 0xd1, 0x67, 0x30, 0x3f, 0xb6, 0x1d, 0x74, 0xea, 0xd9, 0x8d, 0x77, 0x66,
- 0x8b, 0x46, 0x22, 0xa7, 0x1e, 0xd9, 0x31, 0xb4, 0x1f, 0x3e, 0x58, 0x56, 0x93, 0x5c, 0x4d, 0x66,
- 0xf0, 0xe4, 0x1f, 0x43, 0x42, 0x75, 0x14, 0xab, 0xc3, 0x3d, 0xce, 0x5b, 0x01, 0x41, 0x03, 0x57,
- 0x37, 0xd6, 0x4e, 0x8d, 0xf6, 0xda, 0x91, 0xb8, 0x88, 0x11, 0xbe, 0x4a, 0x75, 0x5a, 0x1d, 0xf4,
- 0x21, 0x14, 0x9d, 0x53, 0x6b, 0x60, 0x68, 0xca, 0x89, 0xda, 0x7e, 0xde, 0xd1, 0x0d, 0x23, 0xd4,
- 0x4f, 0x2a, 0x30, 0xe4, 0x26, 0xc7, 0xf1, 0x3d, 0xfb, 0x8b, 0x14, 0x20, 0x7f, 0x3e, 0xfb, 0x03,
- 0x57, 0xa5, 0xde, 0xbc, 0x02, 0x49, 0xee, 0x46, 0xd8, 0x1e, 0xbd, 0x3b, 0xd5, 0xe3, 0x86, 0xfb,
- 0x67, 0xdb, 0x73, 0x32, 0x67, 0x44, 0x3f, 0x08, 0xde, 0xbb, 0xcc, 0xbc, 0x23, 0xdb, 0x73, 0xe2,
- 0x42, 0x66, 0x17, 0x12, 0x8e, 0x4b, 0xa2, 0x4f, 0x8c, 0xe6, 0x0c, 0xeb, 0x53, 0xf8, 0xc7, 0x27,
- 0xbf, 0x76, 0x48, 0xd8, 0x84, 0xcf, 0xa5, 0x32, 0xd0, 0x33, 0xc8, 0x78, 0xa9, 0x32, 0xef, 0x1f,
- 0x3e, 0x9a, 0x5d, 0xa0, 0x17, 0xe5, 0x44, 0x0c, 0xf4, 0x64, 0xa1, 0x0a, 0x64, 0x7b, 0x9c, 0xcc,
- 0x6f, 0x88, 0xac, 0xf0, 0x6a, 0x05, 0x84, 0x04, 0x5a, 0xb5, 0x04, 0xbe, 0x64, 0x10, 0x4c, 0x0d,
- 0x1a, 0xd1, 0x6d, 0xcb, 0x30, 0xc8, 0xa1, 0x51, 0x4f, 0xeb, 0x45, 0x74, 0x01, 0x45, 0xbb, 0xa4,
- 0xe6, 0xf0, 0xbc, 0x71, 0x9a, 0xee, 0xe7, 0x7b, 0x33, 0xc7, 0xc0, 0xed, 0x39, 0x39, 0xc0, 0x8e,
- 0x5a, 0x50, 0xe8, 0x87, 0x5c, 0x21, 0x4f, 0xf0, 0x1f, 0x4c, 0xcb, 0xf2, 0x42, 0xc4, 0xdb, 0x73,
- 0xf2, 0x08, 0x3b, 0xfa, 0x31, 0xa0, 0xf6, 0x98, 0x9f, 0x28, 0xc1, 0x6b, 0x66, 0x39, 0xca, 0xb0,
- 0x3d, 0x27, 0x4f, 0x10, 0x83, 0x3e, 0x87, 0xbb, 0xbd, 0xc9, 0x26, 0xcd, 0x53, 0xfd, 0xb5, 0x29,
- 0x23, 0x4c, 0x71, 0x04, 0xdb, 0x73, 0xf2, 0x34, 0x81, 0xe5, 0x4f, 0x20, 0x41, 0x55, 0x87, 0x24,
- 0x2c, 0xc7, 0xcd, 0xdd, 0x66, 0xeb, 0x59, 0x93, 0x05, 0xa0, 0x5a, 0x7d, 0xaf, 0x7e, 0x54, 0x57,
- 0x5a, 0xcd, 0x3d, 0x12, 0x80, 0xde, 0x80, 0xdb, 0x1c, 0x50, 0x69, 0xd6, 0x94, 0x67, 0x72, 0x43,
- 0xa0, 0xa2, 0xe5, 0xd5, 0x60, 0x46, 0x94, 0x86, 0x78, 0xb3, 0xd5, 0xac, 0x4b, 0x73, 0x34, 0x37,
- 0xaa, 0xd5, 0xa4, 0x08, 0xcd, 0x8d, 0xe4, 0xd6, 0x81, 0x14, 0x65, 0xd6, 0xb7, 0x99, 0x03, 0xd0,
- 0x3c, 0x75, 0xdb, 0x89, 0xa7, 0x93, 0x52, 0xaa, 0xfc, 0xf7, 0x11, 0x48, 0x13, 0x37, 0xdc, 0x30,
- 0x3b, 0x16, 0x7a, 0x04, 0x99, 0xbe, 0x6a, 0x63, 0xd3, 0xf5, 0x3d, 0xad, 0xe8, 0x00, 0xa6, 0x0f,
- 0x28, 0xc2, 0x6b, 0x50, 0xa5, 0x19, 0x61, 0xe3, 0xb2, 0xf6, 0xce, 0x16, 0x48, 0x5c, 0x9c, 0xd3,
- 0x3e, 0xc5, 0x3d, 0x95, 0x48, 0x65, 0x3d, 0xa8, 0x37, 0xbd, 0xee, 0x2b, 0xc5, 0x1f, 0x52, 0xb4,
- 0x27, 0xbb, 0xd0, 0x0f, 0x42, 0x45, 0xef, 0xee, 0x7f, 0xde, 0x81, 0xe2, 0x48, 0xe6, 0x73, 0x49,
- 0x39, 0xbf, 0x42, 0xcb, 0xf9, 0x98, 0xef, 0xf7, 0xbd, 0x72, 0x3e, 0xca, 0x2b, 0xf9, 0xd0, 0x62,
- 0xe3, 0x33, 0x2e, 0xf6, 0x91, 0x9f, 0xdd, 0x33, 0xe3, 0x7b, 0x83, 0xc7, 0x94, 0xf9, 0x4b, 0x12,
- 0xfb, 0x03, 0x98, 0xef, 0x59, 0x9a, 0xde, 0x21, 0x79, 0x2c, 0xb1, 0x5c, 0x57, 0xef, 0x61, 0x9e,
- 0xe5, 0xcc, 0xe4, 0x70, 0xa5, 0x20, 0x37, 0x41, 0xa2, 0x27, 0x90, 0x12, 0x5d, 0xab, 0x34, 0x8d,
- 0x00, 0xb3, 0x7a, 0x4c, 0x91, 0xdf, 0x73, 0x6e, 0xb4, 0x05, 0x05, 0x13, 0x9f, 0x05, 0x9b, 0xac,
- 0x99, 0x90, 0x4f, 0xc9, 0x35, 0xf1, 0xd9, 0xe4, 0x0e, 0x6b, 0xce, 0xf4, 0x31, 0x1a, 0xfa, 0x14,
- 0xf2, 0xe1, 0x60, 0x07, 0xd7, 0x08, 0x76, 0xb9, 0x7e, 0x30, 0xd2, 0x6d, 0x41, 0x4a, 0x44, 0xb9,
- 0xec, 0x35, 0xa2, 0x9c, 0x60, 0x46, 0x9b, 0x24, 0x85, 0x38, 0x73, 0xfd, 0xac, 0x26, 0xe7, 0x97,
- 0x65, 0x17, 0xe7, 0xcb, 0x59, 0xb2, 0xc2, 0x09, 0xad, 0xd4, 0xac, 0xe9, 0xc1, 0x35, 0xb4, 0x03,
- 0xe0, 0x3d, 0x35, 0x70, 0xe8, 0x0d, 0xc2, 0xf4, 0xf2, 0xfc, 0x40, 0x10, 0xfa, 0x53, 0x92, 0x03,
- 0xdc, 0x68, 0x1f, 0x32, 0xc2, 0x1d, 0xb3, 0xc2, 0x79, 0xba, 0xdf, 0x1a, 0x0f, 0x0e, 0x22, 0x24,
- 0x78, 0x12, 0x48, 0xcd, 0x60, 0x60, 0xd5, 0xc1, 0xbc, 0x7a, 0x7e, 0x3c, 0x63, 0xcd, 0xc0, 0x8c,
- 0xab, 0x7a, 0xaa, 0x9a, 0x5d, 0xbc, 0x47, 0xf8, 0x37, 0xa3, 0xa5, 0x88, 0xcc, 0x44, 0xa1, 0x26,
- 0x48, 0x74, 0xcb, 0x82, 0xb1, 0x46, 0xa2, 0xbb, 0xf6, 0xb6, 0x30, 0x5c, 0xb2, 0x6b, 0x53, 0xe3,
- 0x0d, 0xd5, 0xa9, 0x7d, 0x3f, 0xe6, 0x7c, 0x0f, 0x0a, 0x1d, 0xcb, 0xee, 0xa9, 0xae, 0x22, 0x8c,
- 0x67, 0xde, 0xef, 0xb3, 0x7d, 0x79, 0xbe, 0x9c, 0xdf, 0xa2, 0x58, 0x61, 0x38, 0xf9, 0x4e, 0xf0,
- 0x13, 0x6d, 0x8a, 0xd0, 0x7c, 0x8b, 0x46, 0xd2, 0x77, 0x5e, 0xbb, 0x59, 0x13, 0x22, 0x72, 0x13,
- 0x92, 0xb4, 0x1c, 0x72, 0x4a, 0x0b, 0x74, 0xc7, 0xaf, 0x59, 0x5a, 0xc9, 0x5c, 0x0a, 0xda, 0x83,
- 0x82, 0x46, 0x20, 0xa4, 0x56, 0x67, 0x1d, 0xbc, 0xdb, 0x54, 0xee, 0xf2, 0x14, 0xb9, 0xc2, 0xc5,
- 0x8a, 0x46, 0x8d, 0x60, 0x66, 0x5d, 0xbe, 0x16, 0xa4, 0x3b, 0x6a, 0x4f, 0x37, 0x74, 0xec, 0x94,
- 0xee, 0x50, 0x39, 0x1f, 0x5e, 0x6a, 0xcf, 0xa3, 0xb7, 0x39, 0x22, 0x84, 0x0b, 0x21, 0x9e, 0x59,
- 0x53, 0xc0, 0x90, 0x1c, 0xdf, 0xdd, 0x71, 0xb3, 0x16, 0xb7, 0x39, 0xa1, 0x9b, 0x1d, 0x6a, 0xd6,
- 0xfc, 0x4b, 0x43, 0xf7, 0x01, 0x5e, 0xea, 0xf8, 0x95, 0xf2, 0x62, 0x80, 0xed, 0x61, 0xa9, 0x14,
- 0x2c, 0xcc, 0x09, 0xfc, 0x53, 0x02, 0x46, 0x1f, 0x41, 0x46, 0xc3, 0x7d, 0x6c, 0x6a, 0x4e, 0xcb,
- 0x2c, 0xbd, 0x41, 0x2b, 0x8d, 0x5b, 0x17, 0xe7, 0xcb, 0x99, 0x9a, 0x00, 0x72, 0x2f, 0xea, 0x53,
- 0xa1, 0xcf, 0x21, 0xc7, 0x3e, 0xb0, 0xd6, 0x32, 0x37, 0x87, 0xa5, 0x45, 0xba, 0xe8, 0x87, 0x33,
- 0x1e, 0x8a, 0xdf, 0xf6, 0xf2, 0x6e, 0x0a, 0x6a, 0x01, 0x69, 0x72, 0x48, 0x36, 0xfa, 0x03, 0xc8,
- 0x09, 0x3d, 0xde, 0xb1, 0x4e, 0x9c, 0xd2, 0xd7, 0x2e, 0x6d, 0xe3, 0x8f, 0x8e, 0xb5, 0xef, 0xb3,
- 0x0a, 0x2f, 0x15, 0x94, 0x86, 0x3e, 0x83, 0xbc, 0x77, 0x21, 0x69, 0xf5, 0x5d, 0xa7, 0xf4, 0xe6,
- 0xa5, 0xd5, 0xeb, 0x98, 0x19, 0x72, 0xde, 0x56, 0x9f, 0xde, 0x70, 0x04, 0xbe, 0xd0, 0x3d, 0xc8,
- 0x68, 0xb6, 0xd5, 0x67, 0xd1, 0xe2, 0xad, 0x95, 0xc8, 0x6a, 0xcc, 0xeb, 0xbd, 0xd8, 0x56, 0x9f,
- 0x86, 0x01, 0x05, 0x0a, 0x36, 0xee, 0x1b, 0x6a, 0x1b, 0xf7, 0x48, 0x1c, 0xb3, 0x3a, 0xa5, 0x25,
- 0x3a, 0xfa, 0xc6, 0xcc, 0x1b, 0xe9, 0x31, 0x0b, 0xc5, 0x0c, 0xc8, 0x6b, 0x75, 0xd0, 0x31, 0x80,
- 0x3a, 0xd0, 0x74, 0x57, 0xe9, 0x59, 0x1a, 0x2e, 0x2d, 0x5f, 0xfa, 0x3e, 0x60, 0x54, 0x78, 0x85,
- 0x30, 0xee, 0x5b, 0x1a, 0xf6, 0xee, 0xc4, 0x04, 0x00, 0x7d, 0x04, 0x59, 0xba, 0xb4, 0xcf, 0xad,
- 0x13, 0xa2, 0x9b, 0x2b, 0x74, 0x71, 0xf3, 0xfc, 0x2c, 0x33, 0x35, 0xdb, 0xea, 0xef, 0x58, 0x27,
- 0x54, 0x63, 0xf8, 0x9f, 0x1a, 0x72, 0x20, 0xd7, 0x6d, 0x2b, 0xbe, 0xe3, 0xbc, 0x47, 0x4f, 0xf1,
- 0xe3, 0x19, 0xe7, 0xf2, 0xa4, 0x3a, 0xc1, 0x95, 0xde, 0x12, 0x11, 0xe0, 0x49, 0x55, 0xc0, 0x1c,
- 0x39, 0xdb, 0x6d, 0x7b, 0x1f, 0xa4, 0x22, 0x64, 0x0d, 0x3e, 0x6e, 0x00, 0xe5, 0x60, 0x45, 0xc8,
- 0x30, 0xcc, 0x04, 0x9a, 0xc0, 0x3b, 0x81, 0x0a, 0xad, 0xa6, 0xd8, 0x99, 0xdd, 0x9f, 0x3d, 0xc2,
- 0x17, 0x18, 0x77, 0xc5, 0x69, 0x75, 0xe8, 0xc1, 0xb6, 0x21, 0x67, 0x0d, 0xdc, 0x13, 0x6b, 0x60,
- 0x6a, 0x4a, 0xe7, 0xb9, 0x53, 0x7a, 0x9b, 0xae, 0xf6, 0x4a, 0x5d, 0x1b, 0x6f, 0x75, 0x2d, 0x2e,
- 0x68, 0x6b, 0xd7, 0x91, 0xb3, 0x42, 0xea, 0xd6, 0x73, 0x07, 0xfd, 0x14, 0xb2, 0xba, 0xe9, 0x8f,
- 0xf1, 0xe0, 0xea, 0x63, 0x20, 0x51, 0x79, 0x34, 0x4c, 0x6f, 0x08, 0xe0, 0x32, 0xc9, 0x08, 0x1f,
- 0x40, 0xc1, 0xea, 0x74, 0x0c, 0xdd, 0xc4, 0x8a, 0x8d, 0x55, 0xc7, 0x32, 0x4b, 0xef, 0x04, 0x76,
- 0x30, 0xcf, 0x71, 0x32, 0x45, 0xa1, 0x32, 0x64, 0x5c, 0xdc, 0xeb, 0x5b, 0xb6, 0x6a, 0x0f, 0x4b,
- 0xef, 0x06, 0xaf, 0x12, 0x3d, 0x30, 0x3a, 0x81, 0xc5, 0x81, 0x89, 0xcf, 0xfa, 0x96, 0x83, 0x35,
- 0x65, 0x2c, 0xb7, 0x5c, 0xa5, 0x3e, 0xee, 0x01, 0x9f, 0xd4, 0xdd, 0x63, 0x41, 0x39, 0x31, 0xc9,
- 0xbc, 0x3b, 0x98, 0x88, 0xd6, 0xd0, 0xb7, 0x60, 0x41, 0x77, 0x94, 0x60, 0xd6, 0xae, 0x10, 0x5f,
- 0x57, 0x7a, 0x2f, 0x30, 0x25, 0xa4, 0x3b, 0xa3, 0x19, 0x3f, 0xfa, 0x09, 0x14, 0x0d, 0xab, 0xad,
- 0x1a, 0xba, 0x3b, 0x14, 0xdd, 0xd0, 0xf7, 0xa9, 0x06, 0x7c, 0x73, 0x46, 0x25, 0xdd, 0xe3, 0xdc,
- 0xac, 0x27, 0x2a, 0x17, 0x8c, 0xd0, 0x37, 0xfa, 0x59, 0x04, 0x56, 0x5e, 0xd3, 0x3a, 0x73, 0x4a,
- 0x1f, 0x5c, 0x7a, 0xa9, 0x38, 0x43, 0xef, 0xec, 0xad, 0xcb, 0x7a, 0x67, 0xce, 0xe2, 0x2f, 0x23,
- 0x30, 0x3f, 0x96, 0x3a, 0xa0, 0x9f, 0x40, 0xca, 0xb4, 0xb4, 0xc0, 0xad, 0x76, 0x9d, 0x9f, 0x41,
- 0xb2, 0x69, 0x69, 0xec, 0x52, 0xfb, 0x51, 0x57, 0x77, 0x4f, 0x07, 0x27, 0x6b, 0x6d, 0xab, 0xb7,
- 0xee, 0x4d, 0x4e, 0x3b, 0xf1, 0xff, 0x5e, 0xef, 0x3f, 0xef, 0xae, 0xd3, 0xbf, 0xfa, 0x27, 0x6b,
- 0x8c, 0x4d, 0x4e, 0x12, 0xa9, 0x0d, 0x0d, 0x7d, 0x08, 0x45, 0x7c, 0xd6, 0xd7, 0xed, 0x40, 0xfa,
- 0x1c, 0x0d, 0x38, 0xc4, 0x82, 0x8f, 0x24, 0xd6, 0xc3, 0xef, 0x1d, 0x7f, 0x15, 0x85, 0xe2, 0x48,
- 0xf8, 0x26, 0xf5, 0x02, 0x6d, 0xed, 0x84, 0xea, 0x05, 0x02, 0xb9, 0xa4, 0x8a, 0x09, 0xbe, 0x05,
- 0x8a, 0xdd, 0xf4, 0x5d, 0x58, 0xf8, 0x3e, 0x2f, 0x71, 0x85, 0xfb, 0xbc, 0xef, 0xc0, 0x1d, 0xdd,
- 0x51, 0x4c, 0xcb, 0x14, 0x6d, 0x57, 0xaf, 0x42, 0x0f, 0xbe, 0xc1, 0xb9, 0xa5, 0x3b, 0x4d, 0xcb,
- 0x64, 0x0d, 0x57, 0x6f, 0xd5, 0xfe, 0x73, 0x9d, 0xd4, 0xf8, 0x73, 0x1d, 0xaf, 0x73, 0x19, 0x97,
- 0x12, 0x8b, 0xbf, 0x88, 0x40, 0x26, 0xf8, 0xda, 0x35, 0x1a, 0xee, 0xb8, 0x8d, 0xd5, 0x50, 0xd7,
- 0x7c, 0x9d, 0x10, 0xde, 0x85, 0xd8, 0xec, 0xbb, 0xc0, 0x8f, 0xf6, 0x8f, 0x21, 0x1b, 0x88, 0xcb,
- 0xa3, 0x5d, 0x91, 0xc8, 0x35, 0xba, 0x22, 0x6f, 0x43, 0x92, 0x07, 0x23, 0xa6, 0x58, 0x79, 0xce,
- 0x9d, 0x60, 0x81, 0x28, 0xf1, 0x39, 0x09, 0x42, 0x7c, 0xf4, 0x7f, 0x8b, 0x41, 0x2e, 0x18, 0xb7,
- 0x89, 0xe7, 0xd2, 0xcd, 0xb6, 0x4d, 0x83, 0x26, 0x1d, 0x3d, 0xe6, 0x3d, 0x82, 0x10, 0x60, 0x12,
- 0xcd, 0x7b, 0xba, 0xa9, 0xd0, 0x8b, 0xf7, 0x90, 0xf2, 0xa6, 0x7b, 0xba, 0xf9, 0x94, 0x40, 0x29,
- 0x89, 0x7a, 0xc6, 0x49, 0x62, 0x21, 0x12, 0xf5, 0x8c, 0x91, 0x2c, 0xd2, 0x54, 0xd8, 0x76, 0x69,
- 0xbd, 0x1a, 0x0b, 0xa4, 0xb8, 0xb6, 0x8b, 0x96, 0x20, 0xf5, 0x52, 0xb7, 0xdd, 0x81, 0x6a, 0xd0,
- 0xd2, 0x54, 0x1c, 0xb3, 0x00, 0x22, 0x13, 0x0a, 0x7e, 0xa6, 0xf2, 0xca, 0xc4, 0x36, 0x55, 0x9c,
- 0xec, 0x46, 0xe5, 0x1a, 0xa9, 0x8a, 0xff, 0x41, 0x04, 0x09, 0x7f, 0xee, 0x04, 0x81, 0x8b, 0x7f,
- 0x17, 0x81, 0x7c, 0x88, 0x0c, 0x35, 0xa0, 0x48, 0x07, 0x1e, 0x6b, 0xe7, 0xde, 0xf3, 0xde, 0xad,
- 0x12, 0xf4, 0xc4, 0x72, 0x33, 0x6f, 0x05, 0x50, 0x1a, 0xfa, 0x04, 0x0a, 0x4c, 0x94, 0xf7, 0x9c,
- 0x26, 0xac, 0x7e, 0x39, 0x2a, 0x29, 0xfc, 0xa6, 0x26, 0x67, 0xf9, 0x30, 0x2d, 0xf8, 0x52, 0x60,
- 0xd1, 0x84, 0x6c, 0x20, 0x15, 0x9a, 0x41, 0xef, 0xbf, 0x0d, 0x71, 0xcf, 0x0b, 0xcd, 0xda, 0x35,
- 0x75, 0x7d, 0xd7, 0xf4, 0xf3, 0x08, 0x2c, 0x4c, 0x4a, 0x49, 0x42, 0xf6, 0xc4, 0x14, 0x69, 0x26,
- 0x7b, 0xba, 0x1f, 0x4c, 0x15, 0x99, 0x72, 0x89, 0xdb, 0x6b, 0x3f, 0x59, 0x7c, 0xc7, 0x53, 0x71,
- 0xa6, 0x5b, 0xc5, 0x90, 0x8a, 0x93, 0xe2, 0x2f, 0xa8, 0xe4, 0xff, 0x12, 0x83, 0x42, 0x38, 0x20,
- 0xa1, 0xa7, 0x90, 0xec, 0x1a, 0xd6, 0x89, 0x6a, 0xf0, 0x2e, 0xed, 0xf7, 0xae, 0x15, 0xd7, 0xd6,
- 0x9e, 0x50, 0x19, 0xdb, 0x73, 0x32, 0x97, 0x86, 0x1c, 0x98, 0xb7, 0x71, 0x57, 0xb7, 0x4c, 0xd5,
- 0x50, 0x4e, 0x86, 0xec, 0x44, 0xf9, 0xce, 0xd6, 0xaf, 0x37, 0x84, 0xcc, 0xc5, 0x6d, 0x0e, 0x29,
- 0xe1, 0xf6, 0x9c, 0x5c, 0xb4, 0xc3, 0x20, 0xd4, 0x83, 0x62, 0x70, 0x50, 0xdb, 0x7a, 0xc5, 0x5b,
- 0xe0, 0xd5, 0x9b, 0x0e, 0x29, 0x5b, 0xaf, 0xb6, 0x69, 0x22, 0x1d, 0x00, 0x2c, 0x7e, 0x0c, 0xc5,
- 0x91, 0x49, 0xa1, 0x32, 0x24, 0x19, 0x0d, 0x8f, 0x46, 0xf0, 0xe5, 0xf9, 0x72, 0x92, 0x11, 0xc9,
- 0x1c, 0xc3, 0xcf, 0xe2, 0x36, 0xe4, 0x43, 0xe2, 0x39, 0xb8, 0x00, 0x49, 0xb6, 0x97, 0x41, 0x5d,
- 0xde, 0x04, 0x48, 0x8b, 0xc4, 0xa1, 0xbc, 0x0a, 0x19, 0x2f, 0x0b, 0x47, 0x39, 0x48, 0xd7, 0x1a,
- 0x87, 0x95, 0xcd, 0xbd, 0x7a, 0x4d, 0x9a, 0x43, 0x79, 0xc8, 0xc8, 0xf5, 0x4a, 0x8d, 0xf6, 0x13,
- 0xa5, 0xc8, 0x77, 0xd3, 0x7f, 0xf6, 0xf3, 0xe5, 0x08, 0x0f, 0x04, 0x49, 0x29, 0xb5, 0x13, 0x4f,
- 0x23, 0xe9, 0x56, 0xf9, 0xbf, 0xd3, 0x80, 0x6a, 0xaa, 0xab, 0x92, 0x0d, 0xb8, 0x42, 0xd7, 0x2d,
- 0x7a, 0x89, 0xe5, 0x84, 0x3b, 0x29, 0xb1, 0x1b, 0x75, 0x52, 0x26, 0xf6, 0xd5, 0xe2, 0x37, 0xe9,
- 0xab, 0x5d, 0xab, 0xbd, 0x37, 0xde, 0x0b, 0x48, 0xde, 0xa0, 0x17, 0xf0, 0x14, 0x52, 0x2c, 0xa3,
- 0x65, 0xcf, 0x75, 0xa6, 0xb7, 0x2a, 0xc6, 0x0f, 0x86, 0x37, 0x75, 0x9c, 0xba, 0xe9, 0xda, 0x43,
- 0xef, 0x26, 0x9f, 0xc1, 0xfc, 0x2e, 0x4a, 0xfa, 0xfa, 0x5d, 0x94, 0xf1, 0x7c, 0x3e, 0x33, 0x3d,
- 0x9f, 0xff, 0x31, 0x70, 0x1b, 0x10, 0xd9, 0x30, 0x5c, 0x7a, 0xa9, 0x3d, 0x61, 0x39, 0x4c, 0xe9,
- 0x79, 0x3a, 0x9c, 0xb3, 0x03, 0x5f, 0x8b, 0x47, 0x00, 0x3c, 0x61, 0x37, 0x3b, 0xd6, 0x0c, 0x0e,
- 0x7b, 0x09, 0x52, 0xc4, 0x11, 0xf6, 0x31, 0xd3, 0x4e, 0x2f, 0x38, 0x72, 0x20, 0xb7, 0xa8, 0x3e,
- 0xe4, 0x82, 0x5b, 0x88, 0x24, 0x88, 0x3d, 0xc7, 0x43, 0xa6, 0xe7, 0x32, 0xf9, 0x13, 0xed, 0x40,
- 0xc2, 0x0f, 0xe1, 0xd3, 0xdf, 0x88, 0x4e, 0x3d, 0x1b, 0x32, 0x5d, 0x99, 0x89, 0xf8, 0x6e, 0xf4,
- 0x71, 0x64, 0xf1, 0x4f, 0xa3, 0x90, 0x0b, 0x2e, 0x13, 0xbd, 0x0d, 0x29, 0xb6, 0x50, 0xf6, 0x0c,
- 0x35, 0xec, 0x16, 0x04, 0x0a, 0x35, 0x21, 0xef, 0x0c, 0xec, 0x97, 0xfa, 0x4b, 0xd5, 0x50, 0xba,
- 0x96, 0x6a, 0xd0, 0xe9, 0x14, 0x36, 0xee, 0x4f, 0x7b, 0xe6, 0xc1, 0x69, 0x9f, 0x58, 0xaa, 0x21,
- 0xba, 0x18, 0x4e, 0x00, 0x86, 0xbe, 0xe9, 0xdd, 0xd2, 0x28, 0xdc, 0x27, 0xb1, 0xcb, 0xcf, 0x02,
- 0x57, 0x7f, 0x31, 0x01, 0xd1, 0xe4, 0x65, 0x9f, 0x24, 0x0a, 0xf3, 0x23, 0xc6, 0xe6, 0xa0, 0xe7,
- 0xf7, 0xd1, 0xbd, 0x28, 0xcc, 0xe8, 0xea, 0xe6, 0xa0, 0xe7, 0x47, 0x61, 0xdb, 0x87, 0x89, 0x28,
- 0xec, 0x79, 0x9f, 0xf2, 0xbf, 0x66, 0xa1, 0x70, 0x34, 0xec, 0x07, 0xbd, 0xcd, 0xb5, 0x2e, 0x25,
- 0x26, 0x5d, 0x3d, 0x44, 0xaf, 0x7e, 0xf5, 0x70, 0xc9, 0x4f, 0x04, 0x98, 0xce, 0xc5, 0x2f, 0xd1,
- 0xb9, 0x1a, 0xc4, 0xe9, 0x23, 0xef, 0x04, 0x3d, 0x9b, 0x69, 0x4e, 0x2e, 0xbc, 0xda, 0xb5, 0xc0,
- 0x3b, 0x6f, 0xca, 0x8d, 0x7e, 0x08, 0x39, 0xba, 0xb9, 0x3d, 0xdc, 0x3b, 0xc1, 0xb6, 0xf0, 0x2d,
- 0x0f, 0x67, 0x93, 0x46, 0x76, 0x79, 0x9f, 0x32, 0x8a, 0xae, 0x05, 0xf6, 0x20, 0x0e, 0x7a, 0x08,
- 0x09, 0xd5, 0xd0, 0xa9, 0xa3, 0x79, 0xdd, 0x8f, 0x07, 0x18, 0x21, 0xfa, 0x3e, 0xe4, 0x55, 0xdb,
- 0x56, 0x87, 0xfc, 0x19, 0xbc, 0x46, 0x9d, 0x09, 0xf7, 0x92, 0x17, 0xe7, 0xcb, 0xd9, 0x0a, 0x41,
- 0xd2, 0x97, 0xef, 0x62, 0x23, 0xb2, 0xaa, 0x07, 0x0a, 0xdd, 0x9e, 0x64, 0x6e, 0x76, 0x7b, 0x02,
- 0x37, 0xf1, 0xf2, 0xe3, 0x0e, 0x3b, 0x7b, 0x03, 0x87, 0xfd, 0x53, 0x58, 0x14, 0x2f, 0x04, 0x89,
- 0x40, 0xff, 0x86, 0x2d, 0xf0, 0x03, 0x85, 0xf2, 0xc5, 0xf9, 0x72, 0x49, 0xf6, 0xa9, 0xfc, 0xe5,
- 0xb2, 0x5a, 0x87, 0xec, 0x54, 0xc9, 0x9e, 0x88, 0xd7, 0x02, 0xae, 0x3b, 0x7f, 0x7d, 0xd7, 0x1d,
- 0x8e, 0xbb, 0x85, 0x1b, 0xc5, 0xdd, 0xf1, 0x30, 0x50, 0x9c, 0x1e, 0x06, 0x9e, 0x8d, 0x86, 0x01,
- 0xe9, 0xf2, 0x16, 0x65, 0x58, 0x81, 0x2f, 0x09, 0x01, 0x7f, 0x15, 0x05, 0xf0, 0xf5, 0x1b, 0x7d,
- 0x1b, 0xee, 0xf6, 0x4f, 0x87, 0x8e, 0xde, 0x56, 0x0d, 0xc5, 0xc6, 0x7d, 0x1b, 0x3b, 0xd8, 0x64,
- 0x59, 0x35, 0x75, 0x1a, 0x39, 0xf9, 0x8e, 0x40, 0xcb, 0x21, 0x2c, 0xfa, 0x18, 0xee, 0x18, 0x56,
- 0x77, 0x12, 0x5f, 0xb0, 0x17, 0x70, 0x9b, 0xd3, 0x8c, 0x30, 0xab, 0x00, 0x6d, 0xb5, 0xaf, 0x9e,
- 0xe8, 0x86, 0xdf, 0x1e, 0xf8, 0xf8, 0xaa, 0xb6, 0xb9, 0x56, 0xf5, 0x44, 0x88, 0x27, 0x1a, 0xbe,
- 0xd0, 0xf2, 0xdb, 0x00, 0x3e, 0x9e, 0x5e, 0xee, 0xee, 0xed, 0xf9, 0x09, 0x1c, 0xbf, 0x26, 0xe6,
- 0x01, 0x6c, 0x77, 0x24, 0x9a, 0x8c, 0xfb, 0xf5, 0xc8, 0x0c, 0x7e, 0x9d, 0x5f, 0xb8, 0x7e, 0x04,
- 0x71, 0xe2, 0x8d, 0x50, 0x1a, 0xe2, 0xf5, 0xe6, 0xf1, 0xbe, 0x34, 0x87, 0x32, 0x90, 0xa8, 0xec,
- 0x35, 0x2a, 0x87, 0x52, 0x04, 0x2d, 0x80, 0xb4, 0x7f, 0xbc, 0x77, 0xd4, 0x90, 0xeb, 0x4f, 0x1a,
- 0xad, 0xa6, 0x42, 0x09, 0xa2, 0x01, 0x47, 0xfe, 0xb7, 0x71, 0x90, 0x98, 0x17, 0xbd, 0xa9, 0x2b,
- 0x9f, 0xde, 0x99, 0x79, 0xfd, 0x1d, 0x6f, 0x58, 0xeb, 0xe3, 0x5f, 0x7d, 0xb6, 0x99, 0xf8, 0x8a,
- 0xb2, 0xcd, 0xe4, 0x0d, 0xb2, 0xcd, 0xd4, 0x0d, 0x9c, 0xd7, 0xef, 0x3b, 0x2b, 0x0c, 0x68, 0xc8,
- 0x2f, 0xa2, 0x00, 0x01, 0xdd, 0xf8, 0x41, 0xf0, 0xa7, 0xd5, 0xd3, 0x2f, 0x7b, 0x47, 0xca, 0xb0,
- 0xed, 0x39, 0xf1, 0xc3, 0xeb, 0x27, 0x90, 0xd6, 0x78, 0xd6, 0xc5, 0x93, 0xb3, 0xf7, 0x66, 0x4e,
- 0xce, 0xb6, 0xe7, 0x64, 0x8f, 0x19, 0x7d, 0x1c, 0xfa, 0x45, 0xdd, 0x83, 0x99, 0x8c, 0x79, 0x5b,
- 0x3c, 0x19, 0xae, 0x40, 0x92, 0x25, 0x1c, 0x5c, 0xd9, 0xa6, 0xfe, 0xb4, 0x6b, 0xc4, 0x34, 0x48,
- 0x39, 0xcc, 0x18, 0x79, 0x19, 0x97, 0x82, 0xc4, 0xc0, 0xd4, 0x2d, 0xf3, 0x7d, 0x39, 0xf8, 0x58,
- 0x55, 0xf4, 0x15, 0x89, 0xf5, 0xd3, 0xbf, 0x55, 0x17, 0x6b, 0xec, 0xd5, 0xc8, 0xb1, 0xf9, 0xd2,
- 0x03, 0x44, 0x50, 0x01, 0x80, 0xe3, 0x75, 0xb3, 0x2b, 0x45, 0x69, 0xf1, 0x47, 0x52, 0x5d, 0xf2,
- 0x15, 0x7b, 0xff, 0xfb, 0x20, 0x8d, 0xfe, 0xb6, 0x2c, 0xf0, 0x7e, 0x64, 0x1e, 0xf2, 0xfb, 0x4f,
- 0xab, 0xd5, 0xa3, 0xc6, 0x7e, 0xfd, 0xf0, 0xa8, 0xb2, 0x7f, 0xc0, 0x5e, 0x41, 0x1e, 0x91, 0xca,
- 0xb1, 0xd5, 0xa8, 0x49, 0xd1, 0xf7, 0xbf, 0x0f, 0xc5, 0x11, 0x85, 0x40, 0x00, 0xc9, 0x83, 0xe3,
- 0xcd, 0xbd, 0x46, 0x75, 0xe2, 0xfb, 0x13, 0x94, 0x85, 0x54, 0x6b, 0x6b, 0x6b, 0xaf, 0xd1, 0xac,
- 0x4b, 0xb1, 0xf7, 0xbf, 0x01, 0xb9, 0x60, 0x42, 0x8a, 0x24, 0xc8, 0xfd, 0xa8, 0xd5, 0xac, 0x2b,
- 0x5b, 0x95, 0xc6, 0xde, 0xb1, 0x4c, 0x66, 0x80, 0xa0, 0xc0, 0xfd, 0x8a, 0x80, 0x45, 0x36, 0x57,
- 0x7f, 0xfd, 0x9f, 0x4b, 0x73, 0xbf, 0xbe, 0x58, 0x8a, 0xfc, 0xe6, 0x62, 0x29, 0xf2, 0xdb, 0x8b,
- 0xa5, 0xc8, 0x7f, 0x5c, 0x2c, 0x45, 0xfe, 0xf2, 0x8b, 0xa5, 0xb9, 0xdf, 0x7c, 0xb1, 0x34, 0xf7,
- 0xdb, 0x2f, 0x96, 0xe6, 0x7e, 0x94, 0x64, 0xff, 0x28, 0xc0, 0xff, 0x05, 0x00, 0x00, 0xff, 0xff,
- 0xf2, 0xe0, 0xfb, 0xf2, 0x7f, 0x40, 0x00, 0x00,
+ 0x39, 0x33, 0x59, 0xcd, 0x32, 0x6d, 0x4f, 0xb9, 0xfe, 0x30, 0x4e, 0x98, 0x5b, 0xf3, 0xcf, 0x13,
+ 0x20, 0xb1, 0x49, 0xd4, 0xb0, 0xd3, 0xb6, 0xf5, 0xbe, 0x6b, 0xd9, 0xde, 0x0c, 0x22, 0x63, 0x33,
+ 0x78, 0x07, 0xa2, 0xba, 0xc6, 0x83, 0xc8, 0x1d, 0xbe, 0x03, 0x51, 0xba, 0x78, 0x7f, 0x29, 0x51,
+ 0x5d, 0x43, 0x6b, 0x10, 0x27, 0x91, 0x8e, 0xae, 0x21, 0xbb, 0xb1, 0x38, 0x3a, 0x4b, 0xdc, 0x5b,
+ 0x63, 0x81, 0xf0, 0x48, 0xa6, 0x74, 0x68, 0x05, 0xd2, 0xe6, 0xc0, 0x30, 0x68, 0x10, 0x23, 0x2b,
+ 0x4b, 0x8b, 0xe9, 0x0a, 0x28, 0xba, 0x07, 0x39, 0x0d, 0x77, 0xd4, 0x81, 0xe1, 0x2a, 0xf8, 0xac,
+ 0x6f, 0x33, 0x4b, 0x91, 0xb3, 0x1c, 0x56, 0x3f, 0xeb, 0xdb, 0xe8, 0x4d, 0x48, 0x9e, 0xea, 0x9a,
+ 0x86, 0x4d, 0x6a, 0x28, 0x42, 0x04, 0x87, 0xa1, 0x0d, 0x98, 0x1f, 0x38, 0xd8, 0x51, 0x1c, 0xfc,
+ 0x62, 0x40, 0xb4, 0x84, 0x9e, 0x0b, 0xd0, 0x73, 0x49, 0xf2, 0xc3, 0x2b, 0x12, 0x82, 0x43, 0x8e,
+ 0x27, 0x47, 0x71, 0x0f, 0x72, 0x6d, 0xab, 0xd7, 0x1f, 0xb8, 0x98, 0x0d, 0x9a, 0x65, 0x83, 0x72,
+ 0x18, 0x1d, 0x74, 0x03, 0xe6, 0xad, 0x57, 0xe6, 0x88, 0xd8, 0x5c, 0x58, 0x2c, 0x21, 0x08, 0x8a,
+ 0xfd, 0x04, 0xa4, 0x7e, 0x57, 0x51, 0x5d, 0xd7, 0xd6, 0x4f, 0x88, 0x6c, 0x73, 0xd0, 0x2b, 0xe5,
+ 0x43, 0x7b, 0x5a, 0x38, 0x78, 0x52, 0x11, 0xe8, 0xe6, 0xa0, 0x27, 0x17, 0xfa, 0xdd, 0xe0, 0x37,
+ 0xda, 0x82, 0xb7, 0x54, 0xc3, 0xc5, 0xb6, 0x70, 0x6a, 0x64, 0x13, 0x15, 0xdd, 0x54, 0xfa, 0xb6,
+ 0xd5, 0xb5, 0xb1, 0xe3, 0x94, 0x0a, 0x81, 0x1d, 0x78, 0x83, 0x92, 0xb2, 0xf3, 0x39, 0x1a, 0xf6,
+ 0x71, 0xc3, 0x3c, 0xe0, 0x64, 0xe8, 0xc7, 0x80, 0x9c, 0xa1, 0xe3, 0xe2, 0x9e, 0x10, 0xf4, 0x5c,
+ 0x37, 0xb5, 0x52, 0x91, 0xea, 0xd6, 0xbb, 0x53, 0x74, 0xeb, 0x90, 0x32, 0x30, 0x71, 0xbb, 0xba,
+ 0xa9, 0xf1, 0x51, 0x24, 0x67, 0x04, 0x8e, 0x96, 0x20, 0xf5, 0x52, 0xb7, 0xdd, 0x81, 0x6a, 0x94,
+ 0xa4, 0xc0, 0x74, 0x04, 0xd0, 0xb3, 0xc9, 0xb4, 0x94, 0xd9, 0x89, 0xa7, 0x33, 0x12, 0xec, 0xc4,
+ 0xd3, 0x29, 0x29, 0x5d, 0xfe, 0xcb, 0x28, 0xdc, 0x61, 0x62, 0xb6, 0xd4, 0x9e, 0x6e, 0x0c, 0x6f,
+ 0xaa, 0x99, 0x4c, 0x0a, 0xd7, 0x4c, 0x7a, 0xa4, 0x74, 0xa9, 0x84, 0x8d, 0x85, 0x02, 0x7a, 0xa4,
+ 0x04, 0xd6, 0x24, 0xa0, 0x11, 0xd3, 0x8d, 0x5f, 0xc1, 0x74, 0x5b, 0x30, 0x2f, 0x94, 0xd4, 0x93,
+ 0x40, 0x35, 0x35, 0xbf, 0x79, 0x9f, 0xcf, 0xa9, 0x58, 0x63, 0x04, 0x82, 0x3d, 0x1c, 0xc1, 0xb4,
+ 0x10, 0x52, 0xe3, 0x46, 0xfa, 0xcf, 0x51, 0x58, 0x68, 0x98, 0x2e, 0xb6, 0x0d, 0xac, 0xbe, 0xc4,
+ 0x81, 0xed, 0xf8, 0x0c, 0x32, 0xaa, 0xd9, 0xc6, 0x8e, 0x6b, 0xd9, 0x4e, 0x29, 0xb2, 0x12, 0x5b,
+ 0xcd, 0x6e, 0x7c, 0x63, 0xca, 0xa9, 0x4d, 0xe2, 0x5f, 0xab, 0x70, 0x66, 0xbe, 0x93, 0xbe, 0xb0,
+ 0xc5, 0x7f, 0x89, 0x40, 0x5a, 0x60, 0xaf, 0xe1, 0xfd, 0xbe, 0x09, 0x69, 0x9a, 0x51, 0x2a, 0xde,
+ 0x99, 0x2c, 0x0a, 0x0e, 0x9e, 0x72, 0x06, 0xb3, 0xcf, 0x14, 0xa5, 0x6d, 0x68, 0xa8, 0x3a, 0x29,
+ 0x31, 0x8c, 0x51, 0xfe, 0xbb, 0x62, 0xff, 0x0e, 0xc3, 0xa9, 0xe1, 0x58, 0xae, 0xc8, 0xf6, 0x8c,
+ 0xef, 0xdc, 0x3f, 0x45, 0x60, 0x9e, 0x30, 0x68, 0x58, 0x0b, 0x6c, 0xdb, 0x7d, 0x00, 0xdd, 0x51,
+ 0x1c, 0x06, 0xa7, 0x2b, 0x12, 0xba, 0x99, 0xd1, 0x1d, 0x4e, 0xee, 0xa9, 0x5a, 0x74, 0x4c, 0xd5,
+ 0xbe, 0x03, 0x79, 0xca, 0xab, 0x9c, 0x0c, 0xda, 0xcf, 0xb1, 0xeb, 0xd0, 0x19, 0x26, 0x36, 0x17,
+ 0xf8, 0x0c, 0x73, 0x54, 0xc2, 0x26, 0xc3, 0xc9, 0x39, 0x27, 0xf0, 0x35, 0xa6, 0x7d, 0xf1, 0x31,
+ 0xed, 0xe3, 0x13, 0xff, 0x7d, 0x0c, 0xee, 0x1c, 0xa8, 0xb6, 0xab, 0x93, 0xd8, 0xa8, 0x9b, 0xdd,
+ 0xc0, 0xec, 0x1f, 0x40, 0xd6, 0x1c, 0x08, 0x83, 0x75, 0xf8, 0x81, 0xb0, 0xf9, 0x81, 0x39, 0xe0,
+ 0x06, 0xe8, 0xa0, 0x3d, 0x88, 0x1b, 0xba, 0xe3, 0xd2, 0xd0, 0x93, 0xdd, 0xd8, 0x98, 0xa2, 0x16,
+ 0x93, 0xc7, 0x58, 0xdb, 0xd3, 0x1d, 0x57, 0xac, 0x99, 0x48, 0x41, 0x2d, 0x48, 0xd8, 0xaa, 0xd9,
+ 0xc5, 0xd4, 0x5e, 0xb2, 0x1b, 0x8f, 0xae, 0x26, 0x4e, 0x26, 0xac, 0x22, 0x20, 0x53, 0x39, 0x8b,
+ 0x7f, 0x1b, 0x81, 0x38, 0x19, 0xe5, 0x12, 0x93, 0xbe, 0x03, 0xc9, 0x97, 0xaa, 0x31, 0xc0, 0x2c,
+ 0x7c, 0xe6, 0x64, 0xfe, 0x85, 0xfe, 0x18, 0x8a, 0xce, 0xe0, 0xa4, 0x1f, 0x18, 0x8a, 0xc7, 0x99,
+ 0x0f, 0xaf, 0x34, 0x2b, 0xaf, 0xd6, 0x08, 0xcb, 0x62, 0x07, 0xb0, 0xf8, 0x02, 0x12, 0x74, 0xd6,
+ 0x97, 0xcc, 0xef, 0x1e, 0xe4, 0x5c, 0x4b, 0xc1, 0x67, 0x6d, 0x63, 0xe0, 0xe8, 0x2f, 0x99, 0xa6,
+ 0xe4, 0xe4, 0xac, 0x6b, 0xd5, 0x05, 0x08, 0x3d, 0x80, 0x42, 0xc7, 0xb6, 0x7a, 0x8a, 0x6e, 0x0a,
+ 0xa2, 0x18, 0x25, 0xca, 0x13, 0x68, 0x43, 0x00, 0x43, 0x2a, 0xfb, 0x37, 0x39, 0x28, 0x52, 0xc3,
+ 0x98, 0xc9, 0xed, 0x3d, 0x08, 0xb8, 0xbd, 0xdb, 0x21, 0xb7, 0xe7, 0x59, 0x17, 0xf1, 0x7a, 0x6f,
+ 0x42, 0x72, 0x40, 0xf3, 0x1b, 0x3a, 0xbe, 0x17, 0x1a, 0x19, 0x6c, 0x06, 0xad, 0x44, 0x5f, 0x07,
+ 0x44, 0x5c, 0x01, 0x56, 0x42, 0x84, 0x09, 0x4a, 0x28, 0x51, 0x4c, 0x75, 0xaa, 0x07, 0x4d, 0x5e,
+ 0xc1, 0x83, 0x6e, 0x83, 0x84, 0xcf, 0x5c, 0x5b, 0x0d, 0x66, 0xeb, 0x29, 0xca, 0xbf, 0x44, 0xc2,
+ 0x62, 0x9d, 0xe0, 0x26, 0x0b, 0x29, 0xe0, 0x00, 0x4e, 0x23, 0x5a, 0x32, 0xcf, 0x65, 0x68, 0xba,
+ 0x8d, 0x69, 0x8e, 0xe9, 0x94, 0xd2, 0x2b, 0xb1, 0x4b, 0x72, 0xc9, 0x91, 0x6d, 0x5f, 0xab, 0x09,
+ 0x46, 0x59, 0x62, 0xa2, 0x3c, 0x80, 0x83, 0x0e, 0x21, 0xdb, 0x61, 0xa9, 0xa7, 0xf2, 0x1c, 0x0f,
+ 0x69, 0x92, 0x9a, 0xdd, 0x78, 0x7f, 0xf6, 0x24, 0x75, 0x33, 0x49, 0x8e, 0xa0, 0x14, 0x91, 0xa1,
+ 0xe3, 0x21, 0xd1, 0x33, 0xc8, 0x07, 0xea, 0x8a, 0x93, 0x21, 0xcd, 0x4f, 0xae, 0x27, 0x36, 0xe7,
+ 0x0b, 0xda, 0x1c, 0xa2, 0x4f, 0x01, 0x74, 0x2f, 0x00, 0xd0, 0x34, 0x26, 0xbb, 0xf1, 0xc1, 0x15,
+ 0x22, 0x85, 0xf0, 0x2f, 0xbe, 0x10, 0xf4, 0x0c, 0x0a, 0xfe, 0x17, 0x9d, 0x6c, 0xee, 0xca, 0x93,
+ 0x65, 0x52, 0xf3, 0x01, 0x39, 0x9b, 0xa4, 0x48, 0x59, 0x20, 0x09, 0x96, 0xe5, 0xe8, 0x2e, 0x0e,
+ 0xaa, 0x41, 0x9e, 0xaa, 0x41, 0xf9, 0xe2, 0x7c, 0x19, 0x55, 0x05, 0x7e, 0xb2, 0x2a, 0xa0, 0xf6,
+ 0x08, 0x9e, 0x29, 0x56, 0x48, 0x81, 0x89, 0xc4, 0x82, 0xaf, 0x58, 0x87, 0xbe, 0x0a, 0x8f, 0x29,
+ 0x56, 0x40, 0xbd, 0x59, 0x55, 0x99, 0x0b, 0xf9, 0x9e, 0xe2, 0xf5, 0x7d, 0x4f, 0x48, 0x10, 0xaa,
+ 0xf3, 0xa4, 0x59, 0xa2, 0xe9, 0xd7, 0x07, 0x33, 0x2a, 0x29, 0xc9, 0xe8, 0x84, 0x4b, 0xa0, 0xb9,
+ 0xf4, 0x23, 0x40, 0x6d, 0x1b, 0xab, 0x2e, 0xd6, 0x48, 0xd2, 0x6a, 0xe8, 0x6d, 0xdd, 0x35, 0x86,
+ 0xa5, 0xf9, 0x80, 0xdd, 0xcf, 0x73, 0x7c, 0xdd, 0x43, 0xa3, 0xc7, 0x90, 0x7a, 0x89, 0x6d, 0x47,
+ 0xb7, 0xcc, 0x12, 0xa2, 0xce, 0x64, 0x89, 0xb7, 0x88, 0xee, 0x8c, 0x8c, 0xf7, 0x94, 0x51, 0xc9,
+ 0x82, 0x1c, 0x6d, 0x43, 0x1e, 0x9b, 0x6d, 0x4b, 0xd3, 0xcd, 0x2e, 0x4d, 0x43, 0x4b, 0xb7, 0xfc,
+ 0x7c, 0xe7, 0xcb, 0xf3, 0xe5, 0xaf, 0x8d, 0xf0, 0xd7, 0x39, 0x2d, 0x99, 0xb6, 0x9c, 0xc3, 0x81,
+ 0x2f, 0xb4, 0x0d, 0x29, 0x11, 0x93, 0x17, 0xe8, 0x9e, 0xae, 0x4e, 0xcb, 0x40, 0x47, 0x23, 0xba,
+ 0xc8, 0x2c, 0x39, 0x3b, 0x29, 0x27, 0x34, 0xdd, 0x21, 0xb9, 0x88, 0x56, 0xba, 0x1d, 0x2c, 0x27,
+ 0x04, 0x14, 0x55, 0x01, 0xba, 0xd8, 0x52, 0x58, 0xd3, 0xad, 0x74, 0x87, 0x0e, 0xb7, 0x14, 0x18,
+ 0xae, 0x8b, 0xad, 0x35, 0xd1, 0x9a, 0x23, 0xd5, 0x54, 0x47, 0xef, 0x8a, 0x14, 0xa1, 0x8b, 0x2d,
+ 0x06, 0x40, 0x65, 0xc8, 0xf4, 0x6d, 0xac, 0xe9, 0x6d, 0x52, 0xf8, 0xde, 0x0d, 0xf8, 0x66, 0x1f,
+ 0x5c, 0x5e, 0x82, 0x8c, 0xe7, 0x35, 0x50, 0x0a, 0x62, 0x95, 0xc3, 0x2a, 0xeb, 0xb3, 0xd4, 0xea,
+ 0x87, 0x55, 0x29, 0x52, 0xbe, 0x07, 0x71, 0xba, 0xf8, 0x2c, 0xa4, 0xb6, 0x5a, 0xf2, 0xb3, 0x8a,
+ 0x5c, 0x63, 0xbd, 0x9d, 0x46, 0xf3, 0x69, 0x5d, 0x3e, 0xaa, 0xd7, 0x24, 0x11, 0x17, 0xce, 0xe3,
+ 0x80, 0xfc, 0xb2, 0xee, 0xc8, 0xe2, 0x65, 0x72, 0x17, 0x8a, 0x6d, 0x0f, 0xca, 0x0e, 0x20, 0xb2,
+ 0x12, 0x5d, 0x2d, 0x6c, 0x3c, 0x7e, 0x6d, 0x69, 0x28, 0x64, 0x04, 0x41, 0xbe, 0x32, 0x15, 0xda,
+ 0x21, 0x68, 0x20, 0x1f, 0x8a, 0x8e, 0xc4, 0x20, 0x19, 0x12, 0xed, 0x53, 0xdc, 0x7e, 0xce, 0xa3,
+ 0xf0, 0xb7, 0xa6, 0x0c, 0x4c, 0x53, 0xc5, 0x80, 0xe2, 0x56, 0x09, 0x8f, 0x3f, 0xb4, 0x48, 0x0f,
+ 0xa8, 0x28, 0x24, 0x87, 0xdd, 0x6b, 0xfc, 0x52, 0x8f, 0x35, 0xa9, 0x1d, 0x25, 0x3c, 0x56, 0xc0,
+ 0xbb, 0x3e, 0x86, 0xa2, 0x69, 0xb9, 0x0a, 0x29, 0x29, 0xb9, 0x17, 0xa0, 0x85, 0x62, 0x7e, 0x53,
+ 0xe2, 0xba, 0xea, 0xdb, 0x7c, 0xde, 0xb4, 0xdc, 0xe6, 0xc0, 0x30, 0x18, 0x00, 0xfd, 0x59, 0x04,
+ 0x96, 0x59, 0xac, 0x54, 0x5e, 0xb1, 0x06, 0x81, 0xc2, 0xd2, 0x5b, 0x7f, 0x8f, 0x68, 0x3b, 0x65,
+ 0x7a, 0x62, 0x74, 0x59, 0x77, 0x81, 0x4f, 0xf5, 0xcd, 0xc1, 0x25, 0x34, 0xe5, 0x23, 0x28, 0x84,
+ 0x8f, 0x09, 0x65, 0x20, 0x51, 0xdd, 0xae, 0x57, 0x77, 0xa5, 0x39, 0x54, 0x84, 0xec, 0x56, 0x4b,
+ 0xae, 0x37, 0x9e, 0x34, 0x95, 0xdd, 0xfa, 0x0f, 0x59, 0x3b, 0xb0, 0xd9, 0xf2, 0xda, 0x81, 0x25,
+ 0x58, 0x38, 0x6e, 0x36, 0x3e, 0x3d, 0xae, 0x2b, 0xcf, 0x1a, 0x47, 0xdb, 0xad, 0xe3, 0x23, 0xa5,
+ 0xd1, 0xac, 0xd5, 0x3f, 0x93, 0x62, 0x5e, 0x09, 0x96, 0x90, 0x92, 0xe5, 0x5f, 0x47, 0xa1, 0x70,
+ 0x60, 0xeb, 0x3d, 0xd5, 0x1e, 0xee, 0xe2, 0xe1, 0xe1, 0x2b, 0xb5, 0x8f, 0x3e, 0x81, 0x05, 0x13,
+ 0xbf, 0x52, 0xfa, 0x0c, 0xaa, 0x78, 0x29, 0x7d, 0x64, 0x72, 0x17, 0x79, 0xde, 0xc4, 0xaf, 0xb8,
+ 0x84, 0x06, 0xcf, 0xe8, 0xbf, 0x0e, 0x59, 0xcb, 0xd0, 0x18, 0x27, 0x16, 0x7d, 0x90, 0x6c, 0x90,
+ 0x09, 0x2c, 0x43, 0x6b, 0x30, 0x34, 0xa1, 0x26, 0xe3, 0x09, 0xea, 0xd8, 0x04, 0x6a, 0x13, 0xbf,
+ 0x12, 0xd4, 0x9f, 0xc0, 0x02, 0x91, 0x3d, 0x36, 0xbb, 0xf8, 0x94, 0xd9, 0x59, 0x86, 0x36, 0x32,
+ 0xbb, 0xef, 0xc0, 0x9d, 0xf1, 0xf5, 0x8d, 0x35, 0xe2, 0x6e, 0x8d, 0x2c, 0x8b, 0xe4, 0x38, 0xdc,
+ 0x28, 0xff, 0x31, 0x02, 0x34, 0x18, 0x0d, 0x5c, 0xd1, 0x1e, 0xa4, 0xfb, 0xf6, 0x0d, 0xc8, 0x13,
+ 0xb9, 0x7e, 0x0d, 0x18, 0x99, 0xa2, 0x67, 0x64, 0xb9, 0x22, 0xb2, 0x10, 0x2e, 0xb2, 0x1e, 0x9f,
+ 0x2b, 0x3a, 0x8d, 0xcb, 0x32, 0xbc, 0x66, 0x24, 0x7a, 0x17, 0x72, 0xba, 0x49, 0x9c, 0x31, 0xef,
+ 0x51, 0x04, 0xdb, 0x46, 0x59, 0x8e, 0xa9, 0x9f, 0xf5, 0x6d, 0x3e, 0xe3, 0x5f, 0x47, 0xe1, 0xee,
+ 0xbe, 0xea, 0x62, 0x5b, 0x57, 0x0d, 0xfd, 0x4f, 0xb0, 0xf6, 0x54, 0xc7, 0xaf, 0x64, 0xdc, 0xb1,
+ 0xb1, 0x73, 0x8a, 0x3e, 0x83, 0xf9, 0xb1, 0xed, 0xa0, 0x53, 0xcf, 0x6e, 0xbc, 0x33, 0x5b, 0x34,
+ 0x12, 0x39, 0xf5, 0xc8, 0x8e, 0xa1, 0xfd, 0xf0, 0xc1, 0xb2, 0x9a, 0xe4, 0x6a, 0x32, 0x83, 0x27,
+ 0xff, 0x18, 0x12, 0xaa, 0xa3, 0x58, 0x1d, 0xee, 0x71, 0xde, 0x0a, 0x08, 0x1a, 0xb8, 0xba, 0xb1,
+ 0x76, 0x6a, 0xb4, 0xd7, 0x8e, 0xc4, 0x45, 0x8d, 0xf0, 0x55, 0xaa, 0xd3, 0xea, 0xa0, 0x0f, 0xa1,
+ 0xe8, 0x9c, 0x5a, 0x03, 0x43, 0x53, 0x4e, 0xd4, 0xf6, 0xf3, 0x8e, 0x6e, 0x18, 0xa1, 0x7e, 0x53,
+ 0x81, 0x21, 0x37, 0x39, 0x8e, 0xef, 0xd9, 0x5f, 0xa5, 0x00, 0xf9, 0xf3, 0xd9, 0x1f, 0xb8, 0x2a,
+ 0xf5, 0xe6, 0x15, 0x48, 0x72, 0x37, 0xc2, 0xf6, 0xe8, 0xdd, 0xa9, 0x1e, 0x37, 0xdc, 0x5f, 0xdb,
+ 0x9e, 0x93, 0x39, 0x23, 0xfa, 0x41, 0xf0, 0x5e, 0x66, 0xe6, 0x1d, 0xd9, 0x9e, 0x13, 0x17, 0x36,
+ 0xbb, 0x90, 0x70, 0x5c, 0x12, 0x7d, 0x62, 0x34, 0x67, 0x58, 0x9f, 0xc2, 0x3f, 0x3e, 0xf9, 0xb5,
+ 0x43, 0xc2, 0x26, 0x7c, 0x2e, 0x95, 0x81, 0x9e, 0x41, 0xc6, 0x4b, 0x95, 0x79, 0x7f, 0xf1, 0xd1,
+ 0xec, 0x02, 0xbd, 0x28, 0x27, 0x62, 0xa0, 0x27, 0x0b, 0x55, 0x20, 0xdb, 0xe3, 0x64, 0x7e, 0x43,
+ 0x64, 0x85, 0x57, 0x2b, 0x20, 0x24, 0xd0, 0xaa, 0x25, 0xf0, 0x25, 0x83, 0x60, 0x6a, 0xd0, 0x88,
+ 0x6e, 0x5b, 0x86, 0x41, 0x0e, 0x8d, 0x7a, 0x5a, 0x2f, 0xa2, 0x0b, 0x28, 0xda, 0x25, 0x35, 0x87,
+ 0xe7, 0x8d, 0xd3, 0x74, 0x3f, 0xdf, 0x9b, 0x39, 0x06, 0x6e, 0xcf, 0xc9, 0x01, 0x76, 0xd4, 0x82,
+ 0x42, 0x3f, 0xe4, 0x0a, 0x79, 0x82, 0xff, 0x60, 0x5a, 0x96, 0x17, 0x22, 0xde, 0x9e, 0x93, 0x47,
+ 0xd8, 0xd1, 0x8f, 0x01, 0xb5, 0xc7, 0xfc, 0x44, 0x09, 0x5e, 0x33, 0xcb, 0x51, 0x86, 0xed, 0x39,
+ 0x79, 0x82, 0x18, 0xf4, 0x39, 0xdc, 0xed, 0x4d, 0x36, 0x69, 0x9e, 0xea, 0xaf, 0x4d, 0x19, 0x61,
+ 0x8a, 0x23, 0xd8, 0x9e, 0x93, 0xa7, 0x09, 0x2c, 0x7f, 0x02, 0x09, 0xaa, 0x3a, 0x24, 0x61, 0x39,
+ 0x6e, 0xee, 0x36, 0x5b, 0xcf, 0x9a, 0x2c, 0x00, 0xd5, 0xea, 0x7b, 0xf5, 0xa3, 0xba, 0xd2, 0x6a,
+ 0xee, 0x91, 0x00, 0xf4, 0x06, 0xdc, 0xe6, 0x80, 0x4a, 0xb3, 0xa6, 0x3c, 0x93, 0x1b, 0x02, 0x15,
+ 0x2d, 0xaf, 0x06, 0x33, 0xa2, 0x34, 0xc4, 0x9b, 0xad, 0x66, 0x5d, 0x9a, 0xa3, 0xb9, 0x51, 0xad,
+ 0x26, 0x45, 0x68, 0x6e, 0x24, 0xb7, 0x0e, 0xa4, 0x28, 0xb3, 0xbe, 0xcd, 0x1c, 0x80, 0xe6, 0xa9,
+ 0xdb, 0x4e, 0x3c, 0x9d, 0x94, 0x52, 0xe5, 0x7f, 0x88, 0x40, 0x9a, 0xb8, 0xe1, 0x86, 0xd9, 0xb1,
+ 0xd0, 0x23, 0xc8, 0xf4, 0x55, 0x1b, 0x9b, 0xae, 0xef, 0x69, 0x45, 0x07, 0x30, 0x7d, 0x40, 0x11,
+ 0x5e, 0x83, 0x2a, 0xcd, 0x08, 0x1b, 0x97, 0xb5, 0x77, 0xb6, 0x40, 0xe2, 0xe2, 0x9c, 0xf6, 0x29,
+ 0xee, 0xa9, 0x44, 0x2a, 0xeb, 0x41, 0xbd, 0xe9, 0x75, 0x67, 0x29, 0xfe, 0x90, 0xa2, 0x3d, 0xd9,
+ 0x85, 0x7e, 0x10, 0x2a, 0x7a, 0x77, 0xff, 0xfb, 0x0e, 0x14, 0x47, 0x32, 0x9f, 0x4b, 0xca, 0xf9,
+ 0x15, 0x5a, 0xce, 0xc7, 0x7c, 0xbf, 0xef, 0x95, 0xf3, 0x51, 0x5e, 0xc9, 0x87, 0x16, 0x1b, 0x9f,
+ 0x71, 0xb1, 0x8f, 0xfc, 0xec, 0x9e, 0x19, 0xdf, 0x1b, 0x3c, 0xa6, 0xcc, 0x5f, 0x92, 0xd8, 0x1f,
+ 0xc0, 0x7c, 0xcf, 0xd2, 0xf4, 0x0e, 0xc9, 0x63, 0x89, 0xe5, 0xba, 0x7a, 0x0f, 0xf3, 0x2c, 0x67,
+ 0x26, 0x87, 0x2b, 0x05, 0xb9, 0x09, 0x12, 0x3d, 0x81, 0x94, 0xe8, 0x5a, 0xa5, 0x69, 0x04, 0x98,
+ 0xd5, 0x63, 0x8a, 0xfc, 0x9e, 0x73, 0xa3, 0x2d, 0x28, 0x98, 0xf8, 0x2c, 0xd8, 0x64, 0xcd, 0x84,
+ 0x7c, 0x4a, 0xae, 0x89, 0xcf, 0x26, 0x77, 0x58, 0x73, 0xa6, 0x8f, 0xd1, 0xd0, 0xa7, 0x90, 0x0f,
+ 0x07, 0x3b, 0xb8, 0x46, 0xb0, 0xcb, 0xf5, 0x83, 0x91, 0x6e, 0x0b, 0x52, 0x22, 0xca, 0x65, 0xaf,
+ 0x11, 0xe5, 0x04, 0x33, 0xda, 0x24, 0x29, 0xc4, 0x99, 0xeb, 0x67, 0x35, 0x39, 0xbf, 0x2c, 0xbb,
+ 0x38, 0x5f, 0xce, 0x92, 0x15, 0x4e, 0x68, 0xa5, 0x66, 0x4d, 0x0f, 0xae, 0xa1, 0x1d, 0x00, 0xef,
+ 0x29, 0x82, 0x43, 0x6f, 0x18, 0xa6, 0x97, 0xe7, 0x07, 0x82, 0xd0, 0x9f, 0x92, 0x1c, 0xe0, 0x46,
+ 0xfb, 0x90, 0x11, 0xee, 0x98, 0x15, 0xce, 0xd3, 0xfd, 0xd6, 0x78, 0x70, 0x10, 0x21, 0xc1, 0x93,
+ 0x40, 0x6a, 0x06, 0x03, 0xab, 0x0e, 0xe6, 0xd5, 0xf3, 0xe3, 0x19, 0x6b, 0x06, 0x66, 0x5c, 0xd5,
+ 0x53, 0xd5, 0xec, 0xe2, 0x3d, 0xc2, 0xbf, 0x19, 0x2d, 0x45, 0x64, 0x26, 0x0a, 0x35, 0x41, 0xa2,
+ 0x5b, 0x16, 0x8c, 0x35, 0x12, 0xdd, 0xb5, 0xb7, 0x85, 0xe1, 0x92, 0x5d, 0x9b, 0x1a, 0x6f, 0xa8,
+ 0x4e, 0xed, 0xfb, 0x31, 0xe7, 0x7b, 0x50, 0xe8, 0x58, 0x76, 0x4f, 0x75, 0x15, 0x61, 0x3c, 0xf3,
+ 0x7e, 0x9f, 0xed, 0xcb, 0xf3, 0xe5, 0xfc, 0x16, 0xc5, 0x0a, 0xc3, 0xc9, 0x77, 0x82, 0x9f, 0x68,
+ 0x53, 0x84, 0xe6, 0x5b, 0x34, 0x92, 0xbe, 0xf3, 0xda, 0xcd, 0x9a, 0x10, 0x91, 0x9b, 0x90, 0xa4,
+ 0xe5, 0x90, 0x53, 0x5a, 0xa0, 0x3b, 0x7e, 0xcd, 0xd2, 0x4a, 0xe6, 0x52, 0xd0, 0x1e, 0x14, 0x34,
+ 0x02, 0x21, 0xb5, 0x3a, 0xeb, 0xe0, 0xdd, 0xa6, 0x72, 0x97, 0xa7, 0xc8, 0x15, 0x2e, 0x56, 0x34,
+ 0x6a, 0x04, 0x33, 0xeb, 0xf2, 0xb5, 0x20, 0xdd, 0x51, 0x7b, 0xba, 0xa1, 0x63, 0xa7, 0x74, 0x87,
+ 0xca, 0xf9, 0xf0, 0x52, 0x7b, 0x1e, 0xbd, 0xcd, 0x11, 0x21, 0x5c, 0x08, 0xf1, 0xcc, 0x9a, 0x02,
+ 0x86, 0xe4, 0xf8, 0xee, 0x8e, 0x9b, 0xb5, 0xb8, 0xcd, 0x09, 0xdd, 0xec, 0x50, 0xb3, 0xe6, 0x5f,
+ 0x1a, 0xba, 0x0f, 0xf0, 0x52, 0xc7, 0xaf, 0x94, 0x17, 0x03, 0x6c, 0x0f, 0x4b, 0xa5, 0x60, 0x61,
+ 0x4e, 0xe0, 0x9f, 0x12, 0x30, 0xfa, 0x08, 0x32, 0x1a, 0xee, 0x63, 0x53, 0x73, 0x5a, 0x66, 0xe9,
+ 0x0d, 0x5a, 0x69, 0xdc, 0xba, 0x38, 0x5f, 0xce, 0xd4, 0x04, 0x90, 0x7b, 0x51, 0x9f, 0x0a, 0x7d,
+ 0x0e, 0x39, 0xf6, 0x81, 0xb5, 0x96, 0xb9, 0x39, 0x2c, 0x2d, 0xd2, 0x45, 0x3f, 0x9c, 0xf1, 0x50,
+ 0xfc, 0xb6, 0x97, 0x77, 0x53, 0x50, 0x0b, 0x48, 0x93, 0x43, 0xb2, 0xd1, 0x1f, 0x41, 0x4e, 0xe8,
+ 0xf1, 0x8e, 0x75, 0xe2, 0x94, 0xbe, 0x76, 0x69, 0x1b, 0x7f, 0x74, 0xac, 0x7d, 0x9f, 0x55, 0x78,
+ 0xa9, 0xa0, 0x34, 0xf4, 0x19, 0xe4, 0xbd, 0x0b, 0x4b, 0xab, 0xef, 0x3a, 0xa5, 0x37, 0x2f, 0xad,
+ 0x5e, 0xc7, 0xcc, 0x90, 0xf3, 0xb6, 0xfa, 0xf4, 0x86, 0x23, 0xf0, 0x85, 0xee, 0x41, 0x46, 0xb3,
+ 0xad, 0x3e, 0x8b, 0x16, 0x6f, 0xad, 0x44, 0x56, 0x63, 0x5e, 0xef, 0xc5, 0xb6, 0xfa, 0x34, 0x0c,
+ 0x28, 0x50, 0xb0, 0x71, 0xdf, 0x50, 0xdb, 0xb8, 0x47, 0xe2, 0x98, 0xd5, 0x29, 0x2d, 0xd1, 0xd1,
+ 0x37, 0x66, 0xde, 0x48, 0x8f, 0x59, 0x28, 0x66, 0x40, 0x5e, 0xab, 0x83, 0x8e, 0x01, 0xd4, 0x81,
+ 0xa6, 0xbb, 0x4a, 0xcf, 0xd2, 0x70, 0x69, 0xf9, 0xd2, 0xf7, 0x03, 0xa3, 0xc2, 0x2b, 0x84, 0x71,
+ 0xdf, 0xd2, 0xb0, 0x77, 0x27, 0x26, 0x00, 0xe8, 0x23, 0xc8, 0xd2, 0xa5, 0x7d, 0x6e, 0x9d, 0x10,
+ 0xdd, 0x5c, 0xa1, 0x8b, 0x9b, 0xe7, 0x67, 0x99, 0xa9, 0xd9, 0x56, 0x7f, 0xc7, 0x3a, 0xa1, 0x1a,
+ 0xc3, 0xff, 0xd4, 0x90, 0x03, 0xb9, 0x6e, 0x5b, 0xf1, 0x1d, 0xe7, 0x3d, 0x7a, 0x8a, 0x1f, 0xcf,
+ 0x38, 0x97, 0x27, 0xd5, 0x09, 0xae, 0xf4, 0x96, 0x88, 0x00, 0x4f, 0xaa, 0x02, 0xe6, 0xc8, 0xd9,
+ 0x6e, 0xdb, 0xfb, 0x20, 0x15, 0x21, 0x6b, 0xf0, 0x71, 0x03, 0x28, 0x07, 0x2b, 0x42, 0x86, 0x61,
+ 0x26, 0xd0, 0x04, 0xde, 0x09, 0x54, 0x68, 0x35, 0xc5, 0xce, 0xec, 0xfe, 0xec, 0x11, 0xbe, 0xc0,
+ 0xb8, 0x2b, 0x4e, 0xab, 0x43, 0x0f, 0xb6, 0x0d, 0x39, 0x6b, 0xe0, 0x9e, 0x58, 0x03, 0x53, 0x53,
+ 0x3a, 0xcf, 0x9d, 0xd2, 0xdb, 0x74, 0xb5, 0x57, 0xea, 0xda, 0x78, 0xab, 0x6b, 0x71, 0x41, 0x5b,
+ 0xbb, 0x8e, 0x9c, 0x15, 0x52, 0xb7, 0x9e, 0x3b, 0xe8, 0xa7, 0x90, 0xd5, 0x4d, 0x7f, 0x8c, 0x07,
+ 0x57, 0x1f, 0x03, 0x89, 0xca, 0xa3, 0x61, 0x7a, 0x43, 0x00, 0x97, 0x49, 0x46, 0xf8, 0x00, 0x0a,
+ 0x56, 0xa7, 0x63, 0xe8, 0x26, 0x56, 0x6c, 0xac, 0x3a, 0x96, 0x59, 0x7a, 0x27, 0xb0, 0x83, 0x79,
+ 0x8e, 0x93, 0x29, 0x0a, 0x95, 0x21, 0xe3, 0xe2, 0x5e, 0xdf, 0xb2, 0x55, 0x7b, 0x58, 0x7a, 0x37,
+ 0x78, 0x95, 0xe8, 0x81, 0xd1, 0x09, 0x2c, 0x0e, 0x4c, 0x7c, 0xd6, 0xb7, 0x1c, 0xac, 0x29, 0x63,
+ 0xb9, 0xe5, 0x2a, 0xf5, 0x71, 0x0f, 0xf8, 0xa4, 0xee, 0x1e, 0x0b, 0xca, 0x89, 0x49, 0xe6, 0xdd,
+ 0xc1, 0x44, 0xb4, 0x86, 0xbe, 0x05, 0x0b, 0xba, 0xa3, 0x04, 0xb3, 0x76, 0x85, 0xf8, 0xba, 0xd2,
+ 0x7b, 0x81, 0x29, 0x21, 0xdd, 0x19, 0xcd, 0xf8, 0xd1, 0x4f, 0xa0, 0x68, 0x58, 0x6d, 0xd5, 0xd0,
+ 0xdd, 0xa1, 0xe8, 0x86, 0xbe, 0x4f, 0x35, 0xe0, 0x9b, 0x33, 0x2a, 0xe9, 0x1e, 0xe7, 0x66, 0x3d,
+ 0x51, 0xb9, 0x60, 0x84, 0xbe, 0xd1, 0xcf, 0x22, 0xb0, 0xf2, 0x9a, 0xd6, 0x99, 0x53, 0xfa, 0xe0,
+ 0xd2, 0x4b, 0xc5, 0x19, 0x7a, 0x67, 0x6f, 0x5d, 0xd6, 0x3b, 0x73, 0x16, 0x7f, 0x15, 0x81, 0xf9,
+ 0xb1, 0xd4, 0x01, 0xfd, 0x04, 0x52, 0xa6, 0xa5, 0x05, 0x6e, 0xb5, 0xeb, 0xfc, 0x0c, 0x92, 0x4d,
+ 0x4b, 0x63, 0x97, 0xda, 0x8f, 0xba, 0xba, 0x7b, 0x3a, 0x38, 0x59, 0x6b, 0x5b, 0xbd, 0x75, 0x6f,
+ 0x72, 0xda, 0x89, 0xff, 0xf7, 0x7a, 0xff, 0x79, 0x77, 0x9d, 0xfe, 0xd5, 0x3f, 0x59, 0x63, 0x6c,
+ 0x72, 0x92, 0x48, 0x6d, 0x68, 0xe8, 0x43, 0x28, 0xe2, 0xb3, 0xbe, 0x6e, 0x07, 0xd2, 0xe7, 0x68,
+ 0xc0, 0x21, 0x16, 0x7c, 0x24, 0xb1, 0x1e, 0x7e, 0xef, 0xf8, 0xeb, 0x28, 0x14, 0x47, 0xc2, 0x37,
+ 0xa9, 0x17, 0x68, 0x6b, 0x27, 0x54, 0x2f, 0x10, 0xc8, 0x25, 0x55, 0x4c, 0xf0, 0xad, 0x50, 0xec,
+ 0xa6, 0xef, 0xc6, 0xc2, 0xf7, 0x79, 0x89, 0x2b, 0xdc, 0xe7, 0x7d, 0x07, 0xee, 0xe8, 0x8e, 0x62,
+ 0x5a, 0xa6, 0x68, 0xbb, 0x7a, 0x15, 0x7a, 0xf0, 0x8d, 0xce, 0x2d, 0xdd, 0x69, 0x5a, 0x26, 0x6b,
+ 0xb8, 0x7a, 0xab, 0xf6, 0x9f, 0xf3, 0xa4, 0xc6, 0x9f, 0xf3, 0x78, 0x9d, 0xcb, 0xb8, 0x94, 0x58,
+ 0xfc, 0x65, 0x04, 0x32, 0xc1, 0xd7, 0xb0, 0xd1, 0x70, 0xc7, 0x6d, 0xac, 0x86, 0xba, 0xe6, 0xeb,
+ 0x84, 0xf0, 0x2e, 0xc4, 0x66, 0xdf, 0x05, 0x7e, 0xb4, 0x7f, 0x0a, 0xd9, 0x40, 0x5c, 0x1e, 0xed,
+ 0x8a, 0x44, 0xae, 0xd1, 0x15, 0x79, 0x1b, 0x92, 0x3c, 0x18, 0x31, 0xc5, 0xca, 0x73, 0xee, 0x04,
+ 0x0b, 0x44, 0x89, 0xcf, 0x49, 0x10, 0xe2, 0xa3, 0xff, 0x7b, 0x0c, 0x72, 0xc1, 0xb8, 0x4d, 0x3c,
+ 0x97, 0x6e, 0xb6, 0x6d, 0x1a, 0x34, 0xe9, 0xe8, 0x31, 0xef, 0x11, 0x84, 0x00, 0x93, 0x68, 0xde,
+ 0xd3, 0x4d, 0x85, 0x5e, 0xbc, 0x87, 0x94, 0x37, 0xdd, 0xd3, 0xcd, 0xa7, 0x04, 0x4a, 0x49, 0xd4,
+ 0x33, 0x4e, 0x12, 0x0b, 0x91, 0xa8, 0x67, 0x8c, 0x64, 0x91, 0xa6, 0xc2, 0xb6, 0x4b, 0xeb, 0xd5,
+ 0x58, 0x20, 0xc5, 0xb5, 0xdd, 0xe0, 0x23, 0xa1, 0xc4, 0x84, 0x47, 0x42, 0xc8, 0x84, 0x82, 0x9f,
+ 0xa9, 0xbc, 0x32, 0xb1, 0x4d, 0x15, 0x27, 0xbb, 0x51, 0xb9, 0x46, 0xaa, 0xe2, 0x7f, 0x10, 0x41,
+ 0xc2, 0x9f, 0x3b, 0x41, 0xe0, 0xe2, 0xdf, 0x47, 0x20, 0x1f, 0x22, 0x43, 0x0d, 0x28, 0xd2, 0x81,
+ 0xc7, 0xda, 0xb9, 0xf7, 0xbc, 0x77, 0xad, 0x04, 0x3d, 0xb1, 0xdc, 0xcc, 0x5b, 0x01, 0x94, 0x86,
+ 0x3e, 0x81, 0x02, 0x13, 0xe5, 0x3d, 0xa7, 0x09, 0xab, 0x5f, 0x8e, 0x4a, 0x0a, 0xbf, 0xa9, 0xc9,
+ 0x59, 0x3e, 0x4c, 0x0b, 0xbe, 0x14, 0x58, 0x34, 0x21, 0x1b, 0x48, 0x85, 0x66, 0xd0, 0xfb, 0x6f,
+ 0x43, 0xdc, 0xf3, 0x42, 0xb3, 0x76, 0x4d, 0x5d, 0xdf, 0x35, 0xfd, 0x22, 0x02, 0x0b, 0x93, 0x52,
+ 0x92, 0x90, 0x3d, 0x31, 0x45, 0x9a, 0xc9, 0x9e, 0xee, 0x07, 0x53, 0x45, 0xa6, 0x5c, 0xe2, 0xf6,
+ 0xda, 0x4f, 0x16, 0xdf, 0xf1, 0x54, 0x9c, 0xe9, 0x56, 0x31, 0xa4, 0xe2, 0xa4, 0xf8, 0x0b, 0x2a,
+ 0xf9, 0xbf, 0xc6, 0xa0, 0x10, 0x0e, 0x48, 0xe8, 0x29, 0x24, 0xbb, 0x86, 0x75, 0xa2, 0x1a, 0xbc,
+ 0x4b, 0xfb, 0xbd, 0x6b, 0xc5, 0xb5, 0xb5, 0x27, 0x54, 0xc6, 0xf6, 0x9c, 0xcc, 0xa5, 0x21, 0x07,
+ 0xe6, 0x6d, 0xdc, 0xd5, 0x2d, 0x53, 0x35, 0x94, 0x93, 0x21, 0x3b, 0x51, 0xbe, 0xb3, 0xf5, 0xeb,
+ 0x0d, 0x21, 0x73, 0x71, 0x9b, 0x43, 0x4a, 0xb8, 0x3d, 0x27, 0x17, 0xed, 0x30, 0x08, 0xf5, 0xa0,
+ 0x18, 0x1c, 0xd4, 0xb6, 0x5e, 0xf1, 0x16, 0x78, 0xf5, 0xa6, 0x43, 0xca, 0xd6, 0xab, 0x6d, 0x9a,
+ 0x48, 0x07, 0x00, 0x8b, 0x1f, 0x43, 0x71, 0x64, 0x52, 0xa8, 0x0c, 0x49, 0x46, 0xc3, 0xa3, 0x11,
+ 0x7c, 0x79, 0xbe, 0x9c, 0x64, 0x44, 0x32, 0xc7, 0xf0, 0xb3, 0xb8, 0x0d, 0xf9, 0x90, 0x78, 0x0e,
+ 0x2e, 0x40, 0x92, 0xed, 0x65, 0x50, 0x97, 0x37, 0x01, 0xd2, 0x22, 0x71, 0x28, 0xaf, 0x42, 0xc6,
+ 0xcb, 0xc2, 0x51, 0x0e, 0xd2, 0xb5, 0xc6, 0x61, 0x65, 0x73, 0xaf, 0x5e, 0x93, 0xe6, 0x50, 0x1e,
+ 0x32, 0x72, 0xbd, 0x52, 0xa3, 0xfd, 0x44, 0x29, 0xf2, 0xdd, 0xf4, 0x5f, 0xfc, 0x62, 0x39, 0xc2,
+ 0x03, 0x41, 0x52, 0x4a, 0xed, 0xc4, 0xd3, 0x48, 0xba, 0x55, 0xfe, 0x9f, 0x34, 0xa0, 0x9a, 0xea,
+ 0xaa, 0x64, 0x03, 0xae, 0xd0, 0x75, 0x8b, 0x5e, 0x62, 0x39, 0xe1, 0x4e, 0x4a, 0xec, 0x46, 0x9d,
+ 0x94, 0x89, 0x7d, 0xb5, 0xf8, 0x4d, 0xfa, 0x6a, 0xd7, 0x6a, 0xef, 0x8d, 0xf7, 0x02, 0x92, 0x37,
+ 0xe8, 0x05, 0x3c, 0x85, 0x14, 0xcb, 0x68, 0xd9, 0x73, 0x9d, 0xe9, 0xad, 0x8a, 0xf1, 0x83, 0xe1,
+ 0x4d, 0x1d, 0xa7, 0x6e, 0xba, 0xf6, 0xd0, 0xbb, 0xc9, 0x67, 0x30, 0xbf, 0x8b, 0x92, 0xbe, 0x7e,
+ 0x17, 0x65, 0x3c, 0x9f, 0xcf, 0x4c, 0xcf, 0xe7, 0x7f, 0x0c, 0xdc, 0x06, 0x44, 0x36, 0x0c, 0x97,
+ 0x5e, 0x6a, 0x4f, 0x58, 0x0e, 0x53, 0x7a, 0x9e, 0x0e, 0xe7, 0xec, 0xc0, 0xd7, 0xe2, 0x11, 0x00,
+ 0x4f, 0xd8, 0xcd, 0x8e, 0x35, 0x83, 0xc3, 0x5e, 0x82, 0x14, 0x71, 0x84, 0x7d, 0xcc, 0xb4, 0xd3,
+ 0x0b, 0x8e, 0x1c, 0xc8, 0x2d, 0xaa, 0x0f, 0xb9, 0xe0, 0x16, 0x22, 0x09, 0x62, 0xcf, 0xf1, 0x90,
+ 0xe9, 0xb9, 0x4c, 0xfe, 0x44, 0x3b, 0x90, 0xf0, 0x43, 0xf8, 0xf4, 0x37, 0xa2, 0x53, 0xcf, 0x86,
+ 0x4c, 0x57, 0x66, 0x22, 0xbe, 0x1b, 0x7d, 0x1c, 0x59, 0xfc, 0xf3, 0x28, 0xe4, 0x82, 0xcb, 0x44,
+ 0x6f, 0x43, 0x8a, 0x2d, 0x94, 0x3d, 0x43, 0x0d, 0xbb, 0x05, 0x81, 0x42, 0x4d, 0xc8, 0x3b, 0x03,
+ 0xfb, 0xa5, 0xfe, 0x52, 0x35, 0x94, 0xae, 0xa5, 0x1a, 0x74, 0x3a, 0x85, 0x8d, 0xfb, 0xd3, 0x9e,
+ 0x79, 0x70, 0xda, 0x27, 0x96, 0x6a, 0x88, 0x2e, 0x86, 0x13, 0x80, 0xa1, 0x6f, 0x7a, 0xb7, 0x34,
+ 0x0a, 0xf7, 0x49, 0xec, 0xf2, 0xb3, 0xc0, 0xd5, 0x5f, 0x4c, 0x40, 0x34, 0x79, 0xd9, 0x27, 0x89,
+ 0xc2, 0xfc, 0x88, 0xb1, 0x39, 0xe8, 0xf9, 0x7d, 0x74, 0x2f, 0x0a, 0x33, 0xba, 0xba, 0x39, 0xe8,
+ 0xf9, 0x51, 0xd8, 0xf6, 0x61, 0x22, 0x0a, 0x7b, 0xde, 0xa7, 0xfc, 0x6f, 0x59, 0x28, 0x1c, 0x0d,
+ 0xfb, 0x41, 0x6f, 0x73, 0xad, 0x4b, 0x89, 0x49, 0x57, 0x0f, 0xd1, 0xab, 0x5f, 0x3d, 0x5c, 0xf2,
+ 0x13, 0x02, 0xa6, 0x73, 0xf1, 0x4b, 0x74, 0xae, 0x06, 0x71, 0xfa, 0x08, 0x3c, 0x41, 0xcf, 0x66,
+ 0x9a, 0x93, 0x0b, 0xaf, 0x76, 0x2d, 0xf0, 0x0e, 0x9c, 0x72, 0xa3, 0x1f, 0x42, 0x8e, 0x6e, 0x6e,
+ 0x0f, 0xf7, 0x4e, 0xb0, 0x2d, 0x7c, 0xcb, 0xc3, 0xd9, 0xa4, 0x91, 0x5d, 0xde, 0xa7, 0x8c, 0xa2,
+ 0x6b, 0x81, 0x3d, 0x88, 0x83, 0x1e, 0x42, 0x42, 0x35, 0x74, 0xea, 0x68, 0x5e, 0xf7, 0xe3, 0x02,
+ 0x46, 0x88, 0xbe, 0x0f, 0x79, 0xd5, 0xb6, 0xd5, 0x21, 0x7f, 0x26, 0xaf, 0x51, 0x67, 0xc2, 0xbd,
+ 0xe4, 0xc5, 0xf9, 0x72, 0xb6, 0x42, 0x90, 0xf4, 0x65, 0xbc, 0xd8, 0x88, 0xac, 0xea, 0x81, 0x42,
+ 0xb7, 0x27, 0x99, 0x9b, 0xdd, 0x9e, 0xc0, 0x4d, 0xbc, 0xfc, 0xb8, 0xc3, 0xce, 0xde, 0xc0, 0x61,
+ 0xff, 0x14, 0x16, 0xc5, 0x0b, 0x41, 0x22, 0xd0, 0xbf, 0x61, 0x0b, 0xfc, 0x80, 0xa1, 0x7c, 0x71,
+ 0xbe, 0x5c, 0x92, 0x7d, 0x2a, 0x7f, 0xb9, 0xac, 0xd6, 0x21, 0x3b, 0x55, 0xb2, 0x27, 0xe2, 0xb5,
+ 0x80, 0xeb, 0xce, 0x5f, 0xdf, 0x75, 0x87, 0xe3, 0x6e, 0xe1, 0x46, 0x71, 0x77, 0x3c, 0x0c, 0x14,
+ 0xa7, 0x87, 0x81, 0x67, 0xa3, 0x61, 0x40, 0xba, 0xbc, 0x45, 0x19, 0x56, 0xe0, 0x4b, 0x42, 0xc0,
+ 0xcf, 0xa3, 0x00, 0xbe, 0x7e, 0xa3, 0x6f, 0xc3, 0xdd, 0xfe, 0xe9, 0xd0, 0xd1, 0xdb, 0xaa, 0xa1,
+ 0xd8, 0xb8, 0x6f, 0x63, 0x07, 0x9b, 0x2c, 0xab, 0xa6, 0x4e, 0x23, 0x27, 0xdf, 0x11, 0x68, 0x39,
+ 0x84, 0x45, 0x1f, 0xc3, 0x1d, 0xc3, 0xea, 0x4e, 0xe2, 0x0b, 0xf6, 0x02, 0x6e, 0x73, 0x9a, 0x11,
+ 0x66, 0x15, 0xa0, 0xad, 0xf6, 0xd5, 0x13, 0xdd, 0xf0, 0xdb, 0x03, 0x1f, 0x5f, 0xd5, 0x36, 0xd7,
+ 0xaa, 0x9e, 0x08, 0xf1, 0x44, 0xc3, 0x17, 0x5a, 0x7e, 0x1b, 0xc0, 0xc7, 0xd3, 0xcb, 0xdd, 0xbd,
+ 0x3d, 0x3f, 0x81, 0xe3, 0xd7, 0xc4, 0x3c, 0x80, 0xed, 0x8e, 0x44, 0x93, 0x71, 0xbf, 0x1e, 0x99,
+ 0xc1, 0xaf, 0xf3, 0x0b, 0xd7, 0x8f, 0x20, 0x4e, 0x7f, 0x7d, 0x92, 0x86, 0x78, 0xbd, 0x79, 0xbc,
+ 0x2f, 0xcd, 0xa1, 0x0c, 0x24, 0x2a, 0x7b, 0x8d, 0xca, 0xa1, 0x14, 0x41, 0x0b, 0x20, 0xed, 0x1f,
+ 0xef, 0x1d, 0x35, 0xe4, 0xfa, 0x93, 0x46, 0xab, 0xa9, 0x50, 0x82, 0x68, 0xc0, 0x91, 0xff, 0x5d,
+ 0x1c, 0x24, 0xe6, 0x45, 0x6f, 0xea, 0xca, 0xa7, 0x77, 0x66, 0x5e, 0x7f, 0xc7, 0x1b, 0xd6, 0xfa,
+ 0xf8, 0x57, 0x9f, 0x6d, 0x26, 0xbe, 0xa2, 0x6c, 0x33, 0x79, 0x83, 0x6c, 0x33, 0x75, 0x03, 0xe7,
+ 0xf5, 0x87, 0xce, 0x0a, 0x03, 0x1a, 0xf2, 0xcb, 0x28, 0x40, 0x40, 0x37, 0x7e, 0x10, 0xfc, 0xe9,
+ 0xf5, 0xf4, 0xcb, 0xde, 0x91, 0x32, 0x6c, 0x7b, 0x4e, 0xfc, 0x30, 0xfb, 0x09, 0xa4, 0x35, 0x9e,
+ 0x75, 0xf1, 0xe4, 0xec, 0xbd, 0x99, 0x93, 0xb3, 0xed, 0x39, 0xd9, 0x63, 0x46, 0x1f, 0x87, 0x7e,
+ 0x71, 0xf7, 0x60, 0x26, 0x63, 0xde, 0x16, 0x4f, 0x86, 0x2b, 0x90, 0x64, 0x09, 0x07, 0x57, 0xb6,
+ 0xa9, 0x3f, 0xfd, 0x1a, 0x31, 0x0d, 0x52, 0x0e, 0x33, 0x46, 0x5e, 0xc6, 0xa5, 0x20, 0x31, 0x30,
+ 0x75, 0xcb, 0x7c, 0x5f, 0x0e, 0x3e, 0x56, 0x15, 0x7d, 0x45, 0x62, 0xfd, 0xf4, 0x6f, 0xd5, 0xc5,
+ 0x1a, 0x7b, 0x35, 0x72, 0x6c, 0xbe, 0xf4, 0x00, 0x11, 0x54, 0x00, 0xe0, 0x78, 0xdd, 0xec, 0x4a,
+ 0x51, 0x5a, 0xfc, 0x91, 0x54, 0x97, 0x7c, 0xc5, 0xde, 0xff, 0x3e, 0x48, 0xa3, 0xbf, 0x3d, 0x0b,
+ 0xbc, 0x1f, 0x99, 0x87, 0xfc, 0xfe, 0xd3, 0x6a, 0xf5, 0xa8, 0xb1, 0x5f, 0x3f, 0x3c, 0xaa, 0xec,
+ 0x1f, 0xb0, 0x57, 0x90, 0x47, 0xa4, 0x72, 0x6c, 0x35, 0x6a, 0x52, 0xf4, 0xfd, 0xef, 0x43, 0x71,
+ 0x44, 0x21, 0x10, 0x40, 0xf2, 0xe0, 0x78, 0x73, 0xaf, 0x51, 0x9d, 0xf8, 0xfe, 0x04, 0x65, 0x21,
+ 0xd5, 0xda, 0xda, 0xda, 0x6b, 0x34, 0xeb, 0x52, 0xec, 0xfd, 0x6f, 0x40, 0x2e, 0x98, 0x90, 0x22,
+ 0x09, 0x72, 0x3f, 0x6a, 0x35, 0xeb, 0xca, 0x56, 0xa5, 0xb1, 0x77, 0x2c, 0x93, 0x19, 0x20, 0x28,
+ 0x70, 0xbf, 0x22, 0x60, 0x91, 0xcd, 0xd5, 0xdf, 0xfc, 0xd7, 0xd2, 0xdc, 0x6f, 0x2e, 0x96, 0x22,
+ 0xbf, 0xbd, 0x58, 0x8a, 0xfc, 0xee, 0x62, 0x29, 0xf2, 0x9f, 0x17, 0x4b, 0x91, 0xbf, 0xfe, 0x62,
+ 0x69, 0xee, 0xb7, 0x5f, 0x2c, 0xcd, 0xfd, 0xee, 0x8b, 0xa5, 0xb9, 0x1f, 0x25, 0xd9, 0x3f, 0x1a,
+ 0xf0, 0x7f, 0x01, 0x00, 0x00, 0xff, 0xff, 0x4a, 0xa9, 0x99, 0xd2, 0x9f, 0x40, 0x00, 0x00,
}
diff --git a/pkg/sql/catalog/descpb/structured.proto b/pkg/sql/catalog/descpb/structured.proto
index b083a54b5f84..0d3f6bbd2e99 100644
--- a/pkg/sql/catalog/descpb/structured.proto
+++ b/pkg/sql/catalog/descpb/structured.proto
@@ -119,7 +119,8 @@ message ColumnDescriptor {
option (gogoproto.equal) = true;
optional string name = 1 [(gogoproto.nullable) = false];
optional uint32 id = 2 [(gogoproto.nullable) = false,
- (gogoproto.customname) = "ID", (gogoproto.casttype) = "ColumnID"];
+ (gogoproto.customname) = "ID",
+ (gogoproto.casttype) = "ColumnID"];
optional sql.sem.types.T type = 3;
optional bool nullable = 4 [(gogoproto.nullable) = false];
reserved 8;
@@ -142,6 +143,11 @@ message ColumnDescriptor {
// have been serialized in a internal format. Instead, use one of the
// schemaexpr.FormatExpr* functions.
optional string compute_expr = 11;
+
+ // A computed column can be stored or virtual.
+ // Virtual can only be true if there is a compute expression.
+ optional bool virtual = 16 [(gogoproto.nullable) = false];
+
// PGAttributeNum must be accessed through the accessor, since it is set
// lazily, it is incorrect to access it directly.
// PGAttributeNum represents a column's number in catalog tables.
diff --git a/pkg/sql/catalog/schemaexpr/column.go b/pkg/sql/catalog/schemaexpr/column.go
index d812fa8dc80a..6d28967d2d36 100644
--- a/pkg/sql/catalog/schemaexpr/column.go
+++ b/pkg/sql/catalog/schemaexpr/column.go
@@ -107,7 +107,11 @@ func FormatColumnForDisplay(
return "", err
}
f.WriteString(compExpr)
- f.WriteString(") STORED")
+ if desc.Virtual {
+ f.WriteString(") VIRTUAL")
+ } else {
+ f.WriteString(") STORED")
+ }
}
return f.CloseAndGetString(), nil
}
diff --git a/pkg/sql/catalog/tabledesc/structured.go b/pkg/sql/catalog/tabledesc/structured.go
index d99fcb8ac205..f96e9e003330 100644
--- a/pkg/sql/catalog/tabledesc/structured.go
+++ b/pkg/sql/catalog/tabledesc/structured.go
@@ -1316,6 +1316,10 @@ func (desc *Mutable) allocateColumnFamilyIDs(columnNames map[string]descpb.Colum
}
ensureColumnInFamily := func(col *descpb.ColumnDescriptor) {
+ if col.Virtual {
+ // Virtual columns don't need to be part of families.
+ return
+ }
if columnsInFamilies.Contains(col.ID) {
return
}
@@ -1944,7 +1948,7 @@ func (desc *Immutable) ValidateTable(ctx context.Context) error {
}
columnNames := make(map[string]descpb.ColumnID, len(desc.Columns))
- columnIDs := make(map[descpb.ColumnID]string, len(desc.Columns))
+ columnIDs := make(map[descpb.ColumnID]*descpb.ColumnDescriptor, len(desc.Columns))
if err := desc.validateColumns(columnNames, columnIDs); err != nil {
return err
}
@@ -1959,7 +1963,7 @@ func (desc *Immutable) ValidateTable(ctx context.Context) error {
"mutation in state %s, direction %s, col %q, id %v",
errors.Safe(m.State), errors.Safe(m.Direction), col.Name, errors.Safe(col.ID))
}
- columnIDs[col.ID] = col.Name
+ columnIDs[col.ID] = col
case *descpb.DescriptorMutation_Index:
if unSetEnums {
idx := desc.Index
@@ -2080,9 +2084,12 @@ func (desc *Immutable) ValidateTable(ctx context.Context) error {
}
func (desc *Immutable) validateColumns(
- columnNames map[string]descpb.ColumnID, columnIDs map[descpb.ColumnID]string,
+ columnNames map[string]descpb.ColumnID, columnIDs map[descpb.ColumnID]*descpb.ColumnDescriptor,
) error {
- for _, column := range desc.AllNonDropColumns() {
+ colDescs := desc.AllNonDropColumns()
+ for colIdx := range colDescs {
+ column := &colDescs[colIdx]
+
if err := catalog.ValidateName(column.Name, "column"); err != nil {
return err
}
@@ -2108,9 +2115,9 @@ func (desc *Immutable) validateColumns(
if other, ok := columnIDs[column.ID]; ok {
return fmt.Errorf("column %q duplicate ID of column %q: %d",
- column.Name, other, column.ID)
+ column.Name, other.Name, column.ID)
}
- columnIDs[column.ID] = column.Name
+ columnIDs[column.ID] = column
if column.ID >= desc.NextColumnID {
return errors.AssertionFailedf("column %q invalid ID (%d) >= next column ID (%d)",
@@ -2131,12 +2138,16 @@ func (desc *Immutable) validateColumns(
return fmt.Errorf("computed column %q refers to unknown columns in expression: %s",
column.Name, *column.ComputeExpr)
}
+ } else if column.Virtual {
+ return fmt.Errorf("virtual column %q is not computed", column.Name)
}
}
return nil
}
-func (desc *Immutable) validateColumnFamilies(columnIDs map[descpb.ColumnID]string) error {
+func (desc *Immutable) validateColumnFamilies(
+ columnIDs map[descpb.ColumnID]*descpb.ColumnDescriptor,
+) error {
if len(desc.Families) < 1 {
return fmt.Errorf("at least 1 column family must be specified")
}
@@ -2184,13 +2195,16 @@ func (desc *Immutable) validateColumnFamilies(columnIDs map[descpb.ColumnID]stri
}
for i, colID := range family.ColumnIDs {
- name, ok := columnIDs[colID]
+ col, ok := columnIDs[colID]
if !ok {
return fmt.Errorf("family %q contains unknown column \"%d\"", family.Name, colID)
}
- if name != family.ColumnNames[i] {
+ if col.Name != family.ColumnNames[i] {
return fmt.Errorf("family %q column %d should have name %q, but found name %q",
- family.Name, colID, name, family.ColumnNames[i])
+ family.Name, colID, col.Name, family.ColumnNames[i])
+ }
+ if col.Virtual {
+ return fmt.Errorf("virtual computed column %q cannot be part of a family", col.Name)
}
}
@@ -2201,9 +2215,11 @@ func (desc *Immutable) validateColumnFamilies(columnIDs map[descpb.ColumnID]stri
colIDToFamilyID[colID] = family.ID
}
}
- for colID := range columnIDs {
- if _, ok := colIDToFamilyID[colID]; !ok {
- return fmt.Errorf("column %d is not in any column family", colID)
+ for colID, colDesc := range columnIDs {
+ if !colDesc.Virtual {
+ if _, ok := colIDToFamilyID[colID]; !ok {
+ return fmt.Errorf("column %q is not in any column family", colDesc.Name)
+ }
}
}
return nil
@@ -2212,7 +2228,9 @@ func (desc *Immutable) validateColumnFamilies(columnIDs map[descpb.ColumnID]stri
// validateCheckConstraints validates that check constraints are well formed.
// Checks include validating the column IDs and verifying that check expressions
// do not reference non-existent columns.
-func (desc *Immutable) validateCheckConstraints(columnIDs map[descpb.ColumnID]string) error {
+func (desc *Immutable) validateCheckConstraints(
+ columnIDs map[descpb.ColumnID]*descpb.ColumnDescriptor,
+) error {
for _, chk := range desc.AllActiveAndInactiveChecks() {
// Verify that the check's column IDs are valid.
for _, colID := range chk.ColumnIDs {
@@ -2243,7 +2261,7 @@ func (desc *Immutable) validateCheckConstraints(columnIDs map[descpb.ColumnID]st
// constraints are well formed. Checks include validating the column IDs and
// column names.
func (desc *Immutable) validateUniqueWithoutIndexConstraints(
- columnIDs map[descpb.ColumnID]string,
+ columnIDs map[descpb.ColumnID]*descpb.ColumnDescriptor,
) error {
for _, c := range desc.AllActiveAndInactiveUniqueWithoutIndexConstraints() {
if err := catalog.ValidateName(c.Name, "unique without index constraint"); err != nil {
diff --git a/pkg/sql/catalog/tabledesc/structured_test.go b/pkg/sql/catalog/tabledesc/structured_test.go
index 52e569584162..a28d91ea14d2 100644
--- a/pkg/sql/catalog/tabledesc/structured_test.go
+++ b/pkg/sql/catalog/tabledesc/structured_test.go
@@ -202,6 +202,8 @@ func TestValidateTableDesc(t *testing.T) {
ctx := context.Background()
+ computedExpr := "1 + 1"
+
testData := []struct {
err string
desc descpb.TableDescriptor
@@ -232,6 +234,18 @@ func TestValidateTableDesc(t *testing.T) {
},
NextColumnID: 2,
}},
+ {`virtual column "virt" is not computed`,
+ descpb.TableDescriptor{
+ ID: 2,
+ ParentID: 1,
+ Name: "foo",
+ FormatVersion: descpb.FamilyFormatVersion,
+ Columns: []descpb.ColumnDescriptor{
+ {ID: 1, Name: "bar"},
+ {ID: 2, Name: "virt", Virtual: true},
+ },
+ NextColumnID: 3,
+ }},
{`invalid column ID 0`,
descpb.TableDescriptor{
ID: 2,
@@ -400,7 +414,7 @@ func TestValidateTableDesc(t *testing.T) {
NextColumnID: 2,
NextFamilyID: 1,
}},
- {`column 1 is not in any column family`,
+ {`column "bar" is not in any column family`,
descpb.TableDescriptor{
ID: 2,
ParentID: 1,
@@ -431,6 +445,23 @@ func TestValidateTableDesc(t *testing.T) {
NextColumnID: 2,
NextFamilyID: 2,
}},
+ {`virtual computed column "virt" cannot be part of a family`,
+ descpb.TableDescriptor{
+ ID: 2,
+ ParentID: 1,
+ Name: "foo",
+ FormatVersion: descpb.FamilyFormatVersion,
+ Columns: []descpb.ColumnDescriptor{
+ {ID: 1, Name: "bar"},
+ {ID: 2, Name: "virt", ComputeExpr: &computedExpr, Virtual: true},
+ },
+ Families: []descpb.ColumnFamilyDescriptor{
+ {ID: 0, Name: "fam1", ColumnIDs: []descpb.ColumnID{1}, ColumnNames: []string{"bar"}},
+ {ID: 1, Name: "fam2", ColumnIDs: []descpb.ColumnID{2}, ColumnNames: []string{"virt"}},
+ },
+ NextColumnID: 3,
+ NextFamilyID: 2,
+ }},
{`table must contain a primary key`,
descpb.TableDescriptor{
ID: 2,
diff --git a/pkg/sql/catalog/tabledesc/table.go b/pkg/sql/catalog/tabledesc/table.go
index 97e0ae63c2d7..a2e024a31508 100644
--- a/pkg/sql/catalog/tabledesc/table.go
+++ b/pkg/sql/catalog/tabledesc/table.go
@@ -68,6 +68,7 @@ func MakeColumnDefDescs(
col := &descpb.ColumnDescriptor{
Name: string(d.Name),
Nullable: d.Nullable.Nullability != tree.NotNull && !d.PrimaryKey.IsPrimaryKey,
+ Virtual: d.IsVirtual(),
}
// Validate and assign column type.
diff --git a/pkg/sql/catalog/tabledesc/validate_test.go b/pkg/sql/catalog/tabledesc/validate_test.go
index 019ebca85f35..27312c2c4b53 100644
--- a/pkg/sql/catalog/tabledesc/validate_test.go
+++ b/pkg/sql/catalog/tabledesc/validate_test.go
@@ -169,6 +169,7 @@ var validationMap = []struct {
status: todoIAmKnowinglyAddingTechDebt,
reason: "initial import: TODO(features): add validation"},
"ComputeExpr": {status: iSolemnlySwearThisFieldIsValidated},
+ "Virtual": {status: iSolemnlySwearThisFieldIsValidated},
"PGAttributeNum": {
status: todoIAmKnowinglyAddingTechDebt,
reason: "initial import: TODO(features): add validation"},
diff --git a/pkg/sql/create_table.go b/pkg/sql/create_table.go
index 4fcc373fe4fc..aaef174e26fa 100644
--- a/pkg/sql/create_table.go
+++ b/pkg/sql/create_table.go
@@ -1399,7 +1399,17 @@ func NewTableDesc(
columnDefaultExprs = append(columnDefaultExprs, nil)
}
if d.IsVirtual() {
- return nil, unimplemented.NewWithIssue(57608, "virtual computed columns")
+ if !sessionData.VirtualColumnsEnabled {
+ return nil, unimplemented.NewWithIssue(57608, "virtual computed columns")
+ }
+ if !evalCtx.Settings.Version.IsActive(ctx, clusterversion.VirtualComputedColumns) {
+ return nil, pgerror.Newf(pgcode.FeatureNotSupported,
+ "version %v must be finalized to use virtual columns",
+ clusterversion.VirtualComputedColumns)
+ }
+ if d.HasColumnFamily() {
+ return nil, pgerror.Newf(pgcode.Syntax, "virtual columns cannot have family specifications")
+ }
}
col, idx, expr, err := tabledesc.MakeColumnDefDescs(ctx, d, semaCtx, evalCtx)
@@ -2279,7 +2289,11 @@ func incTelemetryForNewColumn(def *tree.ColumnTableDef, desc *descpb.ColumnDescr
telemetry.Inc(sqltelemetry.SchemaNewTypeCounter(desc.Type.TelemetryName()))
}
if desc.IsComputed() {
- telemetry.Inc(sqltelemetry.SchemaNewColumnTypeQualificationCounter("computed"))
+ if desc.Virtual {
+ telemetry.Inc(sqltelemetry.SchemaNewColumnTypeQualificationCounter("virtual"))
+ } else {
+ telemetry.Inc(sqltelemetry.SchemaNewColumnTypeQualificationCounter("computed"))
+ }
}
if desc.HasDefault() {
telemetry.Inc(sqltelemetry.SchemaNewColumnTypeQualificationCounter("default_expr"))
diff --git a/pkg/sql/exec_util.go b/pkg/sql/exec_util.go
index 394c668803c5..bc9d7173a632 100644
--- a/pkg/sql/exec_util.go
+++ b/pkg/sql/exec_util.go
@@ -2188,6 +2188,11 @@ func (m *sessionDataMutator) SetMutliColumnInvertedIndexes(val bool) {
m.data.EnableMultiColumnInvertedIndexes = val
}
+// TODO(radu): remove this once the feature is stable.
+func (m *sessionDataMutator) SetVirtualColumnsEnabled(val bool) {
+ m.data.VirtualColumnsEnabled = val
+}
+
// TODO(rytaft): remove this once unique without index constraints are fully
// supported.
func (m *sessionDataMutator) SetUniqueWithoutIndexConstraints(val bool) {
diff --git a/pkg/sql/logictest/testdata/logic_test/pg_catalog b/pkg/sql/logictest/testdata/logic_test/pg_catalog
index 5b3836d43ede..22ec689cd090 100644
--- a/pkg/sql/logictest/testdata/logic_test/pg_catalog
+++ b/pkg/sql/logictest/testdata/logic_test/pg_catalog
@@ -1894,6 +1894,7 @@ experimental_enable_hash_sharded_indexes off NULL
experimental_enable_multi_column_inverted_indexes off NULL NULL NULL string
experimental_enable_temp_tables off NULL NULL NULL string
experimental_enable_unique_without_index_constraints off NULL NULL NULL string
+experimental_enable_virtual_columns off NULL NULL NULL string
extra_float_digits 0 NULL NULL NULL string
force_savepoint_restart off NULL NULL NULL string
foreign_key_cascades_limit 10000 NULL NULL NULL string
@@ -1967,6 +1968,7 @@ experimental_enable_hash_sharded_indexes off NULL
experimental_enable_multi_column_inverted_indexes off NULL user NULL off off
experimental_enable_temp_tables off NULL user NULL off off
experimental_enable_unique_without_index_constraints off NULL user NULL off off
+experimental_enable_virtual_columns off NULL user NULL off off
extra_float_digits 0 NULL user NULL 0 2
force_savepoint_restart off NULL user NULL off off
foreign_key_cascades_limit 10000 NULL user NULL 10000 10000
@@ -2036,6 +2038,7 @@ experimental_enable_hash_sharded_indexes NULL NULL NULL
experimental_enable_multi_column_inverted_indexes NULL NULL NULL NULL NULL
experimental_enable_temp_tables NULL NULL NULL NULL NULL
experimental_enable_unique_without_index_constraints NULL NULL NULL NULL NULL
+experimental_enable_virtual_columns NULL NULL NULL NULL NULL
extra_float_digits NULL NULL NULL NULL NULL
force_savepoint_restart NULL NULL NULL NULL NULL
foreign_key_cascades_limit NULL NULL NULL NULL NULL
diff --git a/pkg/sql/logictest/testdata/logic_test/show_source b/pkg/sql/logictest/testdata/logic_test/show_source
index ad7448b88322..ae81a9c79328 100644
--- a/pkg/sql/logictest/testdata/logic_test/show_source
+++ b/pkg/sql/logictest/testdata/logic_test/show_source
@@ -50,6 +50,7 @@ experimental_enable_hash_sharded_indexes off
experimental_enable_multi_column_inverted_indexes off
experimental_enable_temp_tables off
experimental_enable_unique_without_index_constraints off
+experimental_enable_virtual_columns off
extra_float_digits 0
force_savepoint_restart off
foreign_key_cascades_limit 10000
diff --git a/pkg/sql/logictest/testdata/logic_test/virtual_columns b/pkg/sql/logictest/testdata/logic_test/virtual_columns
new file mode 100644
index 000000000000..a6e000ca5213
--- /dev/null
+++ b/pkg/sql/logictest/testdata/logic_test/virtual_columns
@@ -0,0 +1,45 @@
+statement ok
+SET experimental_enable_virtual_columns = true
+
+# Test that we don't allow FAMILY constraints with virtual columns.
+statement error virtual computed column "v" cannot be part of a family
+CREATE TABLE t (
+ a INT PRIMARY KEY,
+ b INT,
+ v INT AS (a+b) VIRTUAL,
+ FAMILY (a, b, v)
+)
+
+statement error virtual computed column "v" cannot be part of a family
+CREATE TABLE t (
+ a INT PRIMARY KEY,
+ b INT,
+ v INT AS (a+b) VIRTUAL,
+ FAMILY (a),
+ FAMILY (b),
+ FAMILY (v)
+)
+
+statement ok
+CREATE TABLE t (
+ a INT PRIMARY KEY,
+ b INT,
+ v INT AS (a+b) VIRTUAL,
+ FAMILY (a,b)
+)
+
+statement ok
+INSERT INTO t VALUES (1, 1)
+
+statement ok
+INSERT INTO t(a,b) VALUES (2, 2)
+
+statement error cannot write directly to computed column
+INSERT INTO t(a,b,v) VALUES (2, 2, 0)
+
+query III colnames,rowsort
+SELECT * FROM t
+----
+a b v
+1 1 2
+2 2 4
diff --git a/pkg/sql/opt/cat/column.go b/pkg/sql/opt/cat/column.go
index a28d68b04765..0c85517e7857 100644
--- a/pkg/sql/opt/cat/column.go
+++ b/pkg/sql/opt/cat/column.go
@@ -49,11 +49,11 @@ func (c *Column) Ordinal() int {
// dropped and then re-added with the same name; the new column will have a
// different ID. See the comment for StableID for more detail.
//
-// Virtual columns don't have stable IDs; for these columns ColID() must not be
-// called.
+// Virtual inverted columns don't have stable IDs; for these columns ColID()
+// must not be called.
func (c *Column) ColID() StableID {
- if c.kind.IsVirtual() {
- panic(errors.AssertionFailedf("virtual columns have no StableID"))
+ if c.kind == VirtualInverted {
+ panic(errors.AssertionFailedf("virtual inverted columns have no StableID"))
}
return c.stableID
}
diff --git a/pkg/sql/opt/exec/execbuilder/testdata/virtual_columns b/pkg/sql/opt/exec/execbuilder/testdata/virtual_columns
new file mode 100644
index 000000000000..18d465b9547d
--- /dev/null
+++ b/pkg/sql/opt/exec/execbuilder/testdata/virtual_columns
@@ -0,0 +1,66 @@
+# LogicTest: local
+
+statement ok
+SET experimental_enable_virtual_columns = true
+
+statement ok
+CREATE TABLE t (
+ a INT PRIMARY KEY,
+ b INT,
+ v INT AS (a+b) VIRTUAL,
+ FAMILY (a),
+ FAMILY (b)
+)
+
+query TT
+SHOW CREATE TABLE t
+----
+t CREATE TABLE public.t (
+ a INT8 NOT NULL,
+ b INT8 NULL,
+ v INT8 NULL AS (a + b) VIRTUAL,
+ CONSTRAINT "primary" PRIMARY KEY (a ASC),
+ FAMILY fam_0_a (a),
+ FAMILY fam_1_b (b)
+)
+
+# Verify that the primary index doesn't contain the virtual column.
+query T
+EXPLAIN (OPT, CATALOG) SELECT * from t
+----
+TABLE t
+ ├── a int not null
+ ├── b int
+ ├── v int as (a + b) virtual
+ ├── crdb_internal_mvcc_timestamp decimal [hidden] [system]
+ ├── tableoid oid [hidden] [system]
+ ├── FAMILY fam_0_a (a)
+ ├── FAMILY fam_1_b (b)
+ └── INDEX primary
+ └── a int not null
+project
+ ├── scan t
+ │ └── computed column expressions
+ │ └── v
+ │ └── a + b
+ └── projections
+ └── a + b
+
+query T
+EXPLAIN (VERBOSE) SELECT * FROM t
+----
+distribution: local
+vectorized: true
+·
+• render
+│ columns: (a, b, v)
+│ estimated row count: 1,000 (missing stats)
+│ render 0: a + b
+│ render 1: a
+│ render 2: b
+│
+└── • scan
+ columns: (a, b)
+ estimated row count: 1,000 (missing stats)
+ table: t@primary
+ spans: FULL SCAN
diff --git a/pkg/sql/opt_catalog.go b/pkg/sql/opt_catalog.go
index 5dded4238d6e..e94775ea3a56 100644
--- a/pkg/sql/opt_catalog.go
+++ b/pkg/sql/opt_catalog.go
@@ -639,30 +639,44 @@ func newOptTable(
ot.columns = make([]cat.Column, len(colDescs), numCols)
numOrdinary := len(ot.desc.Columns)
numWritable := len(ot.desc.WritableColumns())
- for i := range colDescs {
- desc := colDescs[i]
+ for ordinal := range colDescs {
+ desc := colDescs[ordinal]
var kind cat.ColumnKind
switch {
- case i < numOrdinary:
+ case ordinal < numOrdinary:
kind = cat.Ordinary
- case i < numWritable:
+ case ordinal < numWritable:
kind = cat.WriteOnly
default:
kind = cat.DeleteOnly
}
-
- ot.columns[i].InitNonVirtual(
- i,
- cat.StableID(desc.ID),
- tree.Name(desc.Name),
- kind,
- desc.Type,
- desc.Nullable,
- desc.Hidden,
- desc.DefaultExpr,
- desc.ComputeExpr,
- )
+ if !desc.Virtual {
+ ot.columns[ordinal].InitNonVirtual(
+ ordinal,
+ cat.StableID(desc.ID),
+ tree.Name(desc.Name),
+ kind,
+ desc.Type,
+ desc.Nullable,
+ desc.Hidden,
+ desc.DefaultExpr,
+ desc.ComputeExpr,
+ )
+ } else {
+ if kind != cat.Ordinary {
+ return nil, errors.AssertionFailedf("virtual mutation column")
+ }
+ ot.columns[ordinal].InitVirtualComputed(
+ ordinal,
+ cat.StableID(desc.ID),
+ tree.Name(desc.Name),
+ desc.Type,
+ desc.Nullable,
+ desc.Hidden,
+ *desc.ComputeExpr,
+ )
+ }
}
newColumn := func() (col *cat.Column, ordinal int) {
@@ -1123,12 +1137,13 @@ func (oi *optIndex) init(
pkCols.Add(int(desc.ColumnIDs[i]))
}
for i, n := 0, tab.ColumnCount(); i < n; i++ {
- id := tab.Column(i).ColID()
- if !pkCols.Contains(int(id)) {
- oi.storedCols = append(oi.storedCols, descpb.ColumnID(id))
+ if col := tab.Column(i); !col.Kind().IsVirtual() {
+ if id := col.ColID(); !pkCols.Contains(int(id)) {
+ oi.storedCols = append(oi.storedCols, descpb.ColumnID(id))
+ }
}
}
- oi.numCols = tab.ColumnCount()
+ oi.numCols = len(desc.ColumnIDs) + len(oi.storedCols)
} else {
oi.storedCols = desc.StoreColumnIDs
oi.numCols = len(desc.ColumnIDs) + len(desc.ExtraColumnIDs) + len(desc.StoreColumnIDs)
diff --git a/pkg/sql/rowenc/testutils.go b/pkg/sql/rowenc/testutils.go
index 9a5e651b640e..a97f2710589f 100644
--- a/pkg/sql/rowenc/testutils.go
+++ b/pkg/sql/rowenc/testutils.go
@@ -1263,7 +1263,9 @@ func ColumnFamilyMutator(rng *rand.Rand, stmt tree.Statement) (changed bool) {
if def.HasColumnFamily() {
return false
}
- columns = append(columns, def.Name)
+ if !def.Computed.Virtual {
+ columns = append(columns, def.Name)
+ }
}
}
diff --git a/pkg/sql/sessiondata/session_data.go b/pkg/sql/sessiondata/session_data.go
index 4a12e36807e7..900d0790c645 100644
--- a/pkg/sql/sessiondata/session_data.go
+++ b/pkg/sql/sessiondata/session_data.go
@@ -219,6 +219,12 @@ type LocalOnlySessionData struct {
// TODO(mgartner): remove this once multi-column inverted indexes are fully
// supported.
EnableMultiColumnInvertedIndexes bool
+
+ // VirtualColumnsEnabled indicates whether we allow virtual (non-stored)
+ // computed columns.
+ // TODO(radu): remove this once the feature is stable.
+ VirtualColumnsEnabled bool
+
// EnableUniqueWithoutIndexConstraints indicates whether creating unique
// constraints without an index is allowed.
// TODO(rytaft): remove this once unique without index constraints are fully
diff --git a/pkg/sql/vars.go b/pkg/sql/vars.go
index c1aef5c766e4..4b19876a108f 100644
--- a/pkg/sql/vars.go
+++ b/pkg/sql/vars.go
@@ -1148,6 +1148,22 @@ var varGen = map[string]sessionVar{
},
// CockroachDB extension.
+ `experimental_enable_virtual_columns`: {
+ GetStringVal: makePostgresBoolGetStringValFn(`experimental_enable_virtual_columns`),
+ Set: func(_ context.Context, m *sessionDataMutator, s string) error {
+ b, err := paramparse.ParseBoolVar(`experimental_enable_virtual_columns`, s)
+ if err != nil {
+ return err
+ }
+ m.SetVirtualColumnsEnabled(b)
+ return nil
+ },
+ Get: func(evalCtx *extendedEvalContext) string {
+ return formatBoolAsPostgresSetting(evalCtx.SessionData.VirtualColumnsEnabled)
+ },
+ GlobalDefault: globalFalse,
+ },
+
// TODO(rytaft): remove this once unique without index constraints are fully
// supported.
`experimental_enable_unique_without_index_constraints`: {